Reference:http://www.dotblogs.com.tw/phoenix7765/archive/2008/11/14/5987.aspx
using System;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Web.UI;
namespace WebApplication
{
public partial class PhoenixMail : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSend_Click(object sender, ImageClickEventArgs e)
{
string[] emaillist = txtTo.Text.Split(','); //將郵件字串分離
AsyncSendMail delt = new AsyncSendMail(SendMailAsync); //非同步執行
AsyncCallback acb = new AsyncCallback(SendMailCallBack); //非同步執行
IAsyncResult isr = delt.BeginInvoke(txtFrom.Text, emaillist, acb, delt); //非同步執行
ReturnLiteral.Text = "郵件已加入工作排程,完成後會寄送一封通知信給您,謝謝";
}
public string SendMailAsync(string From, string[] To) //非同步執行方法主體
{
StringBuilder sb = new StringBuilder();
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); //宣告一個計時器
sb.AppendFormat("<p>起始時間 - {0} - </p>", DateTime.Now);
sb.AppendFormat("<p>總共{0}封郵件<p>", To.Length);
int Success = 0;
int Failure = 0;
SmtpClient emailClient = new SmtpClient("YourMail.com"); //設定SMTP位址
emailClient.Credentials = new NetworkCredential("YourAccount", "YourPassword"); //設定帳號密碼
sw.Reset(); //開始計時器
sw.Start(); //開始計時器
for (int i = 0; i < To.Length; i++) //一一寄出郵件
{
try
{
MailMessage message = new MailMessage()
{
Body = txtBody.Text,
BodyEncoding = Encoding.UTF8,
From = new MailAddress(From),
IsBodyHtml = true,
Subject = txtSubject.Text,
SubjectEncoding = Encoding.UTF8
};
message.To.Add(To[i]);
emailClient.Send(message);
Success++;
message.Dispose();
}
catch
{
sb.AppendFormat("<p>寄送失敗的郵件 - {0}</p>", To[i]);
Failure++;
continue;
}
}
sw.Stop(); //計時器停止
emailClient = null;
sb.AppendFormat("<p>成功郵件數量:{0}</p><p>失敗郵件數量:{1}<p>", Success, Failure);
sb.AppendFormat("<p>結束時間 - {0} - </p>", DateTime.Now);
sb.AppendFormat("<p>總共時數 - {0}小時{1}分{2}秒{3}毫秒</p>", sw.Elapsed.Hours, sw.Elapsed.Minutes, sw.Elapsed.Seconds, sw.Elapsed.Milliseconds);
return sb.ToString(); //回傳訊息
}
public delegate string AsyncSendMail(string From, string[] To); //宣告一個非同步委派的方法(與非同步主體簽名碼相同)
public void SendMailCallBack(IAsyncResult isr) //非同步回傳訊息的方法
{
AsyncSendMail asm = (AsyncSendMail)isr.AsyncState;
string result = asm.EndInvoke(isr);
SmtpClient emailClient = new SmtpClient("YourMail.com");
emailClient.Credentials = new NetworkCredential("YourAccount", "YourPassword");
MailMessage ResultMail = new MailMessage("YourAccount@YourMail.com", "YourAccount@YourMail.com", "郵件寄送完成通知信", result);
ResultMail.IsBodyHtml = true;
emailClient.Send(ResultMail);
emailClient = null;
ResultMail.Dispose();
}
}
}
請自行修改"YourMail.com" "YourAccount" "YourPassword" 等等
以上 Phoenix 2008/11/14
留言列表