python yagmail 模块自动化操作邮件

一、安装需要的模块

pip install yagmail  #专门为gmail设计的邮件发送模块,可以极大简化邮件发送流程,其他邮箱也可以使用
pip install keyring  #安全密码管理,避免代码中硬编码密码等敏感信息
pip install schedule #任务调度
pip install mbox     #邮件处理

二、常用示例

1.存储和读取密码

import keyring
import yagmail

yagmail.register('960193682@qq.com', 'password')  # 只要注册一遍,后面使用就不需要密码了,如果密码改了再次使用新密码注册即可
password = keyring.get_password("yagmail", "96019xxx@qq.com") #获取密码
print(password)

2.发送邮件

 

import yagmail

yag = 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 time

def 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 Imbox

password = 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

  

  

  

posted @ 2025-09-25 16:47  百衲本  阅读(14)  评论(0)    收藏  举报
cnblogs_post_body { color: black; font: 0.875em/1.5em "微软雅黑" , "PTSans" , "Arial" ,sans-serif; font-size: 15px; } cnblogs_post_body h1 { text-align:center; background: #333366; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 23px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h2 { text-align:center; background: #006699; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 20px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h3 { background: #2B6695; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 18px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } 回到顶部 博客侧边栏 回到顶部 页首代码 回到顶部 页脚代码