赞
踩
SMTP(Simple Mail Transfer Protocol),即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负 责发送邮件。
发送邮件之前,必需要对邮箱进行设置,邮箱需要开启SMTP服务
以163邮箱为例
import smtplib
连接对象 = smtplip.SMTP_SSL(服务器器地址, 邮箱服务端口)
连接对象.login(邮箱账号, 授权码)
数据指的需要发送的内容。邮件内容的构建需要涉及到另外一个库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(文字对象)
连接对象.sendmail(发件人, 收件人, 邮件对象.as_string())
连接对象.quit()
# 导入包 # 发送邮件 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()
有时候会涉及到发送 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()
需要重写的部分为下:
新增一个导入模块
# 构建图片
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中识别图片的ID html_str = """ <body> <h2>这是一个带有图片的邮件</h2> <p> <img src="cid:testimg"> </p> </body> """ # 将内容绑定到内容对象中 data.attach(MIMEText(html_str, "html", "utf-8")) data.attach(img)
# 发送邮件
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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。