Python怎么发送邮件?不清楚的我教你!

一、前言

相信邮箱对许多人来说只是一个全是推销邮件的垃圾桶,或者接收验证码的一个工具。但是邮箱其实还有很多作用,其中最重要的作用就是消息交流。

现在我们传递消息的方式有很多种,像是比较流行QQ、微信,或者微博、知乎这种社交软件。甚至我们还可以剑走偏锋的方式,比如支付宝、淘宝这种软件进行交流。

但是这些软件通常都需要我们登录,而且要在相应的客户端才能进行操作。而邮件则不一样,很多语言都提供了邮件相关操作的API,我们只需要有一个邮箱,就可以很随意的发送邮件。而且邮件的监管相比其它软件要松得多。

那说了这么多,我们能用邮件做些什么呢?

在我的实际工作学习中,我喜欢把邮件当作一个提醒工具。有时候一些程序的执行需要很长时间,这个时候就可以在程序运行成功后给我们的手机发邮件。这样我们就能很及时地进行下一步的工作。

二、准备工作

在发送邮件之前,我们需要先获取一个邮箱的授权码。这个授权码相当于你的邮箱密码,通常可以在网页版邮箱的设置中获取。这里以163邮箱为例,首先登录邮箱:mail.163.com/。登录后可以看到如下页面:

image

我们点击设置,然后选择POP3/SMTP/IMAP选项,然后会看到如下页面:

image

点击开启,然后按照要求发送短信即可获取授权码。这个授权码只会显示一次,因此需要保存好。获取授权码后,我们就可以开始发送邮件了

三、发送邮件

在python中自带了smtplib模块用于发送邮件,但是使用起来比较复杂。我们今天直接使用封装好的yagmail模块进行邮件的发送。我们先来安装yagmail:


pip install yagmail

接下来的使用就非常简单了,基本步骤大致如下:

  1. 准备用于发送邮件的邮箱

  2. 创建SMTP对象

  3. 准备要发送的内容

  4. 发送邮件

  5. 关闭连接

具体代码如下:


import yagmail
# 1、准备用于发送邮件的邮箱
username = "sockwz@163.com"
password = "你的授权码"
# 2、创建SMTP对象
yag = yagmail.SMTP(user=username, password=password, host="smtp.163.com")
# 3、准备要发送的内容
content = [
    "这是一封邮件"
]
# 4、发送邮件
yag.send(to="2930777518@qq.com", subject="测试邮件", contents=content)
# 5、关闭连接
yag.close()

这里又几点需要注意:

(1)STMP

其中SMTP其实是一种邮箱协议,我们使用yagmail.SMTP创建SMTP对象,它给我们封装了底层的细节。我们只需要把用于发送邮件的邮箱和授权码给它,已经邮箱服务器ip给它就好了。

这里又出现了一个邮箱服务器的概念,通常发送邮件的流程是:客户端A -> 邮箱服务器 -> 客户端B。

其中邮箱服务器充当了邮递员的身份,我们需要告诉程序要哪个邮递员发邮件。因为我们使用的是SMTP协议,而且是163的邮箱,因此我们需要填163邮箱服务器的ip。通常情况下邮箱服务器ip格式为:协议名.邮箱公司名.com。当然这个不是固定的,具体的可以在网页版的设置中查看,比如网易邮箱的ip如下:

image

(2)邮箱内容

邮箱内容需要是一个列表。

(3)发送邮件

我们发送邮件的代码如下:


yag.send(to="2930777518@qq.com", subject="测试邮件", contents=content)

这里我们使用了三个参数,其中to是接收方的邮箱。subject是邮件的主体,contents是邮箱内容。yag.send函数还有很多其它参数,这里就不再细说了。

四、发送附件

附件的发送非常简单,我们只需要在contents参数中写入附件的参数即可,比如下面这样:

import yagmail
username = "sockwz@163.com"
password = "你的授权码"
yag = yagmail.SMTP(user=username, password=password, host="smtp.163.com")
content = [
    # 附件的路径
    "xyql.jpg"
]
yag.send(to="2930777518@qq.com", subject="测试邮件", contents=content)
yag.close()

因为在我的程序下有一个叫xyql.jpg的图片,所以我直接写就好了。当然有时候我们还需要让图片直接显示在邮件中,这种情况我们只需要调用一下yagmail.inline函数即可,代码如下:


import yagmail
username = "sockwz@163.com"
password = "你的授权码"
yag = yagmail.SMTP(user=username, password=password, host="smtp.163.com")
content = [
    '娜娜酱',
    yagmail.inline("xyql.jpg")
]
yag.send(to="2930777518@qq.com", subject="测试邮件", contents=content)
yag.close()

这里需要注意一下,在测试过程中发现不能直接单独发内敛图片,而需要配一些文字发送,不然会被邮箱服务器退信。

下面我们分别看看附件和内敛图片的区别:

image

区别还是很明显的。

五、发送html邮件

yagmail本身就是将文字作为html发送的,因此只要我们发送html邮件不需要做什么改变。但是为了方便,我们还是把html写一个单独的文件,比如文件index.html:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是一个测试页面</title>
</head>
<body>
    <h1>这是一个测试标题</h1>
    <p style="color: red">这是一个测试内容</p>
</body>
</html>

显示效果如下:


image.png

效果很简单,然后我们把上面的代码搬过来,稍作修改:


username = "sockwz@163.com"
password = "你的授权码"
yag = yagmail.SMTP(user=username, password=password, host="smtp.163.com")
content = [
    # 直接从html文件中读取内容
    open('index.html', 'r', encoding='utf-8').read()
]
yag.send(to="2930777518@qq.com", subject="测试邮件", contents=content)
yag.close()

上面我们直接用open读取html的内容,然后发送。下面是接收到的效果图:

image.png

可以看到邮件正常接收。上面这些操作就可以满足我们工作的大多数需求了,大家可以自己定制一个提醒程序。

作者:ZackSock
链接:https://juejin.cn/post/6943473489940578318

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容