一、概述

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

在之前的文章中

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

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

二、正式代码

send_mail.py

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

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

ModuleNotFoundError: No module named 'email.utils'; 'email' is not a package

完整内容如下:

#!/usr/bin/env python3
# coding: utf- 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 = '' # 系统账户密码 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

python3使用smtplib发送邮件,带xlsx附件的更多相关文章

  1. iOS12系统应用发送邮件中的附件

    iOS12系统应用发送邮件中的附件 iOS12系统应用发送邮件中的附件,如果发送邮件的内容很多,或者包含文档.图片等,可以以附件的形式进行发送.此时需要使用addAttachmentData(_:mi ...

  2. 接口测试基础——第3篇smtplib发送带图片的邮件

    smtplib发送邮件最后一篇,发送带图片的邮件: 大家可以去廖雪峰的网站看一下,下面的代码就是我跟着博客写的,哈哈,大家即使不明白为什么,也要多写两遍,记在心里,如果有不明白的地方可以留言,船长会第 ...

  3. ASP.NET用QQ,网易发送邮件以及添加附件

    教程:ASP.NET用QQ,网易发送邮件以及添加附件 这是我用QQ邮箱出现的异常: 命令顺序不正确. 服务器响应为:Error: need EHLO and AUTH first !无法从传输连接中读 ...

  4. Python3.x:访问带参数链接并且获取返回json串

    Python3.x:访问带参数链接并且获取返回json串 示例一: import json import xml.dom.minidom from urllib import request, par ...

  5. 使用JavaMail发送邮件(含文本/附件/图片)的工具类

    记录利用公司内搭建的smtp邮件服务器,使用javax mail发送邮件的程序 package com.test.mailTest; import java.util.Date; import jav ...

  6. springboot发送邮件(含附件)

    引入maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  7. python3.7发送邮件带附件

    代码: 1 # -*- coding: utf-8 -*- 2 3 import smtplib, ssl 4 from email.mime.text import MIMEText 5 from ...

  8. 接口测试基础——第2篇smtplib发送带附件的邮件

    我先给大家补充一个用QQ发送纯文本电子邮件的代码,用QQ的朋友可以参考一下: # coding=utf-8 import smtplib from email.mime.text import MIM ...

  9. python3 smtplib发送邮件

    使用smtp包发送邮件还依赖email的一些方法 发送邮件主要分为三步: 1,定义邮箱参数:邮箱服务器地址,邮箱用户名,邮箱密码,邮件发送方,邮件接收方,邮件标题,邮件内容 2,配置发送内容 3,实例 ...

随机推荐

  1. 函数使用十一:BAPI_BANK_CREATE

    FI01创建银行主数据: BAPI:BAPI_BANK_CREATE *&----------------------------------------------------------- ...

  2. yaml格式配置文件

    YAML 是一种可读性非常高,与程序语言数据结构非常接近.同时具备丰富的表达能力和可扩展性,并且易于使用的数据标记语言. python中处理 Yaml 格式的数据需要先下载pyyaml: pip in ...

  3. c#引用c++dll和c++导出类出现的各种问题

    最近对一些第三方类库进行c++托管以便c#调用  因为之前没弄过,出现各种各样的问题 fatal error LNK1104: 无法打开文件“xxx.lib”或者xxx.dll 等等等 总结: 1.字 ...

  4. 实验十四 团队项目评审&个人学习总结

    实验十四 课程学习总结 项目 内容 这个作业属于哪个课程 (https://www.cnblogs.com/nwnu-daizh/) 这个作业的要求在哪里 (https://www.cnblogs.c ...

  5. 小人大作战v0.02原型(单机)发布

    运行环境,pc,windows 链接:https://pan.baidu.com/s/1X5XR0flRAVuinnydNyRNng 提取码:cp9q 复制这段内容后打开百度网盘手机App,操作更方便 ...

  6. dedecms手机站和PC站共用同一数据库的方法

    我们知道搜索引擎建议将手机站和PC站分开,虽然自适应可以适配不同的终端,但单独建独立的m站可能权重和排名更好,因为移动端的竞争度不同甚至更低.代码更精简.蜘蛛抓取更顺畅,所以要单独建手机站比较好.那么 ...

  7. hbase的javaAPI

    https://www.cnblogs.com/tiantianbyconan/p/3557571.html hbase和dataFrame之间的互相转换: https://stackoverflow ...

  8. 【转】编写高质量代码改善C#程序的157个建议——建议56:使用继承ISerializable接口更灵活地控制序列化过程

    建议56:使用继承ISerializable接口更灵活地控制序列化过程 接口ISerializable的意义在于,如果特性Serializable,以及与其像配套的OnDeserializedAttr ...

  9. 【pytorch】持续踩坑 & 错误解决经历

    报错 1.[invalid argument 0: Sizes of tensors must match except in dimension 0.] {出现在 torch.utils.data. ...

  10. Educational Codeforces Round 78 (Rated for Div. 2) B - A and B(思维)