通过前两节课的学习, 我们已经掌握了模块的使用,能够解决现实中的问题。纸上得来终觉浅,绝知此事要躬行。以前小K给大家说过,实战项目是编程快速成长的一个途径。到现在应该是我们的第三个项目了,项目需求越来越多,项目功能越来越复杂,当然代码也越来越多, 但是,我们编程的能力越来越强了。这节课,我们进入使用模块来完成一个实战项目: 玩转Python之发邮件。

这个项目是我们使用模块完成的第一个项目,完成的路上会面临很多问题,你可不要方,一点一滴的解决,淡定哦。

首先回顾一下,项目实战的流程

回顾了一下完成一个项目的流程,那我们就开始进入第一个流程, 明确项目目的。带大家搞定一个能够发送邮件的程序, 这样就不用每次都去登录邮箱发送邮件了。在这个实现需求的过程中, 可能遇到新的模块,这节课的项目目标就是:明确项目目的后, 接下来, 我们进入第二步:

这是第一次完成关于模块的项目,析了下流程, 将项目拆成两个版本。

好了, 拆解完版本, 接下来就开始干活吧.

原来, 使用Python发送邮件, 需要使用smtplib与email两个模块啊。画出图就是这么个意思:

也就是说email模块负责构造邮件;smtplib模块负责发送邮件,这就是这节课要使用的模块解决的问题。江湖秘籍: 使用什么样的模块, 在于你的需求。根据需求要实现的功能,再去采用对应的模块。SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。首先, 我们来构造一个简单的邮件。

from email.mime.text import MIMEText

import smtplib

msg = MIMEText('hello, Python auto send email', 'plain', 'utf-8')

在这里, 我们把email模块与smtplib模块引入进来,我们还使用MIMEText构造了邮件内容。MIMEText对象中, 有三个参数。

然后通过SMTP发送邮件出去。现在有了邮件的正文, 但是还缺少, 发件人,收件人; 接下来,我们向用户手机信息。

# 输入Email地址和口令:

from_addr = input('From: ')

password = input('Password: ')

# 输入SMTP服务器地址:

smtp_server = input('SMTP server: ')

# 输入收件人地址:

to_addr = input('To: ')

在这里, 我们需要拿到, 发件人的邮箱,邮箱的密码, SMTP服务器地址, 还有收件人的邮箱。好多小伙伴儿会问, 这个STMP服务器地址什么? 不要着急

SMTP服务器地址,实际上就是代收发服务器地址,是由邮箱服务商提供的。说白了,你用哪家公司的邮箱, 就是哪家公司收发邮件服务器的地址,在本节课中, 我们编写的程序以QQ邮箱来测试. 我们使用QQ邮箱的收发邮件服务器的地址。QQ邮箱SMTP服务器地址:smtp.qq.com, 端口465, QQ邮箱默认的端口是25, 我们这里使用的是加密端口465。

好了, 接下来我们要开始配置SMTP服务了.

server = smtplib.SMTP_SSL(smtp_server, 465) # SMTP协议加密端口是465

server.set_debuglevel(1) #调试级别

用set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。好了,接下来我们就要想着发送邮件了, 完成SMTP发送邮件功能

server.login(from_addr, password)

server.sendmail(from_addr, [to_addr], msg.as_string())

login()方法用来登录SMTP服务器,参数有两个, from_addr是用户输入的发件邮箱, password是发件邮箱的密码。

sendmail()方法就是发邮件,需要引入三个参数:

第一个参数:from_addr是发件人的邮箱地址

第二个参数:[to_addr] 是收件人的邮箱地址, 是列表形式。因为邮件可能一次发给多个人,使用列表,如果发送多个人,就写多个邮箱,中间使用逗号隔开。

第三个参数:msg.as_string()把邮件内容MIMEText对象变成str。

好了,接下来我们整合所有代码.如下:

from email.mime.text import MIMEText

# 输入Email地址和口令:

from_addr = input('请输入发件人的邮箱号码From: ')

password = input('请输入发件人的邮箱密码Password: ')

