一、概述

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

在之前的文章中

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. APP手势密码绕过

    之前写的文章收到了很多的好评,主要就是帮助到了大家学习到了新的思路.自从发布了第一篇文章,我就开始筹备第二篇文章了,最终打算在07v8首发,这篇文章我可以保障大家能够学习到很多思路.之前想准备例子视频 ...

  2. c# 读取数据库得到dateset

    public DataSet GetCraftInformation(string connectionString, string opName, string productType)       ...

  3. WorkFlow二:简单的发邮件工作流

    1.使用事物代码SWDD.默认进入如下: 2.点击新建再点击转到抬头. 3.填写基础信息,工作流名称和描述.之后点击保存并返回. 这时候工作流的名字从之前的未命名改变了,工作流ID也根据上篇配置的前序 ...

  4. current transaction is aborted, commands ignored until end of transaction block

    current transaction is aborted, commands ignored until end of transaction block Error updating datab ...

  5. day 68

    目录 表单指令 条件指令 循环指令 分隔符 过滤器 计算属性 监听属性 表单指令 v-model="变量",变量值与表单标签的value相关 v-model可以实现数据的双向绑定, ...

  6. Ubuntu Pycharm下deeplab ImportError: cannot import name 'monitoring'

    1.使用pycharm运行deeplab过程中出现ImportError: cannot import name 'monitoring' 2.把root用户及非root用户中pip安装的tensor ...

  7. eclipse 工作空间配置UTF-8编码格式

    配置前端页面编码格式 1. Windows-->preferences 2. web-->jsp file-->Encoding 3. OK保存  配置java文件编码格式 1. W ...

  8. js实现时分秒毫秒计时器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. bootm跳转到kernel的流程

    转自 https://blog.csdn.net/ooonebook/article/details/53495021 一.bootm说明 bootm这个命令用于启动一个操作系统映像.它会从映像文件的 ...

  10. LOJ#107. 维护全序集(FHQ Treap)

    题面 传送门 题解 板子,没啥好说的 //minamoto #include<bits/stdc++.h> #define R register #define inline __inli ...