c# gmail通知代码.让它重复

本文关键字:代码 gmail 通知 | 更新日期: 2023-09-27 18:06:10

这段代码检查我是否有来自gmail的邮件,然后将m通过串行发送到arduino,如果它们是邮件。

好了,所以我的代码不会编译(错误说代码"CheckMail();"需要对象引用),除非我把Main改成非静态的,就像现在一样,然后它不会编译,因为他们没有静态Main,我被难住了。

还有,我如何使这个重复,以便它每分钟检查消息?

谢谢! !

编辑' '好的是的! !我终于找到了一个有用的网络仿真器。在你的人帮助它工作,但它只刷新两次(瞬间不是60秒间隔)。CMD保持打开,它只是在说未读邮件:2未读邮件:2后停止,然后我得到操作超时,未读邮件:0,即使我有未读邮件。即使我改变了{System.Threading.Thread。睡眠(10000 * 60);}到更长的时间,前两次刷新之间的时间仍然相同。

(命名空间、类和using system等不在这里)

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

c# gmail通知代码.让它重复

将CheckMail设置为静态

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(这就是为什么它不能编译)

我很抱歉,朋友,你忘记了语言的基本知识。另外,您可以在主线程上设置一个计时器,并根据您设置的计时器计数每次计时器经过时调用邮件检查操作。确保锁定了线程同步的邮件检查方法,否则就会遇到问题。或者确保您的checkmail操作在计时器结束前完成。

ok,为了解决这个问题,我添加了以下代码来替换旧的东西:

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

然后我添加:"finally {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() {"

感谢所有的帮助!!