最近需要做个邮件提醒功能,使用公司的邮件服务器发送没问题,但我试着用 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增强版