专栏首页数据分析14809行自定义函数教你用Python发送电子邮件!

9行自定义函数教你用Python发送电子邮件!

前言

大概是在两三个月前,陆续有几位在职朋友问我如何使用Python发送邮件,说心里话这方面的操作在我之前的工作履历中真的没有碰到,所以我没有很好地帮助他们。但这个问题一直埋在我的心底,如果将来我也碰到了这个问题怎么办?总不能临时抱佛脚吧,必须得未雨绸缪。所以这一段时间里,一旦有空就翻翻资料,查查google,写写测试代码,今天就简单分享一下我的所学所得(真的不骗你,只需9行的自定义函数!)。

信息准备

发生邮件前必须准备好一些基本信息,例如发件人邮箱地址、发件人邮箱密码、收件人邮箱地址、发件人昵称、收件人昵称、邮件主题以及邮件内容等。这些内容都属于定制化的,那么剩余的就应该是邮件发送了。使用Python发送邮件需要使用到email模块(主要用于邮件的配置)和smtplib模块(用于邮件的发送),接下来我们动手搞起吧!(这里以我的QQ邮箱为例,向其他邮件发送内容。)

# 导入第三方模块import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddr
# 自定义发送邮件的函数'''    配置发邮件所需的基础信息    my_sender    # 配置发件人邮箱地址    my_pass      # 配置发件人邮箱密码    to_user      # 配置收件人邮箱地址    my_nick      # 配置发件人昵称    to_nick      # 配置收件人昵称    mail_msg     # 配置邮件内容'''def mail(my_sender,my_pass,to_user,my_nick,to_nick,mail_msg):    # 必须将邮件内容做一次MIME的转换 -- 这是发送含链接的邮件    msg=MIMEText(mail_msg,'html','utf-8')    # 配置发件人名称和邮箱地址    msg['From']=formataddr([my_nick,my_sender])      # 配置收件件人名称和邮箱地址    msg['To']=formataddr([to_nick,to_user])    # 配置邮件主题(标题)    msg['Subject']="发送邮件测试"    # 配置Python与邮件的SMTP服务器的连接通道(如果不是QQ邮箱,SMTP服务器是需要修改的)    server=smtplib.SMTP_SSL("smtp.qq.com", 465)    # 模拟登陆    server.login(my_sender, my_pass)    # 邮件内容的发送    server.sendmail(my_sender,[to_user,],msg.as_string())    # 关闭连接通道    server.quit()

考虑到大家对代码的理解,我在自定义函数中都配备相应的注解,大家如果还有哪些不明白的地方可以给我留言。需要注意的是,如果你也使用QQ邮箱做测试,必须配置第三方客户端邮箱的授权码,否则邮件是发布出去的。

授权码的配置

第一步:登录自己的QQ邮箱;

第二步:点击邮箱中的【设置】,进入【帐户】栏,下拉你会看见如下的截图:

第三步:点击图中的【开启】,根据下图的提示,发送短信,你将会获得授权码(这个授权码用于配置自定义函数mail中的my_pass参数)。

邮件测试

如果上面的授权码都配置OK了,就可以使用上面的9行自定义函数,快乐地测试起来啦!这里以qq邮箱作为发送方,以我的163邮箱作为接收方,代码如下:

try:    mail_msg = """    <p>尊敬的刘顺祥:</p>    <p>您好,非常抱歉打扰到您,这是一份Python 的邮件测试,看见后可以忽略。</p>    <p><a href="https://mp.weixin.qq.com/s/fEs__JCPifFDdL-1dM_6Qw">2个多月近600页的数据分析与挖掘PPT分享给您!</a></p>    """    # 调用函数(登录密码需要换成你自己的)    mail('1029776077@qq.com','kjwpzipnmbfbb','lsxxx2011@163.com','刘顺祥','刘顺祥',mail_msg)    print('邮件发送成功!')except:    print('邮件发送失败!')

如果不出意外的话,函数的运行结果将是“邮件发送成功!”,然后回到我的163邮箱,将会是看见这样的效果:

批量发送

你可能会觉得,发一份邮件有这么麻烦吗?我直接登录邮箱发送就是啦。可问题时,工作场景中可能需要向目标客户发送批量邮件,此时你再通过手动方式,效率就显得渣渣啦。要想实现邮件的批量发送,最容易想到的就应该是for循环啦。这里跟朋友要了邮箱做为测试,代码如下:

# 配置发邮件所需的基础信息my_sender='1029776077@qq.com'my_pass = 'kjwpzoozipnmbfbb'to_user=['lsxxx2011@163.com','179*****66@qq.com','93*****89@qq.com']my_nick = '刘顺祥'to_nick = ['刘顺祥','沈**','陈**']
for i in range(3):    # 配置邮件内容    mail_msg = """    <p>尊敬的{}:</p>    <p>您好,非常抱歉打扰到您,这是一份Python 的邮件测试,看见后可以忽略。</p>    <p><a href="https://mp.weixin.qq.com/s/fEs__JCPifFDdL-1dM_6Qw">2个多月近600页的数据分析与挖掘PPT分享给您!</a></p>    """.format(to_nick[i])
    # 调用函数    try:        mail(my_sender,my_pass,to_user[i],my_nick,to_nick[i],mail_msg)        print('邮件发送成功!')    except:        print('邮件发送失败!')

惊喜不断,全都发送成功,而且速度也非常的快,三份邮件的发送,估计就1秒钟左右吧。效果是这样的:

本文分享自微信公众号 - 数据分析1480(lsxxx2011)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一日一技:如何用Python遍历多个列表元素的所有组合

    在Python中,对于这种情况,有现成的处理方法,那就是 itertools.product计算可迭代对象的笛卡尔积。

    青南
  • 001. Ansible简介

    Ansible是一款极其简单的自动化运维工具, 基于Python开发, 集合了众多运维工具(puppet, cfengine, chef, func, fabr...

    木二
  • python网络-动态Web服务器案例(30)

    PythonWeb服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是Python应用程序或框架和Web服...

    Se7eN_HOU
  • python算法与数据结构-算法和数据结构介绍(31)

    什么是算法和数据结构?如果将最终写好运行的程序比作战场,我们程序员便是指挥作战的将军,而我们所写的代码便是士兵和武器。

    Se7eN_HOU
  • 一日一技:通过参数修改Scrapy的配置信息

    我们在开发Scrapy爬虫的时候,会把一些常用配置信息写到settings.py中。

    青南
  • 第一篇 爬虫之初体验

    理论学习都是枯燥的,我们学习了初步的网络编程后,再来了解一下爬虫吧,网络爬虫可以极大增强趣味性。

    arcticfox
  • python算法与数据结构-冒泡排序(32)

      冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作...

    Se7eN_HOU
  • Python 简单应对反爬虫

    现在我们介绍的是不花钱的免费代理IP池。原理很简单,大家去百度或者谷歌搜索免费代理IP总能搜到几个可用的免费代理IP,有些是付费代理IP网站免费放出一两个来给大...

    arcticfox
  • python网络-静态Web服务器案例(29)

    说明:index.html在html文件夹中,html文件夹和static_web_server.py在同目录

    Se7eN_HOU
  • Python 爬虫之Selenium终极绝招

    这里简单解释一下什么是Selenium,它其实是一个网站前端压力测试框架,更通俗的说,它能直接操作浏览器,试想一下,网页是在浏览器里面加载的,如果我们能用代码操...

    arcticfox

扫码关注云+社区

领取腾讯云代金券