简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。

SMTP通讯的基本流程可以概括为以下几点:

1.连接SMTP服务器

2.登陆用户名和密码

3.发送指定邮件内容

4.退出SMTP连接

一、发送纯文本格式邮件

#coding:utf-8

import sys

reload(sys)

sys.setdefaultencoding('utf8')

import smtplib

from smtplib import SMTP

from email.mime.text import MIMEText

from email.header import Header

#构造纯文本邮件内容

msg = MIMEText('hello,send by Python.....','plain','utf-8')

#发送者邮箱

sender = 'xxxxx@XXXXX.com.cn'

#发送者的登陆用户名和密码

user = 'xxxxx@XXXX.com.cn'

password = 'xxxxxx'

#发送者邮箱的SMTP服务器地址

smtpserver = 'xxxx'

#接收者的邮箱地址

receiver = ['xxxxxx@qq.com','xxxxxx@outlook.com'] #receiver 可以是一个list

smtp = smtplib.SMTP() #实例化SMTP对象

smtp.connect(smtpserver,25) #(缺省)默认端口是25 也可以根据服务器进行设定

smtp.login(user,password) #登陆smtp服务器

smtp.sendmail(sender,receiver,msg.as_string()) #发送邮件 ,这里有三个参数

'''

login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文

是一个str,as_string()把MIMEText对象变成str。

'''

smtp.quit()

运行之后就会收到邮件:

但是仔细观察会发现:

1.邮件没有主题

2.看不到收件人的信息

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

