Python发送邮件

Python发送邮件

    • 一、概念
    • 二、邮件服务器设置
    • 三、发送邮件流程
      • 3.1 登录邮箱
      • 3.2 准备数据
      • 3.3 发送邮件
    • 四、实现
      • 4.1 发送文本
      • 4.2 发送html
      • 4.3 发送图片
      • 4.4 发送文件

一、概念

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

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

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

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

二、邮件服务器设置

发送邮件之前,必需要对邮箱进行设置,邮箱需要开启SMTP服务

以163邮箱为例

  • 选取邮箱设置

image-20231031122919575

  • 开启smtp协议

image-20231031123412342

  • 打开网易邮箱大师,扫码发送短信获取授权码

image-20231031123511868

  • 获取邮箱授权码

image-20231031123530974

三、发送邮件流程

3.1 登录邮箱

  • 导入模块
import smtplib 
  • 连接邮箱服务器
    • 服务器地址:smtp.163.com(163邮箱)、smtp.qq.com(qq邮箱)
    • 邮箱服务端口:465或者25
连接对象 = smtplip.SMTP_SSL(服务器器地址, 邮箱服务端口)
  • 登录邮箱
连接对象.login(邮箱账号, 授权码)

3.2 准备数据

​ 数据指的需要发送的内容。邮件内容的构建需要涉及到另外一个库email,它可以用来构建邮件主题以及各种形式的邮件内容,包括文字内容、图片内容、html内容、附件等

  • 导入模块
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
  • 创建邮件对象
邮件对象 = MIMEMultipart()
  • 设置邮件主题
主题对象 = Header(邮件标题, 编码方式).encode()
  • 设置邮件发送者
# 设置邮件发送者
邮件对象['From'] = '用户名'
# 设置邮件接受者
邮件对象['To'] = '收件人1;收件人2;收件人3...' 
# 添加邮件内容
文字内容对象 = MIMEText(内容, 类型, 编码方式)# - 内容:就是文字符串串# - 类型:plain(简单的文字内容)、html(超文本)
邮件对象.attach(文字对象)

3.3 发送邮件

连接对象.sendmail(发件人, 收件人, 邮件对象.as_string()) 
连接对象.quit()

四、实现

4.1 发送文本

# 导入包
# 发送邮件
import smtplib
# email:构建邮件,MIMEText:文本对象
from email.mime.text import MIMEText# 构建函数
def send_data():# 1.准备工作:登录邮箱# smtp服务器地址mail_host = "smtp.163.com"# 发送方的邮箱账号mail_sender = "weixuqing3012@163.com"# 发送方的授权码,注意不是邮箱的登录密码,而是开启smtp协议时的授权码mail_pwd = "KDIJFPRVUVOICSCR"# 连接邮箱对象smtp = smtplib.SMTP_SSL(mail_host, 465)# 登录邮箱smtp.login(mail_sender, mail_pwd)# 2.准备数据:构建邮件内容# 正文内容data = MIMEText("2023/10/31,hello Python,Python发送邮件")# 邮件主题/标题data["Subject"] = "10.36Python发送邮件测试"# 发送方data["From"] = mail_sender# 接收方receivers = ["1515323189@qq.com", "weixuqing3012@outlook.com"]data["To"] = ";".join(receivers)# 3.发送邮件# 发送smtp.sendmail(mail_sender, receivers, data.as_string())# 退出smtp.quit()if __name__ == '__main__':send_data()

4.2 发送html

​ 有时候会涉及到发送 html邮件,html格式的邮件本质还是文本格式的邮件,所有文件的构建方式和普通文本文件的构建方式差不多

​ 只需要将准备文章内容部分修改即可

