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"]) #附件路径

发送邮件(用代码模拟邮箱服务器发送邮件)相关推荐

  1. php 邮件发送设置_PHP实现自动发送邮件功能代码(qq 邮箱)

    最近做一个邮箱验证的功能,研究了一会,搞定了邮件的自动发送.下面用qq邮箱作为演示,一步一步来解释: 代码下载地址 首先,就是做到邮件的发送,代码如下: //邮件发送 require "./ ...

  2. 使用telnet程序连接qq smtp协议邮箱服务器发送邮件

    使用telnet程序连接qq smtp协议邮箱服务器发送邮件 1. telnet简介 2. 使用telnet程序连接qq邮箱服务器(以centos为例) 1. telnet简介 Telnet是一种应用 ...

  3. 使用telnet通过qq的SMTP邮箱服务器发送邮件

    使用telnet通过qq的SMTP邮箱服务器发送邮件 telnet的安装 开启账号的SMTP服务,获取授权码 使用telnet发邮件 telnet的安装 telnet是Windows的一个远程连接工具 ...

  4. SMTP邮箱服务器发送邮件

    python实现邮件发送 python使用邮箱服务器发送qq邮件 对发送邮件的代码进行封装成函数后调用 导入需要使用的库 import smtplib from email.mime.multipar ...

  5. java qq邮箱服务器端口_spring mail借助qq邮箱服务器发送邮件

    spring mail封装了javaMail的邮件服务,让邮件服务使用起来更简单,下面以qq邮箱服务器为例,用spring mail服务来发送邮件 配置qq邮箱,"设置"--&qu ...

  6. php自动发送邮件,PHP实现自动发送邮件功能代码(qq 邮箱)_php实例

    本文给大家分享以qq邮箱为例给大家介绍PHP实现自动发送邮件功能代码,感兴趣的朋友参考下吧 最近做一个邮箱验证的功能,研究了一会,搞定了邮件的自动发送.下面用qq邮箱作为演示,一步一步来解释: 代码下 ...

  7. linux telnet qq邮箱,windows命令行下:telnet访问163邮箱服务器和qq邮箱服务器发送邮件...

    对163邮箱来说,它可以不使用ssl加密,访问服务器的25端口  但是对于qq邮箱服务器,得使用ssl访问587端口  另外邮箱设置一定要开启smtp服务 163: telnet smtp.163.c ...

  8. windows命令行下:telnet访问163邮箱服务器和qq邮箱服务器发送邮件

    对163邮箱来说,它可以不使用ssl加密,访问服务器的25端口  但是对于qq邮箱服务器,得使用ssl访问587端口  另外邮箱设置一定要开启smtp服务 163: telnet smtp.163.c ...

  9. 公司内部邮箱服务器发送邮件 java版

    原文链接:https://blog.csdn.net/jsjsjs1789/article/details/53352409 背景: 由于需要给合作方以压缩包的形式每天返回数据,基于我们自己写的分布式 ...

最新文章

  1. 通用数据库连接执行类(SQL)
  2. 序列建模:时间卷积网络取代RNN(An Empirical Evaluation of Generic Convolutional and Recurrent)论文 pdf
  3. gridview的buttonfield获取该行的索引值(实例讲解)
  4. Educational Codeforces Round 8 D. Magic Numbers 数位DP
  5. python如何打开txt文件、并算词频_python TF-IDF词频算法实现文本关键词提取代码...
  6. 摆成“吉”字的一万响鞭炮
  7. C语言的整型溢出问题
  8. 在程序开发中日志级别
  9. cdp备份适合oracle吗,备份系统建设中的四个认识误区,你有吗?
  10. LeetCode 606. Construct String from Binary Tree
  11. HDOJ 1036 Average is not Fast Enough!
  12. java输入a控制台打印1_Java—— 流(Stream)、文件(File)和IO
  13. 【Oracle】查看用户的信息(状态、默认表空间等)
  14. 【六维空间】即将免费开放注册
  15. java作品欣赏_[Java教程]推荐25个强大的 jQuery 网页布局设计作品欣赏
  16. 安装nginx,php8,nfs,oralce19c客户端
  17. 浏览器打开网页但找不到服务器ip地址 DNS错误 解决办法
  18. path/filepath
  19. string字符串转换时间格式(包含精确时分秒)
  20. 【Vue】全局变量的定义及使用

热门文章

  1. 高级 JavaScript(一)
  2. 如何设计好一条推送通知
  3. 数据库 关系模式和关系的区别
  4. 使用 Javascript 与 Flow 交互
  5. 1、Linux下搭建研究live555的开发环境
  6. java 增加内存_如何增加java虚拟机可以使用的最大内存
  7. MicroBlaze软核扩大内存的方法
  8. vector<vector>排序
  9. MIPI屏和LVDS屏有什么区别
  10. 旧电脑搭建linux服务器