电子邮件客户端应用程序异常
本文关键字:异常 应用程序 客户端 电子邮件 | 更新日期: 2023-09-27 17:51:10
我正在开发一个应用程序与xamarin工作室。我的目标是连接到pop3和下载电子邮件到我的应用程序。我正在使用以下代码,但我面临这些问题:a) sslstream.AuthenticateAsClient("pop.gmail.com");
上的例外。(身份验证或解密失败)。b)任何地方我有sw.Flush()
我采取例外:此操作是无效的,直到它被成功认证。
TcpClient tcpclient = new TcpClient();
tcpclient.Connect("pop.gmail.com", 995);
System.Net.Security.SslStream sslstream = new SslStream(tcpclient.GetStream());
sslstream.AuthenticateAsClient("pop.gmail.com");
StreamWriter sw = new StreamWriter(sslstream);
System.IO.StreamReader reader = new StreamReader(sslstream);
sw.WriteLine("USER myusername");
sw.Flush();
sw.WriteLine("PASS *****");
sw.Flush();
sw.WriteLine("RETR 1");
sw.Flush();
sw.WriteLine("Quit ");
sw.Flush();
string str = string.Empty;
string strTemp = string.Empty;
while((strTemp = reader.ReadLine()) !=null){
if(".".Equals(strTemp)){
break;
}
if(strTemp.IndexOf("-ERR") != -1){
break;
}
str +=strTemp;
}
reader.Close();
sw.Close();
tcpclient.Close();
编辑我使用了mailkit,它是一个很好的解决方案。我可以检索邮件,但我有一个问题。当我下载了一些邮件(不具体的数字。对于不同的帐户是不同的邮件数量)我正在采取以下错误:system.ArgumentOutOfRangeException
on: var message = client.GetMessage(i, cancel.Token);
我的登录代码:
partial void btnlogin (NSObject sender)
{
using (var client = new Pop3Client ()) {
var credentials = new NetworkCredential (Convert.ToString(txtusername.Text).Trim(), Convert.ToString(txtpassword.Text).Trim());
// Note: if the server requires SSL-on-connect, use the "pops" protocol instead
var uri = new Uri (Convert.ToString("pops://pop.gmail.com"));
using (var cancel = new CancellationTokenSource ()) {
client.Connect (uri, cancel.Token);
client.Authenticate (credentials, cancel.Token);
int count = client.GetMessageCount (cancel.Token);
var list= new List<string>();
for (int i = 0; i < count; i++) {
var message = client.GetMessage (i, cancel.Token);
Console.WriteLine ("From: {0}", message.From);
list.Add(Convert.ToString(message.From));
}
client.Disconnect (true, cancel.Token);
}
}
}
我来这里建议使用MailKit而不是编写自己的库。MailKit还专门用于Xamarin(因为我在Xamarin工作)。MailSystem。. NET非常严重地损坏了(我在StackOverflow的其他地方抱怨过),所以我绝对不建议使用它。
也就是说,你可能需要考虑使用这个版本的SslStream . tor,而不是你正在使用的那个。问题可能是默认的。ctor没有验证SSL证书,因为它不"受信任"。
我将使用现有的c#库来完成此操作。
在过去的某个时刻,我使用MailSystem。并且能够将他们的库移植到MonoTouch。我不确定它的许可证是否适用于您,但是使用它会比您自己创建一个更好的时间。
我还认为编写自己的库是浪费任何人的时间。我还没试过Mail Kit(以后一定要试试),但是最近我用了Rebex Mail,当我需要通过POP3从我的邮件服务器备份邮件时。幸运的是,这只是一个一次性任务,所以我不需要付钱,因为我只使用了他们30天的免费试用,没有任何限制。
using Rebex.Mail;
using Rebex.Net;
Pop3 client = new Pop3();
client.Connect("pop.gmail.com", SslMode.Implicit);
client.Login("gmailuser", "password");
var messageInfos = client.GetMessageList(Pop3ListFields.FullHeaders);
foreach (Pop3MessageInfo message in messageInfos)
client.GetMessage(message.SequenceNumber, string.Format(@"C:'gmail-pop3-backup'{0}-{1}.eml", message.Subject, message.UniqueId));
client.Disconnect();