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

首先,了解一点,发一封信,包含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的收件人。这样达到了暗送的目的。

 

 

ExpandedBlockStart.gif 代码
# !/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值