[导入]ASP.net页面发送邮件小结

http://blog.joycode.com/dotey/archive/2005/01/15/43113.aspx Asp.Net Forums之邮件发送

找到了宝玉的一篇文章,解决了用MailMessage发送邮件的问题。

然而用JMail.net也何尝不是件好事。这里我再给出用三种方法发送邮件的代码:

using System;
using System.Data;
using Dimac.JMail;

namespace Webb.WAVE.Controls
{
 /// <summary>
 /// Summary description for Webb.
 /// </summary>
 public enum MailType
 {
  JMailCom  = 0,
  JMailDotNet  = 1,
  EMailMessage = 2
 }

 public class WaveEMailManager:IDisposable
 {  

  #region Fields
        private IEMail m_email;
  private MailType m_mailType;
  private IOleDBManager m_dbManager;
  #endregion

  #region Properties
  public IEMail EMail
  {
   get{return this.m_email;}
  }
  public MailType EMailType
  {
   get{return this.m_mailType;}
  }
  #endregion

  /// <summary>
  ///
  /// </summary>
  public WaveEMailManager()
  {
  }
  public WaveEMailManager(MailType i_MailType)
  {
   this.m_mailType = i_MailType;
   if(i_MailType==MailType.JMailCom)
   {
    this.m_email = new JMailCOM(true) as IEMail;
   }
   else if(i_MailType==MailType.JMailDotNet)
   {
    this.m_email = new JMailDotNet(true) as IEMail;
   }
   else if(i_MailType==MailType.EMailMessage)
   {
    this.m_email = new EMailMessage(true) as IEMail;
   }
  }

  public void DeleteEMail(long i_mailID)
  {
   this.m_dbManager   = new OleDBManager(true) as IOleDBManager;
   this.m_dbManager.Command = new System.Data.OleDb.OleDbCommand();
   this.m_dbManager.Command.CommandText = SQLCommandText.T_MailMsg.t_mailMsg_DelMail;
   this.m_dbManager.Command.Parameters.Add("log_mailID",i_mailID);
   this.m_dbManager.ExecuteNonQuery();  
   this.m_dbManager.Dispose();
  }

  public void GetAllEmail(DataTable i_table)
  {
   this.m_dbManager   = new OleDBManager(true) as IOleDBManager;
   this.m_dbManager.Command = new System.Data.OleDb.OleDbCommand();
   this.m_dbManager.Command.CommandText = SQLCommandText.T_MailMsg.t_mailMsg_SelectAllMail;
   this.m_dbManager.FillDataTable(i_table);
   this.m_dbManager.Dispose();
  }

  public void GetTopEmail(DataTable i_table,int i_sentTimes)
  {
   this.m_dbManager   = new OleDBManager(true) as IOleDBManager;
   this.m_dbManager.Command = new System.Data.OleDb.OleDbCommand();
   this.m_dbManager.Command.CommandText = SQLCommandText.T_MailMsg.t_mailMsg_SelectTop10Mail;
   this.m_dbManager.Command.Parameters.Add("@int_sendTimes",i_sentTimes);
   this.m_dbManager.FillDataTable(i_table);
   this.m_dbManager.Dispose();
  }
  
  public void AddEMailToDB(string i_from,string i_to,string i_subject, string i_body)
  {
   this.m_dbManager   = new OleDBManager(true) as IOleDBManager;
   this.m_dbManager.Command = new System.Data.OleDb.OleDbCommand();
   this.m_dbManager.Command.CommandText = SQLCommandText.T_MailMsg.t_mailMsg_AddNewMail;
   this.m_dbManager.Command.Parameters.Add("@str_from",i_from);
   this.m_dbManager.Command.Parameters.Add("@str_to",i_to);
   this.m_dbManager.Command.Parameters.Add("@str_subject",i_subject);
   this.m_dbManager.Command.Parameters.Add("@str_body",i_body);
   this.m_dbManager.ExecuteNonQuery();
   this.m_dbManager.Dispose();
  }

  public void DeleteAllSendMail(int i_send)
  {
   this.m_dbManager   = new OleDBManager(true) as IOleDBManager;
   this.m_dbManager.Command = new System.Data.OleDb.OleDbCommand();
   this.m_dbManager.Command.CommandText = SQLCommandText.T_MailMsg.t_mailMsg_DelMail;
   this.m_dbManager.Command.Parameters.Add("@i_send",i_send);
   this.m_dbManager.ExecuteNonQuery();
   this.m_dbManager.Dispose();
  }

  public void SendEMailByID(long i_mailID)
  {
   DataTable m_table   = new DataTable();
   this.m_dbManager   = new OleDBManager(true) as IOleDBManager;
   this.m_dbManager.Command = new System.Data.OleDb.OleDbCommand();
   this.m_dbManager.Command.CommandText = SQLCommandText.T_MailMsg.t_mailMsg_SelectMail;
   this.m_dbManager.Command.Parameters.Add("@log_mailID",i_mailID);
   this.m_dbManager.FillDataTable(m_table);
   this.m_dbManager.Dispose();
   foreach(DataRow m_row in m_table.Rows)
   {
    if(this.m_mailType==MailType.JMailCom)
    {
     this.m_email = new JMailCOM(true) as IEMail;
    }
    else if(this.m_mailType==MailType.JMailDotNet)
    {
     this.m_email = new JMailDotNet(true) as IEMail;
    }
    this.EMail.AddToAddress(m_row["m_to"].ToString());
    this.EMail.Subject  = m_row["m_subject"].ToString();
    this.EMail.Body   = m_row["m_body"].ToString();
    this.EMail.SendEMail();
    m_row["m_send"]   = Convert.ToInt32(m_row[ "m_send"])+1;
   }
   this.m_dbManager   = new OleDBManager(true) as IOleDBManager;
   this.m_dbManager.Command = new System.Data.OleDb.OleDbCommand();
   this.m_dbManager.Command.CommandText = SQLCommandText.T_MailMsg.t_mailMsg_SelectAllMail;
   this.m_dbManager.UpdateDataTable(m_table);
   this.m_dbManager.Dispose();
  }