# 输入SMTP服务器地址:

smtp_server = input('请输入邮箱服务器地址SMTP server: ')

# 输入收件人地址:

to_addr = input('请输入收件人邮箱地址To: ')

server.set_debuglevel(1)

server.quit()

server.quit()语句,是邮件发送结束后,停止服务的意思.当你正常输入后,会发现遇到下面这种问题:如果出现这种错误, 就说明邮箱出现授权问题. 也就是邮箱的SMTP服务没有开启。接下来,我们开启邮箱SMTP服务。不要慌,这个开启服务只在QQ邮箱客户端里设置即可。打开QQ邮箱客户端, 输入账号,密码进去. 在QQ邮箱页面, 点击【设置】

点进【设置】页面进去,点击第二个选项,【账户】,往下滑动, 滑动在下方的时候, 出现如图内容:

在这里, 我们的SMTP服务还是关闭状态, 我们点击【开启】按钮, 开启SMTP服务。然后验证短信。

验证结束后, 会出现一个弹框:

好了,这个授权码, 就是以后我们运行代码,在输入密码的地方进行输入。

代码运行结束,就可以在收件人信箱中收到我们刚发送的Email,如下图

好了, 现在1.0版本的发送邮件项目已经完成。仔细观察上图, 你会发现,现在还存在如下两个问题: 1.邮件没有主题; 2.收件人的名字没有显示为友好的名字,比如Mr Green

这是因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,所以,我们必须把From、To和Subject添加到MIMEText中,才是一封完整的邮件:

from email import encoders

from email.header import Header

from email.utils import parseaddr, formataddr

这次引入的模块文件有点多,增加了四个模块1、encoders模块负责编码 2、Header模块负责处理邮件头 3、MIMEText模块负责处理文本 4、parseaddr模块与formataddr模块 负责将输入的内容格式化在这段代码中,我们还构建一个类用来处理格式化文本,将格式化的结果作为返回值传出去

def _format_addr(s):

name, addr = parseaddr(s)

return formataddr(( Header(name, 'utf-8').encode(), addr))

之后对输入的内容进行格式化操作,将格式化后的内容赋值给变量,我们将发送邮箱、接收邮箱、邮件主题格式化完毕。分析整个代码:先看引入的模块文件:

这次引入的模块文件有点多,增加了四个模块。1、encoders模块负责编码 2、Header模块负责处理邮件头 3、MIMEText模块负责处理文本 4、parseaddr模块与formataddr模块 负责将输入的内容格式化,在这段代码中,我们还构建一个类用来处理格式化文本,将格式化的结果作为返回值传出去

之后对输入的内容进行格式化操作,将格式化后的内容赋值给变量

运行结束, 邮箱内会收到一封邮件

看。邮件主题、发件人、内容是不是都有, 比之前规范多了。但是,还有个小问题。

现在,我们的内容有点少,能不能多写点内容。

可以啊。 下面,我们将邮件内容丰富起来。我们使用字符串增加邮件内容,使用三引号的字符串,就可以原样显示字符串内容。

收到的邮件是:

so perfect!这就是使用Python发送邮件,是不是很简单。好了,使用Python玩转发送邮件这节课,就讲到这里了。

