Python email模块学习

  • SMTP协议客户端
  • EmailMessage 邮件信息对象

SMTP协议客户端

smtplib 模块定义了一个 SMTP 客户端会话对象:

import smtplib
smtplib.SMTP(host='', port=0, local_hostname=None, [timeout, ]source_address=None)

163邮箱的host 和 port:

host:smtp.163.com
port:25

实例化一个SMTP对象:

self.HOST = "smtp.163.com"
self.PORT = 25
self.smtp = smtplib.SMTP(self.HOST, self.PORT)

下文主要用到SMTP对象的login和send_message方法:

# login方法
# SMTP.login(user, password, *, initial_response_ok=True)
# user 是163的邮箱账号;
# password是163的授权码:需要开启你账号的smtp协议
# 163的邮箱账号
self.MAILID = "123456789**@163.com"
# 163的授权码
self.AUTHCODE = "0123456789101112"
# 登录
self.smtp.login(self.MAILID, self.AUTHCODE)
# send_message方法
# SMTP.send_message(msg, from_addr=None, to_addrs=None, mail_options=(), rcpt_options=())
# msg就是EmailMessage类的实例对象
# from_addr和 to_addrs 指定发送和接收的信息;如果为None就会从EmailMessage对象中查找字段
self.msg = EmailMessage()
self.smtp.send_message(self.msg)

EmailMessage 邮件信息对象

# email.message.EmailMessage(policy=default)
# policy表示策略对象 默认default策略
self.msg = EmailMessage()
# 设置消息头 和 负载(就是 内容 )
# 主题
self.msg["Subject"] = "Subject"
# 发送邮箱地址
self.msg["From"] = self.MAILID
# 接收邮箱地址 用逗号分隔可以群发
self.msg["To"] = "**@***.com,**@***.com"
# 邮件内容
self.msg.set_content("Hello World!")# 效果同上 parsestr方法将字符串以\n分隔 返回EmailMessage对象
# 利用Parser(policy=default).parsestr(str)方法 返回消息对象
# self.msg = Parser().parsestr(f'From: {self.MAILID}\n'
#                              'To: **@***.com,**@***.com\n'
#                              'Subject: Subject\n'
#                              '\n'
#                              'Hello World!\n')

关于:email.policy: 策略对象

上面只是发送了简单的文字 下面的方法可以添加附件:

# add_attachment方法
# EmailMessage().add_attachment(*args, content_manager=None, **kw)# 同目录下data文件夹内的所有文件将被添加到附件
attch_dir = "data"
# logger.debug(os.listdir(data_path))
filenames = os.listdir(attch_dir)
for filename in filenames:file_path = os.path.join(attch_dir, filename)ctype, encoding = mimetypes.guess_type(file_path)if ctype is None:ctype = "application/octet-stream"maintype, subtype = ctype.split("/")with open(file_path, "rb") as r:self.msg.add_attachment(r.read(), maintype=maintype, subtype=subtype, filename=filename)

完整实例代码:

import logging
import os
import smtplib
import mimetypes
from email.message import EmailMessage
from email.parser import Parserlogging.basicConfig(level=logging.DEBUG,format="%(asctime)s>%(message)s", datefmt="%Y-%m-%d %H:%M:%S")
logger = logging.getLogger(__name__)class EmailClass(object):"""docstring for EmailClass"""def __init__(self):self.HOST = "smtp.163.com"self.PORT = 25self.MAILID = "123456789**@163.com"self.AUTHCODE = "0123456789101112"self.smtp = smtplib.SMTP(self.HOST, self.PORT)self.msg = EmailMessage()def send_Email(self):self.set_msg()with self.smtp:try:self.smtp.login(self.MAILID, self.AUTHCODE)except smtplib.SMTPAuthenticationError as e:logger.error("登录失败:%s", e.args)else:self.smtp.send_message(self.msg)logger.info("发送成功")def set_msg(self):"""设置邮件信息对象"""# 直接赋值self.msg["Subject"] = "Subject"self.msg["From"] = self.MAILIDself.msg["To"] = "**@***.com,**@***.com"self.msg.set_content("Hello World!")# 利用Parser(policy=default).parsestr(str)方法 返回消息对象# self.msg = Parser().parsestr(f'From: {self.MAILID}\n'#                              'To: **@***.com,**@***.com\n'#                              'Subject: Subject\n'#                              '\n'#                              'Hello World!\n')self.add_attch()def add_attch(self):"""给邮件信息对象添加附件同目录下data文件夹内的所有文件将被添加到附件"""attch_dir = "data"# logger.debug(os.listdir(data_path))filenames = os.listdir(attch_dir)for filename in filenames:file_path = os.path.join(attch_dir, filename)ctype, encoding = mimetypes.guess_type(file_path)if ctype is None:ctype = "application/octet-stream"maintype, subtype = ctype.split("/")with open(file_path, "rb") as r:self.msg.add_attachment(r.read(), maintype=maintype, subtype=subtype, filename=filename)if __name__ == "__main__":EmailClass().send_Email()