  public void SendEMailsInDB(int i_sentTimes)
  {
   DataTable m_table   = new DataTable();
   this.GetTopEmail(m_table,i_sentTimes);
   this.EMail.Dispose();
   foreach(DataRow m_row in m_table.Rows)
   {
    if(this.m_mailType==MailType.JMailCom)
    {
     this.m_email = new JMailCOM(true) as IEMail;
    }
    else if(this.m_mailType==MailType.JMailDotNet)
    {
     this.m_email = new JMailDotNet(true) as IEMail;
    }
    this.EMail.AddToAddress(m_row["m_to"].ToString());
    this.EMail.Subject  = m_row["m_subject"].ToString();
    this.EMail.Body   = m_row["m_body"].ToString();
    this.EMail.SendEMail();
    m_row["m_send"]   = Convert.ToInt32(m_row[ "m_send"])+1;
   }
   //Update data
   this.m_dbManager   = new OleDBManager(true) as IOleDBManager;
   this.m_dbManager.Command = new System.Data.OleDb.OleDbCommand();
   this.m_dbManager.Command.CommandText = SQLCommandText.T_MailMsg.t_mailMsg_SelectAllMail;
   this.m_dbManager.UpdateDataTable(m_table);
   this.m_dbManager.Dispose();
  }

  #region IDisposable Members

  public void Dispose()
  {
   // TODO:  Add WaveEMailManager.Dispose implementation
   if(this.m_email!=null)this.m_email.Dispose();
   if(this.m_dbManager!=null)this.m_dbManager.Dispose();
  }
  #endregion

 }
}
//////////////////////////////////////

前面的接口仍然有效:http://computer.mblogger.cn/wucountry/posts/49425.aspx

再加一个类的实现:

using System;
using System.Web.Mail;
using System.Data;

namespace Webb.WAVE.Controls
{
 /// <summary>
 /// Summary description for Webb.
 /// </summary>
 public class EMailMessage:IEMail
 {
  #region Fields
  private string m_server;
  private string m_loginName;
  private string m_password;
  private string m_from;
  private MailMessage m_message;
  #endregion

  public EMailMessage()
  {
   m_message = new MailMessage();
  }

  public EMailMessage(bool i_systemServer)
  {
   m_message = new MailMessage();
   DataTable m_table  = new DataTable();
   WaveSystem.LoadSystemData(m_table);
   foreach(DataRow m_row in m_table.Rows)
   {
    if(m_row[1].ToString()=="SystemEmailServerPassword")
    {
     this.m_password  = m_row[2].ToString();
    }
    else if(m_row[1].ToString()=="SystemEmailServerLoginName")
    {
     this.m_loginName = m_row[2].ToString();
    }
    else if(m_row[1].ToString()=="SystemEmailServer")
    {
     this.m_server  = m_row[2].ToString();
    }
   }
   m_table.Dispose();
  }

  #region IEMail Members

  public string ServerName
  {
   get{return this.m_server;}
   set{this.m_server = value;}
  }
  public string ServerLoginName
  {
   get{return this.m_loginName;}
   set{this.m_loginName = value;}
  }
  public string ServerLoginPassword
  {
   set{this.m_password = value;}
  }
  public string Subject
  {
   get{return this.m_message.Subject;}
   set{this.m_message.Subject = value;}
  }
  public string Body
  {
   get{return this.m_message.Body;}
   set{this.m_message.Body = value;}
  }
  public string HTMLBody
  {
   get{return this.m_message.Body;}
   set
   {
    this.m_message.BodyFormat = MailFormat.Html;
    this.m_message.Body = value;
   }
  }
  public string From
  {
   get{return this.m_from;}
   set{this.m_from = value;}
  }

  public void AddToAddress(string i_address)
  {
   this.m_message.To = i_address; 
  }

  public void AddCcAddress(string i_address)
  {
   this.m_message.Cc +=  i_address+";";
  }

  public void SendEMail()
  {
   this.m_message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1" );
   //basic authentication
   this.m_message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername",this.m_loginName);
   // 设置smtp服务器登录账号(如您163.com的信箱账号)
   this.m_message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", this.m_password);
   this.m_message.From     = this.m_loginName;
   SmtpMail.SmtpServer = this.m_server;
   try
   {
    SmtpMail.Send(this.m_message);
   }
   catch(Exception ex)
   {
    WaveHelper.TraceMsg(ex.Message);
    throw ex;
   }
  }

  #endregion

  #region IDisposable Members
  public void Dispose()
  {
  }
  #endregion
 }
}

时间关系,今天就这些。


文章来源:http://computer.mblogger.cn/wucountry/posts/49445.aspx
================================
  /\_/\                        
 (=^o^=)  Wu.Country@侠缘      
 (~)@(~)  一辈子,用心做一件事!
--------------------------------
  学而不思则罔,思而不学则怠!  
================================
原文地址:https://www.cnblogs.com/WuCountry/p/305639.html