python模块之smtplib: 用python发送SSL/TLS安全邮件
原文出自 http://blog.csdn.net/zhaoweikid/python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
smtp协议的基本命令包括:
HELO 向服务器标识用户身份
MAIL 初始化邮件传输 mail from:
RCPT 标识单个的邮件接收人;常在MAIL命令后面,可有多个rcpt to:
DATA 在单个或多个RCPT命令后,表示所有的邮件接收人已标识,并初始化数据传输,以.结束
VRFY 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令
EXPN 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELP 查询服务器支持什么命令
NOOP 无操作,服务器应响应OK
QUIT 结束会话
RSET 重置会话,当前传输被取消
MAIL FROM 指定发送者地址
RCPT TO 指明的接收者地址
一般smtp会话有两种方式,一种是邮件直接投递,就是说,比如你要发邮件給zzz@163.com,那就直接连接163.com的邮件服务器,把信投給zzz@163.com;另一种是验证过后的发信,它的过程是,比如你要发邮件給zzz@163.com,你不是直接投到163.com,而是通过自己在sina.com的另一个邮箱来发。这样就要先连接sina.com的smtp服务器,然后认证,之后在把要发到163.com的信件投到sina.com上,sina.com会帮你把信投递到163.com。
第一种方式的命令流程基本是这样:
1. helo
2. mail from
3. rcpt to
4. data
5. quit
但是第一种发送方式一般有限制的,就是rcpt to指定的这个邮件接收者必须在这个服务器上存在,否则是不会接收的。 先看看代码:
<div style="">http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif#-*- encoding: gb2312 -*-
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifimport os, sys, string
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifimport smtplib
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif# 邮件服务器地址
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifmailserver = "smtp.163.com"
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif# smtp会话过程中的mail from地址
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.giffrom_addr = "asfgysg@zxsdf.com"
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif# smtp会话过程中的rcpt to地址
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifto_addr = "zhaoweikid@163.com"
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif# 信件内容
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifmsg = "test mail"
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifsvr = smtplib.SMTP(mailserver)
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif# 设置为调试模式,就是在会话过程中会有输出信息
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifsvr.set_debuglevel(1)
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif# helo命令,docmd方法包括了获取对方服务器返回信息
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifsvr.docmd("HELO server")
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif# mail from, 发送邮件发送者
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifsvr.docmd("MAIL FROM: <%s>" % from_addr)
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif# rcpt to, 邮件接收者
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifsvr.docmd("RCPT TO: <%s>" % to_addr)
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif# data命令,开始发送数据
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifsvr.docmd("DATA")
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif# 发送正文数据
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifsvr.send(msg)
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif# 比如以 . 作为正文发送结束的标记,用send发送的,所以要用getreply获取返回信息
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifsvr.send(" . ")
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifsvr.getreply()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif# 发送结束,退出
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifsvr.quit()
页:
[1]