当前位置:Gxlcms > Python > Python邮件处理示例

Python邮件处理示例

时间:2021-07-01 10:21:17 帮助过:38人阅读

Python基础详解之邮件非常详细的代码示例,python基础的小伙伴们有非常好的帮助,可以参考下

一、发送电子邮件

Python标准库提供了smtplib,用于实现SMTP协议发送邮件。标准库还提供email模块帮助我们构建邮件格式。SMTP(Simple Mail Transfer Protocol,即简单邮件传输协议),是一组有源地址到目的地址传送邮件的规则,用来控制信件的中转方式。

获取QQ邮箱密码(授权码)

二、发送纯文本格式的邮件

代码如下:

  1. import smtplib
  2. from email.mime.text import MIMEText
  3. from email.header import Header
  4. # 邮箱用户名
  5. sender = 'dad@qq.com'(输入你的邮箱)
  6. # 邮箱密码(部分邮箱为授权码)
  7. password = '123456'(输入你的密码)
  8. # 收件人邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
  9. receiver = ['baby@qq.com', ](输入你要发送人的邮箱)
  10. # 邮件正文
  11. text = 'Hello,baby'
  12. message = MIMEText(text, 'plain', 'utf-8')
  13. # 发件人显式的名字
  14. message['From'] = Header('拿头来坚持', 'utf-8')
  15. # 收件人显式的名字
  16. message['To'] = Header('baby', 'utf-8')
  17. # 邮件标题
  18. message['Subject'] = '爸爸来信,请接收!'
  19. try:
  20. # 使用QQ企业邮箱服务器发送
  21. smtp = smtplib.SMTP('smtp.qq.com')
  22. # 登录
  23. smtp.login(sender, password)
  24. # 发送
  25. smtp.sendmail(sender, receiver, message.as_string())
  26. print('邮件发送成功!')
  27. # 退出服务器
  28. smtp.quit()
  29. except smtplib.SMTPException as e:
  30. print('Error!邮件发送失败!', e)

Python基础分析之邮件处理

发送纯文本格式的邮件执行结果:

三、发送HTML格式的邮件

代码如下:

  1. import smtplib
  2. from email.mime.text import MIMEText
  3. from email.header import Header
  4. # 邮箱用户名
  5. sender = 'dad@qq.com'(输入你的邮箱)
  6. # 邮箱密码(部分邮箱为授权码)
  7. password = '123456'(输入你的密码)
  8. # 收件人邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
  9. receiver = ['baby@qq.com', ](输入你要发送人的邮箱)
  10. # 邮件正文
  11. msg = '''
  12. <p><a href='https://blog.csdn.net/weixin_46382560?spm=1011.2124.3001.5343'>拿头来坚持</p>
  13. Life goes on, learning goes on
  14. </p> <!----></div></div> <div class="user-profile-head-info-b" data-v-d1dbb6f8><ul data-v-d1dbb6f8><li data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>22,574</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>被访问量</div></li> <li data-v-d1dbb6f8><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>24</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>原创文章</div></a></li> <li data-v-d1dbb6f8><a href="https://blog.csdn.net/rank/list/total" rel="external nofollow" rel="external nofollow" target="_blank" data-report-click="{&quot;spm&quot;:&quot;3001.5476&quot;}" data-report-query="spm=3001.5476" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>128,997</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>作者排名</div></a></li> <li data-v-d1dbb6f8><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>762</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>粉丝数量</div></a></li></ul></div></div></div> <div class="user-profile-body" data-v-3f0fdf46 data-v-80922f46><div class="user-profile-body-inner" data-v-3f0fdf46><div class="user-profile-body-left" data-v-3f0fdf46><div class="user-profile-aside" data-v-d487ed78 data-v-3f0fdf46><div class="user-general-info single-general-info" data-v-d487ed78><ul data-v-d487ed78><!----> <!----> <li class="user-general-info-join-csdn" data-v-d487ed78><i data-v-d487ed78></i> <span data-v-d487ed78>于</span> <span class="user-general-info-key-word" data-v-d487ed78>2020-02-22</span> <span data-v-d487ed78>加入CSDN</span></li></ul></div> <!----> <div class="user-achievement user-profile-aside-common-box" data-v-d487ed78><div class="aside-common-box-head" data-v-d487ed78>获得成就</div> <div class="aside-common-box-bottom" data-v-d487ed78><div class="aside-common-box-content" data-v-d487ed78><ul data-v-d487ed78><li data-v-d487ed78>
  15. <i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022819.png)"></i>
  16. <div>获得<span>212</span>次点赞</div>
  17. </li><li data-v-d487ed78>
  18. <i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022831.png)"></i>
  19. <div>内容获得<span>111</span>次评论</div>
  20. </li><li data-v-d487ed78>
  21. <i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022828.png)"></i>
  22. <div>获得<span>562</span>次收藏</div>
  23. '''
  24. # 指定消息体使用HTML格式
  25. message = MIMEText(msg, 'html', 'utf-8')
  26. # 发件人显式的名字
  27. message['From'] = Header('拿头来坚持', 'utf-8')
  28. # 收件人显式的名字
  29. message['To'] = Header('baby', 'utf-8')
  30. # 邮件标题
  31. message['Subject'] = '爸爸来信,请接收!'
  32. try:
  33. # 使用QQ企业邮箱服务器发送
  34. smtp = smtplib.SMTP('smtp.qq.com')
  35. # 登录
  36. smtp.login(sender, password)
  37. # 发送
  38. smtp.sendmail(sender, receiver, message.as_string())
  39. print('邮件发送成功!')
  40. # 退出服务器
  41. smtp.quit()
  42. except smtplib.SMTPException as e:
  43. print('Error!邮件发送失败!', e)

