This article shows how to send mail to multiple users using parallel programming.
The following is the table design from where I am fetching employee records.
- CREATE TABLE [dbo].[Employee](
- [Emp_ID] [int] IDENTITY(1,1) NOT NULL,
- [Name] [varchar](50) NULL,
- [Email] [varchar](500) NULL,
- [Designation] [varchar](50) NULL,
- [City] [varchar](50) NULL,
- [State] [varchar](50) NULL,
- [Country] [varchar](50) NULL,
- CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED
- (
- [Emp_ID] ASC
- )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
- ) ON [PRIMARY]
-
- GO
The following is the data in my table:
The following is my aspx:
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SendMailToMultipleUsers.Default" %>
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title>Send Mail To Multiple Users in ASP.NET C#</title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <table style="border: solid 15px blue; width: 100%; vertical-align: central;">
- <tr>
- <td style="padding-left: 50px; padding-top: 20px; padding-bottom: 20px;
- background-color: skyblue; font-size: 20pt; color: orangered;">
- Send Mail To Multiple Users in ASP.NET C#
- </td>
- </tr>
- <tr>
- <td style="text-align: left; padding-left: 50px; border: solid 1px red;">
- <asp:GridView ID="GridViewEmployee" runat="server" AutoGenerateColumns="False" Width="90%"
- BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px"
- CellPadding="4" GridLines="Both">
- <Columns>
- <asp:TemplateField HeaderText="Select">
-
- <ItemTemplate>
- <asp:CheckBox ID="chkSelect" runat="server" />
- </ItemTemplate>
- </asp:TemplateField>
- <asp:BoundField DataField="Name" HeaderText="Employee Name" />
- <asp:BoundField DataField="Email" HeaderText="Email" />
- <asp:BoundField DataField="Designation" HeaderText="Designation" />
- <asp:BoundField DataField="City" HeaderText="City" />
- <asp:BoundField DataField="State" HeaderText="State" />
- <asp:BoundField DataField="Country" HeaderText="Country" />
- </Columns>
- <FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
- <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
- <PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
- <RowStyle BackColor="White" ForeColor="#003399" />
- <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
- </asp:GridView>
- </td>
- </tr>
- <tr>
- <td align="right">
- <asp:Button ID="btnSendMail" Text="Send Mail" OnClick="btnSendMail_Click" runat="server" />
- </td>
- </tr>
- </table>
- </div>
- </form>
- </body>
- </html>
The following is my aspx.cs code:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Data;
- using System.Data.SqlClient;
- using System.Net.Mail;
- using System.Net;
- using System.Threading.Tasks;
-
- namespace SendMailToMultipleUsers
- {
- public partial class Default : System.Web.UI.Page
- {
- SqlDataAdapter da;
- DataSet ds = new DataSet();
- DataTable dt = new DataTable();
-
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!Page.IsPostBack)
- this.BindGrid();
- }
-
- private void BindGrid()
- {
- SqlConnection con = new SqlConnection();
- ds = new DataSet();
- con.ConnectionString = @"Data Source=INDIA\MSSQLServer2k8; Initial Catalog=EmployeeManagement; Uid=sa; pwd=india;";
- SqlCommand cmd = new SqlCommand("SELECT * FROM EMPLOYEE", con);
-
- da = new SqlDataAdapter(cmd);
- da.Fill(ds);
- con.Open();
- cmd.ExecuteNonQuery();
- con.Close();
-
- if (ds.Tables[0].Rows.Count > 0)
- {
- GridViewEmployee.DataSource = ds.Tables[0];
- GridViewEmployee.DataBind();
- }
- }
-
- protected void btnSendMail_Click(object sender, EventArgs e)
- {
- DataTable dt = new DataTable();
- dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Name", typeof(string)),
- new DataColumn("Email",typeof(string)) });
-
-
- foreach (GridViewRow row in GridViewEmployee.Rows)
- {
- if ((row.FindControl("chkSelect") as CheckBox).Checked)
- {
- dt.Rows.Add(row.Cells[1].Text, row.Cells[2].Text);
- }
- }
-
-
- string body = "Hi This is test Mail.<br /><br />Thanks.";
-
-
- Parallel.ForEach(dt.AsEnumerable(), row =>
- {
- SendEmail(row["Email"].ToString(), row["Name"].ToString(), body);
- });
- }
-
- private bool SendEmail(string To, string ToName, string body)
- {
- try
- {
- MailMessage mm = new MailMessage("[email protected]", To);
- mm.Subject = "Welcome " + ToName;
- mm.Body = body;
- mm.IsBodyHtml = true;
- SmtpClient smtp = new SmtpClient();
- smtp.Host = "smtp.gmail.com";
- smtp.EnableSsl = true;
- NetworkCredential NetworkCred = new NetworkCredential();
- NetworkCred.UserName = "[email protected]";
- NetworkCred.Password = "<YourGmailPassword>";
- smtp.UseDefaultCredentials = true;
- smtp.Credentials = NetworkCred;
- smtp.Port = 587;
- smtp.Send(mm);
- return true;
- }
- catch (Exception ex)
- {
- return false;
- }
- }
- }
- }
Now run the application.
Now select users to whom you want to send mail.