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类。
过程为:
连接服务器
登录(如果需要)
发出服务请求
退出
代码描述为
smtplib.SMTP类的一些常用方法
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 可以帮助邮件程序以合适的语言 格式来显示邮件,也可用来处理附件
代码示例
在Python中 产生邮件的模块在email模块里,在这里我们使用MIMEText 来编写一个使用126邮箱发送邮件的程序
百度百科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时使用 |
看一下邮件内容包括哪些部分
每一个传统的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)
相关文章推荐
- python 网络编程基础学习笔记(1)-网络客户端-socket
- Python学习笔记17:网络客户端编程
- 迟迟开始学习的网络编程,C语言客户端服务端,python客户端服务端和mini木马
- python 网络编程学习: 3 网络客户端编程之FTP
- Python简单学习(lecture7)CGI编程、MySQL、网络编程、SMTP发送邮件
- [python]网络编程基础学习笔记(二)Web客户端访问
- 深度学习与神经网络-吴恩达(Part1Week3)-单隐层神经网络编程实现(python)
- Python学习笔记(二)网络编程的简单示例
- Python学习笔记16:网络编程
- [python网络编程]1.13 SNTP客户端
- python 网络编程学习: 2 SOCKET - cacique - 博客园
- python学习之【16】网络编程
- python之网络编程学习小结
- [PYTHON] 核心编程笔记(17.Python网络客户端编程)
- python学习——socket网络编程
- python网络编程 — HTTP客户端
- 网络编程--python实现 简单的服务端和客户端
- java网络编程三:基于SMTP的邮件发送客户端
- 网络编程学习笔记二 第一个客户端主程序
- Python学习之网络编程Socket