Mailkit SMTP - StartTLS 和 TLS 标志
Mailkit SMTP - StartTLS & TLS flags
我正在尝试通过 SmtpClient 连接到 iCloud
我使用的设置如下:
服务器名称:smtp.mail.me.com
需要 SSL:是
如果您在使用 SSL 时看到错误消息,请尝试改用 TLS 或 STARTTLS。
端口:587
需要 SMTP 身份验证:是 - 使用相关的用户名和密码
如果我使用 SSL,我会得到 "Handshake failed due to unexpected packet format"
如果我不使用 SSL visual studio 调试器在连接时挂起。
我认为问题是我没有告诉 SmtpClient 使用 tls,但我找不到关于如何执行此操作的文档。
代码如下:
using (var client = new SmtpClient()) {
client.Timeout = 1000 * 20;
//client.Capabilities.
client.AuthenticationMechanisms.Remove ("XOAUTH2");
client.Connect("SMTP.mail.me.com", 587, false); //dies here
//client.Connect(servername, port, useSsl);
//can I set tls or starttls here??
client.Authenticate(username, password);
client.Send(FormatOptions.Default, message);
}
我可以手动设置 TLS 或 StartTLS 吗?我尝试过的一件事是以下但它似乎没有用
client.Connect(new Uri("smtp://" + servername + ":" + port + "/?starttls=true"));
感谢您对此的任何帮助。
您使用的 Connect()
方法只允许 enabling/disabling SSL 封装的连接,这与 StartTLS 不同。
由于混乱,我已经实施了一个单独的 Connect()
方法,使这更清楚发生了什么:
using (var client = new SmtpClient()) {
// Note: don't set a timeout unless you REALLY know what you are doing.
//client.Timeout = 1000 * 20;
client.Connect ("smtp.mail.me.com", 587, SecureSocketOptions.StartTls);
client.Authenticate (username, password);
client.Send (message);
}
试试看。
您可以将选项设置为 "SecureSocketOptions.Auto"
像这样
await client.ConnectAsync(mailService.Host, mailService.Port, SecureSocketOptions.Auto);
MailKit 将自动决定使用 SSL 还是 TLS。
Connect(string host,int port,bool useSsl,CancellationToken cancellationToken = null)
useSsl 参数仅控制客户端是否建立 SSL-wrapped 连接。换句话说,即使 如果 useSsl 参数为 false,SSL/TLS 仍然可以使用 如果邮件服务器支持 STARTTLS 扩展。
这比前面提到的 SecureSocketOptions.Auto 选项对我有用:
client.Connect(host, port, SecureSocketOptions.None);
我正在尝试通过 SmtpClient 连接到 iCloud
我使用的设置如下:
服务器名称:smtp.mail.me.com
需要 SSL:是
如果您在使用 SSL 时看到错误消息,请尝试改用 TLS 或 STARTTLS。
端口:587
需要 SMTP 身份验证:是 - 使用相关的用户名和密码
如果我使用 SSL,我会得到 "Handshake failed due to unexpected packet format"
如果我不使用 SSL visual studio 调试器在连接时挂起。
我认为问题是我没有告诉 SmtpClient 使用 tls,但我找不到关于如何执行此操作的文档。
代码如下:
using (var client = new SmtpClient()) {
client.Timeout = 1000 * 20;
//client.Capabilities.
client.AuthenticationMechanisms.Remove ("XOAUTH2");
client.Connect("SMTP.mail.me.com", 587, false); //dies here
//client.Connect(servername, port, useSsl);
//can I set tls or starttls here??
client.Authenticate(username, password);
client.Send(FormatOptions.Default, message);
}
我可以手动设置 TLS 或 StartTLS 吗?我尝试过的一件事是以下但它似乎没有用
client.Connect(new Uri("smtp://" + servername + ":" + port + "/?starttls=true"));
感谢您对此的任何帮助。
您使用的 Connect()
方法只允许 enabling/disabling SSL 封装的连接,这与 StartTLS 不同。
由于混乱,我已经实施了一个单独的 Connect()
方法,使这更清楚发生了什么:
using (var client = new SmtpClient()) {
// Note: don't set a timeout unless you REALLY know what you are doing.
//client.Timeout = 1000 * 20;
client.Connect ("smtp.mail.me.com", 587, SecureSocketOptions.StartTls);
client.Authenticate (username, password);
client.Send (message);
}
试试看。
您可以将选项设置为 "SecureSocketOptions.Auto" 像这样
await client.ConnectAsync(mailService.Host, mailService.Port, SecureSocketOptions.Auto);
MailKit 将自动决定使用 SSL 还是 TLS。
Connect(string host,int port,bool useSsl,CancellationToken cancellationToken = null)
useSsl 参数仅控制客户端是否建立 SSL-wrapped 连接。换句话说,即使 如果 useSsl 参数为 false,SSL/TLS 仍然可以使用 如果邮件服务器支持 STARTTLS 扩展。
这比前面提到的 SecureSocketOptions.Auto 选项对我有用:
client.Connect(host, port, SecureSocketOptions.None);