# -*- coding: utf-8 -*-
# @Time : 2023/10/31 10:26
# @Author : Eden Wei
# @FileName: 05_发送html邮件.py
# @Software: PyCharm 2023.2.1 (Professional Edition)
# 导入包
# 发送邮件
import smtplib
# email:构建邮件,MIMEText:文本对象
from email.mime.text import MIMEText
# 构建多个内容
from email.mime.multipart import MIMEMultipart# 构建函数
def send_data():# 1.准备工作:登录邮箱# smtp服务器地址mail_host = "smtp.163.com"# 发送方的邮箱账号mail_sender = "weixuqing3012@163.com"# 发送方的授权码,注意不是邮箱的登录密码,而是开启smtp协议时的授权码mail_pwd = "KDIJFPRVUVOICSCR"# 连接邮箱对象smtp = smtplib.SMTP_SSL(mail_host, 465)# 登录邮箱smtp.login(mail_sender, mail_pwd)# 2.准备数据:构建邮件内容# 正文内容# 创建内容对象data = MIMEMultipart()# 内容html_str = """<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>邮件正文部分</h1>
<table width="500" border="1" cellspacing="0"><tr><td>张三</td><td>10</td><td>male</td><td>唱歌</td></tr><tr><td>李四</td><td>12</td><td>female</td><td>跳舞</td></tr><tr><td>王五</td><td>15</td><td>male</td><td>弹琴</td></tr>
</table>
<ul><li>人事部</li><li>行政部</li><li>财务部</li><li>市场部</li>
</ul>
</body>
</html>"""# 将内容绑定到内容对象中data.attach(MIMEText(html_str, "html", "utf-8"))# 邮件主题/标题data["Subject"] = "10.36Python发送html内容邮件测试"# 发送方data["From"] = mail_sender# 接收方receivers = ["1515323189@qq.com", "weixuqing3012@outlook.com"]data["To"] = ";".join(receivers)# 3.发送邮件# 发送smtp.sendmail(mail_sender, receivers, data.as_string())# 退出smtp.quit()if __name__ == '__main__':send_data()

4.3 发送图片

需要重写的部分为下:

新增一个导入模块

# 构建图片
from email.mime.image import MIMEImage
    # 2.准备数据:构建邮件内容# 正文内容# 创建内容对象data = MIMEMultipart()# 邮件主题/标题data["Subject"] = "10.36Python发送图片内容邮件测试"# 发送方data["From"] = mail_sender# 接收方receivers = ["1515323189@qq.com", "weixuqing3012@outlook.com"]data["To"] = ";".join(receivers)# 将图片构建成html# 读取文件内容with open("data/logo.png", "rb") as f:img_data = f.read()# 构建图片对象img = MIMEImage(img_data)img.add_header("Content-ID", "testimg")  # testimg用来在html中识别图片的IDhtml_str = """<body><h2>这是一个带有图片的邮件</h2><p><img src="cid:testimg"></p></body>"""# 将内容绑定到内容对象中data.attach(MIMEText(html_str, "html", "utf-8"))data.attach(img)

4.4 发送文件

# 发送邮件
import smtplib
# email:构建邮件,MIMEText:文本对象
from email.mime.text import MIMEText
# 构建多个内容
from email.mime.multipart import MIMEMultipart
    # 2.准备数据:构建邮件内容# 正文内容# 创建内容对象data = MIMEMultipart()# 邮件主题/标题data["Subject"] = "10.36Python发送附件邮件测试"# 发送方data["From"] = mail_sender# 接收方receivers = ["1515323189@qq.com", "weixuqing3012@outlook.com"]data["To"] = ";".join(receivers)# 构建内容with open(r"data/致橡树.txt", 'r', encoding='gbk') as f:content = f.read()part = MIMEText(content, 'base64', 'gbk')# 添加到右键附件part['Content-Disposition'] = 'attachment;filename="zhixiangshu.txt"'# 将内容绑定到内容对象中data.attach(part)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235863.shtml

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

相关文章

自定义 spring-boot组件自动注入starter

1&#xff1a;创建maven项目 2&#xff1a;pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocati…

Jenkins + gitlab 持续集成和持续部署的学习笔记

1. Jenkins 介绍 软件开发生命周期(SLDC, Software Development Life Cycle)&#xff1a;它集合了计划、开发、测试、部署的集合。 软件开发瀑布模型 软件的敏捷开发 1.1 持续集成 持续集成 (Continuous integration 简称 CI): 指的是频繁的将代码集成到主干。 持续集成的流…

全光谱护眼灯哪个牌子好?全光谱备考护眼台灯推荐

什么是全光谱&#xff1f;全光谱指的是光谱中包含紫外光、可见光、红外光的光谱曲线&#xff0c;并且在可见光部分中红绿蓝的比例与阳光近似&#xff0c;显色指数接近于100的光谱。太阳光的光谱可以称作全光谱&#xff0c;太阳光的色温是随着四季和早晚时间变化而变化&#xff…

SD 一次性客户地址如何打开

一次性客户 写入后在哪里看具体数据呢 在转到->抬头->合作伙伴 双击Y0

基于EasyDarwin、ffmpeg实现rtsp推流

目录 1 安装EasyDarwin 2 编译安装ffmpeg 3 启动EasyDarwin 4 ffmepg推流 5 百度网盘备份 某项目中测试时需要用到推流&#xff0c;于是用EasyDarwin、ffmpeg实现了RTSP推流&#xff0c;简单记录下过程&#xff0c; 1 安装EasyDarwin 这个可以去官网下载&#xff1a;Eas…

大模型互相“薅羊毛”背后,行业基本操作,规范化势在必行

最近&#xff0c;字节跳动被曝调用 OpenAI API 接口训练大模型的争议&#xff0c;以及谷歌大模型 Gemini 被曝使用百度文心一言进行中文语料训练等事件&#xff0c;在行业里引发了不小的关注和讨论。 不明真相的网友们一边热情吃瓜&#xff0c;一边也在感叹 AI 大厂之间互相“…

【论文解读】Efficient SAO Coding Algorithm for x265 Encoder

时间&#xff1a;2015年 级别&#xff1a;IEEE 机构&#xff1a;上海交通大学 摘要 x265是一款开源的HEVC编码器&#xff0c;采用了多种优化技术&#xff0c;具有较快的编码速度和优良的编码性能。作为HEVC的一项关键技术&#xff0c;x265还采用了样本自适应偏移(sample adap…

工作流引擎的架构设计与对比

所谓工作流引擎是指 workflow 作为应用系统的一部分&#xff0c;并为之提供对各应用系统有决定作用的&#xff0c;根据角色、分工和条件的不同决定信息传递路由、内容等级 等核心解决方案。工作流引擎可以灵活地配置工作流程&#xff0c;并且可以自动化的根据配置进行状态变更和…

WebRPC开发基础流程

一、WebRTC 使用入门 WebRTC&#xff08;全称 Web Real-Time Communication&#xff09;&#xff0c;即网页即时通信。 是一个支持网页浏览器进行实时语音对话或视频对话的技术方案。从前端技术开发的视角来看&#xff0c;是一组可调用的API标准。 WebRTC API 官网&#xff1…

Observability:捕获 Elastic Agent 和 Elasticsearch 之间的延迟

在现代 IT 基础设施的动态环境中&#xff0c;高效的数据收集和分析至关重要。 Elastic Agent 是 Elastic Stack 的关键组件&#xff0c;通过促进将数据无缝摄取到 Elasticsearch 中&#xff0c;在此过程中发挥着至关重要的作用。 然而&#xff0c;显着影响此过程整体有效性的关…

金融CRM有用吗?金融行业CRM有哪些功能

市场形式波诡云谲&#xff0c;金融行业也面临着资源体系分散、竞争力后继不足、未知风险无法规避等问题。金融企业该如何解决这些问题&#xff0c;或许可以了解一下CRM管理系统&#xff0c;和其提供的金融行业CRM解决方案。 金融行业是银行业、保险业、信托业、证券业和租赁业…

Windows 终端与 PowerShell:它们有何不同?

如果您使用的是 Windows 11 或 Windows 10&#xff0c;你会发现预安装了 PowerShell 和 Windows 终端。两者都是命令行界面&#xff0c;允许您输入文本命令来执行各种任务&#xff0c;但它们有何不同&#xff1f; PowerShell 是对命令提示符的改进 Windows 11 中的 Windows Po…

基于SSM的双减后初小教育课外学习生活活动平台的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

odoo17核心1——概述

odoo17发布了&#xff0c;如果说odoo16是一个承前启后的版本&#xff0c;那么odoo17则完全抛弃了历史包袱&#xff0c;全面简化了前端代码&#xff0c;是一个里程碑式的版本。 在学习odoo的过程中&#xff0c;结合对源码的阅读&#xff0c;对odoo的设计哲学有了一些自己的感悟…

分享一些实用工具和学习网站

1 前言 虽然已经工作过几年的时间了&#xff0c;但是学习的脚步是不能停止的&#xff0c;对于学习&#xff0c;特别是自学&#xff0c;善于搜索网上的一些资源来辅助&#xff0c;还是非常有必要的&#xff0c;下面我就把这几年私藏的各种资源&#xff0c;网站贡献出来给你们。…

BSWM 模式管理(二)ESH

BSWM 模式管理 ESH 1 ECU State Handling (ESH)2 BSWM ESH 五大模式与六大通用状态机3 状态机对应的切换条件 conditions or rules4 默认主要的 ACTION 或者 ACTION LIST1 ECU State Handling (ESH) 与 ECUM 相关,整个 ECU 状态管理的状态机制 2 BSWM ESH 五大模式与六大通…

时间序列预测模型全家桶-最全教程

时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 风速预测&#xff08;二&#xff09;基于Pytorch的EMD-LSTM模型-CSDN博客 风速预测&#xff08;三&#xff09;EMD-LSTM-Attention模型-CSDN博客 风速预测&#xff08;四&#xff09;基于P…

Spring Boot学习随笔- 文件上传和下载(在线打卡、附件下载、MultipartFile)

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第十二章、文件上传、下载 文件上传 文件上传是指将文件从客户端计算机传输到服务器的过程。 上传思路 前端的上传页面&#xff1a;提交方式必须为post&#xff0c;enctype属性必须为multipart/form-data开发…

Maven将Jar包打入本地仓库

Maven将Jar包打入本地仓库 Maven将Jar包打入本地仓库嘚吧嘚下载Maven配置Maven新建MAVEN_HOME编辑Path验证Maven配置 Jar包打入Maven仓库 Maven将Jar包打入本地仓库 嘚吧嘚 最近项目用到一个Jar包&#xff0c;不能从远程仓库拉取&#xff0c;只有一个Jar包&#xff0c;所以需…

IDEA Community html文件里的script标签没有syntax highlighting的解决方案

在网上找到的解决方法有的是针对Ultimate版本才可以下载的plugin&#xff0c;对我所用的Community版本无法生效&#xff0c;找了一圈最后在stackoverflow上找到一个有效的方案&#xff0c;给需要的小伙伴分享一下&#xff1a;IntelliJ Community Edition: Javascript syntax hi…