【问题标题】:Email client app exceptions电子邮件客户端应用程序异常
【发布时间】:2015-06-09 21:52:43
【问题描述】:

我正在使用 xamarin studio 开发一个应用程序。我的目标是连接到 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 开启: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);
            }
        }
                   }

【问题讨论】:

  • 您可以查看stackoverflow.com/questions/3863381/… 以查看他们的代码。不是 100% 你所追求的,但它可能会有所帮助。注意到还没有人回复,所以希望这能帮助你找到答案。

标签: c# .net xamarin.ios


【解决方案1】:

我来这里是为了建议使用 MailKit 而不是为此编写自己的库。 MailKit 还专门用于与 Xamarin 一起工作(因为我在 Xamarin 工作)。 MailSystem.NET 严重损坏(我在 StackOverflow 上的其他地方对此大发雷霆),所以我绝对不建议使用它。

也就是说,您可能需要查看使用此版本的SslStream .ctor,而不是您正在使用的版本。问题可能是默认的 .ctor 没有验证 SSL 证书,因为它不是“受信任的”。

【讨论】:

  • 您好,谢谢您的回复。我有以下问题:我使用 xamarin 工作室运行 mailkit.mobile.sln。然后,当我尝试构建 mailkit.IOS 时,我遇到了找不到 MimeKit 命名空间的错误。
  • 您需要克隆自述文件中提到的其他项目。
  • ...或者您可以使用 NuGet 包。这可能更容易?
  • 你好,readme 是一个 md 文件。当我运行它时,运行命令并且所有命令都失败
  • 只需在文本文件中打开或查看github.com/jstedfast/MailKit(GitHub 将 README.md 呈现为主页)
【解决方案2】:

我会使用现有的 C# 库来执行此操作。

在过去的某个时刻,我使用了MailSystem.NET,并且能够将他们的库移植到 MonoTouch。我不确定它的许可证是否适合您,但您使用它的时间会比使用自己的许可证要好得多。

【讨论】:

    【解决方案3】:

    我还认为为此编写自己的库会浪费任何人的时间。我还没有尝试过 Mail Kit(肯定会尝试),但我最近使用了Rebex Mail,当我需要通过 POP3 从我的电子邮件服务器备份我的电子邮件时。幸运的是,这只是一次任务,所以我不必付费,因为我只使用了他们的30-day free trial,没有任何限制。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      相关资源
      最近更新 更多