python

Python发送带附件的邮件

2019-08-22  本文已影响22人  yiming1012

文章作者:易明
个人博客:https://yiming1012.github.io
简书主页:https://www.jianshu.com/u/6ebea55f5cec
邮箱地址:1129079384@qq.com

简介

    在工作中可能会遇到将生成的文件以邮件的方式发送给他人。通过SMTP(Simple Mail Transfer Protocol)简单邮件传输协议来发送邮件。这里主要用到Python中两个库:

1. smtplib #对smtp协议进行了封装
2. email   #用来创建邮件

SMTP服务

    以QQ邮箱为例,首先需要开启SMTP服务,并获取授权码(程序中需要用到)。步骤是:设置-账户-开启服务-生成授权码

导入相关库

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

参数说明

mail_host = "smtp.qq.com"  # 设置服务器
mail_user = "1129079384@qq.com"  # 用户名
mail_pass = "XXXX"  # 授权码而非邮箱密码
receivers = ['1129079384@qq.com', '123456789@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

创建邮件

    标准邮件一般需要三个头部信息: From、To和Subject。先创建一个带附件的实例,然后分别设置各个信息。

msg = MIMEMultipart()  # 创建一个带附件的实例
msg["Subject"] = "Tomorrow is another day" #指定邮件主题
msg["From"] = mail_user  #邮件发送人
msg["To"] = ','.join(receivers) #邮件接收人,如果存在多个收件人,可用join连接

编辑邮件

# ---文字部分---
part = MIMEText("请查收,谢谢!")
msg.attach(part)

# ---附件部分---
part = MIMEApplication(open('test.xlsx', 'rb').read())
part.add_header('Content-Disposition', 'attachment', filename="test.xlsx")
msg.attach(part)

发送邮件

    通过实例化smtplib模块的SMTP对象来连接到SMTP访问,并使用sendmail方法来发送信息。

try:
    s = smtplib.SMTP("smtp.qq.com", timeout=30)  # 连接smtp邮件服务器,端口默认是25
    s.login(mail_user, mail_pass)  # 登陆服务器
    s.sendmail(mail_user, receivers, msg.as_string())  # 发送邮件
    s.close()
except Exception as e:
    print("error:", e)

发送成功

完整代码请参考:https://github.com/yiming1012/coding/blob/master/SmtpDemo.py

上一篇 下一篇

猜你喜欢

热点阅读