Asp.net Smtpclient Error Handling
Contents |
R. SpinellaMay 31, 20110 0 0 0 I am sure alot of us when sending mail from a web application, we sometimes run intosome unforeseen error becuase the mail being sentthrew an exception. How do we solve this?Do we just throw the exceptionand that's smtp exception failure sending mail it. No, If we look into this problem a little closer, the majority of mail server smtpclient c# interruptions are very temporary, only lasting a few seconds. Instead of throwing the exception right away, why not trysending the mail again? If c# send email example there is a problem of any kind at the SMTP server level, the server reports an exception, you willprobally useSmtpException to handle this. While using the SmtpException works well, its functionality is limited in determining exactly how the smtpclient failure sending mail send failed. Why do we care? Well, sometimes our mail server is experiencing a serious issue, and most likely, there’s nothing you can do about it. But, when a SMTP server reports an error, the actual problem is not with the server itself but with an individual mailbox. The most common cause of mailbox issues are as follows: The destination mailbox is currently in use. If this occurs, only lasts a short amount of time. The mailbox is
C# Mailmessage
unavailable. This may mean that there is actually no such address on the server, but it may also mean that the search for the mailbox simply timed out. The transaction with the mailbox failed. The reasons for this can be somewhat mysterious; but like a stubborn web page, sometimes a second nudge is all it takes to do the trick. What does this tell us? With a little more coding, we could gracefully recover from the majority of email send failures by detecting these particular conditions and attempting the send a second time. Remember, if a second mail send happens to fail, then it’s very likely that the problem is not temporary, in which case there is not reason continuing to handle the exception at this point. When that happens, we can allow the exception to bubble up to the calling page as it normally would. Handling the ExceptionsProblems with mailboxes is that they are not easily discovered by catching SmtpException. Fortunately, there is a more derived type called SmtpFailedRecipientException that the .NET Framework uses to wrap errors reported from an individual mailbox. This exception contains a StatusCode property of type enum that will tell us the exact cause of the error. Obvserve in the following code below:
using System.Net.Mail;
using System.Threading;
using System.Web.Configuration;
///
/// Provides a method for ASP.NET Community Standup Forums Help Home/ASP.NET Forums/General ASP.NET/Getting Started/asp.net email error handling asp.net email error handling [Answered]RSS 3 replies Last post Feb
Failure Sending Mail C#
17, 2009 12:17 AM by mudassarkhan ‹ Previous Thread|Next Thread › failure sending mail. at system.net.mail.smtpclient.send(mailmessage message) Print Share Twitter Facebook Email Shortcuts Active Threads Unanswered Threads Unresolved Threads Support Options Advanced Search Reply Dman100 smtpfailedrecipientexception Member 39 Points 434 Posts asp.net email error handling Feb 16, 2009 12:22 AM|Dman100|LINK I have a two part question. I am trying to learn how to handle https://blogs.msdn.microsoft.com/jrspinella/2011/05/31/handling-exceptions-when-sending-mail-via-system-net-mail/ errors when sending email using asp.net. I've created a simple web form for testing different errors that can occur when sending an email. I am testing this by sending thru my ISP from my localhost. My first question is how do I write the errors to the event log? Second, what is the best way to throw http://forums.asp.net/t/1385307.aspx?asp+net+email+error+handling errors for testing? I tried using Throw(), but that does not seem to work. As an example, I want to test how the exception would be handled when a recipients emailbox was unavailable due to an incorrect email address or say the emailbox was busy due to maintanence or some other type of problem. How would you use throw to test that type of scenario? Thanks for any help. I tried the following: protected void btnSend_Click(object sender, EventArgs e) { SendMail(); } private void SendMail() { MailMessage message = new MailMessage(); message.From = new MailAddress(txtFrom.Text.Trim()); message.To.Add(txtTo.Text.Trim()); message.Subject = txtSubject.Text.Trim(); message.Body = txtBody.Text.Trim(); SmtpClient smtpClient = new SmtpClient(); try { if (txtTo.Text == "test@test.com") throw new SmtpFailedRecipientsException("Mailbox Unavailable"); //smtpClient.Send(message); } catch (SmtpFailedRecipientsException recExc) { for (int recipient = 0; recipient < recExc.InnerExceptions.Length - 1; recipient++) { SmtpStatusCode statusCode; statusCode = recExc.InnerExceptions[recipient].StatusCode; if ((statusCode == SmtpStatusCode.MailboxBusy) || (statusCode
here for a quick overview of the site Help Center Detailed answers to any questions you might have Meta Discuss the workings and policies of this site http://stackoverflow.com/questions/30037608/handling-smtpclient-send-exceptions About Us Learn more about Stack Overflow the company Business Learn more http://stackoverflow.com/questions/25137010/asp-net-c-sharp-catching-errors-when-sending-an-email about hiring developers or posting ads with us Stack Overflow Questions Jobs Documentation Tags Users Badges Ask Question x Dismiss Join the Stack Overflow Community Stack Overflow is a community of 4.7 million programmers, just like you, helping each other. Join them; it only takes a minute: Sign up Handling SmtpClient.Send exceptions failure sending up vote 0 down vote favorite I'm a little confused about how to handle the SmtpClient.send exceptions. We have for example the "SmtpException" but what would be the correct way to handle the specific exceptions within. Using the HResult property? If so, how could I catch the "invalid user" exception or the "smtp server unreachable" exception? c# smtpclient share|improve this question edited May 4 '15 failure sending mail at 18:45 rene 24.1k105070 asked May 4 '15 at 18:43 jz jz 64 HResult is probably less informative than StatusCode, which is specific to the error being sent... –Ron Beyer May 4 '15 at 18:45 By the way, C#6 will have exception filters for C#, something VB has enjoyed for a long time, so this will become a lot easier to handle specific error codes inside catches. –Ron Beyer May 4 '15 at 18:46 add a comment| 1 Answer 1 active oldest votes up vote 0 down vote You can evaluate the StatusCode property (See SmtpStatusCode Enumeration): try { client.Send(message); } catch (SmtpException e) { Console.WriteLine("Error: {0}", e.StatusCode); } share|improve this answer answered May 4 '15 at 18:50 Peter Schneider 88769 I have tried with the StatusCode evaluation, but –jz jz May 5 '15 at 6:55 I have tried with the StatusCode evaluation. For example with a wrong smtp ip and a wrong smtp port i get StatusCode:GeneralFailure in both cases. But the InnerException messages are diferent: {"The remote name could not be resolved: 'smtp.gmail.com4'"} and {"Unable to connect to the remote server"} –jz
here for a quick overview of the site Help Center Detailed answers to any questions you might have Meta Discuss the workings and policies of this site About Us Learn more about Stack Overflow the company Business Learn more about hiring developers or posting ads with us Stack Overflow Questions Jobs Documentation Tags Users Badges Ask Question x Dismiss Join the Stack Overflow Community Stack Overflow is a community of 4.7 million programmers, just like you, helping each other. Join them; it only takes a minute: Sign up ASP.Net C# - Catching errors when sending an email up vote 0 down vote favorite So I've got a function to send an email which I run within a button click event after some validation. However, how do I catch any errors when sending an email? I'm familiar with the try-catch-finally approach so would the code at the bottom be sufficient? protected void sendEmail(string activationCode, string username, string emailAddress) { SmtpClient SmtpServer = new SmtpClient("smtp.live.com"); var mail = new MailMessage(); mail.From = new MailAddress("EMAIL"); mail.To.Add(emailAddress); mail.Subject = "Please activate your account."; mail.IsBodyHtml = true; string htmlBody; htmlBody = "Dear " + username + "
"; htmlBody += "Thank you for registering an account. Please activate your account by visiting the URL below:
"; htmlBody += "http://localhost:57167/signin.aspx?activate=" + activationCode + "
"; htmlBody += "Thank you."; mail.Body = htmlBody; SmtpServer.Port = 587; SmtpServer.UseDefaultCredentials = false; SmtpServer.Credentials = new System.Net.NetworkCredential("EMAIL", "PASSWORD"); SmtpServer.EnableSsl = true; SmtpServer.Send(mail); } Is something like this okay? protected void sendEmail(string activationCode, string username, string emailAddress) { try { SmtpClient SmtpServer = new SmtpClient("smtp.live.com"); var mail = new MailMessage(); mail.From = new MailAddress("EMAIL"); mail.To.Add(emailAddress); mail.Subject = "Please activate your account."; mail.IsBodyHtml = true; string htmlBody; htmlBody = "Dear " + username + "
"; htmlBody += "Thank you for registering an account. Please activate your account by visiting the URL below:
"; htmlBody += "http://localhost:57167/signin.aspx?activate=" + activationCode + "
"; htmlBody += "Thank you."; mail.Body = htmlBody; SmtpServer.Port = 587; SmtpServer.UseDefaultCredentials = false; SmtpServer.Credentials = new System.Net.NetworkCredential("EMAIL", "PASSWORD"); SmtpServer.EnableSsl = true; SmtpServer.Send(mai