html发送邮件_Python自动化办公系列八(邮件自动发送)

news/2024/7/3 12:24:58

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

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

准备需要发送邮件的邮箱账号

如果是163邮箱只需要准备账号和密码;如果是QQ邮箱,需要准备账号和授权码(密码不好用),可以去QQ邮箱官网的帮助中心去查看授权码的获取方式。

发送邮件的基本步骤

1. 登录邮箱

import smtplib
1. 连接邮箱服务器
连接对象 = smtplip.SMTP_SSL(服务器地址, 邮箱服务端口)       

- 服务器地址:smtp.163.com(163邮箱)、smtp.qq.com(qq邮箱)
- 邮箱服务端口:465或者25

2. 登录邮箱
连接对象.login(邮箱账号, 密码)

- 密码:如果是163邮箱直接使用邮箱的登录密码,如果是qq邮箱就使用授权码

2. 数据准备

数据指的需要发送的内容。邮件内容的构建需要涉及到另外一个库email,它可以用来构建邮件主题以及各种形式的邮件内容(包括文字内容、图片内容、html内容、附件)等,这儿先简单说一个邮件主题和文本内容,其他形式的内容在后面邮件内容部分详细讲解。

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

1. 创建邮件对象
邮件对象 = MIMEMultipart()

2. 设置邮件主题
主题对象 = Header(邮件标题, 编码方式).encode()
邮件对象['Subject'] = 主题对象

3.设置邮件发送者
邮件对象['From'] = '用户名 <用户名>'

4.设置邮件接受者
邮件对象['To']   =   '收件人1;收件人2;收件人3...'

5. 添加文字内容
文字内容对象 = MIMEText(内容, 类型, 编码方式)
- 内容:就是文字字符串
- 类型:plain(简单的文字内容)、html(超文本)
邮件对象.attach(文字对象) 

3. 发送邮件

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

示例如下:

"""__author__=余婷"""
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

# 1. 连接邮箱服务器
con = smtplib.SMTP_SSL('smtp.163.com', 465)

# 2. 登录邮箱
con.login('XXXX@163.com', 'XXXXX')

# 2. 准备数据
# 创建邮件对象
msg = MIMEMultipart()

# 设置邮件主题
subject = Header('找回密码', 'utf-8').encode()
msg['Subject'] = subject

# 设置邮件发送者
msg['From'] = 'XXXX@163.com <XXXX@163.com>'

# 设置邮件接受者
msg['To'] = '726550822@qq.com'

# 添加文字内容
text = MIMEText('忘记密码需要找回密码', 'plain', 'utf-8')
msg.attach(text)

# 3.发送邮件
con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string())
con.quit()

0def05709cbe4a37cd67119eaa794f60.png

特殊内容的发送

1. HTML邮件的构建

HTML格式的邮件本质还是文本格式的邮件,所有文件的构建方式和普通文本文件的构建方式差不多:

from email.mime.text import MIMEText
html文本对象 = MIMEText(html内容字符串, 'html', 编码方式)
邮件对象.attach(html文本对象)

实例如下:

"""__author__=余婷"""
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

# 1. 连接邮箱服务器
con = smtplib.SMTP_SSL('smtp.163.com', 465)

# 2. 登录邮箱
con.login('xxxx@163.com', 'xxxxxx')

# 2. 准备数据
# 创建邮件对象
msg = MIMEMultipart()

# 设置邮件主题
subject = Header('找回密码', 'utf-8').encode()
msg['Subject'] = subject

# 设置邮件发送者
msg['From'] = 'xxxx@163.com <xxxx@163.com>'

# 设置邮件接受者
msg['To'] = '726550822@qq.com'

# 添加html内容
content = """
<h2>我是正文中的标题</h2>
<p>邮件正文描述性文字1</p>
<p>邮件正文描述性文字2</p>
<img src='https://www.baidu.com/img/bd_logo1.png'>
<center>百度图片</center>
<a href='https://www.baidu.com'>百度一下</a>
"""
html = MIMEText(content, 'html', 'utf-8')
msg.attach(html)

