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

news2024/11/17 14:50:56

目录

一、理论

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 MIMEBase

message = 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.coloradmin.cn/o/1196933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

lv11 嵌入式开发 ARM指令集上 5

1 导学 1.1 指令集 指令 能够指示处理器执行某种运算的命令称为指令&#xff08;如加、减、乘 ...&#xff09; 指令在内存中以机器码&#xff08;二进制&#xff09;的方式存在 每一条指令都对应一条汇编 程序是指令的有序集合 指令集 处理器能识别的指令…

雷达检测及MATLAB仿真

文章目录 前言一、雷达检测二、Matlab 仿真1、高斯和瑞利概率密度函数①、MATLAB 源码②、仿真 2、归一化门限相对虚警概率的曲线①、MATLAB 源码②、仿真 3、检测概率相对于单个脉冲 SNR 的关系曲线①、MATLAB 源码②、仿真 4、改善因子和积累损失相对于非相干积累脉冲数的关系…

EtherCAT报文-LRW(逻辑寻址读写)抓包分析

0.工具准备 1.EtherCAT主站 2.EtherCAT从站(本文使用步进电机驱动器) 3.Wireshark1.EtherCAT报文帧结构 EtherCAT使用标准的IEEE802.3 Ethernet帧结构,帧类型为0x88A4。EtherCAT数据包括2个字节的数据头和44-1498字节的数据。数据区由一个或多个EtherCAT子报文组成,每个子…

超简单的Linux FTP服务搭建教程

目录 前言1、检查vsftp是否已安装2、安装vsftpd3、启动ftp服务4、测试ftp服务5、上传文件配置总结 前言 本文记录了在Kylin Linux Desktop V10(SP1)系统上搭建FTP服务的过程。FTP是File Transfer Protocol的缩写&#xff0c;译为文件传输协议&#xff0c;是用于在网络上进行文…

数据分析实战 | 贝叶斯分类算法——病例自动诊断分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型预测 一、数据及分析对象 CSV文件——“bc_data.csv” 数据集链接&#xff1a;https://download.csdn.net/d…

Leetcode-2 两数相加

不知道为什么有些测试用例通不过&#xff0c;思路很明晰&#xff0c;改不明白了&#xff0c;求大佬指点&#xff01;&#xff01;&#xff01;&#xff01; /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNo…

箱线图(boxplot)

箱线图 boxplot 简述原理绘制方法python - matplotlib加载功能模块加载数据绘制boxplot python - seaborn加载功能模块加载数据绘制boxplot R - ggplot加载功能模块加载数据绘制boxplot 简述 因图形形状如箱子而得名。箱线图常用于展示一组连续型数据的分散情况。学术界普遍认…

Linux AMH 服务器管理面板远程访问

文章目录 1. 前言2. Linux 安装AMH 面板3. 本地访问AMH 面板4. Linux安装Cpolar5. 配置AMH面板公网地址6. 远程访问AMH面板7. 固定AMH面板公网地址8、结语 1. 前言 AMH 是一款基于 Linux 系统的服务器管理面板&#xff0c;它提供了一系列的功能&#xff0c;包括网站管理、FTP …

第十八章 Swing 程序设计

目录 概述 Swing常用窗体 JFrame 窗体 JDialog 对话框 JOptionPane 小型对话框 1.自定义对话框 2.确认框 3.输入框 4.通知框 常用布局管理器 null绝对布局 FlowLayout 流布局管理器 BorderLayout 边界布局管理器 GridLayout 网络布局管理器 常用面板 JPa…

Linux RPM包安装、卸载和升级

我们以安装 apache 程序为例。因为后续章节还会介绍使用源码包的方式安装 apache 程序&#xff0c;读者可以直观地感受到源码包和 RPM 包的区别。 RPM包默认安装路径 通常情况下&#xff0c;RPM 包采用系统默认的安装路径&#xff0c;所有安装文件会按照类别分散安装到表 1 所…

Doris:多源数据目录(Multi-Catalog)

