首先,了解一点,发一封信,包含smtp协议部分和信体部分。

协议部分,比如sent from,rcpt to等命令

信体中则才包含from,to,cc等头部。比如我们用foxmail收到一封信,你在foxmail里看到的这封信的所有内容就是信体部分,包含发件人,收件人,抄送,标题等。

当一封信有多个收件人,包含to,cc和bcc,smtp协议首先会把所有的收件人逐个进行rcpt to,然后信体部分包含to和cc的头部(注意不包含bcc的头部,这也是为什么信体中看不到暗送收件人的原因)

只有被rcpt to的收件人才会收到信件。

举个例子

sender:send@dyang.com

to1:to1@dyang.com

cc1:cc1@dyang.com

bcc1:bcc1@dyang.com

这封信要被发出去,步骤是这样的:

1.smtp协议进行rcpt to命令,对象为所有收件人,to1@dyang.com,cc1@dyang.com,bcc1@dyang.com

2.信体部分,加上几个头部

to:to1@dyang.com

cc:cc1@dyang.com

注意不会填加bcc头部。

3.然后加载信件主体部分再发出去。

4.收件人收信。因为收件人看到的信件是信体部分,所有看不到bcc的收件人。这样达到了暗送的目的。

代码

# !/usr/bin/env python
# coding=utf-8
import  smtplib
import  random
from  email.MIMEMultipart  import  MIMEMultipart 
from  email.MIMEBase  import  MIMEBase 
from  email.MIMEText  import  MIMEText 
from  email.Utils  import  COMMASPACE, formatdate 
from  email  import  Encoders 
import  os 
def  sendMail(fromadd,to,cc,bcc, subject, text, files = [],server = " localhost " ): 
    fro  =  fromadd
    msg  =  MIMEMultipart()
     print   ' FROM: ' ,fro
    msg[ ' From ' ]  =  fro 
    toAll  =  []
     if  to[0]:
         print   " To: " ,to
        msg[ ' To ' ]  =  COMMASPACE.join(to)
        [toAll.append(i)  for  i  in  to]
     if  cc[0]:
         print   ' CC: ' ,cc
        msg[ ' Cc ' ]  =  COMMASPACE.join(cc)
        [toAll.append(i)  for  i  in  cc]
     if  bcc[0]:
         print   " Bcc " ,bcc
        [toAll.append(i)  for  i  in  bcc]
    msg[ ' Date ' ]  =  formatdate(localtime = True) 
    msg[ ' Subject ' ]  =  subject 
    msg.attach(MIMEText(text))
     for  file  in  files:
        part  =  MIMEBase( ' application ' ,  " octet-stream " ) 
        part.set_payload( open(file, " rb " ).read() )
        Encoders.encode_base64(part)
        part.add_header( ' Content-Disposition ' ,  ' attachment; filename="%s" ' %  os.path.basename(file))
        msg.attach(part)
        smtp  =  smtplib.SMTP(server)
#         smtp.set_debuglevel(1)
        smtp.sendmail(fro,toAll,msg.as_string()) 
        smtp.close() 
if   __name__   ==   ' __main__ '  :
    server  =   ' 10.226.55.3 '
    i  =  0
#     while True:
     for  id  in  xrange( 1 ):
        a  =  random.randint( 1 , 2 )
         try :
            fromAdd  =   ' someone%s@di.com ' % a
            toAdd  =  [ ' yangdi1@di.com ' ,]
            ccAdd = [ ' dyang1@cavan.com ' , ' dyang2@cavan.com ' ]
            bccAdd = [ ' yangdi@di.com ' ,]
            file  =  [ ' c:\\esg.7z ' ,]
            sendMail(fromAdd,toAdd,ccAdd,toAll, ' test ' , ' test ' ,file,server)
         except  Exception,e:
             print  e
            i  =  0
         print  i + 1
        i  +=   1
     print   ' done! '

转载于:https://www.cnblogs.com/yd1227/archive/2011/01/19/1939096.html

