您的位置:首页 > 理论基础 > 计算机网络

python 网络编程学习: 4 网络客户端编程之SMTP

2012-08-25 11:30 316 查看
邮件工作过程 建议看一下
百度百科http://baike.baidu.com/view/1524.htm#6

常见的电子邮件协议有以下几种:SMTP(简单邮件传输协议)、POP3(邮局协议)、IMAP(Internet邮件访问协议)、HTTP、S/MIME。这几种协议都是由TCP/IP协议族定义的。

SMTP(Simple Mail Transfer Protocol):SMTP主要负责底层的邮件系统如何将邮件从一台机器传至另外一台机器。

POP(Post Office Protocol):目前的版本为POP3,POP3是把邮件从电子邮箱中传输到本地计算机的协议。

IMAP(Internet Message Access Protocol):目前的版本为IMAP4,是POP3的一种替代协议,提供了邮件检索和邮件处理的新功能,这样用户可以完全不必下载邮件正文就可以看到邮件的标题摘要,从邮件客户端软件就可以对服务器上的邮件和文件夹目录等进行操作。IMAP协议增强了电子邮件的灵活性,同时也减少了垃圾邮件对本地系统的直接危害,同时相对节省了用户察看电子邮件的时间。除此之外,IMAP协议可以记忆用户在脱机状态下对邮件的操作(例如移动邮件,删除邮件等)在下一次打开网络连接的时候会自动执行。

HTTP(S): 通过浏览器使用邮件服务时使用。

Python和SMTP

python 有一个smtplib模块和一个smtplib.SMTP类。

过程为:

连接服务器

登录(如果需要)

发出服务请求

退出

代码描述为

from smtplib import SMTP
n = SMTP('smtp.yourdomain.com')
.....
n.quit()


smtplib.SMTP类的一些常用方法

方法描述
sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])把msg从from 发送给to(列表或元组),ESMTP设置 (mail_options)和收件人设置 rcpt_options 为可选
quit()关闭连接,然后退出
login(user, password)使用用户名和密码登录到SMTP服务器,只在有SMTP-AUTH时使用
sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]) 的所有参数都要遵循RFC 2822 ,即电子邮件地址必须要有正确的格式,消息体要有正确的前导头,前导头后面是两个回车和换行(\r\n)对。

看一下邮件内容包括哪些部分

每一个传统的E-mail都包含两个不同的部分:header和body。header 包含控制数据----例如:寄件人、目的地、信息的标题,而body包含信息本身。

下面是用到header的几种的几种情况:

From header 可以想用户表明邮件的发送人。

Reply-To header 可以设置一个回复的替换地址

Subject header 用于显示邮箱主题

Date header 可以用来按照到达时间分类邮箱

Message-ID 和In-Reply-To header 可以帮助某些邮件程序实现线索

MIME header 可以帮助邮件程序以合适的语言 格式来显示邮件,也可用来处理附件

代码示例

#!/usr/bin/python

import smtplib

sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message)
print "Successfully sent email"
except SMTPException:
print "Error: unable to send email"


在Python中 产生邮件的模块在email模块里,在这里我们使用MIMEText 来编写一个使用126邮箱发送邮件的程序

#/usr/bin/python
# -*- coding: utf-8 -*-

#导入smtplib和MIMEText
import smtplib
from email.mime.text import MIMEText

mailto = "XXXXXXX@gmail.com"
#设置服务器DateTimeField用户名、口令以及邮箱的后缀
mail_host = "smtp.126.com"
mail_user = "username"
mail_pass = "password"
mail_postfix = "126.com"
######################

def send_mail(to, sub, content):
'''
to_list:发给谁
sub:主题
content:内容
send_mail("aaa@126.com","sub","content")
'''
me = mail_user + "<" + mail_user + "@" + mail_postfix + ">"
msg = MIMEText(content)
msg['Subject'] = sub
msg['From'] = me
msg['To'] = to
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user, mail_pass)
s.sendmail(me, to, msg.as_string())
s.close()
print '发送至' + to + '成功'
except Exception, e:
print str(e)
print "发送至'+ to +'失败"

if __name__ == '__main__':
subject = raw_input('enter subject:> ')
content = raw_input('enter content:> ')
send_mail(mailto, subject, content)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: