ASP .NET How to Send Email asynchronously | ASP .NET sends email using live.com account
I was browsing the ASP.NET forum the other day and saw a topic "Problem sending email" using hotmail account Asynchronously. Personally, I haven't tried that before and I did get it to work. Below is the code in vb.net and CSharp version. Make sure to set Async="true" in the page directive because we are sending the email Asynchronously.
Here is the entry in Web.config
<configuration>
<system.net>
<mailSettings>
<smtp from="myEmail@hotmail.com">
<network host="smtp.live.com" defaultCredentials="false" port="25" userName ="myHotmailEmail@hotmail.com" password="myHotmailPassword" />
</smtp>
</mailSettings>
</system.net>
</configuration>
This is the ASPX page
<%@ Page Language="VB" Async="true" AutoEventWireup="false" CodeFile="TestHotmail.aspx.vb" Inherits="TestHotmail" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Button" />
</div>
<asp:Label ID="lblMessage" runat="server" Text="Label"></asp:Label>
</form>
</body>
</html>
VB.NET
Imports System.Net.Mail
Partial Class TestHotmail
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
AddHandler Button1.Click, AddressOf Button1_Click
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim mailMessage As New System.Net.Mail.MailMessage
mailMessage.To.Add(New MailAddress("toSomeone@gmail.com"))
mailMessage.From = New MailAddress("fromMe@hotmail.com")
mailMessage.Subject = "my test subject"
mailMessage.Body = "my test body"
mailMessage.IsBodyHtml = True
Dim smtpClient As New SmtpClient()
smtpClient.EnableSsl = True
Dim userState As Object = mailMessage
AddHandler smtpClient.SendCompleted, AddressOf smtpClient_OnCompleted
smtpClient.SendAsync(mailMessage, userState)
End Sub
Public Sub smtpClient_OnCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
Dim mailMessage As MailMessage
mailMessage = CType(e.UserState, MailMessage)
If (e.Cancelled) Then
lblMessage.Text = "Sending of email message was cancelled. Address=" + mailMessage.To(0).Address
End If
If Not (e.Error Is Nothing) Then
lblMessage.Text = "Error occured, info :" + e.Error.Message
Else
lblMessage.Text = "Mail sent successfully"
End If
End Sub
End Class
If you are using CSharp, this is the code behind
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
public partial class TestHotmailCsharp : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Button1.Click +=new EventHandler(Button1_Click);
}
protected void Button1_Click(object sender, EventArgs e)
{
System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();
mailMessage.To.Add(new MailAddress("toSomeone@gmail.com"));
mailMessage.From = new MailAddress("fromMe@hotmail.com");
mailMessage.Subject = "my test subject";
mailMessage.Body = "my test body";
mailMessage.IsBodyHtml = true;
SmtpClient smtpClient = new SmtpClient();
smtpClient.EnableSsl = true;
object userState = mailMessage;
smtpClient.SendCompleted += new SendCompletedEventHandler(smtpClient_SendCompleted);
smtpClient.SendAsync(mailMessage, userState);
}
void smtpClient_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
MailMessage mailMessage = default(MailMessage);
mailMessage = (MailMessage)e.UserState;
if ((e.Cancelled))
{
lblMessage.Text = "Sending of email message was cancelled. Address=" + mailMessage.To[0].Address;
}
if ((e.Error != null))
{
lblMessage.Text = "Error occured, info :" + e.Error.Message;
}
else
{
lblMessage.Text = "Mail sent successfully";
}
}
}
References:
Send Email Asynchronously with ASP.NET
Incoming and Outgoing Mail Server Settings for Hotmail, Yahoo! Mail, GMail, MSN, AOL and more