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;
}
将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() {"
感谢所有的帮助!!