Python群发邮件实例代码

 更新时间:2014年01月03日 14:46:16   作者:  
今天试了试Python发邮件,突然想到能不能群发邮件呢?群发邮件是smtplib的一个bug,不过最终还是解决了

直接上代码了

复制代码 代码如下:

import smtplib
msg = MIMEMultipart()

#构造附件1
att1 = MIMEText(open('/home/a2bgeek/develop/python/hello.py', 'rb').read(), 'base64', 'gb2312')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="hello.txt"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字
msg.attach(att1)

#构造附件2
#att2 = MIMEText(open('/home/a2bgeek/develop/python/mail.py', 'rb').read(), 'base64', 'gb2312')
#att2["Content-Type"] = 'application/octet-stream'
#att2["Content-Disposition"] = 'attachment; filename="123.txt"'
#msg.attach(att2)

#加邮件头
strTo = ['XXX1@139.com', 'XXX2@163.com', 'XXX3@126.com']
msg['to']=','.join(strTo)
msg['from'] = 'YYY@163.com'
msg['subject'] = '邮件主题'
#发送邮件
try:
    server = smtplib.SMTP()
    server.connect('smtp.163.com')
    server.login('YYY@163.com','yourpasswd')
    server.sendmail(msg['from'], strTo ,msg.as_string())
    server.quit()
    print '发送成功'
except Exception, e:
    print str(e)

细心的读者会发现代码中有这样一句:msg['to']=','.join(strTo),但是msg[['to']并没有在后面被使用,这么写明显是不合理的,但是这就是stmplib的bug。你只有这样写才能群发邮件。查明原因如下:

The problem is that SMTP.sendmail and email.MIMEText need two different things.

email.MIMEText sets up the “To:” header for the body of the e-mail. It is ONLY used for displaying a result to the human being at the other end, and like all e-mail headers, must be a single string. (Note that it does not actually have to have anything to do with the people who actually receive the message.)

SMTP.sendmail, on the other hand, sets up the “envelope” of the message for the SMTP protocol. It needs a Python list of strings, each of which has a single address.

So, what you need to do is COMBINE the two replies you received. Set msg‘To' to a single string, but pass the raw list to sendmail.

好了今天就到这里。

相关文章

  • 解决Jupyter Notebook开始菜单栏Anaconda下消失的问题

    解决Jupyter Notebook开始菜单栏Anaconda下消失的问题

    这篇文章主要介绍了解决Jupyter Notebook开始菜单栏Anaconda下消失的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python使用代理抓取网站图片(多线程)

    Python使用代理抓取网站图片(多线程)

    Python作为一门功能强大的脚本语言,经常被用来写爬虫程序,下面是使用Python通过代理进行多线程抓取图片,算是一个简易的python多线程爬虫
    2014-03-03
  • python 返回一个列表中第二大的数方法

    python 返回一个列表中第二大的数方法

    今天小编就为大家分享一篇python 返回一个列表中第二大的数方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python10行代码实现模拟百度搜索的示例

    Python10行代码实现模拟百度搜索的示例

    本文主要介绍了Python10行代码实现模拟百度搜索的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 快速进修Python指南之迭代器Iterator与生成器

    快速进修Python指南之迭代器Iterator与生成器

    这篇文章主要为大家介绍了Java开发者快速进修Python指南之迭代器Iterator与生成器示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • python+opencv+caffe+摄像头做目标检测的实例代码

    python+opencv+caffe+摄像头做目标检测的实例代码

    今天小编就为大家分享一篇python+opencv+caffe+摄像头做目标检测的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 使用python-cv2实现视频的分解与合成的示例代码

    使用python-cv2实现视频的分解与合成的示例代码

    这篇文章主要介绍了使用python-cv2实现视频的分解与合成的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • pyinstaller pathex参数引发打包no module name异常

    pyinstaller pathex参数引发打包no module name异常

    这篇文章主要为大家介绍了一个关于pyinstaller的 pathex 参数所引发的打包执行报no module name的异常错误解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • python监控日志中的报错并进行邮件报警

    python监控日志中的报错并进行邮件报警

    这篇文章主要为大家介绍了python监控日志中的报错并进行邮件报警的实现实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python 命令行解析工具 argparse基本用法

    Python 命令行解析工具 argparse基本用法

    在工作中,我们经常需要从命令行当中解析出指定的参数,而 Python 也提供了相应的标准库来做这件事情,比如 sys, optparse, getopt, argparse,这里面功能最强大的莫过于 argparse,下面就来看看它用法,需要的朋友可以参考下
    2022-12-12

最新评论