1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python中使用smtplib和email模块发送邮件实例

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

时间:2019-11-22 00:17:50

相关推荐

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

后端开发|Python教程

python,smtplib,email

后端开发-Python教程

SMTP模块

android xmpp发送文件源码,ubuntu被禁用cpu,西安爬虫贴吧,php $b[],深圳电子seolzw

这么多已定义的类中,我们最常用的的还是smtplib.SMTP类,就具体看看该类的用法:

smtp实例封装一个smtp连接,它支持所有的SMTP和ESMTP操作指令,如果host和port参数被定义,则smtp会在初始化期间自动调用connect()方法,如果connect()方法失败,则会触发SMTPConnectError异常,timeout参数设置了超时时间。在一般的调用过程中,应该遵connetc()、sendmail()、quit()步骤。

SMTP模块主要方法

下面我们来看看该类的方法:

ws源码租用,ubuntu双硬盘挂载,tomcat开服务器配置,爬虫案例gui,下载的小说是php格式,做seo 优化lzw

复制代码 代码如下:

着陆页面源码,ubuntu快捷翻译,tomcat开源项目下载,爬虫if value,php两年工作经验简历,seo1加密5路线lzw

SMTP.set_debuglevel(level)

设置输出debug调试信息,默认不输出调试信息。

SMTP.docmd(cmd[, argstring])

发送一个command到smtp服务器,

SMTP.connect([host[, port]])

连接到指定的smtp服务器,默认是本机的25端口。也可以写成hostname:port的形式。

SMTP.helo([hostname])

使用helo指令向smtp服务器确认你的身份。

SMTP.ehlo([hostname])

使用ehlo指令向esmtp服务器确认你的身份。

SMTP.ehlo_or_helo_if_needed()

如果在以前的会话连接中没有提供ehlo或者helo指令,这个方法调用ehlo()或者helo()。

SMTP.has_extn(name)

判断指定的名称是否在smtp服务器上。

SMTP.verify(address)

判断邮件地址是否在smtp服务器上存在。

SMTP.login(user, password)

登陆需要验证的smtp服务器,如果之前没有提供ehlo或者helo指令,则会先尝试ESMTP的ehlo指令。

SMTP.starttls([keyfile[, certfile]])

使smtp连接运行在TLS模式,所有的smtp指令都会被加密。

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])

发送邮件,该方法需要一些邮件地址和消息。

SMTP.quit()

终止smtp会话并且关闭连接。

经过搜索学习发现网上大多都是用smtp类的sendmail这个方法来发邮件,那就先看看这个例子:

使用sendmail发送邮件

复制代码 代码如下:

import smtplib

import time

from email.message import Message

from time import sleep

import email.utils

import base64

smtpserver = \

username = username@

password = password

from_addr = from@

to_addr = ooooooo@

cc_addr = ccccccccc@

time = email.utils.formatdate(time.time(),True)

message = Message()

message[Subject] = Mail Subject

message[From] = from_addr

message[To] = to_addr

message[Cc] = cc_addr

message.set_payload(mail content +time)

msg = message.as_string()

sm = smtplib.SMTP(smtpserver,port=587,timeout=20)

sm.set_debuglevel(1)

sm.ehlo()

sm.starttls()

sm.ehlo()

sm.login(username, password)

sm.sendmail(from_addr, to_addr, msg)

sleep(5)

sm.quit()

Email模块

如果想在邮件中携带附件、使用html书写邮件,附带图片等等,就需要使用email模块及其子模块。下面来看看email包,email包是用来管理email信息的,它包括MIME和其他基于RFC 2822的消息格式。email包的主要特征是在它内部解析和生成email信息是分开的模块来实现的。

MIME消息由消息头和消息体两大部分组成,在邮件里就是邮件头和邮件体。邮件头与邮件体之间以空行进行分隔。

邮件头包含了发件人、收件人、主题、时间、MIME版本、邮件内容的类型等重要信息。每条信息称为一个域,由域名后加“: ”和信息内容构成,可以是一行,较长的也可以占用多行。域的首行必须“顶头”写,即左边不能有空白字符(空格和制表符);续行则必须以空白字符打头,且第一个空白字符不是信息本身固有的。

邮件体包含邮件的内容,它的类型由邮件头的“Content-Type”域指出。最常见的类型有text/plain(纯文本)和text/html(超文本)。邮件体被分为多个段,每个段又包含段头和段体两部分,这两部分之间也以空行分隔。常见的multipart类型有三种:multipart/mixed, multipart/related和multipart/alternative。

在email的包里面包含了很多模块:

复制代码 代码如下:

email.message

email.parser

email.generator

email.mime 创建email和MIME对象

email.header

email.charset

email.encoders

email.ereors

email.utils

email.iterators

主要来看看email.mime,在邮件中携带附件、图片、音频时,主要使用的是该模块。一般情况下,你通过解析一个文件或者一段text来生成一个消息对象结构,你也可以从头开始建立一个消息结构,实际上,你可以给一个已经存在的消息结构追加一个新的消息对象。你可以通过创建message实例来创建一个对象结构,然后给该结构追加附件和头部信息。email包提供了一些子类使得该操作变得很容易。

模拟在邮件内容中携带图片,如下:

邮件内容中携带图片

复制代码 代码如下:

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

from email.mime.image import MIMEImage

import smtplib

from_mail = froooooooom@

to_mail = oooooooooo@

msg = MIMEMultipart()

msg[From] = from_mail

msg[To] = to_mail

msg[Subject] = python mail test

body = est img send

con = MIMEText(\%s

% body,html)

msg.attach(con)

img = MIMEImage(file(D:\\10535-102.jpg, b).read())

img.add_header(Content-ID,D:\\10535-102.jpg)

msg.attach(img)

server = smtplib.SMTP(\)

server.docmd(ehol, ooooooo@)

server.starttls()

server.login(username@,password)

server.sendmail(from_mail,to_mail,msg.as_string())

server.quit()

邮件中携带附件

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

模拟在 邮件中携带附件 ,如下:

复制代码 代码如下:

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

import smtplib

#创建一个带附件的实例

msg = MIMEMultipart()

txt = MIMEText("这是中文的邮件内容哦",plain,gb2312)

msg.attach(txt)

#构造附件1

att1 = MIMEText(open(d:\\drcom.rar, b).read(), ase64, gb2312)

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

att1["Content-Disposition"] = attachment; filename="drcom.rar"#这里的filename可以任意写,写什么名字,邮件中显示什么名字

msg.attach(att1)

#构造附件2

att2 = MIMEText(open(d:\\123.txt, b).read(), ase64, gb2312)

att2["Content-Type"] = application/octet-stream

att2["Content-Disposition"] = attachment; filename="123.txt"

msg.attach(att2)

#加邮件头

msg[ o] = ooooooo@

msg[from] = frommmmmmm@

msg[subject] = hello world

#发送邮件

try:

server = smtplib.SMTP()

server.connect(\)

server.starttls()

server.login(xxxxx@,xxxxxxxxx)#XXX为用户名,XXXXX为密码

server.sendmail(msg[from], msg[ o],msg.as_string())

server.quit()

print 发送成功

except Exception, e:

print str(e)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。