通过Amazon SES SMTP发送电子邮件错误

本文关键字:电子邮件 错误 SMTP Amazon SES 通过 | 更新日期: 2023-09-27 18:19:02

我正在尝试使用。net内置的SmtpClient通过Amazon SES新的SMTP服务发送电子邮件

代码:

    var emailClient = new SmtpClient("email-smtp.us-east-1.amazonaws.com", 465);
                    emailClient.EnableSsl = true;
....
emailClient.Send(message);

我得到一个异常:

无法从传输连接读取数据:net_io_connectionclosed

Google说这个错误意味着我无法访问SMTP服务器。它们需要TLS,我相信这是通过"EnableSsl"属性实现的。

有人知道我需要如何调整我的代码使其工作吗?

编辑:

我想我要结束这个问题了。不,这是不可能做我想要的SmtpClient

https://forums.aws.amazon.com/thread.jspa?messageID=302112& # 302112

通过Amazon SES SMTP发送电子邮件错误

可以通过指定端口587来实现。

<system.net>
   <mailSettings>
     <smtp deliveryMethod="Network">
       <network enableSsl="true" port="587" host="email-smtp.us-east-1.amazonaws.com" password="[password]" userName="[username]"/>
     </smtp>
   </mailSettings>
</system.net>

作为配置,您可以像通常那样使用SmtpClient

var client = new SmtpClient();
var message = new MailMessage(fromemail, recipient, subject, body);
client.Send(message);

我可以确认它可以与STARTTLS和端口587一起工作。

希望有帮助

根据Amazon -不像我们过去那样支持。

https://forums.aws.amazon.com/thread.jspa?messageID=302112& # 302112

.NET email TLS库只支持STARTTLS,而SES不支持今天的支持。我们支持所谓的"TLS包装器"或SMTPS身份验证。我能理解你有多沮丧,但是您可以使用OpenSSL作为解决方案,并通过该软件进行隧道在您的计算机上运行,使用。net针对我们的SMTP进行编程端点。

正如masterfu在他的博客文章中提到的,Amazon SES在2012年3月开始支持STARTTLS。

下面是我用来让SMTP与Amazon一起工作的代码。

  string username = ConfigurationManager.AppSettings["AWSSMTPUser"];
  string password = ConfigurationManager.AppSettings["AWSSMTPPass"];
  SmtpClient smtp = new SmtpClient();
  smtp.Host = "email-smtp.us-east-1.amazonaws.com";
  smtp.Port = 587;
  smtp.UseDefaultCredentials = false;
  smtp.Credentials = new NetworkCredential(username, password);
  smtp.EnableSsl = true;
  smtp.Send(mail);

现在SES支持STARTTTLS:

发送服务器(SMTP) - 25,587或2587(使用STARTTLS连接)或465或2465(使用TLS包装器连接)。

Pruf链接:http://s3.amazonaws.com/awsdocs/ses/latest/ses-dg.pdf

对于任何想要使用正常的。net SMTPClient发送的人。这是可能的,因为您只需要一个包装器。

这里是所有信息的链接:

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/SMTP.Client.html

安装隧道软件并按照链接中的描述进行配置,那么就像下面这样简单:

System.Net.Mail.SmtpClient sc = new SmtpClient();
sc.Host = host;
sc.Port = port;
sc.Credentials = new NetworkCredential(username, password);
sc.Send(mm);

您是否在web.config中设置了defaultCredentials="false" ?

尝试使用端口号。2587,其他端口25,425,587对我的情况有利