发送邮件是一个常见的需求,一般会采用SMTP代理的形式,进行邮件自动发送

在发送邮件时,主要有如下准备工作:

① 发件人、收件人、抄送人

② 发件人邮箱授权码

③ 邮件主题

④ 邮件正文

⑤ 附件

发送邮件上,由浅到深,可以大致分为以下5种格式:

① 只有正文;

② 正文+html+超链接;

③ 正文+正文图片;

④ 正文+附件;

⑤ 正文+html+可跳转url+正文图片+附件(这里会规范写一下)

其中,授权码的获取这里需要各自操作一下,示例如:QQ邮箱的授权码,需要在电脑上登录自己的QQ邮箱,在“设置” - “账户” - “POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”中,开启相关服务,获取授权码

如图所示操作,点击生成授权码,发送短信即可获取到SMTP邮件代理授权码,将发送人邮箱授权码复制下来以便后面SMTP代理使用

接下来用QQ邮箱,示例自动发送以上类型的邮件(注意:带邮件和不带邮件中,实例不一样)

1、发送只有文本正文的邮件

# 发送只有文本正文的邮件
import smtplib
from email.mime.text import MIMEText# 配置邮件信息
email = {'from': '111@qq.com','to': ['222@qq.com'],'cc': ['333@qq.com'],'subject': '自动发送邮件','license': '这里是你们的授权码','text': '示例:发送只含有文本的邮件' ,}# 创建一个文本实例
# 正文
msg = MIMEText(email['text'], 'plain', 'utf-8')
# 发件人
msg['From'] = email['from']
# 收件人
msg['To'] = ','.join(email['to'])
# 抄送
msg['Cc'] = ','.join(email['cc'])
# 邮件标题
msg['Subject'] = email['subject']# 登录邮箱服务器
email_server = smtplib.SMTP_SSL('smtp.qq.com', 465)
email_server.login(email['from'], email['license'])# 发送邮件
try:email_server.sendmail(email['from'], email['to'], msg.as_string())print('发送成功')
except:print('Error:发送失败')

2、发送包含正文、超链接的邮件

# 发送包含正文、可跳转URL链接的邮件
import smtplib
from email.mime.text import MIMEText# 配置邮件信息
email = {'from': '111@qq.com','to': ['222@qq.com'],'cc': ['333@qq.com'],'subject': '自动发送邮件','license': '这里是你们的授权码','text': '示例:发送只含有文本的邮件' ,'html': '<p>欢迎进入我的博客:&nbsp&nbsp<a href="https://blog.csdn.net/wang1qqqq">点击进入</a></p>',}# 创建一个文本实例
# 添加文本(可有可无)
msg = MIMEText(email['text'], 'plain', 'utf-8')
# 添加带url的html文本链接
msg_html = MIMEText(email['html'], 'html', 'utf-8')
msg.attach(msg_html)
# 发件人
msg['From'] = email['from']
# 收件人
msg['To'] = ','.join(email['to'])
# 抄送
msg['Cc'] = ','.join(email['cc'])
# 邮件标题
msg['Subject'] = email['subject']# 登录邮箱服务器
email_server = smtplib.SMTP_SSL('smtp.qq.com', 465)
email_server.login(email['from'], email['license'])# 发送邮件
try:email_server.sendmail(email['from'], email['to'], msg.as_string())print('发送成功')
except:print('Error:发送失败')

3、发送包含正文、图片的邮件

# 发送包含正文、图片的邮件
import smtplib
from email.mime.image import MIMEImage
from email.mime.text import MIMEText# 配置邮件信息
email = {'from': '111@qq.com','to': ['222@qq.com'],'cc': ['333@qq.com'],'subject': '自动发送邮件','license': '这里是你们的授权码','text': '示例:发送只含有文本的邮件' ,}# 创建一个文本实例
# 添加文本(可有可无)
msg = MIMEText(email['text'], 'plain', 'utf-8')
# 插入图片html,命名图片id为i_image
img_html = '<p><img src="cid:i_image"></p>'
msg.attach(MIMEText(img_html, 'html', 'utf-8'))
# 打开图片
img_open = open(i_attach, 'rb')
img = MIMEImage(img_open.read())
# 插入图片
img.add_header('Content-ID', '<i_image>')
msg.attach(img)
# 关闭图片
img_open.close()# 发件人
msg['From'] = email['from']
# 收件人
msg['To'] = ','.join(email['to'])
# 抄送
msg['Cc'] = ','.join(email['cc'])
# 邮件标题
msg['Subject'] = email['subject']# 登录邮箱服务器
email_server = smtplib.SMTP_SSL('smtp.qq.com', 465)
email_server.login(email['from'], email['license'])# 发送邮件
try:email_server.sendmail(email['from'], email['to'], msg.as_string())print('发送成功')
except:print('Error:发送失败')

4、发送包含正文、附件的邮件

# 发送包含正文、附件的邮件
import smtplib
from email.mime.image import MIMEImage
from email.mime.text import MIMEText# 配置邮件信息
email = {'from': '111@qq.com','to': ['222@qq.com'],'cc': ['333@qq.com'],'subject': '自动发送邮件','license': 'autmmyrqmqpcbace','text': '示例:发送只含有文本的邮件' ,}# 创建一个带附件的示例
msg = MIMEMultipart()
# 打开图片
img_open = open(i_attach, 'rb')
# 设置图片信息
att = MIMEText(img_open.read(), 'base64', 'utf-8')
att['Content-Type'] = 'application/octet-stream'
# 添加到附件
att.add_header('Content-Disposition', 'attachment', filename='疫情大数据.png')
msg.attach(att)
# 关闭图片
img_open.close()# 发件人
msg['From'] = email['from']
# 收件人
msg['To'] = ','.join(email['to'])
# 抄送
msg['Cc'] = ','.join(email['cc'])
# 邮件标题
msg['Subject'] = email['subject']# 登录邮箱服务器
email_server = smtplib.SMTP_SSL('smtp.qq.com', 465)
email_server.login(email['from'], email['license'])# 发送邮件
try:email_server.sendmail(email['from'], email['to'], msg.as_string())print('发送成功')
except:print('Error:发送失败')

5、发送包含正文、html、超链接、正文图片、附件的邮件

# 发送包含正文、html、可点击url、正文图片、附件的邮件
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMETextdef email_header(email):# 设置邮件信息# 无附件邮件使用:msg = MIMEText(email['text'], 'plain', 'utf-8')# MIMEMultipart:创建一个带附件的实例msg = MIMEMultipart()# 可以自定义发件人抬头(不理想,QQ邮箱列表上看不到发件人名称):Header('发送机器人', 'utf-8')msg['From'] = email['from']msg['To'] = ','.join(email['to'])msg['Cc'] = ','.join(email['cc'])msg['Subject'] = email['subject']return msgdef email_body(email, msg):# 添加文本(如果有html,文本会被覆盖)# msg.attach(MIMEText(email['text'], 'plain', 'utf-8'))# 添加htmlmsg.attach(MIMEText(email['text'], 'html', 'utf-8'))msg.attach(MIMEText(email['html'], 'html', 'utf-8'))for i_attach in email['attach']:# 添加正文图片(图片需要在html的情况下使用)img_html = '<p><img src="cid:i_image"></p>'msg.attach(MIMEText(img_html, 'html', 'utf-8'))img_open = open(i_attach, 'rb')img = MIMEImage(img_open.read())img.add_header('Content-ID', '<i_image>')msg.attach(img)# 关闭图片img_open.close()def email_att(email, msg):# 添加附件for i_attach in email['attach']:img_open = open(i_attach, 'rb')att = MIMEText(img_open.read(), 'base64', 'utf-8')att['Content-Type'] = 'application/octet-stream'att.add_header('Content-Disposition', 'attachment', filename='中国疫情大数据.png')msg.attach(att)# 关闭图片img_open.close()def email_login(email):# 登录邮箱服务器email_server = smtplib.SMTP_SSL('smtp.qq.com', 465)email_server.login(email['from'], email['license'])return email_serverdef email_send(email, email_server):# 发送邮件try:email_server.sendmail(email['from'], email['to'], msg.as_string())print('发送成功')except:print('Error:发送失败')if __name__ == '__main__':# 配置附件路径img_path = 'auto_img/'# 定义发送邮件信息email = {'from': '111@qq.com','to': ['222@qq.com'],'cc': ['333@qq.com'],'subject': '每日疫情数据推送','license': '这里是你们的授权码','text': '每日疫情数据推送:' + str(datetime.datetime.now().strftime("%Y-%m-%d")),'html': '<p>欢迎进入我的博客:&nbsp&nbsp<a href="https://blog.csdn.net/wang1qqqq">点击进入</a></p>','attach': [img_path + '中国疫情大数据.png']}# 配置收件人、发件人、抄送人、标题msg = email_header(email)# 配置正文内容email_body(email, msg)# 配置附件email_att(email, msg)# 登录邮件服务器email_server = email_login(email)# 发送邮件email_send(email, email_server)

