如何编写Python代码通过SMTP服务实现自动发送电子邮件的详细步骤?

2026-04-20 10:451阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1648个文字,预计阅读时间需要7分钟。

如何编写Python代码通过SMTP服务实现自动发送电子邮件的详细步骤?

需求背景:设计一个定时任务,每天定时使用Python测试服务是否正常运行,但又不希望每天登录系统后台查看服务状态。

解决方案:我们可以采用Python的SMTP模块来实现自动发送邮件通知,当服务正常运行时发送成功邮件,当服务异常时发送报警邮件。以下是实现步骤:

1. 使用Python的SMTP模块配置邮件服务器,设置发件人和收件人信息。

2.编写测试服务运行状态的Python脚本,判断服务是否正常运行。

3.根据测试结果,发送相应的邮件通知。

示例代码:

python

import smtplibfrom email.mime.text import MIMETextfrom email.header import Headerimport time

如何编写Python代码通过SMTP服务实现自动发送电子邮件的详细步骤?

邮件服务器配置smtp_server='smtp.example.com'smtp_port=465 # SSL端口sender_email='sender@example.com'receiver_email='receiver@example.com'password='your_password'

测试服务运行状态的函数def check_service_status(): # 在这里编写测试服务运行状态的代码 # 返回True表示服务正常运行,返回False表示服务异常 return True

发送邮件的函数def send_email(subject, content): message=MIMEText(content, 'plain', 'utf-8') message['From']=Header(sender_email) message['To']=Header(receiver_email) message['Subject']=Header(subject)

try: server=smtplib.SMTP_SSL(smtp_server, smtp_port) server.login(sender_email, password) server.sendmail(sender_email, [receiver_email], message.as_string()) server.quit() print(邮件发送成功) except smtplib.SMTPException as e: print(邮件发送失败, e)

定时任务while True: if check_service_status(): send_email(服务运行正常, 服务运行正常) else: send_email(服务异常, 服务异常,请检查!) time.sleep(86400) # 等待24小时

注意:在实际使用中,需要将邮件服务器配置、发件人、收件人和密码等信息替换为实际值。同时,根据实际情况修改测试服务运行状态的函数`check_service_status()`。

需求背景

假设我们想设计一个定时任务,比如每天定时的用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

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

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

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

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

本文共计1648个文字,预计阅读时间需要7分钟。

如何编写Python代码通过SMTP服务实现自动发送电子邮件的详细步骤?

需求背景:设计一个定时任务,每天定时使用Python测试服务是否正常运行,但又不希望每天登录系统后台查看服务状态。

解决方案:我们可以采用Python的SMTP模块来实现自动发送邮件通知,当服务正常运行时发送成功邮件,当服务异常时发送报警邮件。以下是实现步骤:

1. 使用Python的SMTP模块配置邮件服务器,设置发件人和收件人信息。

2.编写测试服务运行状态的Python脚本,判断服务是否正常运行。

3.根据测试结果,发送相应的邮件通知。

示例代码:

python

import smtplibfrom email.mime.text import MIMETextfrom email.header import Headerimport time

如何编写Python代码通过SMTP服务实现自动发送电子邮件的详细步骤?

邮件服务器配置smtp_server='smtp.example.com'smtp_port=465 # SSL端口sender_email='sender@example.com'receiver_email='receiver@example.com'password='your_password'

测试服务运行状态的函数def check_service_status(): # 在这里编写测试服务运行状态的代码 # 返回True表示服务正常运行,返回False表示服务异常 return True

发送邮件的函数def send_email(subject, content): message=MIMEText(content, 'plain', 'utf-8') message['From']=Header(sender_email) message['To']=Header(receiver_email) message['Subject']=Header(subject)

try: server=smtplib.SMTP_SSL(smtp_server, smtp_port) server.login(sender_email, password) server.sendmail(sender_email, [receiver_email], message.as_string()) server.quit() print(邮件发送成功) except smtplib.SMTPException as e: print(邮件发送失败, e)

定时任务while True: if check_service_status(): send_email(服务运行正常, 服务运行正常) else: send_email(服务异常, 服务异常,请检查!) time.sleep(86400) # 等待24小时

注意:在实际使用中,需要将邮件服务器配置、发件人、收件人和密码等信息替换为实际值。同时,根据实际情况修改测试服务运行状态的函数`check_service_status()`。

需求背景

假设我们想设计一个定时任务,比如每天定时的用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

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

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

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

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