SMTP 发送内嵌图片 邮件

本文实验用QQ邮箱发不了,网易163能发文字不能发img标签的内容

在新浪邮箱实验成功:

 public bool sendEmailto(List<string>   shoujianren,string biaoti,string neirong)
          {
          //简单邮件传输协议类
           System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
           client.Host = "smtp.sina.com";//邮件服务器
           client.Port = 25;//smtp主机上的端口号,默认是25.
           client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;//邮件发送方式:通过网络发送到SMTP服务器
           client.Credentials = new System.Net.NetworkCredential("caggsimida@sina.com", "xxxxxx");//凭证,发件人登录邮箱的用户名和密码

           //电子邮件信息类
           //System.Net.Mail.MailAddress fromAddress = new System.Net.Mail.MailAddress("caggsimida@sina.com", "GG");//发件人Email,在邮箱是这样显示的,[发件人:小明<panthervic@163.com>;]
           //System.Net.Mail.MailAddress toAddress = new System.Net.Mail.MailAddress("741056536@qq.com");//收件人Email,在邮箱是这样显示的, [收件人:小红<43327681@163.com>;]
         
              System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();//创建一个电子邮件类
              mailMessage.From = new MailAddress("caggsimida@sina.com", "GG");
              foreach (string item in shoujianren)
              {
                  mailMessage.To.Add(item);
              }
           mailMessage.Subject = "邮件的主题";
              if(neirong.Contains("img"))
              {
                  var str_html = RegexHtml(neirong);
                  //处理所有img标签  
                  var htmlBody = GetHtmlImageUrlList(neirong, str_html);
                  mailMessage.AlternateViews.Add(htmlBody);
                  mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
                  mailMessage.Body = str_html;//可为html格式文本
              }
              else
              {
                  mailMessage.Body = neirong;//可为html格式文本
              }
               
           //mailMessage.Body = "邮件的内容";//可为html格式文本
           mailMessage.SubjectEncoding = System.Text.Encoding.UTF8;//邮件主题编码
           mailMessage.BodyEncoding = Encoding.UTF8;  //邮件内容编码
           mailMessage.IsBodyHtml = true;//邮件内容是否为html格式
           mailMessage.Priority = System.Net.Mail.MailPriority.High;//邮件的优先级,有三个值:高(在邮件主题前有一个红色感叹号,表示紧急),低(在邮件主题前有一个蓝色向下箭头,表示缓慢),正常(无显示).
           try
           {
              
                 
                   client.Send(mailMessage);//发送邮件
               
            
            
               return true;
           }
           catch (Exception)
           {
               return false;
           }

 
          }

  /// <summary>  
          /// 替换img标签的sec属性  
          /// </summary>  
          /// <param name="htmltext">html</param>  
          /// <returns></returns>  
          public string RegexHtml(string htmltext)
          {
              Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r  
  
;>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase);
              MatchCollection matches = regImg.Matches(htmltext);
              foreach (Match match in matches)
              {
                  var src = match.Groups["imgUrl"].Value;
                  if (!src.Contains("http://spimg"))
                  {
                      var fileName_index = src.LastIndexOf('/');
                      var cid = src.Substring(fileName_index + 1, src.Length - fileName_index - 5);
                      htmltext = Regex.Replace(htmltext, src, "cid:" + cid, RegexOptions.None);
                  }
              }
              return htmltext;
          }

  public AlternateView GetHtmlImageUrlList(string sHtmlText, string str_html)
          {
              AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(str_html, Encoding.UTF8, "text/html");
              Regex imgRE, linkRE, hrefRE;
           
              string imgMatchExpression = "(?:img[^>]+src\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))|url\\(['\"](?<1>[^'\"]*)['\"]\\))";
              imgRE = new Regex(imgMatchExpression, RegexOptions.IgnoreCase | RegexOptions.Compiled);
              string linkMatchExpression = "<\\s*link[^>]+href\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))[^>]*>";
              linkRE = new Regex(linkMatchExpression, RegexOptions.IgnoreCase | RegexOptions.Compiled);
              //this one's for fixup of relative urls in anchors
              string refMatchExpression = "href\\s*=\\s*(?:['\"](?<1>[^\"]*)['\"]|(?<1>\\S+))";
              hrefRE = new Regex(refMatchExpression, RegexOptions.IgnoreCase | RegexOptions.Compiled);

              MatchCollection matches = imgRE.Matches(sHtmlText);
              foreach (Match match in matches)
              {
                  var src = match.Groups[1].Value;
                  if (!src.Contains("http://www"))//绝对路径图片不处理  
                  {
                      var fileName_index = src.LastIndexOf('/');
                      var cid = src.Substring(fileName_index + 1, src.Length - fileName_index -5);
                      LinkedResource lrImage = new LinkedResource(Server.MapPath(match.Groups[1].Value), "image/gif");
                      lrImage.ContentId = cid;
                      htmlBody.LinkedResources.Add(lrImage);
                  }
              }
              return htmlBody;
          }  

 

 

转载于:https://my.oschina.net/u/2494395/blog/674599

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值