Python基础分析之邮件处理

发送HTML格式的邮件的执行结果:

四、发送带附件的邮件

代码如下:

  1. import smtplib
  2. from email.mime.text import MIMEText
  3. from email.mime.multipart import MIMEMultipart
  4. from email.header import Header
  5. # 邮箱用户名
  6. sender = 'dad@qq.com'(输入你的邮箱)
  7. # 邮箱密码(部分邮箱为授权码)
  8. password = '123456'(输入你的密码)
  9. # 收件人邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
  10. receiver = ['baby@qq.com', ](输入你要发送人的邮箱)
  11. # 指定消息体使用复合类型
  12. message = MIMEMultipart()
  13. # 发件人显式的名字
  14. message['From'] = Header('拿头来坚持', 'utf-8')
  15. # 收件人显式的名字
  16. message['To'] = Header('baby', 'utf-8')
  17. # 邮件标题
  18. message['Subject'] = '爸爸来信,请接收!'
  19. # 邮件正文
  20. msg = '''
  21. <p><a href='https://blog.csdn.net/weixin_46382560?spm=1011.2124.3001.5343'>拿头来坚持</p>
  22. Life goes on, learning goes on
  23. </p> <!----></div></div> <div class="user-profile-head-info-b" data-v-d1dbb6f8><ul data-v-d1dbb6f8><li data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>22,574</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>被访问量</div></li> <li data-v-d1dbb6f8><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>24</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>原创文章</div></a></li> <li data-v-d1dbb6f8><a href="https://blog.csdn.net/rank/list/total" rel="external nofollow" rel="external nofollow" target="_blank" data-report-click="{&quot;spm&quot;:&quot;3001.5476&quot;}" data-report-query="spm=3001.5476" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>128,997</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>作者排名</div></a></li> <li data-v-d1dbb6f8><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>762</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>粉丝数量</div></a></li></ul></div></div></div> <div class="user-profile-body" data-v-3f0fdf46 data-v-80922f46><div class="user-profile-body-inner" data-v-3f0fdf46><div class="user-profile-body-left" data-v-3f0fdf46><div class="user-profile-aside" data-v-d487ed78 data-v-3f0fdf46><div class="user-general-info single-general-info" data-v-d487ed78><ul data-v-d487ed78><!----> <!----> <li class="user-general-info-join-csdn" data-v-d487ed78><i data-v-d487ed78></i> <span data-v-d487ed78>于</span> <span class="user-general-info-key-word" data-v-d487ed78>2020-02-22</span> <span data-v-d487ed78>加入CSDN</span></li></ul></div> <!----> <div class="user-achievement user-profile-aside-common-box" data-v-d487ed78><div class="aside-common-box-head" data-v-d487ed78>获得成就</div> <div class="aside-common-box-bottom" data-v-d487ed78><div class="aside-common-box-content" data-v-d487ed78><ul data-v-d487ed78><li data-v-d487ed78>
  24. <i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022819.png)"></i>
  25. <div>获得<span>212</span>次点赞</div>
  26. </li><li data-v-d487ed78>
  27. <i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022831.png)"></i>
  28. <div>内容获得<span>111</span>次评论</div>
  29. </li><li data-v-d487ed78>
  30. <i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022828.png)"></i>
  31. <div>获得<span>562</span>次收藏</div>
  32. '''
  33. # 邮件附加html文件
  34. message.attach(MIMEText(msg, 'html', 'utf-8'))
  35. # 添加附件
  36. attached_file = MIMEText(open(__file__, encoding='utf-8').read(), 'base64', 'utf-8')
  37. # 指定附件的文件名和原先的文件不一样
  38. attached_file['Content-Disposition'] = 'attachment;filename="mail.py"'
  39. # 邮件附加附件
  40. message.attach(attached_file)
  41. try:
  42. # 使用QQ企业邮箱服务器发送
  43. smtp = smtplib.SMTP('smtp.qq.com')
  44. # 登录
  45. smtp.login(sender, password)
  46. # 发送
  47. smtp.sendmail(sender, receiver, message.as_string())
  48. print('邮件发送成功!')
  49. # 退出服务器
  50. smtp.quit()
  51. except smtplib.SMTPException as e:
  52. print('Error!邮件发送失败!', e)

Python基础分析之邮件处理

发送带附件的邮件执行结果:

