电子邮件客户端应用程序异常

本文关键字:异常 应用程序 客户端 电子邮件 | 更新日期: 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();