关于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的收件人。这样达到了暗送的目的。

 

 

代码
#!/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!'

 

 

 

posted @ 2011-01-19 13:56  Capricorn.python  阅读(4832)  评论(0编辑  收藏  举报