一、安装需要的模块
pip install yagmail #专门为gmail设计的邮件发送模块,可以极大简化邮件发送流程,其他邮箱也可以使用
pip install keyring #安全密码管理,避免代码中硬编码密码等敏感信息
pip install schedule #任务调度
pip install mbox #邮件处理
二、常用示例
1.存储和读取密码
import keyring
import yagmailyagmail.register('960193682@qq.com', 'password') # 只要注册一遍,后面使用就不需要密码了,如果密码改了再次使用新密码注册即可
password = keyring.get_password("yagmail", "96019xxx@qq.com") #获取密码
print(password)
2.发送邮件
import yagmailyag = yagmail.SMTP(user='9601xxxx@qq.com', host='smtp.qq.com', port=465) # 如果用户名已经注册过,密码就不需要填了,否则填入密码即可
# 除了文本,HTML也可以直接写,添加附件直接指定文件路径,当前目录可以不写前缀,如 test.png,如果附件需要展示在正文需要 可以使用inline参数指定
contents = ['文本内容', '<a href="https://www.baidu.com">百度搜索</a>', 'test.png', yagmail.inline('test.png')]
yag.send('xxxx@cheryholxxx.com', '测试邮件', contents) # 如果是群发,收件人使用列表格式
3.定时发送
#官方示例
import schedule
import timedef job(): # 把job换成我们发送邮件的函数即可print("I'm working...")schedule.every(10).minutes.do(job) # 每10分钟执行一次
schedule.every(5).to(10).minutes.do(job) # 每5~10分钟执行一次
schedule.every().hour.do(job) #每小时执行一次
schedule.every().day.at("10:30").do(job) #每天 10:30 执行
schedule.every().monday.do(job) #每周一执行
schedule.every().wednesday.at("13:15").do(job) #每周三执行13:15
schedule.every().day.at("12:42", "Europe/Amsterdam").do(job) #Europe/Amsterdam时区的每天12:42执行
schedule.every().minute.at(":17").do(job) #每分钟的第17秒执行while True:schedule.run_pending()time.sleep(1)参考文档:https://schedule.readthedocs.io/en/stable/
4.接收与查找邮件
import keyring
from imbox import Imboxpassword = keyring.get_password("yagmail", "9601xxxx@qq.com")
print(password)with Imbox('imap.qq.com', '9601xxxx@qq.com', password, port=993,ssl=True) as imbox:all_inbox_messages = imbox.messages() # 读取所有邮件for uid, message in all_inbox_messages: # uid可以查找到邮件,后续可以做标记或者删除print(uid)print(message.subject) # 常用读取参数见下方print(message.body['plain'])#imbox.messages() 从服务端获取邮件时可以的参数
unread: 未读邮件
flagged: 红旗/标星邮件
unflagged: 非红旗/标星邮件
sent_from': 某发件人邮件
sent_to: 某收件人邮件
date__gt: 某时间之前的邮件 值格式为:datetime.data(2025,09,09) 年月日
date__lt: 某时间之后的邮件
date__on: 某天的邮件
subject: 邮件主体
uid__range': 邮件编号
text': 邮件内容#message.xxx 单个邮件读取时可用参数
发件人:message.sent_from
收件人:message.sent_to
主题:message.subject
时间:message.date
文本格式内容:message.body['plain']
HTML格式内容:message.body['html']
附件:message.attachments