使用第三方库 yagmail

更新: 第三种方式的隐藏用户名和密码的方式,目前不再支持

简单介绍

目标是尽可能简单,无痛地发送电子邮件。

最终的代码如下:

import yagmail

yag = yagmail.SMTP()

contents = ['This is the body, and here is just text http://somedomain/image.png',

'You can find an audio file attached.', '/local/path/song.mp3']

yag.send('to@someone.com', '邮件标题', contents)

或者在一行中实现:

yagmail.SMTP('mygmailusername').send('to@someone.com', 'subject', 'This is the body')

当然, 以上操作需要从你自己系统的密钥环中读取你的邮箱账户和对应的密码。关于密钥环稍后会提到如何实现。

安装模块

pip3 install yagmail # linux / Mac

pip install yagmail # windows

这样会安装最新的版本,并且会支持所有最新功能,主要是支持从密钥环中获取到邮箱的账户和密码。

关于账户和密码

开通自己邮箱的 SMTP 功能,并获取到授权码

这个账户是你要使用此邮箱发送邮件的账户,密码不是平时登录邮箱的密码,而是开通 POP3/SMTP 功能后设置的客户端授权密码。

这里以 126 邮箱为例:

image

image

image

方式一:不使用系统的密钥环

不使用系统的密钥环,可以直接暴露账户和密码在脚本里

import yagmail

yag = yagmail.SMTP(

user='自己的账号',

password='账号的授权码',

host='smtp.qq.com', # 邮局的 smtp 地址

port='端口号', # 邮局的 smtp 端口

smtp_ssl=False)

yag.send(to='收件箱账号',

subject='邮件主题',

contents='邮件内容')

方式二: 使用系统的密钥环管理账户和授权码

模块支持从当前系统环境中的密钥环中获取账户和密码,要想实现这个功能,需要依赖模块 keyring。之后把账户和密码注册到系统的密钥环中即可实现。

1. 安装依赖模块

pip3 install keyring

# CentOS7.3 还需要安装下面的模块

pip3 install keyrings.alt

2. 开始向密钥环注册

import yagmail

yagmail.register('你的账号', '你的授权密码')

注册账户和密码,只需要执行一次即可。

3. 发送邮件

import yagmail

yag = yagmail.SMTP('自己的账号',

host='smtp.qq.com', # 邮局的 smtp 地址

port='端口号', # 邮局的 smtp 端口

smtp_ssl=False # 不使用加密传输

)

yag.send(

to='收件箱账号',

subject='邮件主题',

contents='邮件内容')

示例展示

下面是以我的 126 邮箱为例, 使用系统密钥环的方式,向我的 163邮箱发送了一封邮件。

import yagmail

yag = yagmail.SMTP(user='shark@126.com',

host='smtp.126.com',

port=25,

smtp_ssl=False)

yag.send(to='docker@163.com',

subject='from shark',

contents='test')

这样就愉快的发送了一封测试邮件到 docker@163.com 的邮箱。

当然前提是:

126 邮箱开通了 SMTP功能。

把 126 邮箱的账号和密码已经注册到自己系统的密钥环中。

发送附件

发送

发送附件只需要给 send方法传递 attachments 关键字参数

比如我在系统的某一个目录下有一张图片,需要发送给 docker@163.com

import yagmail

yag = yagmail.SMTP(user='shark@126.com',

host='smtp.126.com',

port=25,

smtp_ssl=False)

yag.send(to='docker@163.com',

subject='from shark',

contents='test',

attachments='./松鼠.jpeg')

收到的邮件和附件

image

使用 ssl 发送加密邮件

要发送加密邮件,只需要把 smtp_ssl 关键字参数去掉即可,因为默认就是采用的加密方式 smtp_ssl=True。

不传递 stmp_ssl 关键字参数的同时,需要设置端口为邮箱服务提供商的加密端口,这里还是以 126 邮箱为例,端口是 465。

import yagmail

yag = yagmail.SMTP(user='shark@126.com',

host='smtp.126.com',

port=465)

yag.send(to='docker@163.com',

subject='from sharkyunops',

contents='test',

attachments='./松鼠.jpeg')

发送 带 html 标记语言的邮件内容

在实际的生产环境中,经常会发送邮件沟通相关事宜,往往会有表格之类的内容,但是又不想以附件的形式发送,就可以利用 html 标记语言的方式组织数据。

import yagmail

yag = yagmail.SMTP(user='shark@126.com',

host='smtp.126.com',

port=465)

html="""

姓名年龄

shak18西瓜甜28

"""

yag.send(to='docker@163.com',

subject='from sharkyunops',

contents=['test',html])

image

更多

如果不指定to参数,则发送给自己

如果to参数是一个列表,则将该邮件发送给列表中的所有用户

attachments 参数的值可以是列表,表示发送多个附件

