Smtp发送及抄送邮件

     前段时间下载了某园友自己积累的开源类库,正好昨天有个需求需要发下邮件,于是就打算试下这个类库里面的 SmtpServerHelper 。
     程序跑起来后,单人发送、附件发送、多人发送都是正常的,不过这个多人发送的时候,邮件的收件人栏只会显示第一个收件人的信箱地址,不会再显示其他人的信箱地址,也就是如果自己不是第一个收件人,信箱地址明显就是错误的,一看源码:

SendBufferstr +=  " To:=? " + mailMessage.Charset.ToUpper() +  " ?B? " + Base64Encode(( string)mailMessage.Recipients[ 0]) +  " ?= " +  " < " + ( string)mailMessage.Recipients[ 0] +  " > " + CRLF;

     原来这里没有遍历所有收件人,只是单纯的获取收件人集合的第一个显示出来。

     另外还有一点就是没有抄送和密送功能。好吧,我们就在这个基础上做小小修改就可以解决这2个问题:

     我们把上述代码做如下修改:

// 发件人,支持多个发件人显示
SendBufferstr +=  " To: ";
for ( int i =  0; i < mailMessage.Recipients.Count; i++)
{
 SendBufferstr +=  " =? " + mailMessage.Charset.ToUpper() +  " ?B? " + Base64Encode(( string)mailMessage.Recipients[i]) +  " ?= " +  " < " + ( string)mailMessage.Recipients[i] +  " >, ";
}

     需要注意的是,用Base64编码的是用来显示收件人的名称,"<" ">"中间用来显示收件人信箱地址。
     抄送功能,其实这个CC,没有什么特别之处,因为它的发送和正常的发送是一样的,只是在显示抄送人的时候不同而已:

if (mailMessage.CCs !=  null && mailMessage.CCs.Count >  0)
{
    SendBuffer =  new  string[mailMessage.CCs.Count];
    for ( int i =  0; i < mailMessage.CCs.Count; i++)
    {
       SendBuffer[i] =  " RCPT TO:< " + ( string)mailMessage.CCs[i] +  " > " + CRLF;
    }
    if (!Dialog(SendBuffer,  " 抄送人地址错误 "))  return  false;
}

     这就是给抄送人发邮件,但光有这个还不行,因为抄送人是收到了,但抄送人地址栏仍然不会显示出来;

if (mailMessage.CCs !=  null && mailMessage.CCs.Count >  0)
  {
     SendBufferstr +=  " Cc: ";
     for ( int i =  0; i < mailMessage.CCs.Count; i++)
     {
 SendBufferstr +=  " =? " + mailMessage.Charset.ToUpper() +  " ?B? " + Base64Encode(( string)mailMessage.CCs[i]) +  " ?= " +  " < " + ( string)mailMessage.CCs[i] +  " >, ";
     }
     SendBufferstr += CRLF;
}

      其实,就是将发送人的标志:"To"改成"Cc"就可以了;密送这里就不做描述了,因为密送是不用显示密送收件人的,所以上面这段就不需要了。

 

 

你可能感兴趣的:(smtp)