现在我来为你详细说明“Python自动化办公之定时发送邮件的实现”的完整攻略。
1. 前置条件
在使用Python进行自动化邮件发送前,我们需要配置好SMTP服务器等信息。这通常包括:
- 发件人邮箱地址;
- STMP服务器地址;
- SMTP服务器端口号;
- 发件人邮箱的授权码。
2. 实现步骤
2.1 安装必要的库
我们需要用到Python内置的smtplib库和email库。可以使用pip命令来进行安装:
pip install smtplib
pip install email
2.2 连接SMTP服务器
首先,我们需要通过smtplib库连接SMTP服务器。如果连接成功,我们就可以发送邮件了。代码如下:
import smtplib
smtp_server = "smtp.163.com" # SMTP服务器地址
smtp_port = 465 # SMTP服务器端口
account = "example@163.com" # 发送邮件的邮箱地址
password = "your_password" # 邮箱授权码
smtp_conn = smtplib.SMTP_SSL(smtp_server, smtp_port)
smtp_conn.login(account, password)
2.3 创建邮件内容
接下来,我们需要使用email库创建邮件内容。它提供了Message和MIMEText类,前者用于创建纯文本邮件,后者则可创建包含HTML内容的邮件。示例如下:
from email.mime.text import MIMEText
from email.header import Header
# 邮件内容
mail_body = "这是一封测试邮件。"
# 创建邮件格式
msg = MIMEText(mail_body, "plain", "utf-8")
msg['Subject'] = Header('测试邮件', 'utf-8')
msg['From'] = Header('发件人名称', 'utf-8')
msg['To'] = Header('收件人名称', 'utf-8')
2.4 设置邮件发送时间
接着,我们需要通过sched库设置邮件发送时间。sched是Python的标准库,用于调度任务的执行时间。我们可以使用其schedule方法,传入一个时间戳和一个任务函数,当时间戳达到时,任务函数就会被执行。代码如下:
import sched, time
s = sched.scheduler(time.time, time.sleep)
def send_mail():
smtp_conn.sendmail(account, recipient, msg.as_string())
now = time.time()
send_time = now + 60 # 延迟60秒后发送
s.enterabs(send_time, 0, send_mail, ())
s.run()
2.5 发送邮件
最后,我们只需要在任务函数里调用SMTP的sendmail方法发送邮件即可。代码如下:
def send_mail():
smtp_conn.sendmail(account, recipient, msg.as_string())
示例一
假设我们要在2022年1月1日早上9点整发送一封新年祝福邮件给我们的朋友,那么代码可以这么写:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import sched, time
smtp_server = "smtp.163.com" # SMTP服务器地址
smtp_port = 465 # SMTP服务器端口
account = "example@163.com" # 发送邮件的邮箱地址
password = "your_password" # 邮箱授权码
recipient = "xxx@qq.com" # 收件人邮箱地址
# 创建邮件内容
mail_body = "祝你们2022年新年快乐!"
msg = MIMEText(mail_body, "plain", "utf-8")
msg['Subject'] = Header('新年祝福', 'utf-8')
msg['From'] = Header('发件人名称', 'utf-8')
msg['To'] = Header('收件人名称', 'utf-8')
# 连接SMTP服务器
smtp_conn = smtplib.SMTP_SSL(smtp_server, smtp_port)
smtp_conn.login(account, password)
# 设置邮件发送时间
s = sched.scheduler(time.time, time.sleep)
send_time = time.mktime(time.strptime("2022-01-01 09:00:00", "%Y-%m-%d %H:%M:%S"))
def send_mail():
smtp_conn.sendmail(account, recipient, msg.as_string())
s.enterabs(send_time, 0, send_mail, ())
s.run()
smtp_conn.quit()
这段代码会在2022年1月1日9点整发送一封祝福邮件给我们的朋友。
示例二
假设我们现在要每天晚上9点给自己发送日报邮件,邮件内容包括今天的工作内容、成果、存在的问题等信息。代码可以写成这样:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import sched, time
import datetime
smtp_server = "smtp.163.com" # SMTP服务器地址
smtp_port = 465 # SMTP服务器端口
account = "example@163.com" # 发送邮件的邮箱地址
password = "your_password" # 邮箱授权码
recipient = "xxx@163.com" # 收件人邮箱地址
# 连接SMTP服务器
smtp_conn = smtplib.SMTP_SSL(smtp_server, smtp_port)
smtp_conn.login(account, password)
while True:
# 获取当前时间
now = datetime.datetime.now()
# 判断是否到了发送邮件的时间(每天晚上9点)
if now.hour == 21 and now.minute == 0 and now.second == 0:
# 创建邮件内容
mail_body = "今天的工作内容:\n- xxx\n\n今天的成果:\n- xxx\n\n存在的问题:\n- xxx"
msg = MIMEText(mail_body, "plain", "utf-8")
msg['Subject'] = Header('日报', 'utf-8')
msg['From'] = Header('发件人名称', 'utf-8')
msg['To'] = Header('收件人名称', 'utf-8')
smtp_conn.sendmail(account, recipient, msg.as_string())
# 等待一段时间(比如30秒)
time.sleep(30)
smtp_conn.quit()
这段代码会在每天晚上9点整给自己发送一封日报邮件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python自动化办公之定时发送邮件的实现 - Python技术站