使用 Amazon SES 的自签名证书

使用 Amazon SES 的自签名证书

我正在配置亚马逊简单电子邮件服务,当我尝试发送电子邮件时,我收到了错误消息:

SMTP 服务器需要安全连接,否则客户端未通过身份验证。服务器响应为:需要身份验证

因此,我想使用 IIS 8 的自签名证书,但到目前为止我已经实现了它,但仍然收到相同的错误。

  • 我正在使用 .net web.config 来设置凭据、主机名和端口。
<mailSettings>
      <smtp from="[email protected]" deliveryMethod="Network" >
        <network
          host="my-amazon-host.com"
          port="25"
          defaultCredentials="false"
          enableSsl="true"
          userName="my-user-name"
          password="my-password" />
      </smtp>
</mailSettings>
  • 有没有办法使用自签名证书(由 IIS 创建)和 amazon-ses 服务?
  • 如何设置该证书?

提前致谢!

答案1

我读

.NET 电子邮件 TLS 库仅支持 STARTTLS,而 SES 目前不支持。我们支持所谓的“TLS Wrapper”或 SMTPS 身份验证。我可以理解这会令人沮丧,但您可以使用 OpenSSL 作为解决方法,并通过计算机上运行的该软件建立隧道,以使用 .NET 对我们的 SMTP 端点进行编程。

所以我决定使用亚马逊制作一个自定义 smtp 实现软件开发工具包

        var smtpSection = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
        var toAddresses = email.To.Select(mailAddress => mailAddress.Address).ToList();
        var destination = new Destination {ToAddresses = toAddresses};
        var subject = new Content(email.Subject);
        var textBody = new Content(email.Body);
        var body = new Body(textBody);
        var message = new Message(subject,body);
        var request = new SendEmailRequest(smtpSection.From, destination, message);
        Amazon.RegionEndpoint region = Amazon.RegionEndpoint.USEast1;
        var client = new AmazonSimpleEmailServiceClient(region);

        try
        {
            client.SendEmail(request);

        }
        catch (Exception ex)
        {
            //TODO: logger.
            throw;
        }
        finally 
        {
            email.Dispose();
            client.Dispose();
        }

并且您还需要在 IAM 中为您的用户设置具有以下权限的策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "---------",
      "Effect": "Allow",
      "Action": [
        "ses:SendEmail",
        "ses:SendRawEmail"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

并记得在应用程序或网络配置中添加亚马逊设置:

  <add key="AWSAccessKey" value="-----------------"/>
  <add key="AWSSecretKey" value="-----------------"/>

我希望这对其他人有帮助。谢谢!

相关内容