2011-12-28 359 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爲我的案件工作。

相關問題