C # gmail код уведомителя. сделать это повторить? - PullRequest
0 голосов
/ 21 августа 2011

этот код проверяет, есть ли у меня почта из gmail, а затем отправляет m по серийному номеру в arduino, если они являются почтой.

Хорошо, мой код не компилируется (ошибка при указании ссылки на объект в коде "CheckMail (); ") если я не изменю Main на нестатический, как сейчас, он не будет компилироваться, потому что у них нет статического Main, я в тупике.

также, как мне сделать это повторение, чтобы он проверял сообщения каждую минуту?

Спасибо !!!

РЕДАКТИРОВАТЬ \\ ОК ДА !!!наконец-то у меня появился рабочий эмуляторпосле того, как ваши парни помогают, он работает, но он обращается только дважды (мгновенно, не с интервалом в 60 секунд).CMD остается открытым, он просто останавливается после сообщения «Непрочитанная почта: 2», «Непрочитанная почта»: 2, после чего истекает время операции, «Непрочитанная почта»: 0, даже если у меня есть непрочитанные письма.даже если я изменю {System.Threading.Thread.Sleep (10000 * 60);} на более длительное время между обновлениями первых двух раз все равно.

(пространство имен, класс и использование Sytem и т. д. здесь не указаны).

    public void Main(string[] args)
    {

        try {
            SerialPort port = new SerialPort( "COM9", 9600, Parity.None, 8, StopBits.One );
            port.Open();

            string Unreadz = "0";
            while ( true ) {
                Unreadz = CheckMail();
                Console.WriteLine( "Unread Mails: " + Unreadz );

                if ( !Unreadz.Equals( "0" ) ) port.Write( "m" );
                else port.Write( "n" );

                System.Threading.Thread.Sleep(1000);
            }
        } 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);
    }

    private string CheckMail() {
        string result = "0";

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

            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;
    }

Ответы [ 4 ]

3 голосов
/ 21 августа 2011

Сделайте CheckMail статичным.

1 голос
/ 21 августа 2011

Прости, приятель, ты забыл основы языка здесь. Кроме того, у вас может быть таймер в главном потоке и операция проверки почты каждый раз, когда истекает таймер на основе установленного вами таймера. Убедитесь, что вы заблокировали метод проверки почты для синхронизации потоков, иначе вы столкнетесь с проблемами. Или убедитесь, что ваша операция проверки почты завершена до истечения таймера.

1 голос
/ 21 августа 2011
while ( true ) {
  try {
    SerialPort port = new SerialPort( "COM9", 9600, Parity.None, 8, StopBits.One );
    port.Open();

    string Unreadz = "0";

      Unreadz = CheckMail();
      Console.WriteLine( "Unread Mails: " + Unreadz );
      if ( !Unreadz.Equals( "0" ) ) port.Write( "m" );
      else port.Write( "n" );

  } catch ( Exception ee ) { Console.WriteLine( ee.Message ); 
  } finally { System.Threading.Thread.Sleep(1000*60); }
}

РЕДАКТИРОВАНИЕ: С рабочим циклом.

Должно работать, чтобы он проверял каждые 60 секунд.

И CheckMail не static (поэтому он не компилируется)

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

ОК, чтобы исправить проблему, я добавил этот код вместо старого:

try {
  SerialPort port = new SerialPort( "COM9", 9600, Parity.None, 8, StopBits.One );
  port.Open();

  string Unreadz = "0";
  while ( true ) {
    Unreadz = CheckMail();
    Console.WriteLine( "Unread Mails: " + Unreadz );
    if ( !Unreadz.Equals( "0" ) ) port.Write( "m" );
    else port.Write( "n" );
  }
} catch ( Exception ee ) { Console.WriteLine( ee.Message ); 
} finally { System.Threading.Thread.Sleep(1000*60); }

затем я добавил: "наконец-то {System.Threading.Thread.Sleep (1000 * 60);}" чтобы:

private string CheckMail() {
        string result = "0";

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

            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;
    }

и для устранения статической проблемы я сделал "приватную строку CheckMail () {" "приватную статическую строку CheckMail () {"

Спасибо за помощь !!!

...