脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python实现定时发送邮件到指定邮箱

python实现定时发送邮件到指定邮箱

2021-08-17 00:31Fang_Tian_Hua_Ji Python

这篇文章主要为大家详细介绍了python实现定时发送邮件到指定邮箱,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了python实现定时发送邮件到指定邮箱的具体代码,供大家参考,具体内容如下

整个链路:传感器采集端采集数据,边缘端上传数据库,从数据库拿到数据。
产品端有个自动出报告的需求,并且希望自动出的报告可以定时通过邮件发到指定邮箱中。
自动发邮件中也有较多坑,本文特此记录自动发邮件中的坑。
使用:Python3.7,win10系统,163邮箱作为发邮件方,QQ邮箱作为收邮件方。

**第一步:**申请两个账号分别作为发送和接收的账号,本文用的是一个163邮箱,一个是qq邮箱。

python实现定时发送邮件到指定邮箱

第一个坑需要注意了,上图是qq邮箱中的邮箱设置,需要在账户中开启POP3/SMTP服务(一定要开启,不然即使Python中的代码都是对的,也不能正常发送邮件,因为Python中发邮件用的是SMTP的邮件传输协议包),这里还有一个坑需要注意的是:如果你把这个邮箱当作是发送邮件的一方,还需要记住授权码,因为Python中邮箱的登录是用授权码的而不是密码。

python实现定时发送邮件到指定邮箱

在163邮箱中的设置中也将POP3/SMTP服务打开。

python实现定时发送邮件到指定邮箱python实现定时发送邮件到指定邮箱

开启SMTP服务后,一定要记住授权码

**第二步:**Python编写程序

  1. #发送邮件模块
  2. import smtplib
  3. #写邮件模块
  4. import email
  5. #定义邮件类型及内容
  6. """
  7. 邮件体为多组件类型(如果不是单一发送文本或者图片或者附件,那么就需要这个多组件类型将
  8. 其它元素打包进来)
  9. """
  10. from email.mime.multipart import MIMEMultipart
  11. #邮件中的文本信息
  12. from email.mime.text import MIMEText
  13. #邮件中的图片信息
  14. from email.mime.image import MIMEImage
  15. #定义邮件标题
  16. from email.header import Header
  17. #################################################################################################
  18. #设置服务器所需信息
  19. #邮件发送方邮箱地址
  20. sender='写发送方邮箱地址,这里只是示意一下@163.com'
  21. #这个是163邮箱里面POP3/SMTP开启后的授权码,一定注意不是163邮箱的登录密码
  22. #第一次做的时候设置成邮箱登录密码反而邮件不能发送,改成授权码之后才可以
  23. password='这里写授权码,注意不是邮箱登录密码,授权码一般是由随机的16位字母组成'
  24. #邮件接收方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
  25. receivers=['写接收方邮箱地址,这里只是示意一下@qq.com']
  26. ###############################################################################################
  27. #邮件基本信息输入
  28. #设置总的邮件体对象,对象类型为mixed
  29. mix_part=MIMEMultipart('mixed')
  30. #发送者邮箱地址
  31. mix_part['From']='写发送方邮箱地址,这里只是示意一下@163.com<写发送方邮箱地址,这里只是示意一下@163.com>'
  32. #接收者邮箱地址
  33. mix_part['To']='写接收方邮箱地址,这里只是示意一下@qq.com'
  34. #邮件标题
  35. subject='2020-5-21测试报告'
  36. mix_part['subject']=Header(subject,'utf-8')
  37. #################################################################################################
  38. #构造文本内容,也就是邮件中正文部分的内容
  39. """
  40. 三个参数:
  41. 第一个为文本内容,第二个plain设置文本格式,第三个utf-8设置编码
  42. """
  43. message_info='python邮件发送测试'
  44. message=MIMEText(message_info,'plain','utf-8')
  45. #通过多组件类型将文本内容打包进来
  46. mix_part.attach(message)
  47. ###############################################################################################
  48. #邮件中附件文本的构造
  49. #设置附件文本的路径,除了改路径,其它几行代码基本不需要改动
  50. txt_path=r'C:\Users\Desktop\测试文件.pdf'
  51. txt_file = open(txt_path, 'rb').read()
  52. txt = MIMEText(txt_file, 'base64', 'utf-8')
  53. txt["Content-Type"] = 'application/octet-stream'
  54. # 命名发送的附件名称
  55. txt.add_header('Content-Disposition', 'attachment', filename='测试报告.pdf')
  56. #通过多组件类型将文本附件打包进来
  57. mix_part.attach(txt)
  58. ####################################################################################
  59. # 邮件中图片附件的构造
  60. #设置附件图片的路径,除了改路径,其它几行代码基本不需要改动
  61. image_path=r'C:\Users\Desktop\images\test.png'
  62. image_file = open(image_path, 'rb').read()
  63. image = MIMEImage(image_file)
  64. image.add_header('Content-ID', '<image1>')
  65. #filename需要改成上传的图片名称
  66. image["Content-Disposition"] = 'attachment; filename="test.png"'
  67. #通过多组件类型将图片附件打包进来
  68. mix_part.attach(image)
  69. ###################################################################################################
  70. try:
  71. """
  72. qq邮箱服务器地址的设置,如果是用qq邮箱发邮件则需要设置,
  73. 本文是用163邮箱发邮件,所以只需要设置163邮箱服务器地址即可
  74. """
  75. # smtpObj=smtplib.SMTP('smtp.exmail.qq.com')
  76. #163邮箱服务器地址的设置
  77. smtpObj = smtplib.SMTP('smtp.163.com')
  78. #登录:账号,密码
  79. smtpObj.login(sender,password)
  80. smtpObj.sendmail(sender,receivers,mix_part.as_string())
  81. smtpObj.quit()
  82. print('邮件发送成功')
  83. except smtplib.SMTPException:
  84. print('Error:无法发送邮件')

第三步:电脑设置定时发送邮件

win+r调出运行窗口输入taskschd.msc

python实现定时发送邮件到指定邮箱

创建基本任务,然后按照提示一步步点下去即可

python实现定时发送邮件到指定邮箱

按照自己的需求,我这里选择的是一次,然后设置启动程序的未来时间即可

python实现定时发送邮件到指定邮箱
python实现定时发送邮件到指定邮箱
python实现定时发送邮件到指定邮箱

程序或脚本一栏不需要改变,起始于(可选)指的是Python的路径,添加参数(可选)指的是刚才编好的自动发邮件程序的路径。

python实现定时发送邮件到指定邮箱

点击完成即可。

总结如下:

(1)需要将发邮件和接收邮件邮箱设置中的SMTP服务打开,并记住授权码

(2)Python编写程序按步骤一步步来,应该没有啥问题

(3)电脑中设置自动运行程序时,需要注意设置的起始于(可选)以及添加参数(可选)的路径

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

原文链接:https://blog.csdn.net/Fang_Tian_Hua_Ji/article/details/106250776

延伸 · 阅读

精彩推荐