# coding: utf-8

 import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
import re def e_mail(smtpserver ='smtp.163.com',
username='自己邮箱账号',
password='自己邮箱授权码',
receiver='目标邮箱地址',
subject='邮件主题',
text='邮件内容',
sendfiles=None, # 附件
): """
此函数用以发送邮件
参数说明:smtpserver为smtp服务器
username为发送者邮箱用户名
password为发送者邮箱密码/授权码
receiver为接收者邮箱(可以有多个,用','分隔)
subject为邮件主题
text为邮件内容
sendfiles为附件路径(可以有多个,用','分隔)
注:所有参数均为字符串类型 """ # 发件人
sender = username # 收件人(可以为多个收件人)
# receivers = ['aaakkkbbbaaa2@163.com', 'liwei@staff.cntv.cn']
receivers = []
for i in receiver.split(','):
receivers.append(i) # 邮件标题
subject = Header(subject, 'utf-8').encode() # 邮件内容
main_body = text # 构造邮件对象
msg = MIMEMultipart('mixed') # 将邮件标题、发件人、收件人加入邮件对象。
msg['Subject'] = subject
msg['From'] = '%s <%s>' % (username, username)
# msg['To'] = 'XXX@126.com'
# 收件人为多个收件人,通过join将列表转换为以;为间隔的字符串
msg['To'] = ";".join(receivers)
# msg['Date']='2012-3-16' # 将邮件内容加入邮件对象
if text:
# 编码文字内容
text_plain = MIMEText(main_body, 'plain', 'utf-8')
# 将文字内容加入邮件对象
msg.attach(text_plain) # 将附件加入邮件对象
if sendfiles:
# 遍历所有附件
for i in sendfiles.split(','):
# 加载附件
sendfile = open(r'%s' % i, 'rb')
sendfile = sendfile.read()
text_att = MIMEText(sendfile, 'base64', 'utf-8')
text_att["Content-Type"] = 'application/octet-stream'
# 为附件命名
try:
file_name = re.match(r'.*[\\/](.*)$', i).group(1)
except AttributeError:
file_name = i
text_att.add_header('Content-Disposition', 'attachment', filename=file_name)
# 将附件加入邮件对象
msg.attach(text_att) # 发送邮件
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
# 用set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息。
# smtp.set_debuglevel(1)
smtp.login(username, password)
smtp.sendmail(sender, receivers, msg.as_string())
smtp.quit()
return '邮件发送完毕' if __name__ == '__main__':
e_mail(sendfiles=r'C:\Users\Administrator\Desktop\结果.png,C:\Users\Administrator\Desktop\Agent说明文档.txt')

自定义了一个email模块,符合大多数人的使用习惯的更多相关文章

  1. python email模块

    python email模块 官方文档 email模块 电子邮件包是一个用于管理电子邮件消息的库.它的特殊设计不用于向SMTP (RFC 2821).NNTP或其他服务器发送任何电子邮件消息;这些是模 ...

  2. Python_使用smtplib和email模块发送邮件

    [http://blog.csdn.net/menglei8625/article/details/7721746] SMTP (Simple Mail Transfer Protocol) 邮件传送 ...

  3. C程序中引用自定义的C函数模块

    原文:C程序中引用自定义的C函数模块 我们知道,刚开始接触C语言编程,一般都是在一个.c或者.cpp(以下只说.c)的文件中编写代码,其中一定会有一个入口函数, 也就是main()函数,你可以将程序代 ...

  4. python email ==> send 发送邮件 :) [smtplib, email 模块]

    关于Email的预备知识: 原贴地址:http://www.cnblogs.com/lonelycatcher/archive/2012/02/09/2343480.html ############ ...

  5. 使用spring EL表达式+自定义切面封装缓存模块

    需求是这样的,业务代码需要使用到缓存功能以减少数据库压力,使用redis来实现,并且需要生成缓存的key由方法的传参拼接而成(貌似也只能这样才能保证同样的select查询可以使用缓存),简单的方式就是 ...

  6. python+selenium之自定义封装一个简单的Log类

    python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...

  7. smtplib与email模块(实现邮件的发送)

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块,email负责构造邮件, ...

  8. Python使用SMTP模块、email模块发送邮件

    一.smtplib模块: 主要通过SMTP类与邮件系统进行交互.使用方法如下: 1.实例化一个SMTP对象: s = smtplib.SMTP(邮件服务地址,端口号) s = smtplib.SMTP ...

  9. Python之自定义封装一个简单的Log类

    参考:http://www.jb51.net/article/42626.htm 参考:http://blog.csdn.net/u011541946/article/details/70198676 ...

随机推荐

  1. usb2.0、usb3.0、usb3.1、type-c 接口含义与区别

    简单说: usb3.0 比2.0的传输速率快,充电快,能向下兼容2.0 usb3.1 通常是指 usb3.1 gen2,比3.0的传输速率更快.充电更快,同兼容 type-c 通常是指 usb3.1的 ...

  2. servlet概述(作业11)

    1.什么是servlet. Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能 ...

  3. REdis MASTER aborted replication NOAUTH Authentication required

    对于REdis集群,如果设置了requirepass,则一定要设置masterauth,否则从节点无法正常工作,查看从节点日志可以看到哪下内容:19213:S 22 Apr 2019 10:52:17 ...

  4. OpenCV Mat格式存储YUV图像

    YUV图像用的比较多,而且YUV图像的格式众多(YUV格式可以参考YUV pixel formats),如何用OpenCV的Mat类型来存储YUV图像也是经常遇到的问题. 对于YUV444图像来说,就 ...

  5. OC字典的使用

    在OC中,字符串.数组.字典是最常见的对象类型,但是在这三个当中,字典的用法相对较少,因为字典的属性和方法比较少,但是一个字典的用法比较复杂,因为在一个字典当中,既可以包含字符串,也可以包含数组,数组 ...

  6. 更改了ssh文件下,还没有权限

    执行 cd /root/.ssh chmod 600 id_*

  7. 反射 XML和JSON

    反射: 反射概念:在运行状态中,对于任意一个类都能知道这个类的所有方法和属性:对于任意一个对象,都能调用它的任意一个方法和属性,这种动态获取信息以及动态调用对象的方法的功能称为反射机制.java反射相 ...

  8. IDEA引入spring的命名空间

    我们在写spring的配置文件的时候,有的时候可能会用到 P 标签,然后我们发现自己并没有p标签啊,那么我们一起来看我是怎么解决的. 首先在我们的xml文件的首部添上这句话: xmlns:contex ...

  9. python的无限循环及退出

    题目要求如下: 1 循环验证用户输入的用户名与密码 2 认证通过后,运行用户重复执行命令 3 当用户输入命令为quit时,则退出整个程序  代码如下 person={'name':'Helen','p ...

  10. UDF函数 解码url

    背景 URL 的编码 是ASCII十六进制格式.数仓接受到前端上报的URL,要对URL字段解码. 如要将 https"Fmybook.do%3Frequest_type%3D%26type% ...