zoukankan      html  css  js  c++  java
  • 使用SmtpClient发送电子邮件

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

          过程如下:

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

  • 相关阅读:
    转:裸接口防护,避免恶意盗刷和爬取
    oracle = : := 和变量绑定 oracle通配符和运算符
    169.254地址无网关信息 ----- 解决方案 启动DHCP服务
    NAS DAS SAN 磁带机 tco
    linux 权限详解
    转载:哈希加密算法 MD5,SHA-1,SHA-2,SHA-256,SHA-512,SHA-3,RIPEMD-160
    MD5,SHA1 都是哈希 摘要算法 MD5+SALT BCRYPT
    iOS开发JSON字符串和字典互转
    iOS开发线程之NSThread
    iOS开发NSMutableArray数组越界处理
  • 原文地址:https://www.cnblogs.com/purplefox2008/p/1619987.html
Copyright © 2011-2022 走看看