邮件发送类

 

/* -------------------------------------------------------
 * Copyright (C) 2006 江苏微软技术中心
 * 版权所有。
 * 
 * 文件名:SMTP.cs
 * 文件功能描述:邮件发送类,包含同步和异步发送2种方式,
 * 其中每种发送方式都可以选择邮件非必选项(如抄送,附件等)。
 * 
 * 创建标识:韩进宾 20070424
 * 
 * 修改标识:
 * 修改描述:
 * 
 * --------------------------------------------------------
*/
using  System;
using  System.Collections.Generic;
using  System.Text;

using  System.Net.Mail;
using  System.Net.Configuration;
using  System.Configuration;
using  System.Net;

using  System.Web.Configuration;

namespace  TVasahiBLL
{
    
public   class  SMTP
    {
        
#region  邮件发送类

        
#region  Fields

        
private   string  _mailFrom;
        
private   string  _displayName;
        
private  SmtpClient smtpMail;

        
#endregion

        
#region  Properties

        
// 出发地油箱设置
         public   string  MailFrom
        {
            
get
            {
                
return  _mailFrom;
            }
            
set
            {
                _mailFrom 
=  value;
            }
        }

        
// 出发地邮件显示的名字
         public   string  DisplayName
        {
            
get
            {
                
return  _displayName;
            }
            
set
            {
                _displayName 
=  value;
            }
        }

        
#endregion

        
#region  Constructors

        
public  SMTP()
        {
            
// app.config中读取smtp服务器信息
            
// 如果此处出现命名空间“System.Configuration”中不存在类型或命名空间名称“Configuration”(是缺少程序集引用吗?)错误请添加System.Configuration即可
            Configuration config  =  WebConfigurationManager.OpenWebConfiguration( " ~/ " );
            MailSettingsSectionGroup mailSettings 
=  (MailSettingsSectionGroup)config.GetSectionGroup( " system.net/mailSettings " );
            
string  mailFrom  =  mailSettings.Smtp.From;
            
string  smtpServer  =  mailSettings.Smtp.Network.Host;
            
int  smtpPort  =  mailSettings.Smtp.Network.Port;
            
string  smtpUsername  =  mailSettings.Smtp.Network.UserName;
            
string  password  =  mailSettings.Smtp.Network.Password;

            
// 此处用户让用户手动输入smtp帐号 
            
// string mailFrom = "";
            
// string smtpServer = "emailcarrier.vicp.net";
            
// int smtpPort = 25;
            
// string smtpUsername = "";
            
// string password = "";

            smtpMail 
=   new  SmtpClient(smtpServer, smtpPort);
            smtpMail.Credentials 
=   new  NetworkCredential(smtpUsername, password);
            
this ._mailFrom  =  mailFrom;
            
this ._displayName  =  smtpUsername;
        }

        
public  SMTP( string  smtpServer,  string  userName,  string  password)
            : 
this ( null , smtpServer, userName, password)
        {

        }

        
///   <summary>
        
///  邮件发送类
        
///   </summary>
        
///   <param name="mailFrom"> 发信人 </param>
        
///   <param name="smtpServer"> SMTP服务器 </param>
        
///   <param name="userName"> 用户名 </param>
        
///   <param name="password"> 密码 </param>
         public  SMTP( string  mailFrom,  string  smtpServer,  string  userName,  string  password)
            : 
this (mailFrom, mailFrom, smtpServer, userName, password)
        {

        }

        
///   <summary>
        
///  邮件发送类
        
///   </summary>
        
///   <param name="maiFrom"> 发信人 </param>
        
///   <param name="displayName"> 显示名称 </param>
        
///   <param name="smtpServer"> SMTP服务器 </param>
        
///   <param name="smtpPort"> 端口 </param>
        
///   <param name="userName"> 用户名 </param>
        
///   <param name="password"> 密码 </param>
         public  SMTP( string  maiFrom,  string  displayName,  string  smtpServer,  string  userName,  string  password)
            : 
this (maiFrom, displayName, smtpServer,  25 , userName, password,  false )
        {
        }

        
public  SMTP( string  mailFrom,  string  displayName,  string  smtpServer,  int  smtpPort,  string  userName,  string  password,  bool  smtpSsl)
        {
            
this ._mailFrom  =  mailFrom;
            
this ._displayName  =  displayName;
            smtpMail 
=   new  SmtpClient(smtpServer, smtpPort);
            smtpMail.Credentials 
=   new  NetworkCredential(userName, password);
            smtpMail.EnableSsl 
=  smtpSsl;
        }

        
#endregion

        
#region  Methods

        
#region  Public
        
///   <summary>
        
///  邮件类
        
///   </summary>
        
///   <param name="mailTo"> 收信人 </param>
        
///   <param name="mailSubject"> 题目 </param>
        
///   <param name="mailBody"> 内容 </param>
        
///   <param name="priority"> 邮件优先权 </param>
        
///   <param name="isBodyHtml"> 是否以html格式发送 </param>
        
///   <returns></returns>
         public  Boolean Send( string  mailTo,  string  mailSubject,  string  mailBody, MailPriority priority,  bool  isBodyHtml)
        {
            
string [] mailTos  =   new   string [] { mailTo };
            
string [] attachments  =   null ;
            System.Text.Encoding bodyEncoding 
=  System.Text.Encoding.Default;
            
return  Send(mailTos,  null null , mailSubject, mailBody, attachments, priority, isBodyHtml, bodyEncoding);
        }

        
public  Boolean Send( string  mailTo,  string  mailSubject,  string  mailBody,  string [] attachments, MailPriority priority,  bool  isBodyHtml, System.Text.Encoding bodyEncoding)
        {
            
string [] mailTos  =   new   string [] { mailTo };
            
return  Send(mailTos,  null null , mailSubject, mailBody, attachments, priority, isBodyHtml, bodyEncoding);
        }

        
public  Boolean Send( string [] mailTos,  string [] mailCcs,  string [] mailBccs,  string  mailSubject,  string  mailBody,  string [] attachments,
            MailPriority priority, 
bool  isBodyHtml, System.Text.Encoding bodyEncoding)
        {
            
return  Send( this ._mailFrom,  this ._displayName, mailTos, mailCcs, mailBccs, mailSubject, mailBody, attachments, priority, isBodyHtml, bodyEncoding);
        }

        
///   <summary> 同步发送邮件
        
///  同步发送邮件
        
///   </summary>
        
///   <param name="mailFrom"> 发件地址 </param>
        
///   <param name="displayName"> 显示名字 </param>
        
///   <param name="mailTos"> 对方邮件地址 </param>
        
///   <param name="mailCcs"> 抄送 </param>
        
///   <param name="mailBccs"> 秘件抄送 </param>
        
///   <param name="mailSubject"> 主题 </param>
        
///   <param name="mailBody"> 内容 </param>
        
///   <param name="attachments"> 附件  </param>
        
///   <param name="priority"> 电子邮件的优先权 </param>
        
///   <param name="isBodyHtml"> 是否以html格式发送 </param>
        
///   <param name="bodyEncoding"> 字元编码 </param>
        
///   <returns></returns>
         public  Boolean Send( string  mailFrom,  string  displayName,  string [] mailTos,  string [] mailCcs,  string [] mailBccs,  string  mailSubject,  string  mailBody,  string [] attachments, MailPriority priority,  bool  isBodyHtml, System.Text.Encoding bodyEncoding)
        {
            
return  SendMail( false null , mailFrom, displayName, mailTos, mailCcs, mailBccs, mailSubject, mailBody, attachments, priority, isBodyHtml, bodyEncoding);
        }

        
public   void  SendAsync( object  userState,  string  mailTo,  string  mailSubject,  string  mailBody, MailPriority priority,  bool  isBodyHtml)
        {
            
string [] mailTos  =   new   string [] { mailTo };
            
string [] attachments  =   null ;
            System.Text.Encoding bodyEncoding 
=  System.Text.Encoding.Default;
            SendAsync(userState, mailTos, 
null null , mailSubject, mailBody, attachments, priority, isBodyHtml, bodyEncoding);
        }

        
public   void  SendAsync( object  userState,  string  mailTo,  string  mailSubject,  string  mailBody,  string [] attachments, MailPriority priority,  bool  isBodyHtml, System.Text.Encoding bodyEncoding)
        {
            
string [] mailTos  =   new   string [] { mailTo };
            SendAsync(userState, 
this ._mailFrom,  this ._displayName, mailTos,  null null , mailSubject, mailBody, attachments, priority, isBodyHtml, bodyEncoding);
        }

        
public   void  SendAsync( object  userState,  string  mailFrom,  string  displayName,  string [] mailTos,  string [] mailCcs,  string [] mailBccs,  string  mailSubject,  string  mailBody,  string [] attachments, MailPriority priority,  bool  isBodyHtml, System.Text.Encoding bodyEncoding)
        {
            SendMail(
true , userState, MailFrom, displayName, mailTos, mailCcs, mailBccs, mailSubject, mailBody, attachments, priority, isBodyHtml, bodyEncoding);
        }

        
///   <summary> 异步发送邮件
        
///  异步发送邮件
        
///   </summary>
        
///   <param name="userState"></param>
        
///   <param name="mailTos"> 对方邮件地址 </param>
        
///   <param name="mailCcs"> 抄送 </param>
        
///   <param name="mailBccs"> 秘件抄送 </param>
        
///   <param name="mailSubject"> 主题 </param>
        
///   <param name="mailBody"> 内容 </param>
        
///   <param name="attachments"> 附件  </param>
        
///   <param name="priority"> 电子邮件的优先权 </param>
        
///   <param name="isBodyHtml"> 是否以html格式发送 </param>
        
///   <param name="bodyEncoding"> 字元编码 </param>
         public   void  SendAsync( object  userState,  string [] mailTos,  string [] mailCcs,  string [] mailBccs,  string  mailSubject,  string  mailBody,  string [] attachments, MailPriority priority,  bool  isBodyHtml, System.Text.Encoding bodyEncoding)
        {
            SendMail(
true , userState,  null null , mailTos, mailCcs, mailBccs, mailSubject, mailBody, attachments, priority, isBodyHtml, bodyEncoding);
        }

        
///   <summary>
        
///  发送邮件
        
///   </summary>
        
///   <param name="isAsync"> 是否是同步发送 </param>
        
///   <param name="userState"> 异步任务的唯一标识符,当 isAsync 为 True 时必须设置该属性, 当 isAsync 为 False 时可设置为 null </param>
        
///   <param name="mailFrom"> 发件地址 </param>
        
///   <param name="displayName"> 显示名字 </param>
        
///   <param name="mailTos"> 对方邮件地址 </param>
        
///   <param name="mailCcs"> 抄送 </param>
        
///   <param name="mailBccs"> 秘件抄送 </param>
        
///   <param name="mailSubject"> 主题 </param>
        
///   <param name="mailBody"> 内容 </param>
        
///   <param name="attachments"> 附件  </param>
        
///   <param name="priority"> 电子邮件的优先权 </param>
        
///   <param name="isBodyHtml"> 是否以html格式发送 </param>
        
///   <param name="bodyEncoding"> 字元编码 </param>
        
///   <returns></returns>
         private  Boolean SendMail( bool  isAsync,  object  userState,  string  mailFrom,  string  displayName,  string [] mailTos,  string [] mailCcs,  string [] mailBccs,  string  mailSubject,
            
string  mailBody,  string [] attachments, MailPriority priority,  bool  isBodyHtml, System.Text.Encoding bodyEncoding)
        {
            
bool  mailSent  =   false ;

            
if  ( string .IsNullOrEmpty(mailFrom))
            {
                mailFrom 
=   this ._mailFrom;
            }
            
if  ( string .IsNullOrEmpty(displayName))
            {
                displayName 
=   this ._displayName;
            }

            MailMessage Email 
=  GetMailMessage(MailFrom, displayName, mailTos, mailCcs, mailBccs, mailSubject, mailBody, attachments, priority, isBodyHtml, bodyEncoding);
            smtpMail.SendCompleted 
+=   new  SendCompletedEventHandler(SendCompletedCallback);

            
try
            {
                
if  ( ! isAsync)
                {
                    smtpMail.Send(Email);
                    mailSent 
=   true ;
                }
                
else
                {
                    userState 
=  (userState  ==   null ?  Guid.NewGuid() : userState;
                    smtpMail.SendAsync(Email, userState);
                }
            }
            
catch  (SmtpFailedRecipientException ex)
            {
                
throw  ex;
                mailSent 
=   false ;
            }
            
catch  (Exception ex)
            {
                
throw  ex;
                mailSent 
=   false ;
            }

            
return  mailSent;
        }

        
///   <summary>
        
///  邮件信息设置
        
///   </summary>
        
///   <param name="mailFrom"> 发件地址 </param>
        
///   <param name="displayName"> 显示名字 </param>
        
///   <param name="mailTos"> 对方邮件地址 </param>
        
///   <param name="mailCcs"> 抄送 </param>
        
///   <param name="mailBccs"> 秘件抄送 </param>
        
///   <param name="mailSubject"> 主题 </param>
        
///   <param name="mailBody"> 内容 </param>
        
///   <param name="attachments"> 附件  </param>
        
///   <param name="priority"> 电子邮件的优先权 </param>
        
///   <param name="isBodyHtml"> 是否以html格式发送 </param>
        
///   <param name="bodyEncoding"> 字元编码 </param>
        
///   <returns></returns>
         private  MailMessage GetMailMessage( string  mailFrom,  string  displayName,  string [] mailTos,  string [] mailCcs,  string [] mailBccs,  string  mailSubject,  string  mailBody,  string [] attachments, MailPriority priority,  bool  isBodyHtml, System.Text.Encoding bodyEncoding)
        {
            MailMessage emailMessage 
=   new  MailMessage();

            
if  ( string .IsNullOrEmpty(mailFrom)) // 此处还需验证
            {
                mailFrom 
=   this ._mailFrom;
            }
            
if  ( string .IsNullOrEmpty(displayName))
            {
                displayName 
=   this ._displayName;
            }

            MailAddress mailFromObject 
=   new  MailAddress(mailFrom, displayName);

            emailMessage.From 
=  mailFromObject;

            
// 判断邮件数组是否为空,不为空则加入列表
             if  (mailTos  !=   null )
            {
                
foreach  ( string  mailto  in  mailTos)
                {
                    
if  ( ! string .IsNullOrEmpty(mailto))
                    {
                        emailMessage.To.Add(mailto);
                    }
                }
            }

            
// 判断抄送
             if  (mailCcs  !=   null )
            {
                
foreach  ( string  cc  in  mailCcs)
                {
                    
if  ( ! string .IsNullOrEmpty(cc))
                    {
                        emailMessage.CC.Add(cc);
                    }
                }
            }

            
// 秘件抄送
             if  (mailBccs  !=   null )
            {
                
foreach  ( string  bcc  in  mailBccs)
                {
                    
if  ( ! string .IsNullOrEmpty(bcc))
                    {
                        emailMessage.Bcc.Add(bcc);
                    }
                }
            }

            
// 添加附件
             if  (attachments  !=   null )
            {
                
foreach  ( string  file  in  attachments)
                {
                    
if  ( ! string .IsNullOrEmpty(file))
                    {
                        Attachment att 
=   new  Attachment(file);
                        emailMessage.Attachments.Add(att);
                    }
                }
            }

            emailMessage.Subject 
=  mailSubject;
            emailMessage.Body 
=  mailBody;
            emailMessage.Priority 
=  priority;
            emailMessage.IsBodyHtml 
=  isBodyHtml;
            emailMessage.BodyEncoding 
=  bodyEncoding;

            
return  emailMessage;
        }

        
private   void  SendCompletedCallback( object  sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            
bool  mailSent  =   false ;

            
// 获得是否异步发送的表识
            String token  =  e.UserState.ToString();

            
if  (e.Cancelled)
            {
                mailSent 
=   false ;
            }
            
if  (e.Error  !=   null )
            {
                mailSent 
=   false ;
            }
            
else
            {
                mailSent 
=   false ;
            }

            mailSent 
=   true ;
        }

        
#endregion

        
#endregion

        
#endregion
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值