我正在配置亚马逊简单电子邮件服务,当我尝试发送电子邮件时,我收到了错误消息:
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="-----------------"/>
我希望这对其他人有帮助。谢谢!