فرستادن ایمیل به چند کاربر در Asp.net

در این مقاله تعدادی Check Box از ایمیل ها نمایش میدهیم و به موارد انتخاب شده ایمیل ارسال می کنیم

فرستادن ایمیل به چند کاربر در Asp.net

آدرس ایمیل ها رو از پایگاه داده میخونیمو برای ارسال جچند ایمیل از چند thered به صورت موازی استفاده میکینم به صفحه خود یک گرید و یک دکمه اضافه کنید:


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="chkSelect" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30" />
        <asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
        <asp:TemplateField HeaderText="Email">
            <ItemTemplate>
                <asp:HyperLink ID="lnkEmail" runat="server" Text='<%# Eval("Email") %>' NavigateUrl='<%# Eval("Email", "mailto:{0}") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<br />
<asp:Button Text="Send Bulk Email" runat="server" OnClick = "SendBulkEmail" />

در رویداد page Load یک Data Table به صورت داینامیک ایجاد کرده و ایمیل هارا به ان اضافه و به گرید بایند میکنیم:


protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
                        new DataColumn("Name", typeof(string)),
                        new DataColumn("Email",typeof(string)) });
        dt.Rows.Add(1, "John Hammond", "john.hammond@test.com");
        dt.Rows.Add(2, "Mudassar Khan", "mudassar.khan@test.com");
        dt.Rows.Add(3, "Suzanne Mathews", "suzzane.mathews@test.com");
        dt.Rows.Add(4, "Robert Schidner", "robert.schidner@test.com");
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }
}

یک متد برای ارسال ایمیل به شکل زیر مینویسیم:
 

 private bool SendEmail(string recipient, string subject, string body)
{
    MailMessage mm = new MailMessage("sender@gmail.com", recipient);
    mm.Subject = subject;
    mm.Body = body;
    mm.IsBodyHtml = true;
    SmtpClient smtp = new SmtpClient();
    smtp.Host = "smtp.gmail.com";
    smtp.EnableSsl = true;
    NetworkCredential NetworkCred = new NetworkCredential();
    NetworkCred.UserName = "sender@gmail.com";
    NetworkCred.Password = "<password>";
    smtp.UseDefaultCredentials = true;
    smtp.Credentials = NetworkCred;
    smtp.Port = 587;
    smtp.Send(mm);
    return true;
}

حال در رویداد کلیک دکمه SendBulkEmail کد زیر را بنویسید:

 protected void SendBulkEmail(object sender, EventArgs e)
{
    //Create a temporary DataTable
    DataTable dtCustomers = new DataTable();
    dtCustomers.Columns.AddRange(new DataColumn[2] { new DataColumn("Name", typeof(string)),
                        new DataColumn("Email",typeof(string)) });
 
    //Copy the Checked Rows to DataTable
    foreach (GridViewRow row in GridView1.Rows)
    {
        if ((row.FindControl("chkSelect") as CheckBox).Checked)
        {
            dtCustomers.Rows.Add(row.Cells[2].Text, (row.FindControl("lnkEmail") as HyperLink).Text);
        }
    }
 
    string subject = "Welcome Email";
    string body = "Hello {0},<br /><br />Welcome to ASPSnippets<br /><br />Thanks.";
 
    //Using Parallel Multi-Threading send multiple bulk email.
    Parallel.ForEach(dtCustomers.AsEnumerable(), row =>
    {
        SendEmail(row["Email"].ToString(), subject, string.Format(body, row["Name"]));
    });     
}

حال میتونید برنامه رو اجرا کنید

فایل های ضمیمه