Mailkit SMTP - StartTLS 和 TLS 标志

问题描述 投票:0回答:5

我正在尝试通过 SmtpClient 连接到 iCloud

我使用的设置如下:

服务器名称:smtp.mail.me.com
需要 SSL:是
如果您在使用 SSL 时看到错误消息,请尝试改用 TLS 或 STARTTLS。
端口:587
需要 SMTP 身份验证:是 - 使用相关的用户名和密码

如果我使用 SSL,我会收到“由于意外的数据包格式,握手失败”

如果我不使用 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"));

感谢您对此的任何帮助。

c# mailkit
5个回答
32
投票

您使用的

Connect()
方法仅允许启用/禁用 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);
}

尝试一下。


5
投票

您可以将选项设置为“SecureSocketOptions.Auto” 像这样的东西

await client.ConnectAsync(mailService.Host, mailService.Port,   SecureSocketOptions.Auto);

MailKit 将自动决定使用 SSL 或 TLS。


2
投票

根据 MailKit 文档

Connect(string host,int port,bool useSsl,CancellationToken cancellationToken = null)

useSsl 参数仅控制客户端是否建立 SSL 包装的连接。换句话说,即使 useSsl 参数为 false,如果邮件服务器支持 STARTTLS 扩展,仍然可以使用 SSL/TLS。


0
投票
这比前面提到的 SecureSocketOptions.Auto 选项对我有用:

client.Connect(host, port, SecureSocketOptions.None);
    

0
投票
对于使用

FluentEmail 文档中的示例的任何人,要在 FluentEmail 和 MailKit 中使用“StartTLS”,我最终在我的程序中得到了这个。cs:

var smtpClientOptions = new SmtpClientOptions { Server = "myserver.blah.com", Port = 587, Password = "supersecure", UseSsl = true, User = "[email protected]", SocketOptions = SecureSocketOptions.StartTls }; builder.Services.AddFluentEmail("[email protected]") .AddMailKitSender(smtpClientOptions); Email.DefaultSender = new MailKitSender(smtpClientOptions);
只需发送这样的电子邮件:

var email = await Email .From("[email protected]") .To("[email protected]", "You") .Subject("You know exactly what this is") .Body("Yep, this is an email example I am sending.") .SendAsync();
    
© www.soinside.com 2019 - 2024. All rights reserved.