当前位置: 首页 > 编程笔记 >

Python调用SMTP服务自动发送Email的实现步骤

贝礼骞
2023-03-14
本文向大家介绍Python调用SMTP服务自动发送Email的实现步骤,包括了Python调用SMTP服务自动发送Email的实现步骤的使用技巧和注意事项,需要的朋友参考一下

需求背景

假设我们想设计一个定时任务,比如每天定时的用python来测试服务是否在正常运行,但是又不希望每天登录到系统后台去查看服务状态。这里我们就可以采取python的smtp模块进行任务结果广播,申请一个公共邮箱,每次python执行完定时的测试任务后,调用smtp的接口将测试结果广播给需要接收的人的邮箱中。这就使得,我们可以在移动端就能按照我们的意愿实时监测系统的状态。

QQ邮箱的SMTP服务配置流程

1.浏览器登录进入QQ邮箱
2.进入设置-账户

3.找到POP3-SMTP服务的位置,点击开启

4.进行一些验证程序

5.开启成功后,系统会给出一串长度为16的随机口令,用来替代密码进行第三方登录
6.配置smtp服务器地址和端口号

使用授权码登录SMTP并发送邮件

这里我们直接展示成果代码,其中一些隐私信息做了处理:

# smtp_test.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import smtplib
from email.mime.text import MIMEText
from email.header import Header
 
