当前位置: 首页 > news >正文

Python开发运维:Python3.7使用QQ邮箱发送不同类型邮件

目录

一、理论

1.邮件发送

二、实验

1.Python3.7使用QQ邮箱发送普通邮件

2.Python3.7使用QQ邮箱发送包含图片与附件的邮件

三、问题

1.Pycharm中如何放大和缩小代码界面


一、理论

1.邮件发送

(1)概念

        SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是⼀组⽤于由源地址到⽬的地址传送 邮件的规则,由它来控制信件的中转⽅式。

(2)实现

#实现发送邮件需经过以下⼏步:
1) 登录 邮件服务器
2) 构造符合邮件协议规则要求的邮件内容 (email模块)
3) 发送

(3)模块

Python对SMTP⽀持有 smtplib 和 email 两个模块, email 负责构造邮件, smtplib 负责发送邮件,它 对smtp协议进⾏了简单的封装。

①smtplib模块

1)smtplib模块负责发送邮件
2)smtplib模块还提供了SMTP_SSL类和LMTP类,对它们的操作与SMTP基本一致。host: SMTP服务器主机。 你可以指定主机的ip地址或者域名如: hellobi.com,这个是可选参数。port: 如果你提供了host参数, 你需要指定 SMTP 服务使用的端口号,一般情况下SMTP端口号为25。local_hostname: 如果SMTP在你的本机上,你只需要指定服务器地址为localhost即可。

email.utils模块

email.utils模块中提供了几个有用的方法:
1)email.utils.quote(str)
将str中的反斜杠替换为两个反斜杠的新字符串,并将双引号替换为反斜杠双引号。2)email.utils.unquote(str)
返回一个不带引号的str的新字符串。如果str结束并以双引号开头,则会被剥离。同样,如果str结束并以尖括号开始,它们将被剥离。3)email.utils.parseaddr(address)
解析地址 - 应该是某个包含地址的字段(例如“ 收件人”或“ 抄送”)的值,并将其解析为其真实姓名和 电子邮件地址部分。返回该信息的元组,除非解析失败,在这种情况下返回2元组。('', '')4)email.utils.formataddr(pair)
与此相反parseaddr(),这需要表单的2元组并返回适合于XX标题的字符串值。如果pair的第一个元素为false,则第二个元素将不加修改地返回。(realname, email_address),实际上,parseaddr(), formataddr(),两者互逆。5)email.utils.getaddresses(fieldvalues)
此方法返回由返回的表单的2元组列表parseaddr()。 fieldvalues是可能返回的一系列头字段值 Message.get_all。

email模块

email模块负责构造邮件:
1)类email.mime.text.MIMEText(_text),是使用字符串_text来生成MIME对象的主体文本。2)MIME是(Multipurpose Internet Mail Extensions) ,多用途互联网邮件扩展类型。3)MIME设置的目的是为了在发送电子邮件时附加多媒体数据,让邮件根据其类型进行处理。4)email.encoders ,编码器5)email.mime.multipart.MIMEMultipart(),是MIMEBase的一个子类,多个MIME对象的集合,MIME邮件中各种不同类型的内容是分段存储的,各个段的排列方式、位置信息都通过Content-Type域的multipart类型来定义。_subtype默认值为mixed,multipart类型主要有三种子类型:mixed、alternative、related。boundary是MIMEMultipart的边界,默认边界是可数的。6)email.mime.MIMEBase   ,发送pdf/jpg/png等格式7)email.mime.MIMEApplication , 发送txt/doc/csv/xls等plain格式

二、实验

1.Python3.7使用QQ邮箱发送普通邮件

(1)查看QQ邮箱服务(服务已关闭)

(2)绑定手机

(3)开启授权码

(4)再次查看服务(已开启)

(5)配置代码

# -*- coding: utf-8 -*-import smtplib
import email.utils#邮件正文
from email.mime.text import MIMEText#登录邮件服务器
smtp_obj = smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件⼈邮箱中的SMTP服务器,端⼝是25
smtp_obj.login("594372682@qq.com", "授权码") # 括号中对应的是发件⼈邮箱账号、邮箱密码
smtp_obj.set_debuglevel(True)
#smtp_obj.set_debuglevel(1) # 显示调试信息
# 设置邮件头信息
message = MIMEText("我是邮件的内容")
message["From"] = email.utils.formataddr(('发送者显示的姓名', '594372682@qq.com')) # 发送者
message["To"] = email.utils.formataddr(('接收者显示的姓名', '7jjw@163.com')) # 接收者
message["Subject"] = '我是邮件的标题' # 主题
# 发送
try:smtp_obj.sendmail("594372682@qq.com", ["7jjw@163.com"], msg=message.as_string())
finally:smtp_obj.quit()

