前言

    之前论坛里有人发过关于发送邮件的帖子,设计器也有关于发送邮件的控件。我这里再次重复,希望能有帮到大家的地方。

信息准备

    发送邮件前必须准备好一些基本信息,例如发件人邮箱地址、发件人邮箱密码、收件人邮箱地址、发件人昵称、收件人昵称、邮件主题以及邮件内容等。这些内容都属于定制化的,那么剩余的就应该是邮件发送了。使用Python发送邮件需要使用到email模块(主要用于邮件的配置)和smtplib模块(用于邮件的发送),接下来我们动手搞起吧!(这里以我的QQ邮箱为例,向其他邮件发送内容。)
# 导入第三方模块
import smtplib
from email.mime.text import MIMEText
from 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 = """
陆xx:
您好,非常抱歉打扰到您,这是一份Python 的邮件测试,看见后可以忽略。
"""
# 调用函数(登录密码需要换成你自己的
mail('1182871615@qq.com','lwj1182871615','luwenjun@depthsdata.com','陆文俊','陆文俊‘,mail_msg)
print('邮件发送成功!')
except:
print('邮件发送失败!')
 如果不出意外的话,函数的运行结果将是“邮件发送成功!”,然后回到我的163邮箱,将会是看见这样的效果:
#### **批量发送**

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

# 配置发邮件所需的基础信息
my_sender='1182871615@qq.com'
my_pass = 'lwj118281716'
to_user=['lsxxx2011@163.com','179*****66@qq.com','93*****89@qq.com']
my_nick = '陆文俊'
to_nick = ['陆文俊','杨**','袁**']
for i in range(3):
# 配置邮件内容
mail_msg = """
尊敬的{}:
您好,非常抱歉打扰到您,这是一份Python 的邮件测试,看见后可以忽略。
""".format(to_nick[i])
# 调用函数
try:
mail(my_sender,my_pass,to_user[i],my_nick,to_nick[i],mail_msg)
print('邮件发送成功!')
except:
print('邮件发送失败!')

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

【python学习之五】自定义函数实现用 Python 发送电子邮件的更多相关文章

  1. python学习之--自定义函数:

    Python之--自定义函数: 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 以下自定义 ...

  2. 【Python学习之五】函数

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 Python不但能非常灵活地定义函数,而且本身内置 ...

  3. MySQL学习——操作自定义函数

    MySQL学习——操作自定义函数 摘要:本文主要学习了使用DDL语句操作自定义函数的方法. 了解自定义函数 是什么 自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由SQL ...

  4. Python学习之路——函数

    一.Python2.X内置函数表: 注:以上为pyton2.X内置函数,官方网址:https://docs.python.org/2/library/functions.html 二.Python3. ...

  5. python学习日记(函数--装饰器)

    楔子 前提,我有一段代码(一个函数). import time def run_time(): time.sleep(0.1) print('我曾踏足山巅') 需求1:现在,我想计算这段代码的运行时间 ...

  6. Python学习手册之函数和模块

    在上一篇文章中,我们介绍了 Python 的控制结构,现在我们介绍 Python 函数和模块. 查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/9976234 ...

  7. Python学习笔记 - day6 - 函数

    函数 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多次执行(这叫函数的调用).函数在编程语言中有基本分为:预 ...

  8. python学习【第四篇】python函数 (一)

    一.函数的介绍 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以 ...

  9. 【Python学习之三】函数的参数

    在学习Python的过程中,我认为Python函数是很重要的一部分.其中参数的类型和数量,是一个比较容易弄混乱的点. 1.一般参数 首先,写一个计算两个数的和的函数: def addNum(x, y) ...

随机推荐

  1. Java实现龟兔赛跑

    闲极无聊,加上翻手机看到龟兔赛跑的词语,想到了可以通过java起两个线程来实现龟兔赛跑的实现. 代码实现其实很简单: 首先是乌龟类: 然后是兔子类: 最后是赛跑类: 接下里让我们看一下输出结果吧: 乌 ...

  2. 组合&多态&封装

    目录 组合&多态&封装 一.组合 1.1什么是组合 1.2 为什么要用组合 1.3 如何使用组合 1.4 继承和组合都在什么时候用 二.多态与多态性 2.1 什么是多态 2.2 如何用 ...

  3. 杜恩德的新博客,都来看看-duende99

    啊啊啊啊 https://home.cnblogs.com/u/duende99/

  4. static修饰的成员与非static修饰类的成员的区别

    ① 格式 : 1> static修饰的,称为静态成员,非static修饰的,称为非静态成员. ② 内存位置: 1>static修饰的,在方法区的静态区中,非static修饰的,在堆中的对象 ...

  5. 实现 RSA 算法之 C 语言实现(第二章)(老物)

    第二章 如何实现应用RSA算法 趁着白天在自家店里的闲暇时间来写写第二章了,假设记住了第一章的各种定理之后,我们又该如何实现RSA密码的加密解密呢?也懒得废话了,直接进入正题吧. 先回顾几个知识点: ...

  6. springboot导包spring-boot-starter-parent出现错误

    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...

  7. $id(id)函数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. java冒泡排序小实例

    首先我们了解下什么是冒泡排序: 冒泡排序就是把小的元素往前调或者把大的元素往后调.比较是相邻的两个元素比较,交换也发生在这两个元素之间.所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的: ...

  9. [转]为什么要引入nullptr?

    来源:https://cloud.tencent.com/developer/ask/69685 C++11介绍nullptr,它被称为Null指针常数及其提高类型安全性和解决不明确的情况与现有实现相 ...

  10. ui自动化之selenium操作(四)简单元素操作

    1. clear() clear()方法用于清除文本输入框内的内容:一般输入框中都有默认文字,如果不清空有可能会导致字符拼接: browser.find_element(By.ID,"use ...