热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python代码实现发邮件

代码实现发邮件Python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。这里以QQ邮箱为例,首先要拿到授权码,这里登录你的QQ邮箱,在设置中


代码实现发邮件

Python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

这里以QQ邮箱为例,首先要拿到授权码,这里登录你的QQ邮箱,在设置中,选择账号选项,下拉到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务项,获取授权码。


以QQ邮箱为例,先把需要开启的任务弄好!!!

需要发其他邮箱请看博客https://www.cnblogs.com/Neeo/articles/11199127.html


发送普通文本邮件

import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 第三方 SMTP 服务
mail_host = "smtp.qq.com" # 设置服务器
mail_user = "[email protected]" # 用户名
mail_pass = "dfpcglacrjbybafa" # 获取授权码
sender = \[email protected]\' # 发件人账号
receivers = [\[email protected]\'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
send_cOntent= \'Python 邮件发送测试...\'
message = MIMEText(send_content, \'plain\', \'utf-8\') # 第一个参数为邮件内容,第二个设置文本格式,第三个设置编码
message[\'From\'] = Header("我是发件人", \'utf-8\') # 发件人
message[\'To\'] = Header("我是收件人", \'utf-8\') # 收件人
subject = \'邮件大标题\'
message[\'Subject\'] = Header(subject, \'utf-8\')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
except smtplib.SMTPException:
print("Error: 无法发送邮件")

运行结果如下:



发送HTML格式邮件

授权码都不变,只需将MIMEText的第二个参数的文本类型改一下即可:

改成html格式,相当于发的邮件内容是html页面的样子,send_cOntet= html前端的代码

import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 第三方 SMTP 服务
mail_host = "smtp.qq.com" # 设置服务器
mail_user = "[email protected]" # 用户名
mail_pass = "dfpcglacrjbybafa" # 口令
sender = \[email protected]\'
receivers = [\[email protected]\'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
send_cOntent= """
天不生我李淳罡
剑道万古如长夜

小二上酒



阅读请 点我,点我

"""
message = MIMEText(send_content, \'html\', \'utf-8\') # 第一个参数为邮件内容
message[\'From\'] = Header("我是发件人", \'utf-8\') # 发件人
message[\'To\'] = Header("我是收件人", \'utf-8\') # 收件人
subject = \'雪中悍刀行\'
message[\'Subject\'] = Header(subject, \'utf-8\')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
except smtplib.SMTPException:
print("Error: 无法发送邮件")

还有能发本地图片的邮件,我就不列举了,看博客https://www.cnblogs.com/Neeo/articles/11199127.html


发送带各式类型附件的邮件

发送带附件的邮件,首先要创建MIMEMultipart实例,然后在构建附件,如果有多个附件的话,可依次构建,最后利用smtplib.smtp发送:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
# 第三方 SMTP 服务
mail_host = "smtp.qq.com" # 设置服务器
mail_user = "[email protected]" # 用户名
mail_pass = "dfpcglacrjbybafa" # 口令
sender = \[email protected]\'
receivers = [\[email protected]\'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
# 创建一个带附件的实例
message = MIMEMultipart()
message[\'From\'] = Header("我是发件人", \'utf-8\') # 发件人
message[\'To\'] = Header("我是收件人", \'utf-8\') # 收件人
subject = \'Python发送带附件的邮件示例\'
message[\'Subject\'] = Header(subject, \'utf-8\')
# 邮件正文内容
send_cOntent= \'hi man,你收到附件了吗?\'
content_obj = MIMEText(send_content, \'plain\', \'utf-8\') # 第一个参数为邮件内容
message.attach(content_obj)
# 构造附件1,发送当前目录下的 t1.txt 文件
att1 = MIMEText(open(\'t1.txt\', \'rb\').read(), \'base64\', \'utf-8\')
att1["Content-Type"] = \'application/octet-stream\'
# 这里的filename可以任意写,写什么名字,邮件附件中显示什么名字
att1["Content-Disposition"] = \'attachment; filename="t1.txt"\'
message.attach(att1)
# 构造附件2,发送当前目录下的 t2.py 文件
att2 = MIMEText(open(\'t2.py\', \'rb\').read(), \'base64\', \'utf-8\')
att2["Content-Type"] = \'application/octet-stream\'
att2["Content-Disposition"] = \'attachment; filename="t2.py"\'
message.attach(att2)
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
except smtplib.SMTPException:
print("Error: 无法发送邮件")


如果要发送其他类型的,如果PDF、doc、xls、MP3格式的,我们都可以通过`MIMEApplication`来完成,`MIMEApplication`默认子类型是`application/octet-stream`,而`application/octet-stream`表明**这是个二进制文件,但愿接收方知道怎么处理!!!**,然后客户端收到这个声明后会根据文件扩展名来猜测。
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header
# 第三方 SMTP 服务
mail_host = "smtp.qq.com" # 设置服务器
mail_user = "[email protected]" # 用户名
mail_pass = "dfpcglacrjbybafa" # 口令
sender = \[email protected]\'
receivers = [\[email protected]\'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
# 创建一个带附件的实例
message = MIMEMultipart()
message[\'From\'] = Header("我是发件人", \'utf-8\') # 发件人
message[\'To\'] = Header("我是收件人", \'utf-8\') # 收件人
subject = \'Python发送带附件的邮件示例\'
message[\'Subject\'] = Header(subject, \'utf-8\')
# 邮件正文内容
send_cOntent= \'hi man,你收到附件了吗?\'
content_obj = MIMEText(send_content, \'plain\', \'utf-8\') # 第一个参数为邮件内容
message.attach(content_obj)
# 构造附件1,发送当前目录下的 t1.txt 文件
part1 = MIMEApplication(open(\'t1.txt\', \'rb\').read())
part1.add_header(\'Content-Disposition\', \'attachment\', filename=\'t1.txt\')
message.attach(part1)
# 构造附件2,发送当前目录下的 bg.mp3 文件
part2 = MIMEApplication(open(\'bg.mp3\', \'rb\').read())
part2.add_header(\'Content-Disposition\', \'attachment\', filename=\'bg.mp3\')
message.attach(part2)
# 构造附件3,发送当前目录下的 t3.xls 文件
part3 = MIMEApplication(open(\'t3.xls\', \'rb\').read())
part3.add_header(\'Content-Disposition\', \'attachment\', filename=\'t3.xls\')
message.attach(part3)
# 构造附件4,发送当前目录下的 t4.doc 文件
part4 = MIMEApplication(open(\'t4.doc\', \'rb\').read())
part4.add_header(\'Content-Disposition\', \'attachment\', filename=\'t4.doc\')
message.attach(part4)
# 构造附件5,发送当前目录下的 t5.pdf 文件
part5 = MIMEApplication(open(\'t5.pdf\', \'rb\').read())
part5.add_header(\'Content-Disposition\', \'attachment\', filename=\'t5.pdf\')
message.attach(part5)
# 构造附件6,发送当前目录下的 img.jpg 文件
part6 = MIMEApplication(open(\'img.jpg\', \'rb\').read())
part6.add_header(\'Content-Disposition\', \'attachment\', filename=\'img.jpg\')
message.attach(part6)
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
except smtplib.SMTPException:
print("Error: 无法发送邮件")

接收方改下扩展名就可以



推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • iOS开启Google位置服务器和显示定位权限的方法
    本文介绍了在iOS开发中如何开启Google位置服务器和显示定位权限的方法,包括导入CoreLocation和MapKit库、在界面导入头文件和在info.plist文件中添加授权等步骤。同时还介绍了iOS11中NSLocationAlwaysAndWhenInUseUsageDescription的功能变化。阅读本文可以帮助开发者了解如何在iOS应用中使用Google位置服务器和处理定位权限相关的问题。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
author-avatar
我的饭桶女神
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有