Python实现自动发送邮件功能

简单邮件传输协议(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,send by Python.....','plain','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><h1>你好!<h1><html>','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发送附件功能....','plain','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,receiver,message.as_string())
smtp.quit()

小结

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

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

Message
+- MIMEBase
   +- MIMEMultipart
   +- MIMENonMultipart
      +- MIMEMessage
      +- MIMEText
      +- MIMEImage

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

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

(0)

相关推荐

  • python同时给两个收件人发送邮件的方法

    本文实例讲述了python同时给两个收件人发送邮件的方法.分享给大家供大家参考.具体分析如下: 该范例通过python内置的smtplib包发送邮件 import smtplib import string host = "localhost" fromclause = "a@b.com" toclause = "c@d.com, e@f.com" toclause = string.splitfields(toclause, ",&q

  • 二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)

    可以使用Python的email模块来实现带有附件的邮件的发送. SMTP (Simple Mail Transfer Protocol)邮件传送代理 (Mail Transfer Agent,MTA) 程序使用SMTP协议来发送电邮到接收者的邮件服务器.SMTP协议只能用来发送邮件,不能用来接收邮件.大多数的邮件发送服务器 (Outgoing Mail Server) 都是使用SMTP协议.SMTP协议的默认TCP端口号是25. SMTP协议的一个重要特点是它能够接力传送邮件.它工作在两种情况

  • python发送邮件的实例代码(支持html、图片、附件)

    第一段代码: 复制代码 代码如下: #!/usr/bin/python# -*- coding: utf-8 -*- import emailimport mimetypesfrom email.MIMEMultipart import MIMEMultipartfrom email.MIMEText import MIMETextfrom email.MIMEImage import MIMEImageimport smtplib def sendEmail(authInfo, fromAdd

  • python发送邮件接收邮件示例分享

    接收邮件 复制代码 代码如下: import poplib,pdb,email,re,timefrom email import header POP_ADDR = r'pop.126.com'USER = ''PASS = ''CONFIG = '' def getYear(date):    rslt = re.search(r'\b2\d{3}\b', date)    return int(rslt.group()) def getMonth(date):    monthMap = {

  • 基于python发送邮件的乱码问题的解决办法

    公司项目中需要通过后台发送邮件,邮件内容包括图片附件.如果通过PHPmailer发送,由于邮件服务器可能存在延迟现象,通过PHPmailer发送邮件,需要等待邮件发送成功后才能返回结果,这在实践中证明,有时发送邮件无法即时返回结果,影响用户体验. 于是我通过python发送邮件,PHP通过调用脚本方式来调用,这样执行脚本成功后立即返回,而无需判断邮件是否发送成功.只要成功执行脚本文件即向客户端返回成功标志.这样极大的提高了邮件发送速度,保证良好的用户体验效果. 但是,在通过python发送邮件,

  • python发送邮件示例(支持中文邮件标题)

    复制代码 代码如下: def sendmail(login={},mail={}):    '''\    @param login login['user'] login['passwd']    @param mail mail['to_addr'] mail['subject'] mail['content'] mail['attach']    '''    from datetime import datetime    from base64 import b64encode   

  • python中使用smtplib和email模块发送邮件实例

    SMTP模块 这么多已定义的类中,我们最常用的的还是smtplib.SMTP类,就具体看看该类的用法:smtp实例封装一个smtp连接,它支持所有的SMTP和ESMTP操作指令,如果host和port参数被定义,则smtp会在初始化期间自动调用connect()方法,如果connect()方法失败,则会触发SMTPConnectError异常,timeout参数设置了超时时间.在一般的调用过程中,应该遵connetc().sendmail().quit()步骤. SMTP模块主要方法 下面我们来

  • Python实现SMTP发送邮件详细教程

    简介 Python发送邮件的教程本人在网站搜索的时候搜索出来了一大堆,但是都是说了一大堆原理然后就推出了实现代码,我测试用给出的代码进行发送邮件时都不成功,后面找了很久才找到原因,这都是没有一个详细的环境调试导致,所以今天特出一个详细的教程,一步一步从环境调试到代码实现整一个教程,希望对还在苦苦寻找解决方法却迟迟不能得到有效解决的人员一点帮助. SMTP协议 首先了解SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器.SMTP协议只能用来发送邮件,不能用

  • Python实现给qq邮箱发送邮件的方法

    本文实例讲述了Python实现给qq邮箱发送邮件的方法.分享给大家供大家参考.具体实现方法如下: #-*-coding:utf-8-*- #========================================== # 导入smtplib和MIMEText #========================================== from email.mime.text import MIMEText import smtplib #===================

  • python监控网站运行异常并发送邮件的方法

    本文实例讲述了python监控网站运行异常并发送邮件的方法.分享给大家供大家参考.具体如下: 这是一个简单的python开发的监控程序,当指定网页状态不正常是通过smtp发送通知邮件 复制代码 代码如下: #!/usr/bin/env python # -*- coding: UTF-8 -*- #author  libertyspy import socket import smtplib import urllib mail_options = {     'server':'smtp.qq

随机推荐