关于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:[email protected]

to1:[email protected]

cc1:[email protected]

bcc1:[email protected]

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

1.smtp协议进行rcpt to命令,对象为所有收件人,[email protected],[email protected],[email protected]

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

to:[email protected]

cc:[email protected]

注意不会填加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%[email protected] ' % a
            toAdd 
=  [ ' [email protected] ' ,]
            ccAdd
= [ ' [email protected] ' , ' [email protected] ' ]
            bccAdd
= [ ' [email protected] ' ,]
            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! '

 

 

 

你可能感兴趣的:(smtp)