# 3.发送邮件
con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string())
con.quit()

336eaf07c938a1cbca95452534a283fc.png

2.发送图片

  1. 以附件的形式发送本地图片
from email.mime.image import MIMEImage
图片对象 = MIMEImage(图片二进制数据)
图片对象["Content-Disposition"] = 'attachment; filename="图片名"'
邮件对象.attach(图片对象)
- 图片二进制数据:可以通过文件操作去读取

示例如下:

"""__author__=余婷"""
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.header import Header

# 1. 连接邮箱服务器
con = smtplib.SMTP_SSL('smtp.163.com', 465)

# 2. 登录邮箱
con.login('xxxx@163.com', 'xxxxxx')

# 2. 准备数据
# 创建邮件对象
msg = MIMEMultipart()

# 设置邮件主题
subject = Header('图片发送', 'utf-8').encode()
msg['Subject'] = subject

# 设置邮件发送者
msg['From'] = 'xxxx@163.com <xxxx@163.com>'

# 设置邮件接受者
msg['To'] = '726550822@qq.com'

# 添加图片附件
image_data = open('files/image.jpg', 'rb').read()
image = MIMEImage(image_data)
image["Content-Disposition"] = 'attachment; filename="image.jpg"'   # 设置图片标题
msg.attach(image)

# 3.发送邮件
con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string())
con.quit()

a53b88f6717416abbd88ac821c9148c7.png
  1. 以邮件内容的形式发送图片

如果想要叫本地图片作为邮件中的内容,需要将图片以<img src='cid:图片id'/>的形式关联到html文本中

python from email.mime.image import MIMEImage 图片对象 = MIMEImage(图片二进制数据) image.add_header('Content-ID', '<自定义图片id>') 邮件对象.attach(图片对象)

示例如下:

```python """author=余婷""" import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.header import Header from copy import deepcopy

# 1. 连接邮箱服务器 con = smtplib.SMTP_SSL('smtp.163.com', 465)

# 2. 登录邮箱 con.login('xxxx@163.com', 'xxxxxx')

# 2. 准备数据 # 创建邮件对象 msg = MIMEMultipart()

# 设置邮件主题 subject = Header('图片发送', 'utf-8').encode() msg['Subject'] = subject

# 设置邮件发送者 msg['From'] = 'xxxx@163.com xxxx@163.com'

# 设置邮件接受者 msg['To'] = '726550822@qq.com'

# 添加文字内容 content = """

我是正文中的标题

邮件正文描述性文字1

邮件正文描述性文字2

4b24b2053be6851e5dd3155a7542b22e.png

图片显示百度一下 """ html = MIMEText(content, 'html', 'utf-8') msg.attach(html)

# 添加图片附件 image_data = open('files/image.jpg', 'rb').read() image = MIMEImage(image_data) image.add_header('Content-ID', '')
msg.attach(image)

# 3.发送邮件 con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string()) con.quit() ```

af6ef88851e0ba2fd5f8b1954a855f53.png

3. 发送附件

from email.mime.text import MIMEText
文件对象 = MIMEText(文件二进制数据, 'base64', 编码方式)
文件对象["Content-Disposition"] = 'attachment; filename="文件名"'
邮件对象.attach(文件对象)

示例如下:

"""__author__=余婷"""
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.header import Header
from email.mime.message import MIMEMessage
from copy import deepcopy

# 1. 连接邮箱服务器
con = smtplib.SMTP_SSL('smtp.163.com', 465)

# 2. 登录邮箱
con.login('xxxx@163.com', 'xxxxxx')

# 2. 准备数据
# 创建邮件对象
msg = MIMEMultipart()

# 设置邮件主题
subject = Header('文件附件发送', 'utf-8').encode()
msg['Subject'] = subject