注意:一定要开启发送邮件账号的smtp协议,并用正确的授权码进行测试。
以上就是关于 Python email模块发送邮件的学习;
如果有什么不对的地方,欢迎指正!

Python系列 之 email模块 - 发送邮件相关推荐

  1. 安装了email模块还是报错_科普:利用Python smtplib和email模块实现自动发送邮件功能...

    概要 我们都知道SMTP(简单邮件传输协议),是一组用于从原地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式.SMTP规定电子邮件应该如何格式化.如何加密,以及如何在邮件服务器之间传递.SMT ...

  2. python stmplib与email模块邮箱详解

    python stmplib与email 模块 发送邮箱 文章目录 python stmplib与email 模块 发送邮箱 1. stmplib 简介 2. stmplib类与方法 2.1 发送tx ...

  3. python安装email模块_Python使用SMTP模块、email模块发送邮件

    一.smtplib模块: 主要通过SMTP类与邮件系统进行交互.使用方法如下: 1.实例化一个SMTP对象: s = smtplib.SMTP(邮件服务地址,端口号) s = smtplib.SMTP ...

  4. 100天精通Python丨办公效率篇 —— 11、Python自动化操作 Email(发送邮件、收邮件、邮箱客户端)

    文章目录 一.通过SMTP发送电子邮件 1.1 定义邮件正文 1.2 发送邮件 二.收取电子邮件 2.1 配置账户信息 2.2 连接邮箱服务器 2.3 搜索返回消息ID 2.4 读取邮件 三.使用邮件 ...

  5. python 读取邮件内容_利用Python imaplib和email模块 读取邮件文本内容及附件内容...

    python使用imap接收邮件的过程探索 https://www.cnblogs.com/yhlx/archive/2013/03/22/2975817.html #! encoding:utf8 ...

  6. Python 发送邮件 email 模块、smtplib 模块

    ____tz_zs SMTP email 模块:负则构造邮件 smtplib 模块:负则发送邮件 一.发送纯文本邮件 from email.header import Header from emai ...

  7. python email模块

    python email模块 官方文档 email模块 电子邮件包是一个用于管理电子邮件消息的库.它的特殊设计不用于向SMTP (RFC 2821).NNTP或其他服务器发送任何电子邮件消息;这些是模 ...

  8. smtplib python教程_python使用smtplib模块发送邮件

    使用smtplib模块发送邮件,供大家参考,具体内容如下 1)使用smtplib模块发送简单邮件 步骤: 1.连接SMTP服务器,并使用用户名.密码登陆服务器 2.创建EmailMessage对象,该 ...

  9. python发邮件详解,smtplib和email模块详解

    在介绍具体的实现python发邮件的具体操作之前,我觉得有必要介绍下SMTP,更有助于理解python发邮件的实现原理.SMTP协议属于TCP/IP协议簇,即简单邮件传输协议,它是一组用于由源地址到目 ...

最新文章

  1. 9种设计模式在Spring中的运用,一定要非常熟练!
  2. python序列类型有_Python序列类型
  3. const char * 和 char const * 和 char * const 区别
  4. 浅谈同步复位与异步复位
  5. 电话圈(floyd)
  6. vs2017怎么安装python包,vs2017安装pygame,vs2017安装python第三方包
  7. gtj2018如何生成工程量报表_土建软件GTJ2018中的十个问题及解决方法
  8. 深入理解——亚像素 / sub-pixel、亚像素卷积
  9. 开发中遇到的Cause: java.sql.SQLException: connection holder is null的异常
  10. 神盾解密工具 之 解密 “ PHP 神盾解密工具 ”
  11. android标题栏上增加按钮,Android:向自定义标题栏添加按钮
  12. 苹果可折叠iPhone有望在2023年推出 支持手写笔
  13. linux系统故障排除
  14. 直播电商都用上 AI 实时翻译了!歪果仁也能听懂李佳琦
  15. java 快速框架下载_Aria:简单易用、高效的下载框架(Java)
  16. C++算法学习(力扣:134. 加油站)
  17. FSR 是提高性能和视觉效果
  18. 工程流体力学笔记暂记33 (边界层动量积分方程)
  19. Android 三类框架的理解以及MVVM框架的使用
  20. 手动修改dns服务器设置,【当贝市场】怎样手动设置DNS服务器?教程如下

热门文章

  1. 编程表达年月日分秒c语言,年月日时分秒教学反思
  2. 恶意网站可利用浏览器扩展 API,窃取浏览器数据
  3. U-boot之flash初始化完全代码分析
  4. vue小例子-单位换算-父子组件通信
  5. 编译器连接器分析器_使用构建分析器了解您的构建
  6. 二、JVM内存模型及内存参数设置
  7. 【DBN分类】基于哈里斯鹰算法优化深度置信网络HHO-DBN实现数据分类附matlab代码
  8. 华为B199刷机包 官方MEUI 2.0 B190精简省电版
  9. FANUC数控机床的维修 从原理开始(二)
  10. 计算机网络——电子邮件客户端程序设计与实现