使用SmtpClient发送电子邮件

        最近做的一个项目中使用到了发送邮件功能。跟以前做过的一个项目发送邮件的方式不同。以前是将要发送邮件的相关信息插入到一个服务器的数据库表中,由数据库来检测新添加记录,进行发送邮件。即我只要向某个数据库插入记录就可以了。这次发送邮件功能是使用微软System.Net.Mail命名空间下的SmtpClient来发送。使用过程中注意引用System.Net.Mail命名空间。

      过程如下:

ExpandedBlockStart.gif smtpClient发送邮件
///   <summary>
        
///  发送邮件
        
///   </summary>
        
///   <param name="server"> smtp服务器 </param>
        
///   <param name="sender"> 发件人 </param>
        
///   <param name="recipient"> 收件人 </param>
        
///   <param name="subject"> 主题 </param>
        
///   <param name="body"> 主体内容 </param>
        
///   <param name="isBodyHtml"> 主体内容是否是HTML </param>
        
///   <param name="encoding"> 编码方式 </param>
        
///   <param name="isAuthentication"> 是否验证 </param>
        
///   <param name="files"> 附件 </param>
         public   static   void  Send( string  server,  string  sender,  string [] recipient,  string  subject,
             
string  body,  bool  isBodyHtml, Encoding encoding,  bool  isAuthentication,  params   string [] files)
        {
            
// smtp服务器
            SmtpClient smtpClient  =   new  SmtpClient(server);

            
// 邮件信息
            MailMessage message  =   new  MailMessage();
            
// 客户端用户名验证与此处发件人要相同
            message.From  =   new  MailAddress(sender);
            
// 收件人
             foreach  ( string  to  in  recipient)
            {
                message.To.Add(to);
            }
            
// 主体内容是否HTML
            message.IsBodyHtml  =  isBodyHtml;
            
// 编码方式
            message.SubjectEncoding  =  encoding;
            message.BodyEncoding 
=  encoding;
            
// 主题
            message.Subject  =  subject;
            
// 主体内容
            message.Body  =  body;
            
// 附件
            message.Attachments.Clear();
            
if  (files  !=   null   &&  files.Length  !=   0 )
            {
                
for  ( int  i  =   0 ; i  <  files.Length;  ++ i)
                {
                    Attachment attach 
=   new  Attachment(files[i]);
                    message.Attachments.Add(attach);
                }
            }

            
if  (isAuthentication  ==   true )
            {
                
// 用户名凭证
                smtpClient.Credentials  =   new  NetworkCredential(ConfigHelper.GetConfigString( " userid " ), ConfigHelper.GetConfigString( " password " ));
            }
            
// 发送方式:网络方式
            smtpClient.DeliveryMethod  =  SmtpDeliveryMethod.Network;
            
// 客户端发送邮件
            smtpClient.Send(message);
        }

方法大概是这样的。有几点需要作一下说明:

1.公用邮箱的身份验证。很多公用邮箱为了反垃圾邮件,都加强了用户发邮件的限制。需要用户名密码进行安全验证。即我这里的

smtpClient.Credentials = new NetworkCredential(ConfigHelper.GetConfigString("userid"), ConfigHelper.GetConfigString("password"));

ConfigHelper.GetConfigString("userid")和ConfigHelper.GetConfigString("password")是其他类库的方法,其中userid和password是在web.config中设置的。message.From要与配置的userid相同。即某个身份通过验证后,以它的身份发送。否则会出错。还有一点,发送方式一般设置成Network就可以了。

2.发送频率问题。我所要实现的内网(公司使用foxmail邮箱)之间发送邮件,如果邮件大量瞬时发送,即1秒钟发送好几封邮件这样的频率。发送是不成功的。邮件服务商和公司都通不过。容易被邮件服务商当作垃圾邮件也处理掉了,同时公司也通不过,公司内部之间发送foxmai邮件时是一进一出的过程,占用大量的宽带资源。(我直接通过公司foxmail邮箱向我的163邮箱发送邮件,对发送频率没有做限制,发送成功。结果一下子发送了几千封邮件,把我163的邮箱都挤爆了。)所以最好设置成好几秒钟发送一封。我通过设置System.Threading.Thread.Sleep(5000),使每5秒钟发送一封邮件是OK的。

3.注意放火墙和杀毒软件。这一点我没有太关注,别人有提到过。要注意给这些软件加上规则,以防止它们阻止邮件的发送。

转载于:https://www.cnblogs.com/purplefox2008/archive/2009/12/09/1619987.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值