前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3使用smtplib发送邮件,带xlsx附件

python3使用smtplib发送邮件,带xlsx附件

作者头像
py3study
发布2020-03-13 09:10:12
3.6K1
发布2020-03-13 09:10:12
举报
文章被收录于专栏:python3

一、概述

最近在做一个统计报表,需要发送邮件,并带附件的。

在之前的文章中

https://www.cnblogs.com/xiao987334176/p/10022026.html

已经实现了发送邮件,但是没有实现发送附件功能。

二、正式代码

send_mail.py

注意:此文件名不能是email.py

因为email是python自带的,否则会报错

代码语言:javascript
复制
ModuleNotFoundError: No module named 'email.utils'; 'email' is not a package

完整内容如下:

代码语言:javascript
复制
#!/usr/bin/env python3
# coding: utf-8


import smtplib  # 加载smtplib模块
from email.mime.text import MIMEText
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

class SendMail(object):
    def __init__(self,sender,title,content):
        self.sender = sender  #发送地址
        self.title = title  # 标题
        self.content = content  # 发送内容
        self.sys_sender = '123456@163.com'  # 系统账户
        self.sys_pwd = '123456'  # 系统账户密码

    def send(self,file_list):
        """
        发送邮件
        :param file_list: 附件文件列表
        :return: bool
        """
        try:
            # 创建一个带附件的实例
            msg = MIMEMultipart()
            # 发件人格式
            msg['From'] = formataddr(["技术服务部", self.sys_sender])
            # 收件人格式
            msg['To'] = formataddr(["", self.sender])
            # 邮件主题
            msg['Subject'] = self.title

            # 邮件正文内容
            msg.attach(MIMEText(self.content, 'plain', 'utf-8'))

            # 多个附件
            for file_name in file_list:
                print("file_name",file_name)
                # 构造附件
                xlsxpart = MIMEApplication(open(file_name, 'rb').read())
                # filename表示邮件中显示的附件名
                xlsxpart.add_header('Content-Disposition','attachment',filename = '%s'%file_name)
                msg.attach(xlsxpart)

            # SMTP服务器
            server = smtplib.SMTP_SSL("smtp.163.com", 465,timeout=10)
            # 登录账户
            server.login(self.sys_sender, self.sys_pwd)
            # 发送邮件
            server.sendmail(self.sys_sender, [self.sender, ], msg.as_string())
            # 退出账户
            server.quit()
            return True
        except Exception as e:
            print(e)
            return False

if __name__ == '__main__':
    # 发送地址
    sender = "88888888@qq.com"
    # 标题
    title = "统计"
    # 发送内容
    content = "2019-11-01 ~ 2019-11-30 统计,见附件!"
    # 附件列表
    file_list = ["工作.xls","外出.xls"]
    ret = SendMail(sender, title, content).send(file_list)
    print(ret,type(ret))

注意:附件是和python文件在同一目录,请根据实际情况,修改附件的路径。

阿里云服务器,从即日起,不再提供25端口邮件服务 。必须使用SSL加密465端口发信!

所以上面的代码中,改成了SMTP_SSL,并使用了465端口。

执行脚本,查看邮件,效果如下:

本文参考链接:

https://blog.csdn.net/sempronx86/article/details/83753689

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、正式代码
    • send_mail.py
    相关产品与服务
    SSL 证书
    腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档