dur*_*rbo 2 asp.net email asp.net-mvc email-integration
我已经使用教程在我的MVC5应用程序联系表单中设置电子邮件并通过电子邮件发送.我不知所措.我尝试了几种不同的选择,但我只是遗漏了一些东西.非常感谢!
我的邮件主机是机架空间,其设置可在http://www.rackspace.com/apps/support/portal/1088上找到.
一切正常,除了我在SendFinalMail函数中不断收到smpt.Send(MailInfo)的错误.
SmtpException occurred
A first chance exception of type 'System.Net.Mail.SmtpException' occurred in System.dll
Additional information: The operation has timed out.
Run Code Online (Sandbox Code Playgroud)
根据评论添加StackTrace(如果您需要更多,请告诉我):
System.Net.Mail.SmtpException occurred
_HResult=-2146233088
_message=The operation has timed out.
HResult=-2146233088
IsTransient=false
Message=The operation has timed out.
Source=System
StackTrace:
at System.Net.Mail.SmtpClient.Send(MailMessage message)
InnerException:
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
Web.config
<appSettings>
<!--EMAIL SERVICES-->
<add key="FromAddress" value="myfrom@address" />
<add key="UserID" value="myfrom@address" />
<add key="Password" value="myPassword" />
<add key="SMTPPort" value="465" />
<add key="SmtpClient" value="secure.emailsrvr.com" />
<add key="EnableSSL" value="Yes" />
<add key="UnobtrusiveJavaScriptEnabled" value ="true"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
楷模
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Mail;
namespace SandBox.MailManager
{
class MailManager
{
#region Private for email
private string FromAddress { get; set; }
private string EmailHost { get; set; }
private string Pwd { get; set; }
private string UserID { get; set; }
private string SMTPPort { get; set; }
private Boolean bEnableSSL { get; set; }
#endregion
#region Default Functions for Mailing
public MailManager()
{
FromAddress = System.Configuration.ConfigurationManager.AppSettings["FromAddress"];
UserID = System.Configuration.ConfigurationManager.AppSettings.Get("UserID");
SMTPPort = System.Configuration.ConfigurationManager.AppSettings.Get("SMTPPort");
Pwd = System.Configuration.ConfigurationManager.AppSettings.Get("Password");
EmailHost = System.Configuration.ConfigurationManager.AppSettings.Get("SmtpClient");
if (System.Configuration.ConfigurationManager.AppSettings.Get("EnableSSL").ToUpper() == "YES")
{
bEnableSSL = true;
}
else
{
bEnableSSL = false;
}
}
private bool SendFinalMail(MailMessage MailInfo)
{
try
{
SmtpClient smtp = new SmtpClient();
smtp.Host = EmailHost;
smtp.Port = Convert.ToInt16(SMTPPort);
smtp.Credentials = new System.Net.NetworkCredential(UserID, Pwd);
smtp.EnableSsl = bEnableSSL;
//smtp.Send(MailInfo);
System.Threading.Thread emailThread;
emailThread = new System.Threading.Thread(delegate()
{
smtp.Send(MailInfo);
});
emailThread.IsBackground = true;
emailThread.Start();
return true;
}
catch (Exception e)
{
Console.WriteLine(e);
return false;
}
}
#endregion
public bool SendEnquiryEmail(string ToUserEmail, string htmlBody)
{
try
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress(FromAddress);
mail.To.Add(ToUserEmail);
mail.CC.Add("another@email");
mail.Subject = "Thank you. Our team will be in touch shortly";
mail.Body = htmlBody;
mail.IsBodyHtml = true;
return this.SendFinalMail(mail);
}
catch
{
return false;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
调节器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Contact(ContactModel Contact)
{
if (ModelState.IsValid) {
try
{
MailManager.MailManager oMail = new MailManager.MailManager();
string htmlBody = "<html><body>Hi, ";
htmlBody += "<p>We've receive your message and we will in touch shortly to responded to your message,</p>";
htmlBody += "<br /><br /><p>You can email us directly at <a href='#'>.</p>";
htmlBody += "<br /><br /><p>The message we have received from you is:</p>";
htmlBody += "<br /><br /><p>" + Contact.Message + "</p>";
htmlBody += "<p><br /> Regards,</p> </body></html>";
bool SendEmail = oMail.SendEnquiryEmail(Contact.Email, htmlBody);
if (SendEmail == true)
{
return View();
}
else {
return View();
}
}
catch (Exception)
{
return View();
}
}
return View("Model not Valid");
}
Run Code Online (Sandbox Code Playgroud)
我已经学到了答案.答案是:因为System.Net.Mail不支持"隐式"SSL,只支持"显式"SSL.
我通过端口465使用SSL导致这些问题.我更改主机,端口和enableSSL使其成为不安全的连接,它工作正常.
我已经发现,如果我使用TLS端口587和enableSSL,它可以工作,而不是从ssl端口465发送.这篇文章给了我答案
| 归档时间: |
|
| 查看次数: |
1247 次 |
| 最近记录: |