(6)接收成功

(7)查看控制台信息

2.Python3.7使用QQ邮箱发送包含图片与附件的邮件

(1)配置代码

# -*- coding: utf-8 -*-import smtplib
import email.utils
from email import encoders
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.base import MIMEBasemessage = MIMEMultipart()
message['To'] = email.utils.formataddr(('接收者显示的姓名', '7jjw@163.com'))
message['From'] = email.utils.formataddr(('发送者显示的姓名', '594372682@qq.com'))
message['Subject'] = '我是邮件的标题'# 需要发送的图片
img_file = open(r'1.jpg', 'rb')
img_data = img_file.read()
img_file.close()
img = MIMEImage(img_data)
message.attach(img)
img.add_header('Content-ID', 'dns_config')  # 给一个content Id供后面html内容引用
# 需要发送的文本
mail_content = """<html><body><p>我给你发送的图片</p><img src="cid:dns_config"></body></html>
"""
message.attach(MIMEText(mail_content, 'html', 'utf-8'))
# 需要发送的附件
txt_payload = MIMEBase("application", "octet-stream")
txt_payload.set_payload(open(r"test.txt", "rb").read())
txt_payload['Content-Type'] = 'application/octet-stream'
txt_payload['Content-Disposition'] = 'attachment; filename= "test.txt"'
encoders.encode_base64(txt_payload)
message.attach(txt_payload)smtp_obj = smtplib.SMTP_SSL('smtp.qq.com', 465)
smtp_obj.login('594372682@qq.com', '授权码')
smtp_obj.set_debuglevel(True)
try:smtp_obj.sendmail('594372682@qq.com', ['7jjw@163.com'], msg=message.as_string())
finally:smtp_obj.quit()

(2)接收成功

(3)查看控制台信息

三、问题

1.PyCharm中如何放大和缩小代码界面

(1)打开文件,点击设置

(2)选择“keymap”,右侧搜索框输入“increase”,搜索出来之后双击,选择“Add Mouse Shortcut”

(3)在操作框按住“Ctrl”并将鼠标滚轮上滑,完成设置,点击OK关闭界面

(4)选择“keymap”,右侧搜索框输入“decrease”,搜索出来之后双击,选“Add Mouse Shortcut”

(5) 在操作框按住“Ctrl”并将鼠标滚轮下滑,完成设置,点击OK关闭界面

http://www.lryc.cn/news/226549.html

相关文章:

  • 二十三种设计模式全面解析-解密迭代器模式:探索遍历之道
  • kubernetes istio
  • 25期代码随想录算法训练营第十四天 | 二叉树 | 递归遍历、迭代遍历
  • 常用布局以及其优缺点
  • 海康工业相机如何提高相机帧率
  • Linux之IPC通信共享内存(一次拷贝)与消息队列、管道、信号量、socket(两次拷贝)总结(六十二)
  • 【多线程 - 01、概述】
  • SQL SELECT INTO 语句
  • 【刷题】(AtCoder Beginner Contest 328) C、D 补题
  • NI USRP软件无线设备的特点
  • 大数据毕业设计选题推荐-污水处理大数据平台-Hadoop-Spark-Hive
  • 最新获取支付宝cardIndex参数图文教程
  • Linux学习第二枪(yum,vim,g++/gcc,makefile的使用)
  • 自然语言处理(一):RNN
  • 超全总结!大模型算法面试指南(含答案)
  • 前端使用C-lodop 实现循环套打小案例
  • 基于SpringBoot+Vue+mysql卓越导师双选系统设计与实现
  • Windows 11系统cmd终端美化、Vscode终端美化
  • [游戏中的图形学实时渲染技术] Part1 实时阴影技术
  • NtripShare Mos地铁自动化监测终端盒子硬件设计
  • 第 117 场 LeetCode 双周赛题解
  • OpenCV C++ 图像处理实战 ——《多二维码识别》
  • 经典算法(查找与排序)
  • 微软和Red Hat合体:帮助企业更方便部署容器
  • ZYNQ_project:IP_ram_pll_test
  • Leetcode刷题详解——优美的排列
  • [PHP]Kodexplorer可道云 v4.47
  • C/C++数字判断 2021年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
  • 云栖大会丨桑文锋:打造云原生数字化客户经营引擎
  • 如何用java写一个网站:从零搭建个性化网站