关于smtp发信的收件人to cc和bcc相关推荐

  1. 配置SMTP发信认证

    配置SMTP发信认证 问题 沿用练习一.二.三,根据现有的Postfix服务配置,基本上任何人都可以连接到邮件服务器,随意提交电子邮件.为了提高邮件系统的安全性.减少垃圾邮件,本案例要求针对SMTP发 ...

  2. qq邮箱的发件服务器怎么设,如何利用QQ邮箱实现网站SMTP发信,详细邮箱的配置教程...

    注意事项 QQ邮箱必须开通一个月以上,新邮箱是无法开启SMTP功能的. QQ邮箱配置教程 登陆QQ邮箱 我们可以通过QQ主面板的按钮进入,也可以通过QQ邮箱的网站(mail.qq.com)进行登陆: ...

  3. qq邮箱服务器发信怎么配置,WordPress网站实现使用QQ邮箱作为SMTP发信服务器配置教程...

    一般WordPress网站都需要进行邮件发送,比如常见的找回密码.验证码等功能,我们经常会推荐使用SMTP发送邮件.今天小编就想跟大家讨论一下WordPress网站实现使用QQ邮箱作为SMTP发信服务 ...

  4. 万网主机不支持php,万网等虚拟主机不能SMTP发信的解决方案

    万网等虚拟主机不能SMTP发信的解决方案 大多数虚拟主机如万网等都禁用了WordPress默认使用的PHP mail()发信函数,那么唯一的选择就是SMTP发信了,当然SMTP发信的好处是基本不会被邮 ...

  5. GO(golang)语言使用SMTP发送电子邮件,简单和复杂带附件cc,bcc

    转https://studygolang.com/articles/2098 核心代码:smtp.SendMail(host, auth, user, send_to, msg),auth := sm ...

  6. 万网php发不了邮件,万网等虚拟主机不能SMTP发信的解决方案

    大多数虚拟主机如万网等都禁用了WordPress默认使用的PHP mail()发信函数,那么唯一的选择就是SMTP发信了,当然SMTP发信的好处是基本不会被邮件服务商归类为垃圾邮件.由于stream_ ...

  7. smtp发信出现的问题

    使用smtp发信,smtp服务器是QQ的,分别向sohu.cn,126.com,163.com邮箱发信,sohu邮箱能够很快收到,显示在"收件箱",而126.163都被放在垃圾箱, ...

  8. python群发邮件 to单独指定_python:如何发送邮件与TO,CC和BCC?

    电子邮件头与smtp服务器无关.发送电子邮件时,只需将CC和BCC收件人添加到收件人.对于CC,将它们添加到CC头. toaddr = 'buffy@sunnydale.k12.ca.us' cc = ...

  9. EMAIL 如何发送给多人,如何CC,BCC?

    如何发送给多人,如何CC,BCC? ANSWER: (此答案由SnifferPro监听OUTLOOK发送多人邮件分析出来的) 同一封信发送/抄送给多人,在MAIL FROM:<...> 后 ...

最新文章

  1. (Mirage系列之六)在Mirage里使用Collection
  2. 【综述】MV3D-Net、AVOD-Net 用于自动驾驶的多视图3D目标检测网络
  3. ibatis中isEquals、isNotEmpty的用法
  4. 隐藏html表格边框显示,table显示所有边框 table的边框怎么显示不出来
  5. Android事件分发机制之ACTION_DOWN
  6. apache camel_使用Java的Apache Camel入门
  7. ***站长自述挂马经历 提醒挂马者回头是岸
  8. 每天进步一点点《ML - Sklearn库简单学习》
  9. [原創]全面的權限控制方法(功能權限+數據權限+特殊權限(行,列))
  10. Android Studio打包Android Library为jar方案
  11. 《Spring In Action(第4版)》阅读总结(四)渲染Web视图
  12. Javascript-逻辑运算符()
  13. powershell目录带空格_精心构造的PS1文件名导致Powershell命令执行
  14. HTML:select、option中设置默认值,且默认值不在下拉框中出现
  15. gambit多面整合
  16. kubernetes多节点集群搭建过程分析
  17. 写一篇简单的 IEEE 会议论文
  18. win10 查看笔记本电池循环次数
  19. css 网站大背景(按比例缩放背景图片)
  20. Angular /Angular cli安装教程

热门文章

  1. quickBI嵌入自研系统
  2. 汽车网络安全:TEE是否能够取代HSM?
  3. PreTranslateMessage和TranslateMessage区别
  4. Promise的基础使用与生成器配合Promise解决回调地狱
  5. 东软睿驰标准化域控制器产品正式发布
  6. linux类似的vlookup函数,VLOOKUP进阶——你可能所不知道的VLOOKUP用法
  7. awk详解:awk语言及应用
  8. java 实现pdf 转word去除水印和去除页数限制
  9. android音频文件存放目录,Android系统声音文件目录
  10. win10 安装oracle11g完整教程