python开启新代码块_20课零基础快速学python完成简单邮件完整邮件代码块相关推荐

  1. 零基础入门学Python(十二)—— 魔法方法(上)

    零基础入门学Python系列内容的学习目录→\rightarrow→零基础入门学Python系列内容汇总. 魔法方法(上) 1. 构造和析构 1.1 _ _ init _ _(self[, ...]) ...

  2. 零基础入门学Python(十二)—— 魔法方法(下)

    零基础入门学Python系列内容的学习目录→\rightarrow→零基础入门学Python系列内容汇总. 魔法方法(下) 1. 构造和析构 2. 算术运算 3. 简单定制 4. 属性访问 5. 描述 ...

  3. 跟艾文学编程《零基础入门学Python》(1)Python 基础入门

    作者: 艾文,计算机硕士学位,企业内训讲师和金牌面试官,现就职BAT一线大厂公司资深算法专家. 邮箱: 1121025745@qq.com 博客:https://wenjie.blog.csdn.ne ...

  4. 零基础可以学python吗-零基础适合学Python吗?小白能否学会Python?

    原标题:零基础适合学Python吗?小白能否学会Python? 我没学过编程,能否学会Python? 肯定的回答您:完全能学会 其实,很多个程序员都是从不会到会,每种知识也是从基础到复杂,大家都是从零 ...

  5. 零基础轻松学python pdf 小码哥_零基础轻松学Python

    零基础轻松学Python电子书 Python之父Guido van Rossum力荐的Python门书.本书以通俗易懂的语言.好玩有趣的案例让读者轻轻松松.循序渐地从零始掌握Python 3 编程.本 ...

  6. 零基础适合学python吗-零基础适合学Python吗?小白能否学会Python?

    原标题:零基础适合学Python吗?小白能否学会Python? 我没学过编程,能否学会Python? 肯定的回答您:完全能学会 其实,很多个程序员都是从不会到会,每种知识也是从基础到复杂,大家都是从零 ...

  7. 跟艾文学编程《零基础入门学Python》(4)Python 面向对象

    作者: 艾文,计算机硕士学位,企业内训讲师和金牌面试官,公司资深算法专家,现就职BAT一线大厂. 邮箱: 1121025745@qq.com 博客:https://wenjie.blog.csdn.n ...

  8. 跟艾文学编程 《零基础入门学Python》Jupyter Notebook安装和使用

    作者: 艾文,计算机硕士学位,企业内训讲师和金牌面试官,公司资深算法专家,现就职BAT一线大厂. 邮箱: 1121025745@qq.com 内容:跟艾文学编程<零基础入门学Python​​​​ ...

  9. 0基础小白学python好学吗-零基础适合学Python吗?小白能否学会Python?

    原标题:零基础适合学Python吗?小白能否学会Python? 我没学过编程,能否学会Python? 肯定的回答您:完全能学会 其实,很多个程序员都是从不会到会,每种知识也是从基础到复杂,大家都是从零 ...

最新文章

  1. 虚拟机VMware安装Kali Linux
  2. Base64加密和Md5加密用户名
  3. php dump utfp,php pchart乱码-使用REST接口获取GeoServer中的...-结合 thinkPHP 分页写成自己分页类_169IT.COM...
  4. 未来机器人哆拉A梦身上的高科技程序应用
  5. css的9个常用选择器
  6. Mac上删除音频设备
  7. 联发科MT6763芯片设计,MT6763参考设计,MT6763处理器资料
  8. 机器学习之SMOTE算法
  9. 怎么打开kux格式?如何把kux格式转换成mp4
  10. 大龄程序员的一些出路
  11. WEB基础之: form标签
  12. 企业实施PDM能解决这些问题
  13. python基础练习-人名最多数统计
  14. 基于Java毕业设计安路友汽车租赁源码+系统+mysql+lw文档+部署软件
  15. 求部门最高工资(Mysql多表查询)
  16. 数据分析实战----北京租房数据统计分析
  17. No 和 Not 的区别
  18. Pulsar 社区周报| 2020-12-12 ~ 2020-12.18
  19. 170311 Python-steam游戏排行爬虫
  20. 小酌Django1——Django基础

热门文章

  1. Never Wait for Weights(带权并查集+路径压缩)
  2. 新型监控告警工具prometheus(普罗米修斯)入门使用(附视频讲解)
  3. [Bootstrap]bootstrap的简单原理
  4. Unity之读取配置表去加载物体
  5. loadrunner 脚本优化-事务时间简介
  6. go excel换行符替换_微软Excel与WPS Excel哪个好玩?
  7. vue方法传值到data_Vue组件创建和传值的方法
  8. python中的ture是常量吗_python中的true是什么
  9. keil内存溢出表现_详细讲解C语言五大内存分区与可执行程序的三段(Text段、Date段、Bss段)【建议收藏】...
  10. mysql group by 查询慢_MySQL慢查询优化(线上案例调优)