http://www.pythonforbeginners.com/code-snippets-source-code/using-python-to-send-email/
https://developers.google.com/appengine/docs/python/mail/receivingmail
http://docs.python.org/2/library/email-examples.html
http://www.tutorialspoint.com/python/python_sending_email.htm
http://blog.csdn.net/jgood/article/details/4329532
http://www.juyimeng.com/simple-python-send-mail-sample-code-with-smtp-auth.html
学习一下使用Python来发送邮件,记录如下。
一、smtplib模块的使用
smtplib库用来发送邮件。需要用到的函数如下:
1
2
3
4
5
6
7
8
|
#连接到SMTP服务器,参数表示SMTP主机和端口,
SMTP.connect([host[,port]])
#登录SMTP服务器
SMTP.login(user,password)
#发送邮件。msg是字符串,表示邮件内容。
SMTP.sendmail(from_addr, to_addrs, msg)
#断开连接
SMTP.quit()
|
二、email模块使用
Email库用来处理邮件消息。包括MIME和基于RFC2822的消息文档。
有关MIME的一些知识
RFC2822定义的邮件格式中,邮件体只是单纯的ASCII编码的字符序列,MIME扩展邮件的格式,用以支持非ASCII编码的文本、非文本附件及包含多个部分(multi-part)的邮件体。
MIME消息由消息头、消息体组成,即邮件的邮件头、邮件体。中间以空行进行分隔。
1、邮件头:包括发件人(from)、收件人(to)、邮件主题(subject)、接收日期(date)、MIME版本、邮件内容类型等信息。每条信息称为一个域,由域名后加“:”和信息内容构成,域的首行必须顶头写。
2、邮件体:有text/plain(纯文本)和text/html(超文本)之分,由邮件头的“content type”域指出。可以同时存在,也可以只存在一种。这就是为什么有些邮件既可以用html格式查看,又可以用文本格式查看的原因。邮件体分为多个段,称为Payload。每个段也包括段头段尾,中间以空行分隔。multipart类型有3种:multipart/mixed multipart/related multipart/alternative。邮件里添加附件要定义multipart/mixed段,如果纯文本超文本共存,则要定义multipart/alternative,如存在内嵌资源,要定义multipart/related。
3、附件(attach)。发送邮件时,可以将本机的文件一起发送。附件可以有0个或多个,只要附件的总大小,不超过邮件服务器所声明的最大容量。
class email.mime.text.MIMEText(_text[, _subtype[, _charset]])
用于生成MIME对象的主体文本:_text指定邮件内容,_subtype指定邮件类型,_charset指定编码。
class email.mime.multipart.MIMEMultipart()
用于生成包含多个部分的邮件体的MIME对象
三、一些简单示例
1.发送简单文本邮件的示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import
smtplib
from
email.mime.text
import
MIMEText
#正文
mail_body
=
'hello, this is the mail content'
#发信邮箱
mail_from
=
'sender@example.com'
#收信邮箱
mail_to
=
[
'to@example.com'
]
#定义正文
msg
=
MIMEText(mail_body)
#定义标题
msg[
'Subject'
]
=
'this is the title'
#定义发信人
msg[
'From'
]
=
mail_from
msg[
'To'
]
=
';'
.join(mail_to)
#定义发送时间(不定义的可能有的邮件客户端会不显示发送时间)
msg[
'date'
]
=
time.strftime(
'%a, %d %b %Y %H:%M:%S %z'
)
smtp
=
smtplib.SMTP()
#连接SMTP服务器,此处用的126的SMTP服务器
smtp.connect(
'smtp.126.com'
)
#用户名密码
smtp.login(
'用户名'
,
'密码'
)
smtp.sendmail(mail_from,mail_to,msg.as_string())
smtp.quit()
print
'ok'
|
2.发送包含图片附件邮件的示例
发送带附件的邮件,首先要创建MIMEMultipart实例,然后构造附件,如果有多个附件,可依次构造。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import
smtplib
from
email.mime.multipart
import
MIMEMultipart
from
email.mime.text
import
MIMEText
from
email.mime.image
import
MIMEImage
#创建实例,构造MIMEMultipart对象做为根容器
msg
=
MIMEMultipart()
msg[
'Subject'
]
=
'this is title'
msg[
'From'
]
=
mail_from
msg[
'To'
]
=
';'
.join(mail_to)
# 构造MIMEText对象做为邮件显示内容并附加到根容器
txt
=
MIMEText(u
'这是中文内容哦'
,
'plain'
,
'utf-8'
)
msg.attach(txt)
picfiles
=
['
', '
', ...]
#图片路径
for
file
in
picfiles:
f
=
open
(
file
,
'rb'
)
img
=
MIMEImage(f.read())
f.close()
msg.attach(img)
smtp
=
smtplib.SMTP()
smtp.connect(
'smtp.126.com'
)
smtp.login(
'用户名'
,
'密码'
)
smtp.sendmail(mail_from,mail_to,msg.as_string())
smtp.quit()
|
3.发送HTML邮件示例
multipart使用alternative类型,这样就可以让客户端来决定显示HTML类型还是text类型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import
smtplib
from
email.mime.multipart
import
MIMEMultipart
from
email.mime.text
import
MIMEText
#建立消息容器,正确的MIME类型是multipart/alternative
msg
=
MIMEMultipart(
'alternative'
)
msg[
'subject'
]
=
'link'
msg[
'from'
]
=
mail_from
msg[
'to'
]
=
';'
.join(mail_to)
html
=
"""\
<html>
<head></head>
<body>
<p>Hello!<br>
How are you?<br>
Here is the <a href="http://www.python.org">link</a> you wanted.
</p>
</body>
</html>
"""
part1
=
MIMEText(text,
'plain'
)
part2
=
MIMEText(html,
'html'
)
msg.attach(part1)
msg.attach(part2)
|