如上,就是自动发送邮件的示范,可以根据自身情况,选择发送带正文、html、超链接、正文图片、附件的邮件。

Python用SMTP自动发送邮件email相关推荐

  1. 利用Python调用outlook自动发送邮件

    ↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓ 使用Python发送邮件有两种方式,一种是使用smtp调用邮箱的smtp服务器,另一种是直接调用程序直接发送邮件.而在outlo ...

  2. python代码优化无限营销软件工作室_批量群发,营销必备!Python代码实现自动发送邮件!...

    在运维开发中,使用 Python 发送邮件是一个非常常见的应用场景.今天一起来探讨一下,GitHub 的大牛门是如何使用 Python 封装发送邮件代码的. 一般发邮件方法 SMTP是发送邮件的协议, ...

  3. python自动批量发邮件脚本_批量群发,营销必备!Python代码实现自动发送邮件!...

    在运维开发中,使用 Python 发送邮件是一个非常常见的应用场景.今天一起来探讨一下,GitHub 的大牛门是如何使用 Python 封装发送邮件代码的. 一般发邮件方法SRE实战 互联网时代守护先 ...

  4. python应用系列教程——python使用smtp协议发送邮件:html文本邮件、图片邮件、文件附件邮件

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python使用smtp协议发送电子邮件.包含发送html文本邮件.包含图片附件的邮件,包含其他文件附件的邮件.可设置邮件的收发人,主题,内容 ...

  5. Python 使用SMTP协议发送邮件

    引言 问题基于<计算机网络自定向下>第二章的课后套接字编程作业:邮件客户 题目的下载链接:python 压缩包 题目如下: 这个实验结束时,您将能够更好地了解SMTP协议.您还将获得使用P ...

  6. python使用smtp库发送邮件

    python smtp发邮件 开发一个日志扫描工具,用于扫描报错日志,并打包成邮件,发送到邮箱. 例子: #!/usr/bin/env python # coding=utf-8 from smtpl ...

  7. python 截屏 自动发送邮件 实现远程监控屏幕

    1.python截取屏幕 通过PIL ImageGrab包截取屏幕 from PIL import ImageGrab from io import BytesIO import time impor ...

  8. 基于python SMTP实现自动发送邮件教程解析

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...

  9. 加强版!利用python自动发送邮件

    前言 在训练网络的过程中,需要大量的时间,虽然可以预估网络训练完成时间,但蹲点看结果着实有点不太聪明的亚子. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知 ...

最新文章

  1. QPushButton 响应回车 设置默认按钮
  2. linux自学(一)之vmware虚拟机安装
  3. 目标、物体识别(检测)object detection 中的 bounding boxes 是什么? 边界区域、边界框、边界盒
  4. grid - 隐式命名网格线名称
  5. Vantage公司增资3亿美元加强数据中心建设
  6. spring aop 必须的包 及里面用到的东西_学习Spring的思考框架
  7. java写pdf_java写出PDF
  8. ionic打包中的那些坑
  9. android下载模块封装,AndroidStudio 3.0 NDK开发2-AAR模块封装
  10. Tensorflow:操作执行原理
  11. Scala编程指南——用更少的字做更多的事
  12. 微信小程序——尤克里里和弦查询
  13. python在工程管理专业的应用_工程大数据在水利工程建设管理的应用
  14. 20172304 2017-2018-2 《程序设计与数据结构》第五周学习总结
  15. python与anaconda安装
  16. 解读《美国国家BIM标准》– BIM能力成熟度模型(九)
  17. cpu倍频模式怎么调_如何调整CPU倍频?
  18. BZOJ2565最长双回文串——manacher
  19. 苹果5完美越狱_checkra1n for Mac(越狱工具)
  20. 设计模式-->结构型模式-->代理模式

热门文章

  1. 苹果12隔空投送显示无法连接服务器,iphone隔空投送功能无法正常使用解决办法_隔空投送功能打不开_3DM手游...
  2. Android Studio Bumblebee 稳定版(android-studio-2021.1.1.20 大黄蜂)下载地址
  3. cmd新建、删除文件和文件夹
  4. OpenGL ES 3.0管线渲染流程
  5. MapReduce编程模型详解
  6. python协程和线程区别_Python中进程、线程、协程及其区别
  7. JavaScript - ES5教程系列-李游Leo-专题视频课程
  8. CSS进阶(17)—— CSS中的文本处理(上)
  9. python:利用logbook模块管理日志
  10. 自动化运维工具ansible学习+使用ansible批量推送公钥到远程主机