日期:2014-05-18  浏览次数:20417 次

请问如何实现异步发送邮件?
在Web下开发,我想实现异步发送邮件的功能,比如说,在客户成功提交了一个订单时,程序首先保存订单,然后把这些数据发送邮件给管理员和客户,并向数据库插入发送邮件的记录,客户的数量可能是一个也可能很多,然后报告说订单提交成功。如果不用异步方式,那么当给很多客户发送邮件的时候就很耗时,用户就要等很久才能看到成功提示,因此我想,在保存了订单数据后,就用另一个线程来发送邮件,从而当前线程立即就可以向用户反馈订单提交成功的提示信息。  

发邮件和插入发送记录的过程是否可以用异步实现?BackgroundWorker 是否可以用于web开发?  
不知应怎样实现?希望有点示例代码,谢谢!

------解决方案--------------------
用委托事件试试..
------解决方案--------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Net;
using System.Net.Mail;
using System.ComponentModel;
namespace SendLiWu
{
public class GmailSmtpEmail
{
/// <summary>
/// 返回为值表示发送成功
/// </summary>
private bool mailSent = false;
/// <summary>
/// Gmail的用户名:如: user@gmail.com
/// </summary>
private string username = "useemailsend@gmail.com";
/// <summary>
/// Gmail的密码
/// </summary>
private string password = "!123456789";
/// <summary>
/// Gmail的发送邮件服务器
/// </summary>
private string Host = "smtp.gmail.com";
/// <summary>
/// 端口号
/// </summary>
private int Port = 587;
/// <summary>
/// 发送Email要使用的编码
/// </summary>
private Encoding encoding=Encoding.GetEncoding("utf-8");
/// <summary>
/// 设置正文内容是否是包含Html的格式
/// </summary>
private bool bodyhtml=false;

/// <summary>
/// 设置电子邮件的优先级
/// </summary>
private MailPriority Priority = MailPriority.High;
/// <summary>
/// 是否使用套接字层安全加密连接
/// </summary>
private bool Ssl = true;
/// <summary>
/// 发送Email要使用的编码
/// </summary>
private string errormessage = "";
public string ErrorMessage
{
get { return errormessage; }
}
public Encoding Encoding
{
get { return encoding; }
set { encoding = value; }
}
/// <summary>
/// 设置正文内容是否是包含Html的格式
/// </summary>
public bool BodyHtml
{
get { return bodyhtml; }
set { bodyhtml = value; }
}

/// <summary>
/// 设置电子邮件的优先级
/// </summary>
public MailPriority priority
{
get { return Priority; }
set { Priority = value; }
}


/// <summary>
/// 发送单个Email
/// </summary>
/// <param name="Subject">主题</param>
/// <param name="Body">内容</param>
/// <param name="displayname">显示名</param>
/// <param name="addressee">收件人的Email地址</param>
public void SendMail(string Subject, string Body,string displayname, string addressee)
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(addressee);
msg.From = new MailAddress(username, displayname,encoding);
msg.Subject =Subject;
msg.SubjectEncoding = encoding;
msg.Body =Body;
msg.BodyEncoding =encoding;
msg.IsBodyHtml =bodyhtml;
msg.Priority = Priority;