注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 可扩展、高可用、负载均衡..
 帮助

调用smtplib时的一个小细节


2007-12-28 17:00:01
 标签:代码 smtplib   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://meiweier.blog.51cto.com/298258/57167
  我写的调用smtplib发送的代码是从网上copy过来的,单发邮件时没有问题,但按照copy过来的代码发送多个邮件时,却总是只有第一个收件人能收到。具体情况是:
 
收件人列表:toAddress = ['m1@qq.com','m2@126.com']
在发送前进行了转换: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=["two@two.org","three@three.org","four@four.org'>one@one.org","two@two.org","three@three.org","four@four.org"]
         >>> msg = '''\\
         ... From: Me@my.org
         ... Subject: testin'...
         ...
         ... This is a test '''
         >>> s.sendmail("me@my.org",tolist,msg)
         { "three@three.org" : ( 550 ,"User unknown" ) }
         >>> s.quit()
  按照这个方法,这几把toAddress传入,测试,一切ok!
  写到这里,希望对要群发送邮件的朋友有帮助。忽然想到,那个代码的作者是不是故意这样写的呢,毕竟群发垃圾邮件是不道德的,瞎猜的,不要当真,呵呵。
 

本文出自 “江湖” 博客,请务必保留此出处http://meiweier.blog.51cto.com/298258/57167





    文章评论
 
2007-12-28 17:06:30
收藏了 谢谢博主

2007-12-28 17:26:15
呵呵,不客气,大家多交流嘛

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: