接收服务器未找到使用POP3从Outlook下载电子邮件时出错

时间:2015-06-15 04:24:57

标签: c# asp.net-mvc ssl pop3

使用POP3我想从outlook下载邮件,但我无法连接服务器。连接到服务器时显示。 错误是:

  

在OpenPop.Pop3.Pop3Client.Connect(String   hostname,Int32 port,Boolean useSsl,Int32 receiveTimeout,Int32   sendTimeout,RemoteCertificateValidationCallback certificateValidator)   在   Aceo.Activities.EmailPOP.RequestEmailPOP.Execute(CodeActivityContext   上下文中)

在参数中,我传递:

Host number="mail.xxx.com"

Use SSl=false or true

Port Number= 110 or 995

我的代码是:

public sealed class RequestEmailPOP:CodeActivity
{
    public InArgument<string> Host { get; set; }
    public InArgument<string> PortNumber { get; set; }
    public InArgument<string> UseSSL { get; set; }
    public InArgument<string> UserName { get; set; }
    public InArgument<string> Password { get; set; }
    public InArgument<string> LoggedInUser { get; set; }

    protected override void Execute(CodeActivityContext context)
    {

            string Host = context.GetValue(this.Host);
            int PortNumber =Convert.ToInt32(context.GetValue(this.PortNumber));
            bool UseSSL = Convert.ToBoolean(context.GetValue(this.UseSSL));
            string UserName = context.GetValue(this.UserName);
            string LoggedInUser = context.GetValue(this.LoggedInUser);
            string Password = context.GetValue(this.Password);
            using (Pop3Client client = new Pop3Client())
            {
                client.Connect(Host, PortNumber, UseSSL, 600, 600, CertificateValidationCallBack);
                client.Authenticate(UserName, Password);
                int messageCount = client.GetMessageCount();
                List<string> uids = client.GetMessageUids();
                List<Message> newMessages = new List<Message>();
                for (int i = 0; i < uids.Count; i++)
                {
                    string currentUidOnServer = uids[i];
                    if (!seenUids.Contains(currentUidOnServer))
                    {
                        Message unseenMessage = client.GetMessage(i + 1);
                        newMessages.Add(unseenMessage);
                    }
                }
           }
            return newMessage;
     } 

   private static bool CertificateValidationCallBack(
           object sender,
           System.Security.Cryptography.X509Certificates.X509Certificate certificate,
           System.Security.Cryptography.X509Certificates.X509Chain chain,
           System.Net.Security.SslPolicyErrors sslPolicyErrors)
          {
                  return true;
          }       

如何解决此错误?

1 个答案:

答案 0 :(得分:0)

您现在可能已经解决了这个问题,但问题很可能是由于您传递给Connect()方法的超时值极低(600毫秒)。这是一个非常低的超时值,可能没有足够的时间让套接字连接到远程主机。

现在插入我自己的替代OpenPOP.NET: - )

许多开发人员使用超时作为解决网络挂起问题的解决方案。当一个更好的解决方案是有办法取消操作。

MailKit是唯一允许此操作的邮件库。每个需要网络活动的API都会使用一个可选的CancellationToken参数,让您(API的使用者)可以根据需要取消该操作。

这是一个无比更好的解决方案,而不是依赖于几乎永远不会按预期工作的任意超时。

(注意:MailKit也允许设置超时,但我非常不鼓励使用它们,因为它们几乎总是被错误地使用)。

希望有所帮助。