最近用SmtpClient做邮件发送的功能,已经做到了发送的类,现在遇到一个这样的问题,如何获取发送成功后的信息?比如我发送后是否被视为垃圾邮件,还有发送过程中有没有错误,比如帐号不正确。或者帐号不存在这种情况,求高手帮忙解答。

解决方案 »

  1.   

    其实你就是想判断邮件的发送状态
    public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {            }
            }
            public void SendEmail()
            {
                string from = "[email protected]";   //发送方邮箱
                MailMessage newEmail = new MailMessage();            #region 发送方邮件
                newEmail.From = new MailAddress(from, from);
                #endregion            #region 发送对象,可群发
                newEmail.To.Add(new MailAddress("[email protected]"));  //接收方邮箱一
                //newEmail.To.Add(new MailAddress("[email protected]"));  //接收方邮箱二
                //newEmail.To.Add(new MailAddress("[email protected]"));
                //newEmail.To.Add(new MailAddress("[email protected]"));
                //newEmail.To.Add(new MailAddress("[email protected]"));
                //newEmail.To.Add(new MailAddress("[email protected] "));
                //newEmail.To.Add(new MailAddress("[email protected]"));
                //newEmail.To.Add(new MailAddress("[email protected]"));
                #endregion            #region Subject
                newEmail.Subject = TextBox1.Text;  //标题
                #endregion            #region Body
                string strBody = "<p><b>邮件群发测试,邮件测试内容</b></p>"; //html格式,也可以是普通文本格式 
                newEmail.Body = strBody;  //内容
                #endregion            #region 上传附件
                // Attachment MsgAttach = new Attachment(this.FileUpload1.PostedFile.FileName);//可通过一个FileUpload地址获取附件地址
                //newEmail.Attachments.Add(MsgAttach);
                #endregion            #region Deployment
                newEmail.IsBodyHtml = true;                //是否支持html
                newEmail.Priority = MailPriority.High;  //优先级
                #endregion            //发送方服务器信息
                SmtpClient smtpClient = new SmtpClient();
                smtpClient.UseDefaultCredentials = true;
                smtpClient.Credentials = new System.Net.NetworkCredential("[email protected]", "zhoukeqiangcxh");
                smtpClient.Host = "smtp.163.com"; //主机            //smtpClient.Send(newEmail);   //同步发送,程序将被阻塞            #region 异步发送, 会进入回调函数SendCompletedCallback,来判断发送是否成功
                smtpClient.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);//回调函数
                string userState = "测试";
                smtpClient.SendAsync(newEmail, userState);
                #endregion        }        private static void SendCompletedCallback(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
            {
                if (e.Cancelled)  //邮件发送被取消
                {
                    Console.WriteLine("发送被取消!");
                }
                if (e.Error != null)   //邮件发送失败
                {
                    Console.WriteLine("发送失败!");
                }
                else   //发送成功
                {
                    Console.WriteLine("发送成功!");
                }
            }
            protected void Button1_Click(object sender, EventArgs e)
            {
                SendEmail();
            }
        }
      

  2.   

    发送成功,就是SmtpClient发送出去了,但是并不保证对方能收到。你把消息发送给一个服务器去,服务器接受了消息并且开始排队等候处理消息,这就算发送成功。但是可能过了几分钟,服务器才发觉下一个站的目标服务器不存在(联系不上),或者目标用户在邮件用户列表中根本没有等等,这时候服务器会尝试跟发送这个消息的服务器反过来通信。但是SmtpClient根本没有实现完整的邮件服务协议,它只是实现了把消息发送给你要访问的Smtp服务器的协议(而此时smtp服务器只是把消息放到自己的磁盘上等待调用,还根本没有跟目标服务器联系呢)。
      

  3.   

    你所说的那些要求,根本做不到。就算能做到,也不是smtp协议的事情,而是开发一个完整的邮件服务器系统的事情。