# 设置邮件发送者
msg['From'] = 'xxxx@163.com <xxxx@163.com>'

# 设置邮件接受者
msg['To'] = '726550822@qq.com'

# 添加文件附件
file1 = MIMEText(open('files/test.txt', 'rb').read(), 'base64', 'utf-8')
file1["Content-Disposition"] = 'attachment; filename="test.txt"'
msg.attach(file1)

file2 = MIMEText(open('files/pyecharts的使用.pdf', 'rb').read(), 'base64', 'utf-8')
file2["Content-Disposition"] = 'attachment; filename="test.pdf"'
msg.attach(file2)


# 3.发送邮件
con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string())
con.quit()

94a83c830bc40718eb3145e810abaeff.png

~~欢迎大家关注我的b站视频,上面全是我自己录的一些python好玩儿的模块的授课视频,其中包括这篇博客内容的授课视频:https://space.bilibili.com/49719176


http://www.niftyadmin.cn/n/1999131.html

相关文章

又碰到新问题,django

感觉win 关于一些配置问题可能会打到一大片people。。如果没人指导的话。。。有点虐心 可谓是把该出现的问题全部出现了个遍。。 1.电脑里放了一个anaconda3.5的版本&#xff0c;以及3.6的纯python版本&#xff0c; 以前两个版本共存也相安无事&#xff0c;这阵子不知道为毛&am…

在mysql_MySQL(一)

2021-01-061、MySQL学习什么是MySQL&#xff1f;MySQL是一个轻量级的关系型数据库&#xff0c;MySQL的数据是以表的形式来进行存储&#xff0c;表与表之间就存在关系&#xff0c;一对一&#xff0c;一对多的关系。MySQL在系统能做什么事&#xff1f;在一个软件系统里面&#xf…

匿名管道(例子)

子进程源代码&#xff1a; voidCProcessChildView::OnMypipeWrite(){ // TODO: Add your command handler code herechar buf[] "Hello, I am child process! I love my baby so much!"; DWORD dwWrite 0; if (!WriteFile(m_hWrite, buf, strlen…

centos 安装 mysql客户端_Centos7 下面安装 MySql 客户端

cd 到下载目录&#xff1b;执行sudo rpm -iU mysql-workbench-community-6.3.8-1.el7.x86_64.rpm如果系统依赖软件不满足&#xff0c;会提示&#xff0c;比如我的是这样的&#xff1a;[mslageecentos-dev Downloads]$ rpm -iU mysql-workbench-community-6.3.8-1.el7.x86_64.rp…

最值一看-------轮播图

<!DOCTYPE HTML><html><head><meta http-equiv"Content-Type" content"text/html; charsetgb2312"><title>最值衣看</title><link href"http://www.hc360.com/chat/2014/0527/css/styles.css" rel"…

邮槽使用例子

接受端源代码&#xff1a; void CMailslotSrvView::OnMailslotsrv(){ // TODO: Add your command handler code here HANDLE hMailslot NULL; char buf[100] "/0"; DWORD dwRead 0; hMailslot CreateMailslot(".//mailslot//mymailslot", 0, MAILSLOT…

深入理解 React JS 中的 setState

此文主要探讨了 React JS 中的 setState 背后的机制&#xff0c;供深入学习 React 研究之用。 在课程 React.js入门基础与案例开发 中&#xff0c;有些同学会发现 React JS 中的 setState 的表现好像有点怪异&#xff0c;和理解中的 state 更新机制不太一样&#xff0c;下面我们…

mysql和mysqla_mysql(连接查询和数据库设计)

--创建学生表create table students (id int unsigned not null auto_increment primary key,name varchar(20) default ,age tinyint unsigned default 0,high decimal(5,2),gender enum(男, 女, 中性, 保密) default 保密,cls_id int unsigned default 0,is_delete bit defau…