概要

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

如果你使用过邮件客户端,比如Foxmail,outlook等,那么你应该了解SMTP服务器和端口号,除了服务器和端口,我们还需要进行其他配置,默认情况下邮件服务提供商是不允许我们使用程序进行邮件发送的,如果想要使用程序发送电子邮件,就需要我们手动开启SMTP服务,并获取一个专用的授权码(用于登陆)。 -- 需要自行去了解所用邮箱的授权码获取方式

使用smtplib和email模块发送邮件

得到邮箱的授权码就可以使用Python代码发送电子邮件了。Python标准库有多个与邮件相关的模块,其中smtplib负责发送邮件,email模块用来构造邮件和解析邮件内容。

smtplib模块

stmplib发送邮件大概分为以下几个步骤:

  • 连接到SMTP服务器
  • 发送SMTP的“Hello”消息
  • 登陆到SMTP服务器
  • 发送电子邮件
  • 关闭SMTP服务器的连接

对于简单的邮件,smtplib的使用是非常简单的,下面是实例

PS:sendmail的参数为发件人,收件人,邮件内容

注意:可以在创建加密链接之前使用smtp.set_debuglevel(1),来显示与SMTP服务器交互的相关信息

查看发送的邮件会发送,有两个问题,一是收件人栏为空,二是邮件内容缺失,这是因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,所以,我们必须把From、To和Subject添加到email模块中的MIMEText中,才是一封完整的邮件。(MTA可以理解为邮件代理服务器)。

smtplib模块结合email模块

使用email模块构建一个邮件对象(Message),email模块中支持很多邮件对象

  • MIMEText:表示一个纯文本的邮件* 常用
  • MIMEImage:表示一个作为附件的图片
  • MIMEMultipart:用于把多个对象组合起来

其中还有诸如其他的类:MIMEBase、MIMEAudio等。

MIMEText对象的主要参数是:MIMEText(_text, _subtype='plain', _charset=None),其中:

_text:表示邮件内容

_subtype:表示邮件内容的类型,默认为plain(纯文本),还可以设置为html,表示正文是html文件(会渲染HTML标签)

_charset:表示邮件编码,默认情况下使用ascii编码

下面是一个发送纯文本邮件的例子:

PS:利用msg对象,我们可以构建邮件的header,通过添加header信息,给邮件增加subject等参数,达到补全邮件信息的目的。msg的header添加方式和使用字典的方式相同。

带附件的邮件

前面说明了发送纯文本邮件的方法,在使用邮件发送带附件(图片)的邮件时,需要使用MIMEMultipart对象,并把MIMEImage对象添加。

使用yagmail发送邮件

Python的标准库smtplib和email,相对来说还是比较复杂的,因此许多开源项目提供了更加易用的接口来发送邮件。比如yagmail就是一个使用比较广泛的开源项目,它依旧使用smtplib和email模块,但是相对于直接使用smtplib和email模块,它提供了更加Pythonic的接口,并具有更好的易用性。

由于yagmail属于第三方库,在使用前需要先行安装

pip3 install yagmail

下面使用yagmail发送一封简单的邮件

如果要携带附件那么只需要在send后面添加即可

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

  1. 安装了email模块还是报错_官网的Pyngl和Pynio安装方法会报错!正确的在这里!

    NCL官网给出的Pyngl和Pynio安装方法如下: conda create -n ncl_to_python -c conda-forge xarray netcdf4 scipy pyngl p ...

  2. springboot导入项目依赖报错_最详细的 Spring Boot 多模块开发与排坑指南

    来源于公众未读代码 , 作者达西呀 创建项目 创建一个 SpringBoot 项目非常的简单,简单到这里根本不用再提.你可以在使用 IDEA 新建项目时直接选择 Spring Initlalize 创 ...

  3. spring的sanpshot报错_最详细的 Spring Boot 多模块开发与排坑指南

    创建项目 创建一个 SpringBoot 项目非常的简单,简单到这里根本不用再提.你可以在使用 IDEA 新建项目时直接选择 Spring Initlalize 创建一个 Spring Boot 项目 ...

  4. python安装selenium报错_新手用Python运行selenium的常见问题

    1.更换Python版本 打开pycharm,点击 file--setting--project项目名--project Interpreter,点击右侧的设置,如下图 选择新Python版本的安装路 ...

  5. python 相对路径报错_小白学 Python(18):基础文件操作

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  6. python创建excel文件报错_[转]用Python读写Excel文件

    大部分Windows环境的开发人员都会选择Microsoft Excel API.实际上不仅仅是Python,几乎各种语言都有相应的方法使用它,因为核心的逻辑完全是由Microsft Excel自身提 ...

  7. python中gbk字符原因报错_深入理解Python中的字符和编码,结合,了解,与

    一.前言 在学习python初期,常常会对运行文件出现的各种"codec"报错摸不着头脑有没有? 对各种编码方式的区别和适用的情况混淆有没有? 对python2,python3 编 ...

  8. python vars name报错_简单瞅瞅Python vars()内置函数的实现

    0.偶然间看到一个奇怪的现象 >>> x = 1 >>> a = var() >>> a['x'] 1 这是啥操作??用help(vars)之后, ...

  9. pythonif语句的冒号总是报错_干货:python入门if语句及其列表操作

    本教程使用的课本是<Python编程:从入门到实践>,作者:[美] Eric Matthes 本节学习代码中针对不同情况进行分别处理的方法,关键字是if.学完这节,从理论上讲,你就可以编写 ...

最新文章

  1. 生信人写程序2. Editplus添加Perl, Shell, R模板和语法高亮
  2. spring启动过程之源码跟踪(续beanfactory)--spring Debug
  3. 如何过渡至 Python 3
  4. JFreeChart(七)之气泡图表​​​​​​​
  5. 计算机编程学英语词汇,计算机编程英语词汇大全
  6. linux中改localhome名称,修改 /var/lib/locales/supported.d/local 文件(使用 locale -a 命令查看系統中所有已配置的 locale)...
  7. Python自动化运维之21、CSS
  8. nginx rewrite重写规则配置详解
  9. 安装天文基本包:kapteyn和pyslalib
  10. JDBC - 宋红康 - 核心技术
  11. win10 共享文件夹 nplayer查看共享文件
  12. 路由器的虚拟服务器干嘛用的,dmz和虚拟服务器(tp路由器虚拟服务器能干嘛)...
  13. python中的递归思想_〖Python〗-- 递归、面向对象初识及编程思想
  14. Docker快速搭建EKL
  15. iOS 字体类型列表
  16. 移动笔试计算机知识,移动笔试知识点之--计算机类-数据库系统概论复习资料
  17. 解决ie11下antd-vue input的clear点击无效
  18. python换零钱_Python算法之零钱兑换问题的解法
  19. 装机日记 200元预算宿舍主机改造
  20. 推荐100首值得听的英文歌

热门文章

  1. AngularJs学习之ng-repeat-start,ng-repeat-end 指令
  2. H5 中的 new FileReader() 以及 识别上传的文件是否为图片
  3. Laravel源码入门-启动引导过程(四)app/Http/Kernel.php
  4. scala学习笔记(一)入门初探
  5. float元素一定要闭合
  6. 找出MySQL瓶颈的基准测试和剖析
  7. swoole 异步MYSQL
  8. 普通用户程序使用保留端口 error while loading shared libraries
  9. My Linux 让人高兴的新进展(博客搬家 2007-07-14 13:05)
  10. 第三节 循环链表的Go语言实现