常见的电子邮件协议有以下几种:SMTP(简单邮件传输协议)、POP3(邮局协议)、IMAP(Internet邮件访问协议)、HTTP、S/MIME。这几种协议都是由TCP/IP协议族定义的。
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的几种的几种情况:
代码示例
#!/usr/bin/python import smtplib sender = '[email protected]' receivers = ['[email protected]'] message = """From: From Person <[email protected]> To: To Person <[email protected]> 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 = "[email protected]" #设置服务器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("[email protected]","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)