2017-04-05 62 views
5

當我嘗試在我的新GoDaddy電子郵件地址中使用SSL發送ASP.NET中的STMP電子郵件時,它不起作用。我收到一條錯誤消息說Unable to read data from the transport connection: net_io_connectionclosed.帶有SSL的SMTP電子郵件與ASP.NET中的GoDaddy電子郵件地址不起作用

這裏是服務器的電子郵件設置:

enter image description here

下面是從我的web.config中的片段與電子郵件服務器的信息:

<system.net> 
    <mailSettings> 
    <smtp from="[email protected]" > 
     <network host="smtpout.secureserver.net" port="465" userName="[email protected]" password="password123" enableSsl="true" /> 
    </smtp> 
    </mailSettings> 
</system.net> 

這裏是發送電子郵件的C#代碼。

MailMessage message = new MailMessage(); 
message.To.Add(new MailAddress(to)); 
message.Subject = "Message from " + inputModel.Name; 
message.Body = body; 
message.IsBodyHtml = true; 

using (var smtp = new SmtpClient()) 
{ 
    smtp.Send(message); 
} 

端口80,3535,沒有SSL 25做工精細,但沒有四個工作 SSL的。我甚至用SSL來試用587端口,經過相當長的一段時間後,它才超時。

如何獲取這些電子郵件以使用SSL發送?

回答

3

關於此問題,請參閱this older question,其中包括問題描述 - SmtpClient僅支持「明確的SSL」,並且您需要執行「隱式SSL」才能直接在端口465上交談SSL。

比那裏討論的選項更好更現代的方法是使用一個維護良好的庫,它具有隱式SSL支持。 MailKit將是一個很好的方法去做到這一點。

或者,考慮使用第三方電子郵件中繼服務,如SendGrid,Mandrill,Mailgun等。這樣做會大大提高用戶在收件箱中實際接收郵件的機率,而不是垃圾郵件/垃圾郵件文件夾。

1

從您的屏幕截圖我假設您的網站託管在godaddy以外,那麼你可以使用「smtpout.secureserver.net」。

如果您的網站託管在GoDaddy的,那麼你需要改變配置如下:

<system.net> 
     <mailSettings> 
     <smtp from="[email protected]"> 
     <network host="relay-hosting.secureserver.net"/> 
     </smtp> 
     </mailSettings> 
    </system.net> 

如果你想使用顯式SSL嘗試從465端口更改爲587

對於隱式SSL我們用netimplicitssl

這裏是取自this的答案

var mailMessage = new MimeMailMessage(); 
mailMessage.Subject = "test mail"; 
mailMessage.Body = "hi dude!"; 
mailMessage.Sender = new MimeMailAddress("[email protected]", "your name"); 
mailMessage.IsBodyHtml = true; 
mailMessage.To.Add(new MimeMailAddress("[email protected]", "your friendd's name")); 
mailMessage.Attachments.Add(new MimeAttachment("your file address")); 
var emailer = new SmtpSocketClient(); 
emailer.Host = "your mail server address"; 
emailer.Port = 465; 
emailer.EnableSsl = true; 
emailer.User = "mail sever user name"; 
emailer.Password = "mail sever password" ; 
emailer.AuthenticationMode = AuthenticationType.PlainText; 
emailer.MailMessage = mailMessage; 
emailer.OnMailSent += new SendCompletedEventHandler(OnMailSent); 
//Send email 
emailer.SendMessageAsync(); 

// A simple call back function: 
private void OnMailSent(object sender, AsyncCompletedEventArgs asynccompletedeventargs) 
{ 
    Console.Out.WriteLine(asynccompletedeventargs.UserState.ToString()); 
}