Что не так с моим кодом уведомлений Gmail? - PullRequest
1 голос
/ 23 августа 2011

Ребята, вы видите какие-либо проблемы с этим кодом C #?Он получает уведомления по электронной почте от gmail, а затем печатает в CMD, сколько непрочитанных писем ожидает:

Unread Mails: 10
Unread Mails: 10

, а затем отправляет сколько писем по последовательному каналу.Но после того, как он говорит «непрочитанные письма:» дважды, я получаю:

Operation Timed Out.
Unread Mails: 0

и это повторяется.

Я пробовал это на разных компьютерах и интернет-провайдерах, так что это определенно что-то в коде.Программа на C #.Я также попытался изменить значение Thread.Sleep, чтобы оно длилось дольше, чем снова, но все равно не работает.Спасибо!

public static void Main(string[] args)
    {
        try 
        {
            SerialPort port = new SerialPort( "COM1", 9600, Parity.None, 8, StopBits.One );
            port.Open();

            string Unreadz = "0";
            while ( true )
            {
                Unreadz = CheckMail();
                Console.WriteLine("Unread Mails: " + Unreadz);
                if (Convert.ToInt32(Unreadz) < 10) port.Write("0" + Unreadz);
                else port.Write("" + Unreadz);

                System.Threading.Thread.Sleep( 10000 );
            }
        } catch ( Exception ee ) { Console.WriteLine( ee.Message ); }

    }

    public static string TextToBase64( string sAscii ) 
    {
        System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
        byte[] bytes = encoding.GetBytes( sAscii );
        return System.Convert.ToBase64String( bytes, 0, bytes.Length );
    }

    public static string CheckMail() 
    {
        string result = "0";

        try 
        {
            var url = @"https://gmail.google.com/gmail/feed/atom";
            var USER = "USER";
            var PASS = "PASS";

            var encoded = TextToBase64( USER + ":" + PASS );

            var myWebRequest = HttpWebRequest.Create( url );
            myWebRequest.Method = "POST";
            myWebRequest.ContentLength = 0;
            myWebRequest.Headers.Add( "Authorization", "Basic " + encoded );

            var response = myWebRequest.GetResponse();
            var stream = response.GetResponseStream();

            XmlReader reader = XmlReader.Create( stream );
            while ( reader.Read())
                if ( reader.NodeType == XmlNodeType.Element )
                    if ( reader.Name == "fullcount" ) 
                    {
                        result = reader.ReadElementContentAsString();
                        return result;
                    }
        } catch ( Exception ee ) { Console.WriteLine( ee.Message ); }
          return result;
    }

}

}

1 Ответ

0 голосов
/ 27 августа 2011

ну, я, кажется, исправил это. так как я просто проверял его каждые 10 секунд для тестирования, я поставил его на 5 минут. 5 минут более реалистично для моих нужд.

...