# 第三方 SMTP 服务
mail_host="smtp.qq.com" #设置服务器
mail_user="your_name@qq.com"  #用户名
mail_pass="passpasspasspass"  #口令 
 
 
sender = 'your_name@qq.com'
receivers = ['your_target@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
 
message = MIMEText('Python SMTP 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("SMTP EMAIL", 'utf-8')
message['To'] = Header("TEST MESSAGE", 'utf-8')
 
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
 
 
try:
  smtpObj = smtplib.SMTP() 
  smtpObj.connect(mail_host, 25)  # 25 为 SMTP 端口号
  smtpObj.login(mail_user,mail_pass) 
  smtpObj.sendmail(sender, receivers, message.as_string())
  print ("邮件发送成功")
except smtplib.SMTPException:
  import traceback
  traceback.print_exc()
  print ("无法发送邮件")

这里的服务器配置的SMTP的服务器smtp.qq.com,对应端口号配置为25,这里的口令和帐号应替换为读者自己的授权口令和帐号。该程序的正常结果如下:

[dechin@dechin-manjaro smtp]$ python3 smtp_test.py 
邮件发送成功

另外由于这里采用了tracback做错误日志采集,因此即使有报错程序也能继续执行,但是会广播错误日志。

最后通过查询邮箱里面的邮件(有时候可能会被放到垃圾箱里面),正常情况下可以看到一份这样的邮件:

使用crontab添加Linux系统定时任务

crontab是Linux系统下自带的定时任务配置服务,基本使用方法就是通过crontab -l来查看定时任务,以及通过crontab -e来编辑定时任务。但是由于自带的编辑器为nano,使用起来非常的不顺手,所以我们可以将其编辑器配置为vim再进行使用,相关指令为:

[dechin@dechin-manjaro smtp]$ export EDITOR="/usr/bin/vim" ; crontab -e
当然,在当前用户登录界面下,只需要临时配置一次即可一直直接使用crontab -e进行配置,持久生效需要修改配置文件,这里不展开介绍。crontab的任务配置可以参考如下介绍(图片来自于参考链接2):

一个定时任务+SMTP广播的示例

这里我们首先创建一个简单的打印随机数的任务,这样如果我们在crontab中添加一个执行该程序的定时任务,就可以每次产生一个不同的随机数并且将其输出到一个指定的文件中,再通过另外一个smtp的定时任务进行读取和广播。以下是打印随机数的任务内容:

[dechin@dechin-manjaro smtp]$ cat random_job.py 
import random
print (random.random())

我们将前面用到的smtp的任务稍作修改,将随机数读取到邮件标题中:

# smtp_test.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import smtplib
from email.mime.text import MIMEText
from email.header import Header
 
# 第三方 SMTP 服务
mail_host="smtp.qq.com" #设置服务器
mail_user="your_email@qq.com"  #用户名
mail_pass="passpasspasspass"  #口令 
 
 
sender = 'your_email@qq.com'
receivers = ['your_target@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
 
message = MIMEText('Python SMTP 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("SMTP EMAIL", 'utf-8')
message['To'] = Header("TEST MESSAGE", 'utf-8')

random_number = 1
with open('/home/dechin/projects/2021-python/smtp/random_number.txt', 'r') as file:
  random_number = float(file.readlines()[0])

subject = 'The random number generated is: ' + str(random_number)
message['Subject'] = Header(subject, 'utf-8')
 
 
try:
  smtpObj = smtplib.SMTP() 
  smtpObj.connect(mail_host, 25)  # 25 为 SMTP 端口号
  smtpObj.login(mail_user,mail_pass) 
  smtpObj.sendmail(sender, receivers, message.as_string())
  print ("邮件发送成功")
except smtplib.SMTPException:
  import traceback
  traceback.print_exc()
  print ("无法发送邮件")

最后,再配置好crontab定时任务如下:

[dechin@dechin-manjaro smtp]$ crontab -l
* * * * * python3 /home/dechin/projects/2021-python/smtp/random_job.py > /home/dechin/projects/2021-python/smtp/random_number.txt
* * * * * python3 /home/dechin/projects/2021-python/smtp/smtp_test.py

上面由于为了尽快的展示定时任务效果因此我们设置为每分钟都执行一次任务,实际场景中不需要这么高频率的定时任务测试。

最后查看邮箱收件箱,我们发现了一系列的定时任务的内容反馈如下:

本文首发链接为:https://www.cnblogs.com/dechinphy/p/smtp.html
作者ID:DechinPhy

以上就是Python调用SMTP服务自动发送Email的实现步骤的详细内容,更多关于Python调用SMTP服务自动发送Email的资料请关注小牛知识库其它相关文章!

 类似资料:
  • 本文向大家介绍Python实现SMTP邮件发送,包括了Python实现SMTP邮件发送的使用技巧和注意事项,需要的朋友参考一下 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。 SMTP

  • 本文向大家介绍Python实现发送email的几种常用方法,包括了Python实现发送email的几种常用方法的使用技巧和注意事项,需要的朋友参考一下 学过Python的人都知道,实用Python实现发送email的功能还是比较简单的,可以通过登录邮件服务来发送,linux下也可以使用调用sendmail命令来发送,还可以使用本地或者是远程的smtp服务来发送邮件,不管是单个,群发,还是抄送都比较

  • 本文向大家介绍Python发送Email方法实例,包括了Python发送Email方法实例的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式展示了Python发送Email功能的实现方法,有不错的实用价值的技巧,且功能较为完善。具体实现方法如下: 主要功能代码如下: 希望本文所述实例对大家的Python程序设计有一定的帮助。

  • 本文向大家介绍Python实现自动发送邮件功能,包括了Python实现自动发送邮件功能的使用技巧和注意事项,需要的朋友参考一下 简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。 SMTP通讯的基本流程可以概括为以下

  • 本文向大家介绍PHP实现SMTP邮件的发送实例,包括了PHP实现SMTP邮件的发送实例的使用技巧和注意事项,需要的朋友参考一下 当你还在纠结php内置的mail()函数不能发送邮件时,那么你现在很幸运,此时的这篇文章可以帮助到你! php利用smtp类来发邮件真是屡试不爽,我用过很久了,基本上没出过问题。本博客后台,当博主回复留言时候,会自动给网友发一封有新回复提示的邮件也是用的本文这个方法实现的

  • 虽然Python通过 smtplib 库使得发送email变得很简单,Scrapy仍然提供了自己的实现。 该功能十分易用,同时由于采用了 Twisted非阻塞式(non-blocking)IO ,其避免了对爬虫的非阻塞式IO的影响。 另外,其也提供了简单的API来发送附件。 通过一些 settings 设置,您可以很简单的进行配置。 简单例子 有两种方法可以创建邮件发送器(mail sender)

  • 本文向大家介绍CodeIgniter使用smtp服务发送html邮件的方法,包括了CodeIgniter使用smtp服务发送html邮件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了CodeIgniter使用smtp服务发送html邮件的方法。分享给大家供大家参考。具体如下: codeigniter 提供的email类,用于发送邮件, wiki地址: http://codeigni

  • 我想使用apache thrift开发一些本地网络服务。应该有多个服务等待一个主机连接到它们,并独占使用它们,直到主机释放它们。这些服务是用多种语言编写的。 之所以选择使用thrift,是因为我需要一些简单的远程过程调用机制,用于快速且支持多种语言的服务之间的通信。虽然thrift适合RPC,但我需要一些机制来通过一些自动发现机制定位服务TCP地址和端口,然后才能在不硬连接地址的情况下将thrif