python3邮件_Python3_发送邮件相关推荐

  1. 使用python3查收与发送邮件

    文章目录 使用python3查收与发送邮件 基本配置及模块导入 接收邮件 发送邮件 使用python3查收与发送邮件 邮件的接收和发送是日常工作必备的内容,前一段时间我需要进行工作交接,从上万分邮件中 ...

  2. JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

    JavaWeb学习总结(五十二)--使用JavaMail创建邮件和发送邮件 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两 ...

  3. (转)SQL Server:在 SQL Server 2005 中配置数据库邮件,发送邮件

    SQL Server:在 SQL Server 2005 中配置数据库邮件,发送邮件 [作/译者]:鹏城万里    [日期]:2008-07-24    [来源]:本站原创    [查看]: 2031 ...

  4. (转载)JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

    博客源地址:http://www.cnblogs.com/xdp-gacl/p/4216311.html 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封 ...

  5. 利用qq邮箱作为个人邮件服务器发送邮件

    需求描述 邮件通知很有用处.如何搭建一个邮件服务器,允许发送邮件呢? 实现方法 一.利用开源软件,搭建自己的邮件服务器. 二.利用qq等第三方邮件服务. 自己搭邮件服务器较麻烦,我的需求比较简单,利用 ...

  6. Linux利用Esmtp 选择邮件服务器发送邮件(解决手机接收乱码)

    因公司业务需求,需要定时发送一些业务邮件.使用Linux 自带的mail 命令 发送邮件 ,能正常发送但是领导们都用手机收取邮件,很崩溃 他们接收到的邮件乱码.不得不想办法解决此问题. 就在googl ...

  7. 解决ios设备自带邮箱只能接收邮件不能发送邮件问题的方法

    解决ios设备自带邮箱只能接收邮件不能发送邮件问题的方法 解决的办法:邮件\通讯录\日历 一: (1)用手机网页登录QQ邮箱网页版 (2)登录后,拉到下面,设置-账户,选择这个号码的作为默认发信帐号– ...

  8. python3实现自动发送邮件

    1 电子邮件协议 图来自计算机网络谢希仁一书 SMTP,用于用户向邮件服务器发送邮件或在邮件服务器之间发送邮件. POP3,用于用户从邮件服务器读取邮件,在客户端的操作(如移动邮件.标记已读等),不会 ...

  9. iphone 邮件寄件服务器,如何使用iphone6s自带邮件接收发送邮件【教程】

    简单谈谈如何使用iphone6s自带邮件接收发送邮件 电脑端和手机端都需要设置 1.电脑端:打开qq邮箱,左上角账号下面 点击设置,找到账户,如下图 右边下拉条拉下来,找到POP3/IMAP/SMTP ...

最新文章

  1. jdk自带的反编译在那个包下_求教JDK中的反编译命令
  2. 凝心聚力,共赢绿色计算新时代 ——2020绿色计算产业峰会在京召开
  3. 「Python」pandas入门教程
  4. 递归和迭代路由_静态路由在以太网接口中的不同书写会导致路由器怎样的操作结果?...
  5. 前端请求接口post_前端如何优雅地模拟接口请求?(给你的代码加点小意外)
  6. 工作216:JS-JS创建数组的三种方法
  7. 使用叶神模拟器无法访问本机服务器的问题(报错:java.net.ConnectException: failed to connect to /127.0.0.1 (port 5000) )
  8. 华为上架自主地图应用Here WeGo 或登录HMS系统成为预装应用
  9. mysql with lock tables_mysql出现大量FLUSH TABLES WITH READ LOCK
  10. Pytorch——计算机视觉工具包:torchvision
  11. vue中局部过滤器和全局过滤器的使用
  12. 抓取百度页面html,百度蜘蛛不抓取页面的解决方法
  13. 【零样本学习】Zero-Shot Learning via Class-Conditioned Deep Generative Models
  14. OSChina 周六乱弹 —— 召唤养我的富婆
  15. 【统计】时间序列预测之 Holt-Winters 指数平滑模型
  16. MOBA移动游戏性能分析报告:渲染、UI和逻辑代码是性能头号杀手!
  17. 从‘心’出发,乐跑向前——德州站健心跑公益活动盛大开跑
  18. Java - 为什麽 Iterator接口 不提供 add(E) 方法 ?
  19. 基于STM32 Cortex-M3内核F103制作的智能小车项目
  20. 智能语音技术:从哪儿来?往何处去?

热门文章

  1. vue3+ts+ant-table横向表格数据实现对单元格过滤之后的数据进行标红
  2. 如何在ftp服务器编辑文件,ftp服务器怎么编辑文件
  3. 平台的核心交互与基础角色——互联网平台建设系列...
  4. 魔兽争霸之PHP设计模式-单件模式[Singleton]
  5. 微信小程序使用日历插件
  6. 三跨),总分420+
  7. 莱布尼兹的二进制和布尔的全无假定   布尔逻辑之四
  8. 如何用计算机打520,520,各专业是如何表白的?
  9. linux wps不能输入中文,Ubuntu系统中WPS不能输入中文该怎么办?
  10. 用于测量纸张卷径的超声波传感器