msg = MIMEText('hello,'utf-8')

msg['From'] = Header('Python测试','utf-8')

msg['To'] = Header('管理员','utf-8')

subject = 'python SMTP 测试邮件'

msg['Subject'] = Header(subject,'utf-8')

二、发送HTML格式的邮件

如果我们要发送HTML邮件,而不是普通的纯文本文件怎么办?方法很简单,在构造MIMEText对象时,把HTML字符串传进去,再把第二个参数由plain变为html就可以了:

msg = MIMEText('

你好!

','html','utf-8')

#发送HTML格式邮件就只需要把对应的第二个参数改为html即可

三、发送带附件的邮件

发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

#coding:utf-8

import sys

reload(sys)

sys.setdefaultencoding('utf8')

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

from email.header import Header

#发送邮件服务器

smtpserver = 'xxxxx'

#发送邮箱用户名和密码

user = 'xxxxxx'

password = 'xxxxxx'

#发送邮箱

sender = 'xxxxx'

#接受邮箱

receiver = 'xxxxxxx'

#创建一个带附件的实例

message = MIMEMultipart()

message['From'] = Header('Python 测试','utf-8')

message['To'] = Header('测试','utf-8')

subject = 'Python SMTP邮件测试'

message['Subject'] = Header(subject,'utf-8')

#邮件正文内容

message.attach(MIMEText('这是测试Python发送附件功能....','utf-8'))

#构造附件1,传送当前目录下的test.txt文件

att1 = MIMEText(open('123.txt','rb').read(),'base64','utf-8')

att1['Content-Type'] = 'application/octet-stream'

#这里的filename可以任意写,写什么名字 邮件中就显示什么名字

att1['Content-Disposition'] = 'attachment;filename:"123.txt"'

message.attach(att1)

smtp = smtplib.SMTP()

smtp.connect(smtpserver,25)

smtp.login(user,password)

smtp.sendmail(sender,message.as_string())

smtp.quit()

小结

使用Python的smtplib发送邮件十分简单,只要掌握了各种邮件类型的构造方法,正确设置好邮件头,就可以顺利发出。

构造一个邮件对象就是一个Messag对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:

Message

+- MIMEBase

+- MIMEMultipart

+- MIMENonMultipart

+- MIMEMessage

+- MIMEText

+- MIMEImage

这种嵌套关系就可以构造出任意复杂的邮件。你可以通过email.mime文档查看它们所在的包以及详细的用法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

python自动批量发邮件脚本_Python实现自动发送邮件功能相关推荐

  1. python自动批量发邮件脚本_批量群发,营销必备!Python代码实现自动发送邮件!...

    在运维开发中,使用 Python 发送邮件是一个非常常见的应用场景.今天一起来探讨一下,GitHub 的大牛门是如何使用 Python 封装发送邮件代码的. 一般发邮件方法SRE实战 互联网时代守护先 ...

  2. python通过代理自动发邮件脚本_python自动发送邮件脚本

    本文实例为大家分享了python自动发送邮件的具体代码,供大家参考,具体内容如下 #coding=utf8 ''''' 该模块使自动发送邮件的模块 模块初始化时需要设置: sender:发送人 rec ...

  3. python发邮件脚本_Python实现的简单发送邮件脚本分享

    近来有些东西需要监控报警发邮件,然后在网上找了点材料,自己写了一个简单发送邮件的脚本,主要就是运用python的smtplib模块,分享给大家看一下: #!/usr/bin/env python # ...

  4. python自动备份交换机配置脚本_python代码自动备份交换机配置

    参考文献 参考文献1:https://www.oschina.net/code/snippet_7933_47935 测试代码 前言:这个程序用来批量备份博达交换机的配置,需要在桌面打开tftpd32 ...

  5. python发送邮件群发_Python发邮件脚本,Python调用163邮箱SMTP服务实现邮件群发

    邮件营销,一个昔日辉煌,如今没落的广告营销方式,曾经的恶意广告邮件群发,到现在还存留着的大站协议群发,可能还是有不少人能够做到正常群发邮件,但大概率很多人都不会点开邮件查看邮件内容吧,除非是很许可的, ...

  6. notes邮件正文显示不全_python实现一次性批量发邮件

    在上次实现了批量修改文件名后(链接:https://zhuanlan.zhihu.com/p/133727520),又拿来了同事编写的一次性批量发邮件小程序,小编每月向分公司发数据任务算是基本上实现了 ...

  7. python视频批量抽帧脚本更新

    原来的脚本代码:https://blog.csdn.net/JZJZ73/article/details/108851403 因项目工程需要,对原来的python视频批量抽帧脚本进行了更新,更新特点如 ...

  8. mysql备份到邮箱_mysql自动备份发邮件到指定邮箱

    mysql自动备份发邮件到指定邮箱 首先 编写 导出的 命令 使用了 mysqladmin ping mysqldump 然后是 添加附件到邮件中发送 使用了对应的com 最后 暂停 看情况 参考: ...

  9. python文件名批量重命名脚本

    python文件名批量重命名脚本 #encoding=utf-8 import cv2 import os import shutilbase_dir = r'文件所在的文件夹路径' SourseDi ...

最新文章

  1. css3-transform
  2. python添加模块搜索路径
  3. TongJI Online Judge预赛(2): LOVE LETTER
  4. 用shell脚本守护后台进程
  5. 2017-2018 2 20179214《网络实践攻防》第三周作业(二)
  6. 【WPF】监听WPF的WebBrowser控件弹出新窗口的事件
  7. LOJ6354 洛谷4366:[Code+#4]最短路——题解
  8. 指令级别解释对象创建过程和DCL为什么要volatile
  9. 面试系列12 redis和memcached有什么区别
  10. Office Communication Server(OCS) 2007存档和CDR的部署
  11. java socket 通信协议_java网络通信(基于TCP协议可靠通信的socket编程)
  12. JavaScript的面向对象特性
  13. Managing Gigabytes--文本压缩
  14. SSM:Maven整合ssm时的步骤
  15. 请列举出html中两个单标签,HTML基础有哪些单标签
  16. python对csv文件中的数据进行分类_python 数据处理 对csv文件进行数据处理
  17. 01. 仔细区分pointer和references
  18. [2018.10.31 T3] 玩
  19. 青铜时代 —— 图像处理
  20. matlab 帕多瓦数列 通项公式_matlab通分.ppt

热门文章

  1. junit 循环测试_重复运行JUnit测试而没有循环
  2. Spring Boot –适合您的靴子!
  3. Jirasearch 2.0狗粮:使用Lucene查找我们的Jira问题
  4. 忘记番石榴:5个Google库Java开发人员应该知道的
  5. 使用Hibernate(JPA)一键式删除
  6. 将数据库日志添加到JUnit3
  7. Java 8流:Micro Katas
  8. 使用Java 8的Builder模式
  9. Gradle:我们需要另一个构建工具吗?
  10. Servlet和JSP中的文件上传示例