smtplib SMTP/ESMTP客户端类
类:
exceptions.Exception(exceptions.BaseException)
SMTPException
SMTPRecipientsRefused
SMTPResponseException
SMTPAuthenticationError
SMTPConnectError
SMTPDataError
SMTPHeloError
SMTPSenderRefused
SMTPServerDisconnected
SMTP
SMTP_SSL
class SMTP
管理连接到SMTP或ESMTP服务器
SMTP对象:
有如下属性:
helo_resp:服务器回复最近一次HELO命令的消息
ehlo_resp:服务器回复最近一次EHLO命令的消息,通常为多行
does_esmtp:是否支持ESMTP
esmtp_features:支持的ESMTP命令字典。
有以下方法:
__init__(self, host='', port=0, local_hostname=None, timeout=<object object>) 初始化一个实例
host:为远程主机
port:端口号,默认使用smtplib.SMTP_PORT
local_hostname:作为HELO/EHLO命令的FQDN本地主机
close(self)
断开SMTP服务器连接
connect(self, host='localhost', port=0)
连接服务器
data(self, msg)
SMTP的'DATA'命令 -- 发送消息数据到服务器
docmd(self, cmd, args='')
发送命令,返回回复code
ehlo(self, name='')
发送'EHLO'命令。
ehlo_or_helo_if_needed(self)
若需要则调用self.ehlo()或self.helo()
expn(self, address)
发送SMTP 'expn'命令 -- 扩展一个邮件列表
getreply(self)
从服务器得到响应,返回元组: (code, message)
has_extn(self, opt)
是否支持SMTP服务扩展
helo(self, name='')
发送'HELO'命令
help(self, args='')
发送'HELP'命令
login(self, user, password)
登陆SMTP服务器
mail(self, sender, options=[])
SMTP 'mail'命令 -- 开始xfer回话
noop(self)
SMTP 'noop'命令 -- 不做任何事
putcmd(self, cmd, args='')
发送命令给服务器
quit(self)
中断SMTP回话
rcpt(self, recip, options=[])
发送'rcpt'命令 -- 为邮件标识一个收件人
rset(self)
发送'rset'命令 -- 重置回话
send(self, str)
发送'str'给服务器
sendmail(self, from_addr, to_addr, msg, mail_options=[], rcpt_options=[])
执行一个完整的发送邮件功能
from_addr: 发件人,字符串
to_addr: 收件人列表,列表型
msg: 消息字符串,格式:
'''
FROM:发件人地址
Subject:主题
邮件内容
'''
set_debuglevel(self, debuglevel)
设置DEBUG等级
starttls(self, keyfile=None, certfile=None)
设置连接为TLS模式
verify(self, address)
SMTP 'verify'命令 -- 检查地址合法性
vrfy = verify(self, address)
数据和其他属性:
debuglevel = 0
default_port = 25
deos_esmtp = 0
ehlo_msg = 'ehlo'
ehlo_resp = None
file = None
helo_resp = None
class SMTP_SSL(SMTP)
SMTP的子类(在SSL上连接SMTP服务器)
方法:
__init__(self, host='', port=0, local_hostname=None, keyfile=None, certfile=None, timeout=<object object>)
数据:
default_port = 465
class SMTPException(exceptions.Exception)
该模块所有其他异常的基类
函数:
quoteaddr(addr)
quote邮件地址
quotedata(data)
quote数据
实例:
import smtplib
SMTP_SERVER = 'smpt.163.com'
FROM_ADDRESS = '[email protected]'
FROM_PASSWORD = 'xxxxxx'
TO_ADDRESSES = ['[email protected]']
SUBJECT = '主题'
CONTENT = '邮件内容'
body = '\r\n'.join(['FROM:%s'%FROM_ADDRESS, 'SUBJECT:%s'%SUBJECT,'','%s'%CONTENT])
s = smtplib.SMTP()
s.connect(SMTP_SERVER)
s.login(FROM_ADDRESS, FROM_PASSWORD)
s.sendmail(FROM_ADDRESS, TO_ADDRESSES,body)
s.quit()