首页 > Python网络编程 阅读数:2

Python smptlib模块:邮件传输SMPT协议

SMPT(Simple Mail Transfer Protocol)协议与 POP3(Post Office Protocol)协议提供电子邮件服务。SMPT 是网络上传输电子邮件的标准,定义应用程序如何在网络上交换电子邮件。SMPT 协议负责将电子邮件放置在电子邮箱内,若要从电子邮箱内取出电子邮件,则需要 POP3 协议。

Python 的 smptlib 模块提供 SMTP 协议的客户端接口,用于传输电子邮件到网络上的其他机器。

smptlib 模块定义一个 SMTP 类,用于创建一个 SMTP 连接。SMTP 类的语法如下:

class SMTP([host [, port]])

其中,参数 host 是主机名称。SMTP 类的实例变量的方法列表如下:
  • connect(host [, port]):连接到 (host, port),port 的默认值是 25。
  • sendmail(from_addr, to_addrs, msg [, mail_options, rcpt_options]):送出电子邮件。其中,from_addr 是 RFC 822 from-address 字符串;to_addr 是 RFC 822 to-address 字符串;msg 是一个信息字符串。
  • quit():结束SMTP连接。

1.  发送文本格式的邮件

下面的示例从 chengcai@163.com 寄出一封电子邮件到 sanduo@163.com。
#使用smptlib模块实现
import smtplib
#指定SMTP服务器
host = "smtp.163.com"
#寄件者的电子邮件信箱
sender = "chengcai@163.com "
#收件者的电子邮件信箱
receipt = "sanduo@163 .com "
#电子邮件的内容
msg ="""你好:
这是一个测试的电子邮件"""
#创建SMTP类的实例变量
myServer = smtplib. SMTP (host)
#寄出电子邮件
myServer . sendmail (sender, receipt, msg)
#关闭连接
myServer.quit()

2. 发送HTML格式的邮件

使用 Python 可以发送 HTML 格式的邮件。发送 HTML 格式的邮件与发送纯文本消息的邮件不同之处就是将 MIMEText 中 _subtype 设置为 html。代码如下:
import smtplib
from email . mime. text import MIMEText
from email .header import Header
sender = 'qingukej i123456@163. com'
receivers = ['357975357@qq.com'] # 接收邮件,可设置为用户的QQ邮箱或其他邮箱
mail_ msg = """
<p>电子邮件内容</p>
<p><a href="http:/ /www . baidu.com">百度搜索</a></p>
"""
message = MIMEText (mail_ msg,'html', 'utf-8')
message[ 'From'] = Header ("Python语言",'utf-8')
message[ 'To'] = Header ("示例课堂",'utf-8')
subject = 'Python SMTP 邮件测试'
message[ ' Subject'] = Header (subject, 'utf-8')
try :
    smtpObj = smtplib. SMTP( 'localhost')
    smtpObj . sendmail (sender, receivers, message.as_ string() )
    print (" 邮件发送成功")
except smtplib. SMTPException:
    print ("Error: 无法发送邮件")

3. 发送带附件的邮件

Python 发送带附件的邮件,首先创建 MIMEMultipart() 实例;然后构造附件,如果有多个附件,就可依次构造;最后利用 smtplib.smtp 发送。代码如下:
import smtplib
from email .mime.text import MIMEText
from email .mime .multipart import MIMEMultipart
from email.header import Header
sender = 'qingukeji123456@163. com'
receivers = [ '357975357@qq.com'] # 接收邮件,可设置为用户的QQ邮箱或其他邮箱
#创建一个带附件的实例
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,传送当前目录下的book1. txt文件
att1 = MIMEText(open('book1.txt','r').read(),'base64' ,'utf-8')
att1 [ "Content- Type"] = ' application/ octet-stream '
#这里的filename为邮件中显示的名字
att1 ["Content-Disposition"] = 'attachment; filename=" book1 . txt"'
message .attach (att1)
#构造附件2,传送当前目录下的book2.txt文件
att2 = MIMEText (open( 'book2. txt', ' r') . read() ,'base64', 'utf-8')
att2 [ "Content- Type"] ='appl ication/ octet-stream '
att2 ["Content-Disposition"] = 'attachment; filename= "book2. txt"'
message.attach (att2)
try :
    smtpObj = smtplib. SMTP(' localhost')
    smtpObj . sendmail (sender, receivers, message.as_string() )
    print (" 邮件发送成功")
except smtplib. SMTPException:
    print ("Error: 无法发送邮件")