目录 1.基本概念 2.基本操作 2.1 查看 Catalog 2.2 新增 Catalog 2.3 切换 Catalog 2.4 删除 Catalog 3.元数据更新 3.1手动刷新 3.2定时刷新 3.3自动刷新 4.JDBC Catalog 4.1 上传mysql驱动包 4.2 创建mysql catalog 4.3. 读取mysql数据 1.基本概念 …

抖音小程序开发:探索技术创新的代码之旅

随着抖音小程序的兴起&#xff0c;企业纷纷将目光投向这个充满活力的平台。抖音小程序开发不仅为品牌提供了更广泛的曝光机会&#xff0c;更是技术创新的舞台。本文将带领读者深入探索抖音小程序开发的技术要点&#xff0c;探讨如何通过代码实现个性化、高效的小程序。 1. 小…

JavaScript从入门到精通系列第三十三篇:详解正则表达式语法(二)

文章目录 一&#xff1a;正则表达式 1&#xff1a; 检查一个字符串中是否有. 2&#xff1a;第二种关键表达 3&#xff1a;第三种关键表达 ​编辑4&#xff1a;第四种关键表达 5&#xff1a;第五种关键表达 6&#xff1a;第六种关键表达 二&#xff1a;核心表达二 1&am…

拓扑排序软件设计——ToplogicalSort_app(含有源码、需求分析、可行性分析、概要设计、用户使用手册)

拓扑排序软件设计 前言1. 需求分析2. 可行性分析2.1 简介2.2 技术可行性分析2.2.1 技术实现方案2.2.2 开发人员技能要求2.2.3 可行性 2.3 操作可行性分析2.4 结论 3. 项目报告3.1 修订历史记录3.2 软硬件环境3.3 需求分析3.4 详细设计3.4.1 类设计3.4.2 核心流程描述3.4.3 核心…

水果音乐编曲软件 FL Studio v21.1.1.3750 中文免费破解版下载(附中文设置教程)

FL studio21中文别名水果编曲软件&#xff0c;是一款全能的音乐制作软件&#xff0c;包括编曲、录音、剪辑和混音等诸多功能&#xff0c;让你的电脑编程一个全能的录音室&#xff0c;它为您提供了一个集成的开发环境&#xff0c;使用起来非常简单有效&#xff0c;您的工作会变得…

内网安全-基础设施构建-cobaltstrike远控工具beacon使用

kali在CS文件目录下&#xff0c;打开终端,运行命令&#xff1a; /teamserver 192.168.77.128 123456 在windows中双击bat文件&#xff1a; 填写图下信息&#xff1a; 双击运行&#xff0c;CS上线 自查方法&#xff1a;1、kali与物理机可互通 2、物理机与windows10跳板…

黑客技术-小白学习手册

一、黑客是什么 原是指热心于计算机技术&#xff0c;水平高超的电脑专家&#xff0c;尤其是程序设计人员。但后来&#xff0c;黑客一词已被用于泛指那些专门利用电脑网络搞破坏或者恶作剧的家伙。 二、学习黑客技术的原因 其实&#xff0c;网络信息空间安全已经成为海陆空之…

告别龟速,从GitHub快速下载项目的技巧分享,简单又高效!

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…

【mysql】将逗号分割的字段内容转换为多行并group by

先说需求&#xff1a; 公司想让我通过mysql导出一个报表&#xff0c;内容为公司每个人参加会议的次数&#xff0c;现在有一个会议表fusion_meeting&#xff0c;正常的逻辑是通过人员直接group by就可以得出结果&#xff0c;但是我们的参会人是通过逗号分割这种方式存在一个字段…

Linux的命令——关于操作用户及用户组的命令

目录 1.Linux的命令格式 2.用户与用户组管理 2.1用户管理 添加用户 设置用户密码 删除用户 修改用户 2.2用户组管理 新增用户组 删除用户组 修改用户组属性 用户组切换 用户组管理 用户切换 1. su 2.sudo 1.Linux的命令格式 Linux系统中几乎所有操作&#xff0…