我写的调用smtplib发送的代码是从网上copy过来的,单发邮件时没有问题,但按照copy过来的代码发送多个邮件时,却总是只有第一个收件人能收到。具体情况是:
 
收件人列表:toAddress = ['[email]m1@qq.com[/email]','[email]m2@126.com[/email]']
在发送前进行了转换:strTo=','.join(toAddress)
调用发送:smtp.sendmail(strFrom, strTo, msgRoot.as_string())
 
  开始还以为是sina的smtp服务器的限制,连rfc821和telnet都搬出来了(不过没有成功,呵呵),也没有找到解决办法,但是找到了一些有帮助的信息。rfc821中规定,要发送多个邮件,就多次调用rcpt to: <address>。于是仔细查看了发送邮件的debug信息,发现只发送了一个rcpt to命令,其参数就是列表中的第一个邮件地址。
 
  至此开始怀疑copy过来的代码调用方式有问题,但是找不到smtplib的文档,忽然想到了查看一下smtplib的源码,在python的lib目录下找到了smtplib.py这个文件,找到sendmail这个方法。哈哈一切都明白了。
  这个方法的注释把调用方式写的名称的清楚,截取一部分大家看吧:
         Example:
         >>> import smtplib
         >>> s=smtplib.SMTP("localhost")
         >>> tolist=["[email]one@one.org[/email]","[email]two@two.org[/email]","[email]three@three.org[/email]","[email]four@four.org[/email]"]
         >>> msg = '''\\
         ... From: [email]Me@my.org[/email]
         ... Subject: testin'...
         ...
         ... This is a test '''
         >>> s.sendmail("[email]me@my.org[/email]",tolist,msg)
         { "[email]three@three.org[/email]" : ( 550 ,"User unknown" ) }
         >>> s.quit()
  按照这个方法,直接把toAddress传入,测试,一切ok!
  写到这里,希望对要群发送邮件的朋友有帮助。忽然想到,那个代码的作者是不是故意这样写的呢,毕竟群发垃圾邮件是违法的,瞎猜的,不要当真,呵呵。