发送邮件(用代码模拟邮箱服务器发送邮件)
1.导入模块和包,分别是邮件发送服务器模块、邮件对象模块、邮件标题包、邮件内容包
import smtplib # 邮件发送服务器
from email.mime.multipart import MIMEMultipart # 创建一个邮件对象
from email.header import Header # 邮件标题包
from email.mime.text import MIMEText # 邮件内容包
2.用函数封装功能:发邮件
包含:发送人、接收人、主题、内容、附件
def send_email(from_user, to_user, subject='', content='', files=[]):"""发送邮件:param from_user: 发送人:param to_user: 接收人 abc@qq.com;def@163.com:param subject: 主题:param content: 内容:param file: 附件:return:"""HOST = 'smtp.qq.com'email = MIMEMultipart() # 创建一个邮件对象email['From'] = from_user # 设置邮件发送者email['To'] = to_user # 设置邮件接收者email['Subject'] = Header(subject, 'utf-8').encode() # 设置邮件主题# 邮件内容 plain 是纯文本格式 utf-8 是编码格式content = MIMEText(content, 'plain', 'utf-8')
3.添加附件时注意:
a. 将附件转成base64编码格式
b.对附件的中文件名进行gbk编码
代码如下:
# 添加邮件附件email.attach(content)if files:for file in files:with open(file, 'rb') as f:file_name = file.rfind('/')display_filename = file[file_name + 1:] if file_name != -1 else file# 将附件转成base64编码格式att = MIMEText(f.read(), 'base64', 'utf-8')# 设置附件类型 通知服务器这是附件att["Content-Type"] = 'application/octet-stream'# 设置附件的文件名称,告诉服务器附件的文件名称 并显示在邮件中,并对附件的中中文件名gbk编码att.add_header('Content-Disposition', 'attachment',filename=('gbk', '', os.path.basename(display_filename)))# 将附件附加到 邮件对象email.attach(att)
4.发送邮件
# 链接邮件发送服务器,查询邮箱的SMTP的端口号QQ和163邮箱的端口号都是465connect = smtplib.SMTP_SSL(HOST, 465) # 链接邮件发送服务器,查询邮箱的SMTP的端口号QQ邮箱的是465# 登录邮件发送服务器,需要准备邮箱号和授权码,在邮箱设置中找到POP3/SMTP/IMAP,开启所有服务,会生成授权码,保存授权码connect.login('XXXXXXX@qq.com', '邮箱授权码')# to_user.split(';')接受者邮箱号按照 ";" 分割后正好得到一个列表connect.sendmail(from_user, to_user.split(';'), email.as_string())# 退出connect.quit()
5.完整代码如下:
import smtplib # 邮件发送服务器
from email.mime.multipart import MIMEMultipart # 创建一个邮件对象
from email.header import Header # 邮件标题包
from email.mime.text import MIMEText # 邮件内容包
import os
def send_email(from_user, to_user, subject='', content='', files=[]):"""发送邮件:param from_user: 发送人:param to_user: 接收人 abc@qq.com;def@163.com:param subject: 主题:param content: 内容:param file: 附件:return:"""HOST = 'smtp.qq.com'email = MIMEMultipart() # 创建一个邮件对象email['From'] = from_user # 设置邮件发送者email['To'] = to_user # 设置邮件接收者email['Subject'] = Header(subject, 'utf-8').encode() # 设置邮件主题# 邮件内容 plain 是纯文本格式 utf-8 是编码格式content = MIMEText(content, 'plain', 'utf-8')# 添加邮件附件email.attach(content)if files:for file in files:with open(file, 'rb') as f:file_name = file.rfind('/')display_filename = file[file_name + 1:] if file_name != -1 else file# 将附件转成base64编码格式att = MIMEText(f.read(), 'base64', 'utf-8')# 设置附件类型 通知服务器这是附件att["Content-Type"] = 'application/octet-stream'# 设置附件的文件名称,告诉服务器附件的文件名称 并显示在邮件中,并对附件的中中文件名gbk编码att.add_header('Content-Disposition', 'attachment',filename=('gbk', '', os.path.basename(display_filename)))# 将附件附加到 邮件对象email.attach(att)# 链接邮件发送服务器,查询邮箱的SMTP的端口号QQ和163邮箱的端口号都是465connect = smtplib.SMTP_SSL(HOST, 465) # 链接邮件发送服务器,查询邮箱的SMTP的端口号QQ邮箱的是465# 登录邮件发送服务器,需要准备邮箱号和授权码,在邮箱设置中找到POP3/SMTP/IMAP,开启所有服务,会生成授权码,保存授权码connect.login('xxxxxxx@qq.com', '邮箱授权码')# to_user.split(';')接受者邮箱号按照 ";" 分割后正好得到一个列表connect.sendmail(from_user, to_user.split(';'), email.as_string())# 退出connect.quit()
6.将发送邮件这个函数封装起来作为一个包导入,方便今后调用
# 导入模块和包
from myutils import send_email# 传参send_email('XXXXXXX@qq.com',"XXXXXXX@163.com", # 发送对象的邮箱,可以传入列表subject='这是标题', # 标题content='这是内容', # 内容files=[r"文件路径1";r"文件路径2";r"文件路径3"]) #附件路径
发送邮件(用代码模拟邮箱服务器发送邮件)相关推荐
- php 邮件发送设置_PHP实现自动发送邮件功能代码(qq 邮箱)
最近做一个邮箱验证的功能,研究了一会,搞定了邮件的自动发送.下面用qq邮箱作为演示,一步一步来解释: 代码下载地址 首先,就是做到邮件的发送,代码如下: //邮件发送 require "./ ...
- 使用telnet程序连接qq smtp协议邮箱服务器发送邮件
使用telnet程序连接qq smtp协议邮箱服务器发送邮件 1. telnet简介 2. 使用telnet程序连接qq邮箱服务器(以centos为例) 1. telnet简介 Telnet是一种应用 ...
- 使用telnet通过qq的SMTP邮箱服务器发送邮件
使用telnet通过qq的SMTP邮箱服务器发送邮件 telnet的安装 开启账号的SMTP服务,获取授权码 使用telnet发邮件 telnet的安装 telnet是Windows的一个远程连接工具 ...
- SMTP邮箱服务器发送邮件
python实现邮件发送 python使用邮箱服务器发送qq邮件 对发送邮件的代码进行封装成函数后调用 导入需要使用的库 import smtplib from email.mime.multipar ...
- java qq邮箱服务器端口_spring mail借助qq邮箱服务器发送邮件
spring mail封装了javaMail的邮件服务,让邮件服务使用起来更简单,下面以qq邮箱服务器为例,用spring mail服务来发送邮件 配置qq邮箱,"设置"--&qu ...
- php自动发送邮件,PHP实现自动发送邮件功能代码(qq 邮箱)_php实例
本文给大家分享以qq邮箱为例给大家介绍PHP实现自动发送邮件功能代码,感兴趣的朋友参考下吧 最近做一个邮箱验证的功能,研究了一会,搞定了邮件的自动发送.下面用qq邮箱作为演示,一步一步来解释: 代码下 ...
- linux telnet qq邮箱,windows命令行下:telnet访问163邮箱服务器和qq邮箱服务器发送邮件...
对163邮箱来说,它可以不使用ssl加密,访问服务器的25端口 但是对于qq邮箱服务器,得使用ssl访问587端口 另外邮箱设置一定要开启smtp服务 163: telnet smtp.163.c ...
- windows命令行下:telnet访问163邮箱服务器和qq邮箱服务器发送邮件
对163邮箱来说,它可以不使用ssl加密,访问服务器的25端口 但是对于qq邮箱服务器,得使用ssl访问587端口 另外邮箱设置一定要开启smtp服务 163: telnet smtp.163.c ...
- 公司内部邮箱服务器发送邮件 java版
原文链接:https://blog.csdn.net/jsjsjs1789/article/details/53352409 背景: 由于需要给合作方以压缩包的形式每天返回数据,基于我们自己写的分布式 ...
最新文章
- 通用数据库连接执行类(SQL)
- 序列建模:时间卷积网络取代RNN(An Empirical Evaluation of Generic Convolutional and Recurrent)论文 pdf
- gridview的buttonfield获取该行的索引值(实例讲解)
- Educational Codeforces Round 8 D. Magic Numbers 数位DP
- python如何打开txt文件、并算词频_python TF-IDF词频算法实现文本关键词提取代码...
- 摆成“吉”字的一万响鞭炮
- C语言的整型溢出问题
- 在程序开发中日志级别
- cdp备份适合oracle吗,备份系统建设中的四个认识误区,你有吗?
- LeetCode 606. Construct String from Binary Tree
- HDOJ 1036 Average is not Fast Enough!
- java输入a控制台打印1_Java—— 流(Stream)、文件(File)和IO
- 【Oracle】查看用户的信息(状态、默认表空间等)
- 【六维空间】即将免费开放注册
- java作品欣赏_[Java教程]推荐25个强大的 jQuery 网页布局设计作品欣赏
- 安装nginx,php8,nfs,oralce19c客户端
- 浏览器打开网页但找不到服务器ip地址 DNS错误 解决办法
- path/filepath
- string字符串转换时间格式(包含精确时分秒)
- 【Vue】全局变量的定义及使用