五、发送图片的邮件

代码如下:

  1. import smtplib
  2. from email.mime.text import MIMEText
  3. from email.mime.image import MIMEImage
  4. from email.mime.multipart import MIMEMultipart
  5. from email.header import Header
  6. # 邮箱用户名
  7. sender = 'dad@qq.com'(输入你的邮箱)
  8. # 邮箱密码(部分邮箱为授权码)
  9. password = '123456'(输入你的密码)
  10. # 收件人邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
  11. receiver = ['baby@qq.com', ](输入你要发送人的邮箱)
  12. # 利用related定义内嵌资源的邮件体
  13. message = MIMEMultipart('related')
  14. # 发件人显式的名字
  15. message['From'] = Header('拿头来坚持', 'utf-8')
  16. # 收件人显式的名字
  17. message['To'] = Header('baby', 'utf-8')
  18. # 邮件标题
  19. message['Subject'] = '爸爸来信,请接收!'
  20. # 邮件正文
  21. content = MIMEMultipart('alternative')
  22. # html内容
  23. msg = '''
  24. <p><a href='https://blog.csdn.net/weixin_46382560?spm=1011.2124.3001.5343'>拿头来坚持</p>
  25. Life goes on, learning goes on
  26. <p>
  27. 拿头来坚持的个人主页
  28. <img src='cid:img01'>
  29. </p>
  30. '''
  31. # 邮件附加html文件
  32. message.attach(MIMEText(msg, 'html', 'utf-8'))
  33. # 添加图片
  34. with open('csdn.png', 'rb') as f:
  35. img01 = MIMEImage(f.read())
  36. # 定义资源的名字为img01
  37. img01.add_header('Content-ID', 'img01')
  38. # 邮件附加图片
  39. message.attach(img01)
  40. try:
  41. # 使用QQ企业邮箱服务器发送
  42. smtp = smtplib.SMTP('smtp.qq.com')
  43. # 登录
  44. smtp.login(sender, password)
  45. # 发送
  46. smtp.sendmail(sender, receiver, message.as_string())
  47. print('邮件发送成功!')
  48. # 退出服务器
  49. smtp.quit()
  50. except smtplib.SMTPException as e:
  51. print('Error!邮件发送失败!', e)

Python基础分析之邮件处理

发送图片的邮件执行结果:

六、接收电子邮件

接受邮件有两种常用的协议:POP3和IMAP协议

POP3协议(Post Office Protocol-Version3,即邮局协议版本3):允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等)不会反馈到服务器上,比如通过客户端收取了邮箱的3封邮件并移动到其他文件夹,邮件服务器上的这些邮件不会被同步移动。

IMAP协议(Internet Mail Access Protocol,即Internet邮件访问协议):提供Webmail与电子邮件客户端之间的双向通信,任何在客户端做的改变都会同步到服务器上。在客户端对邮件进行了操作,服务器上的邮件也会进行相应的操作。

七、使用POP3协议下载邮件

代码如下:

  1. import poplib
  2. from email.parser import Parser
  3. # 登录邮箱的用户名
  4. username = 'baby@qq.com'(输入你的邮箱)
  5. # 登录邮箱的密码(部分邮箱为授权码)
  6. password = '123456'(输入你的密码)
  7. # 连接邮箱服务器
  8. pop_server = poplib.POP3('pop.qq.com')
  9. # 打印出邮箱服务器的欢迎文字
  10. print(pop_server.getwelcome())
  11. # 登录邮箱服务器
  12. pop_server.user(username)
  13. pop_server.pass_(password)
  14. # 打印出当前账号的状态,第一个返回值为邮件数,第二个返回值为占用空间
  15. print('Server stat', pop_server.stat())
  16. # 获取所以邮件列表
  17. resp, mails, octets = pop_server.list()
  18. print(mails)
  19. # 获取最新的一封邮件(序列号最大的),邮件索引从1开始计数
  20. index = len(mails)
  21. resp, lines, octets = pop_server.retr(index)
  22. content = b'\r\n'.join(lines).decode('utf-8')
  23. # 解析出邮件
  24. msg = Parser().parsestr(content)
  25. # 可以根据邮件索引号直接从服务器删除邮件
  26. # pop_server.dele(index)
  27. # 关闭连接
  28. pop_server.quit()

Python基础分析之邮件处理

执行结果:

b'+OK XMail POP3 Server v1.0 Service Ready(XMail v1.0)'
Server stat (15, 50814)
[b'1 1255', b'2 1286', b'3 1310', b'4 1398', b'5 1458', b'6 1450', b'7 1602', b'8 1633', b'9 5001', b'10 2347', b'11 2371', b'12 2267', b'13 5033', b'14 5077', b'15 17326']

如果正确连接上服务器并且列出邮件数量,说明我们已经正确使用了POP3协议。

到此这篇关于Python基础详解之邮件处理的文章就介绍到这

推荐学习:php视频教程

以上就是Python邮件处理示例的详细内容,更多请关注gxlcms其它相关文章!

人气教程排行