2011-12-28 360 views
9

我试图使用NET的通过亚马逊SES新的SMTP服务发送电子邮件内置SmtpClient通过亚马逊SES SMTP错误发送电子邮件

代码:

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

我得到一个异常:

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

谷歌说这个错误意味着我无法到达SMTP服务器。 他们需要我相信通过“EnableSsl”属性实现的TLS。

任何人都知道我需要调整我的代码,使其工作?

编辑:

我想我会关闭这个问题。不,这不可能做我想做的与SmtpClient

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

+0

不直接回答这个问题,但你可以下载AWSSDK.dll并使用他们自己的API,它真的非常容易,你不需要担心SMTP,兼容性,ISP等。 – 2011-12-28 20:13:11

+1

那就是我正在使用的马上。但是我想从最近发布SMTP以来一直使用SMTP。这样我就不必处理AWSSDK – katit 2011-12-28 20:18:01

+0

您是否在任何地方提供SES用户名和密码? – arx 2011-12-28 20:25:14

回答

5

我可以证实,它与STARTTLS和端口587

希望帮助

+0

:(我刚刚测试过,现在只有2587个可以使用默认的SmtpClient。至少,它在尝试不同端口的小时后工作... – kape123 2014-04-09 02:23:47

+1

您的链接已损坏,您应该替换它或将其删除 – 2015-06-16 21:11:06

0

你有没有在web.config中设置的DefaultCredentials =“假”?

+0

我很好奇你是什么意思或为什么这会工作:你假设我正在开发ASP.NET Web应用程序,但为什么web.config中的一些凭据设置会影响SMTP连接? – 2011-12-28 20:42:20

+0

对不起,如果我误解了“配置文件”的含义,我认为它是带有关联的SMTP设置的Web.config。当我使用(.NET)SMTP并需要提供用户名和密码时,我在部分中这样做了。如果我没有设置defaultCredettials = false,连接将失败。 – 2011-12-29 21:38:41

5

根据亚马逊 - 这是不支持,因为我们曾经。

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

的.NET电子邮件TLS库只支持今天SES不 支持STARTTLS。我们支持所谓的“TLS包装”或SMTPS 认证。我可以理解这会如何令人沮丧,但 可以使用OpenSSL作为解决方法,并通过在您的计算机上运行的该软件 的隧道来使用.NET来针对我们的SMTP 端点进行编程。

1

对于任何想用.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); 
8

是可能的通过指定端口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); 
+0

我想这是刚刚添加。你能发布链接到亚马逊SES文档,他们确认支持587端口吗? – katit 2012-03-29 20:37:18

+0

我有一个情况是相同的配置在Windows 7上,但不是在Windows XP上。任何想法为什么? – 2012-07-02 17:32:07

+0

@katit:这是官方公告:http://aws.amazon.com/de/about-aws/newsletters/2012/03/15/March2012/ 查看我的回答中的博客文章以获取更多信息 – Masterfu 2012-07-25 10:11:55

3

现在SES支持STARTTTLS:

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

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

+0

For我只有端口587与SmtpClient一起工作。 – swax 2012-07-07 15:44:53

4

由于masterfu提到在他的博客,亚马逊SES开始支持STARTTLS在2012年3月。

下面是我用来让SMTP与亚马逊合作的代码。

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); 
0

尝试使用端口号。 2587,其他港口25,425,587 dint为我的案件工作。

相关问题