Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

注意:使用前需要开启SMTP服务

案例:使用163邮箱来结合smtp模块发送邮件


准备工作:

注册或者登陆163邮箱,进入“设置”-->“POP3/SMTP/IMAP”,打开“POP3/SMTP服务”,短信验证后输入客户端授权密码保存


Python代码:

send_email.py:

import smtplib
from email.mime.text import MIMEText
from email.header import Header # 发送邮箱服务器
smtpserver = "smtp.163.com" # 发送邮箱用户名密码
user = "nancyrm2018@163.com"
password = "输入自己的客户端授权密码" # 发送和接收邮箱
sender = "nancyrm2018@163.com"
receive = "nancyrm2018@126.com" # 发送邮件主题和内容
subject = "Web Selenium 自动化测试报告"
content = "<html><h1 style='color:red'>自动化测试,自学成才</h1></html>" # HTML邮件正文
msg = MIMEText(content, 'html', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = "nancyrm2018@163.com"
msg['To'] = "nancyrm2018@126.com" # SSL协议端口号要使用465
smtp = smtplib.SMTP_SSL(smtpserver, 465) # HELO向服务器标志用户身份
smtp.helo(smtpserver) # 服务器返回结果确认
smtp.ehlo(smtpserver) # 登录邮箱服务器用户名密码
smtp.login(user, password) print("Send email start...")
smtp.sendmail(sender, receive, msg.as_string())
smtp.quit()
print("email send end!")

代码分析:

我们可以使用SMTP对象的sendmail方法发送邮件,其中部分方法如下:
login(user,password)方法参数说明如下:

  • user:登录邮箱用户名
  • password:登录邮箱密码

sendmail(from_addr,to_addrs,msg,..)方法参数说明如下:

  • from_addr:邮件发送者地址
  • to_addrs:字符串列表,邮件发送地址
  • msg:发送信息

除SMTP模块,还用到了email模块,主要用来定义邮件的标题和正文:

Header()方法用来定义邮件标题

MIMETText()用于定义邮件正文,参数为html格式的文本。


实现结果:

登录126邮箱查看,显示内容如图:


 带附件的邮件:

Python代码:

from email.mime.multipart import MIMEMultipart
# ...
send_file = open(r"E:\python_script\123.png", "rb").read() att = MIMEText(send_file, "base64", 'utf-8')
att['Content-Type'] = 'application/octet-stream'
att['Content-Disposition'] = 'attachment;filename="logo.png"' msgRoot = MIMEMultipart()
msgRoot.attach(MIMEText(content, 'html', 'utf-8'))
msgRoot['Subject'] = subject
msgRoot['From'] = sender
msgRoot['To'] = ','.join(receives)
msgRoot.attach(att)
#...
smtp.sendmail(sender, receives, msgRoot.as_string())

Python自动发送邮件(可带附件)的更多相关文章

  1. 用Python自动发送邮件

    用Python自动发送邮件     最近需要在服务器上处理一些耗时比较长的任务,因此想到利用python写一个自动发送邮件的脚本,在任务执行完毕后发送邮件通知我.以下代码以163邮箱为例: 开通163 ...

  2. python发送邮件(带附件)

    python通过stmp发送qq邮件,带附件 import smtplib from email.mime.multipart import MIMEMultipart from email.mime ...

  3. python☞自动发送邮件

    一.SMTP 协议 SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式 二.smtplib ...

  4. 【Python】利用python自动发送邮件

    前言 在训练网络的过程中,需要大量的时间,虽然可以预估网络训练完成时间,但蹲点看结果着实有点不太聪明的亚子. 因此,参照师兄之前发的python利用smtp自动发邮件的代码,我作了些调整,并参照网上的 ...

  5. Python 自动发送邮件

    简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件.Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器 ...

  6. Appium+python 自动发送邮件(1)(转)

    (原文:https://www.cnblogs.com/fancy0158/p/10056091.html) SMTP:简单传输协议,实在Internet上传输Email的事实标准. Python的s ...

  7. python 发送email邮件带附件

    EMAIL功能实现: 1.发送EMAIL带附件,并且带压缩文件夹做为附件 #_*_coding:utf-8_*_ import smtplib from email.mime.text import ...

  8. VC++ 使用ShellExecute函数调用邮箱客户端发送邮件(可以带附件)

      之前写过一篇博文,通过MAPI实现调用邮箱客户端发送邮件带附件,当时对ShellExecute研究不深,以为ShellExecute不能带附件,因为项目需求原因(MAPI只能调用Foxmail和O ...

  9. JavaMail发送邮件、带附件邮件(完整版)

    工程目录如下: 1.准备javaMail需要的两个Jar包:mail.jar.activation.jar,然后add to build path 2.QQ邮箱开启SMTP服务,开启后,它会给你一串授 ...

随机推荐

  1. 导入maven的java web项目运行报错找不到Spring监听器

    本地成功运行的一个maven项目,在另一台机器复制下来并导入,运行时报错: java.lang.ClassNotFoundException: org.springframework.web.cont ...

  2. git 设置了ssh key 还是需要输入账户和密码

    参考这篇文章https://blog.csdn.net/shahuhu000/article/details/86625987 git remote remove origingit remote a ...

  3. (七)maven之阿里云镜像提高jar下载速度

    阿里云国内镜像,提高jar包下载速度 镜像 maven默认会从中央仓库下载包,但是下载过几次就知道,下载速度非常慢.镜像就相当于是中央仓库的一个副本,内容和中央仓库完全一样,而且同时也能保证下载速度, ...

  4. UVA116 Unidirectional TSP 单向TSP

    分阶段的DAG,注意字典序的处理和路径的保存. 定义状态d[i][j]为从i,j 出发到最后一列的最小花费,转移的时候只有三种,向上,向下,或平移. #include<bits/stdc++.h ...

  5. iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等

    PushSharp  (github) PushSharp是一个实现了由服务器端向移动客户端推送消息的开源C#库,支持 iOS (iPhone/iPad APNS). Android (C2DM/GC ...

  6. Google Colab的一些注意事项

    1.执行命令行前面加! 当我们使用python解释器时,我们需要不停地在命令行和IDE 之间切换,当我们需要使用命令行工具时.不过,Jupyter Notebook给了我们在notebook中运行sh ...

  7. jpeg和jpg的区别是什么

    JPG是JPEG的简写,jpg是后缀名,jpeg既可作为后缀名,又能代表文件格式:JPG——JPEG文件格式. 我们在系统自带的画图程序里保存文件,在保存类型:JPEG(*.JPG,*.JPEG,*. ...

  8. Python-DB接口规范

    threadsafety 线程安全级别.threadsafety 这是一个整数, 取值范围如下: 0:不支持线程安全, 多个线程不能共享此模块 1:初级线程安全支持: 线程可以共享模块, 但不能共享连 ...

  9. C++的反射

    写得挺不错,支持转帖下 C++语言本身是不支持反射的,但实际应用中总是会有将对象序列化的需求,总不可能C++不支持,我们就不用C++了,既然发明C++的大师们没有考虑这个,那我们只有自己动手了,毛主席 ...

  10. 字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入n个学生的姓名和学号到字符串数组中,在输入一个姓名,如果班级有该生则返回其信息,否则返回本班无此人

    输入3个字符串,要求按由小到大的字母顺序输出 如 输入franch england china,输出结果是china england franch 三个数排序输出,比较三个数的大小怎么做? a=18 ...