smtpexception发送邮件失败?

StringBuilder emailMessage = new StringBuilder(); emailMessage.Append("Dear Payment Team ,"); emailMessage.Append("

Please find the Payment instruction"); try { MailMessage Msg = new MailMessage(); // Sender e-mail address. Msg.From = new MailAddress("pqr@gmail.com"); // Recipient e-mail address. Msg.To.Add("abc@gmail.com"); Msg.CC.Add("zcd@gmail.com"); Msg.Subject = "Timesheet Payment Instruction updated"; Msg.IsBodyHtml = true; Msg.Body = emailMessage.ToString(); SmtpClient smtp = new SmtpClient(); //smtp.EnableSsl = true; smtp.Host = ConfigurationManager.AppSettings["HostName"]; smtp.Port = int.Parse(ConfigurationManager.AppSettings["PortNumber"]); smtp.Send(Msg); Msg = null; Page.RegisterStartupScript("UserMsg", "alert('Mail has been sent successfully.')"); } catch (Exception ex) { Console.WriteLine("{0} Exception caught.", ex); }

在web.config中添加了此代码

     

我不断尝试更改端口号但是没有成功

例外细节

  System.Net.Mail.SmtpException was caught Message=Failure sending mail. Source=System StackTrace: at System.Net.Mail.SmtpClient.Send(MailMessage message) at PAYMENT_DTALinesfollowup.Sendbtn_Click(Object sender, EventArgs e) in d:\AFSS-TFS\AFSS\Code\ERPNET\PAYMENT\DTALinesfollowup.aspx.cs:line 488 InnerException: System.Net.WebException Message=Unable to connect to the remote server Source=System StackTrace: at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6, Int32 timeout) at System.Net.PooledStream.Activate(Object owningObject, Boolean async, Int32 timeout, GeneralAsyncDelegate asyncCallback) at System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback) at System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout) at System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint) at System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint) at System.Net.Mail.SmtpClient.GetConnection() at System.Net.Mail.SmtpClient.Send(MailMessage message) InnerException: System.Net.Sockets.SocketException Message=A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 125.63.68.148:25 Source=System ErrorCode=10060 NativeErrorCode=10060 StackTrace: at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) InnerException: 

您需要为smtp提供用户名和密码。

使用以下代码: –

  MailSettings.SMTPServer = Convert.ToString(ConfigurationManager.AppSettings["HostName"]); MailMessage Msg = new MailMessage(); // Sender e-mail address. Msg.From = new MailAddress("pqr@gmail.com"); // Recipient e-mail address. Msg.To.Add("abc@gmail.com"); Msg.CC.Add("zcd@gmail.com"); Msg.Subject = "Timesheet Payment Instruction updated"; Msg.IsBodyHtml = true; Msg.Body = emailMessage.ToString(); NetworkCredential loginInfo = new NetworkCredential(Convert.ToString(ConfigurationManager.AppSettings["UserName"]), Convert.ToString(ConfigurationManager.AppSettings["Password"])); // password for connection smtp if u dont have have then pass blank SmtpClient smtp = new SmtpClient(); smtp.UseDefaultCredentials = true; smtp.Credentials = loginInfo; //smtp.EnableSsl = true; //No need for port //smtp.Host = ConfigurationManager.AppSettings["HostName"]; //smtp.Port = int.Parse(ConfigurationManager.AppSettings["PortNumber"]); smtp.Send(Msg); 

首先,您无需手动读取.config文件中的值。 您可以在System.Net部分中设置,您的SmtpClient对象将自动读取它们:

        

然后,从您的代码中,您只需写:

  SmtpClient smtp = new SmtpClient(); MailMessage mailMessage = new MailMessage(); mailMessage.To.Add(new MailAddress("recipient@somedomain.com", "Recipient Display Name")); mailMessage.Subject = "Some Subject"; mailMessage.Body = "One gorgeous body"; smtp.Send(mailMessage); 

回到你的错误,你会遇到某种网络问题。

我建议你使用Elmah发送exception电子邮件的最简单方法。 请按照以下指南获取解决方案: https : //www.stormconsultancy.co.uk/blog/development/tools-plugins/setup-email-alerts-from-elmah-when-exceptions-are-raised/

 try { MailMessage mail = new MailMessage(); //SmtpClient SmtpServer = new SmtpClient("smtp.google.com"); SmtpClient SmtpServer = new SmtpClient(sServer); // SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com", 587); mail.From = new MailAddress(sFromEmailId); mail.To.Add(sToEmailId); mail.Subject = sSubject; mail.Body = sMessage; mail.IsBodyHtml = true; HttpFileCollection hfc = Request.Files; for (int i = 0; i < hfc.Count; i++) { HttpPostedFile hpf = hfc[i]; if (hpf.ContentLength > 0) { mail.Attachments.Add(new Attachment(fupload.PostedFile.InputStream, hpf.FileName)); } } SmtpServer.Port = 587; //SmtpServer.Host = "smtp.gmail.com"; SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network; SmtpServer.UseDefaultCredentials = false; SmtpServer.Credentials = new System.Net.NetworkCredential(sFromEmailId, sPassword); SmtpServer.EnableSsl = true; SmtpServer.Send(mail); ClientScript.RegisterStartupScript(this.GetType(), "Alert", "dim('Mail Sent Successfully..!');", true); mail.Dispose(); } catch (Exception ex) { ClientScript.RegisterStartupScript(this.GetType(), "Alert", "dim('Error in Sending Mail..!');", true); } 

此exception的另一个原因可能是您的系统上安装了反病毒。 这可能会禁止应用程序发送邮件。 只需注意一个对话框,要求允许通过系统上的应用程序发送邮件。