使用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;
}
如何解决此错误?
答案 0 :(得分:0)
您现在可能已经解决了这个问题,但问题很可能是由于您传递给Connect()
方法的超时值极低(600毫秒)。这是一个非常低的超时值,可能没有足够的时间让套接字连接到远程主机。
现在插入我自己的替代OpenPOP.NET: - )
许多开发人员使用超时作为解决网络挂起问题的解决方案。当一个更好的解决方案是有办法取消操作。
MailKit是唯一允许此操作的邮件库。每个需要网络活动的API都会使用一个可选的CancellationToken参数,让您(API的使用者)可以根据需要取消该操作。
这是一个无比更好的解决方案,而不是依赖于几乎永远不会按预期工作的任意超时。
(注意:MailKit也允许设置超时,但我非常不鼓励使用它们,因为它们几乎总是被错误地使用)。
希望有所帮助。