C# 发送纯文本的电子邮件(e-mail)

it2022-05-05  82

最近需要做个邮件提醒功能,使用公司的邮件服务器发送没问题,但我试着用 163 的邮箱去发,结果总是失败!

有待解决的有两个问题:一是 使用 其它服务器发送邮件,如 163的。二是 发送HTML 内容和附件

下面是使用异步发送和非异步的方法,这是部分代码说明发送邮件比较简单。横线下面是封的全部代码

    /// <summary>     /// 发送邮件     /// </summary>     public bool Send()     {       MailMessage message = null;       try       {         message = new MailMessage(this.From, this.To, this.Subject, this.Body);         message.IsBodyHtml = true;         m_client.Timeout = this.Timeout;         message.Priority = System.Net.Mail.MailPriority.High;         m_client.Credentials = CredentialCache.DefaultNetworkCredentials;         m_client.Send(message);         return true;       }       catch (Exception ex)       {         Grass.Log.ExceptionsStack.RegisterError(ex);         return false;       }       finally       {         if (message != null)           message.Dispose();       }     }     #region 异步发送     /// <summary>     /// 异步发送邮件     /// </summary>     public void SendAsync()     {       MailMessage message = null;       try       {         message = new MailMessage(this.From, this.To, this.Subject, this.Body);         message.IsBodyHtml = true;         m_client.Timeout = this.Timeout;         message.Priority = System.Net.Mail.MailPriority.High;         m_client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);         m_client.Credentials = CredentialCache.DefaultNetworkCredentials;         m_client.SendAsync(message, "send e-mail");       }       catch (Exception ex)       {         Grass.Log.ExceptionsStack.RegisterError(ex);         throw;       }       finally       {         //if (message != null)         //  message.Dispose();       }     }     /// <summary>     /// 异步邮件发送完成事件     /// </summary>     public void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)     {       if (this.OnSendComplete != null)       {         // Get the unique identifier for this asynchronous operation.         String token = (string)e.UserState;

        if (e.Cancelled)         {           OnSendComplete(false, token, string.Format("[{0}] 发送取消.", token));         }         else if (e.Error != null)         {           OnSendComplete(false, token, string.Format("[{0}] 发送错误:{1}", token, e.Error.Message));         }         else         {           OnSendComplete(false, token, string.Format("[{0}] 发送成功.", token));         }       }     }

    #endregion

--------------------------------------------------------------------------------------------------------------

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Mail; using System.Net; using System.ComponentModel;

namespace Grass.Framework.Mail {   /// <summary>   /// 使用 SMTP(Simple Mail Transfer Protocol) 邮件协议发送邮件   /// </summary>   public class SmtpHelper:IMailHelper   {     /// <summary>     /// 使用 SMTP 协议发送 E-mail     /// </summary>     /// <param name="host">发件服务器</param>     public SmtpHelper(string host)     {       this.Host = host;       m_client = new SmtpClient(host);     }     /// <summary>     /// 使用 SMTP 协议发送 E-mail     /// </summary>     /// <param name="host">发件服务器(IP)</param>     /// <param name="prot">发件服务器端口号</param>     public SmtpHelper(string host, int prot)     {       this.Host = host;       this.Prot = prot;       m_client = new SmtpClient(host, prot);     }     private int m_timeout = 1000;     private SmtpClient m_client = null;     /// <summary>     /// 发件服务器     /// </summary>     public string Host { set; get; }     /// <summary>     /// 发件服务器端口号     /// </summary>     public int Prot { set; get; }        /// <summary>     /// 发件超时时间     /// </summary>     public int Timeout     {       set { m_timeout = value; }       get { return m_timeout; }     }     /// <summary>     /// 发送到,如果多个邮箱使用 半角逗号分隔开     /// </summary>     public string To { set; get; }     /// <summary>     /// 发送者     /// </summary>     public string From { set; get; }     /// <summary>     /// 主题     /// </summary>     public string Subject { set; get; }     /// <summary>     /// 发送内容     /// </summary>     public string Body { set; get; }

    /// <summary>     /// 邮件发送成功后触发     /// </summary>     public event SendCompleteHander OnSendComplete;

    /// <summary>     /// 发送邮件     /// </summary>     public bool Send()     {       MailMessage message = null;       try       {         message = new MailMessage(this.From, this.To, this.Subject, this.Body);         message.IsBodyHtml = true;         m_client.Timeout = this.Timeout;         message.Priority = System.Net.Mail.MailPriority.High;         m_client.Credentials = CredentialCache.DefaultNetworkCredentials;         m_client.Send(message);         return true;       }       catch (Exception ex)       {         Grass.Log.ExceptionsStack.RegisterError(ex);         return false;       }       finally       {         if (message != null)           message.Dispose();       }     }     #region 异步发送     /// <summary>     /// 异步发送邮件     /// </summary>     public void SendAsync()     {       MailMessage message = null;       try       {         message = new MailMessage(this.From, this.To, this.Subject, this.Body);         message.IsBodyHtml = true;         m_client.Timeout = this.Timeout;         message.Priority = System.Net.Mail.MailPriority.High;         m_client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);         m_client.Credentials = CredentialCache.DefaultNetworkCredentials;         m_client.SendAsync(message, "send e-mail");       }       catch (Exception ex)       {         Grass.Log.ExceptionsStack.RegisterError(ex);         throw;       }       finally       {         //if (message != null)         //  message.Dispose();       }     }     /// <summary>     /// 异步邮件发送完成事件     /// </summary>     public void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)     {       if (this.OnSendComplete != null)       {         // Get the unique identifier for this asynchronous operation.         String token = (string)e.UserState;

        if (e.Cancelled)         {           OnSendComplete(false, token, string.Format("[{0}] 发送取消.", token));         }         else if (e.Error != null)         {           OnSendComplete(false, token, string.Format("[{0}] 发送错误:{1}", token, e.Error.Message));         }         else         {           OnSendComplete(false, token, string.Format("[{0}] 发送成功.", token));         }       }     }

    #endregion

  } }

转载请保留:http://write.blog.csdn.net/postedit/7569808

 

转载于:https://www.cnblogs.com/xxj-jing/archive/2012/05/15/2890066.html

相关资源:DirectX修复工具V4.0增强版

最新回复(0)