python自动发送邮件


Python通过两个内置库: smtplibemail,实现邮件功能。 smtplib库负责发送邮件, email库负责构造邮件格式和内容。

邮件发送需要遵守SMTP协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

Python代码示例

from smtplib import SMTP
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header


def create_attach(file_path, filename=None):
    # 构造邮件附件
    filename = file_path.split('/')[-1] if filename is None else filename
    print('Attach File: ', filename)
    attach = MIMEText(open(file_path, 'rb').read(), 'base64', 'utf-8')
    attach["Content-Type"] = 'application/octet-stream'
    attach["Content-Disposition"] = f'attachment; filename="{filename}"'  # 这里的filename可以任意,写什么名字,邮件中显示什么名字
    return attach


def send_email(mail_sender, mail_pass, mail_receivers, subject, message, file_list=[], name_sender=None, name_receiver=None):
    """发送邮件

    Args:
        mail_sender (str): 发送者的邮箱地址
        mail_pass (str): 邮箱smtp授权码
        mail_receivers (list): 接收者的邮箱地址
        subject (str): 邮件主题
        message (str): 邮件正文
        file_list (list): 邮件附件文件路径列表
        name_sender (str): 发送者昵称
        name_receiver (str): 接收者昵称
    """

    type = 'plain'
    name_sender = mail_sender if name_sender is None else name_sender
    name_receiver = 'hello' if name_receiver is None else name_receiver
    header_from = f'{name_sender} <{mail_sender}>'
    header_to = name_receiver

    print('From:        ', header_from)
    print('To:          ', header_to)
    print('Subject:     ', subject)
    print('Text:        ', message)

    email = MIMEMultipart()
    email["From"] = Header(header_from)
    email["To"] = Header(header_to, "utf-8")
    email['Subject'] = Header(subject, 'utf-8')
    # 添加正文
    email.attach(MIMEText(message, type, 'utf-8'))
    # 添加附件
    for file_path in file_list:
        att = create_attach(file_path)
        email.attach(att)

    # email = MIMEText(message, type, "utf-8")
    # email["From"] = Header(header_from)
    # email["To"] = Header(header_to, "utf-8")
    # email["Subject"] = Header(subject, "utf-8")

    try:
        mail_host = "smtp.qq.com"  # SMTP服务器
        server = SMTP(mail_host)   # 设置服务器
        server.login(mail_sender, mail_pass)
        server.sendmail(mail_sender, mail_receivers, email.as_string())
        server.quit()
        print('邮件发送成功!')
    except:
        print('邮件发送失败!')


if __name__=='__main__':
    mail_sender    = '242***@qq.com'      # 发送者的邮箱地址
    mail_pass      = "********"           # QQ邮箱smtp授权码
    mail_receivers = ['***@163.com']      # 接收者的邮箱地址
    subject        = 'TEST2-2'            # 邮件主题
    message        = 'HelloPython'        # 邮件正文
    file_list      = ['./create_gif.py']  # 邮件附件
    name_sender    = '123'                # 发送者昵称
    name_receiver  = '234'                # 接收者昵称
    send_email(mail_sender, mail_pass, mail_receivers, subject, message, file_list=file_list, 
            name_sender=name_sender, name_receiver=name_receiver)

设置QQ邮箱授权码

在这里插入图片描述

在这里插入图片描述

运行效果

在这里插入图片描述

参考

https://blog.youkuaiyun.com/libaiup/article/details/129832967

https://zhuanlan.zhihu.com/p/624812616?utm_id=0

https://blog.youkuaiyun.com/m0_64336780/article/details/126186424

https://www.jb51.net/article/283712.htm

https://www.runoob.com/python/python-email.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值