想要了解Email,最好的方法莫过于分析一个Email文件了,这里截取了一个测试的邮件,做下简单的分析:
点击(此处)折叠或打开
-
Received: from mail.sdas.org (unknown [172.16.1.9])
-
by mail.sdas.org (AnyMacro(G7)) with SMTP id D2A8210009D
-
for <******@sdas.org>; Wed, 23 Jul 2014 16:40:04 +0800 (HKT)
-
X-scanvirus: By EQAVSE AntiVirus Engine
-
X-scanresult: CLEAN
-
X-MAILFROM: <sysadmin_oa@126.com> //发送邮件SMTP的邮箱
-
X-RCPTTO: <******@sdas.org>
-
X-FROMIP: 123.125.50.110 //发送邮件的SMTP服务器的IP,北京市联通
-
X-EQManager-Scaned: 1
-
X-Received:m50-110.126.com,123.125.50.110,20140723163845
-
Received: from m50-110.126.com (123.125.50.110)
-
by localhost with SMTP; 23 Jul 2014 08:38:45 -0000
-
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; //域名服务器数字签名 防止伪造域名发送垃圾邮件
-
s=s110527; h=MIME-Version:from:subject:Message-Id:Date; bh=d7E0W
-
8XWKkHJfmeJfJpA6z4IXUHGL6PMSKBntFW0WQ4=; b=CkOh1jpeyoreLs5qk41Sg
-
ZqEsgXfJEEo9y83736JjeUIkDYTAOafSzhWaxWVLpos4bd1mgWj60FJJN23qc0ui
-
MxTY6r6KX5HC6BBg8cLOu0mf73pEW/v5QhQ1Fa8jYlSJ2puO5pFg/7asJfjZ0xlL
-
UD5u68gPeA9drgCZLlVOqo=
-
Received: from [172.16.20.110] (unknown [60.208.139.35]) //山东省济南市联通
-
by smtp4 (Coremail) with SMTP id jdKowEBJjlPmdM9T6c_WCA--.1152S2;
-
Wed, 23 Jul 2014 16:40:07 +0800 (CST)
-
Content-Type: multipart/mixed; boundary="===============0886446980=="
-
MIME-Version: 1.0
-
to: ******@sdas.org
-
from: suon@sdas.org
-
subject: Test
-
X-CM-TRANSID:jdKowEBJjlPmdM9T6c_WCA--.1152S2
-
Message-Id:<53CF74E7.A5D465.10027@m50-110.126.com>
-
X-Coremail-Antispam: 1Uf129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73
-
VFW2AGmfu7bjvjm3AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUvk9NDUUUU
-
X-Originating-IP: [60.208.139.35]
-
Date: Wed, 23 Jul 2014 16:40:07 +0800 (CST)
-
Sender: sysadmin_oa@126.com //标识了原始发送方
-
X-CM-SenderInfo: pv1vtv5plqs0bd6rjloofrz/1tbitQrRREX9rRLCZAAAsL
-
X-MT-SPAMFLAG: NO;1406104804;MT_IP_WHITELIST
-
-
--===============0886446980==
-
Content-Type: text/plain; charset="us-ascii" //邮件部分的内容
-
MIME-Version: 1.0
-
Content-Transfer-Encoding: 8bit
-
-
HAHA,baby, see my email, love U
- --===============0886446980==--
DKIM介绍:
Base64介绍:
************************************************************************************************************
好了,接下来说说我们的邮件发送程序吧,其核心思想是自己构造出email消息,然后通过合法邮箱的smtp服务器发送到指定目标。其中主要解决Email邮件的构造和SMTP发送问题,具体代码如下:
点击(此处)折叠或打开
-
# -*- coding: cp936 -*-
-
#A Email Send Tool
-
import smtplib
-
from email.mime.text import MIMEText
-
from email.mime.multipart import MIMEMultipart
-
-
#Define the Sender and Receiver
- sender = 'test@sdas.org'
-
receiver = '******@sdas.org'
- subject = 'Response!'
-
body = '你好 这是一个邮件发送的测试 收到请回复 谢谢!我的邮箱是test@sdas.com'
-
print 'Emial Header Initialing...'
-
#Build the Email Message
-
m = MIMEMultipart()
-
m['to'] = receiver
-
m['from'] = sender
-
m['subject'] = subject
-
-
m.attach(MIMEText(body, 'html', 'gb2312'))
-
print 'Email build...'
-
#Send the Email
-
server = smtplib.SMTP('smtp.126.com')
-
server.login('sysadmin_oa@126.com', '********')
-
server.sendmail('sysadmin_oa@126.com', receiver, m.as_string())
-
server.close()
-
print 'Email Send Success!'
- raw_input('Enter for Exit...')
第三行到第五行导入了我们要使用的Python标准模块。首先构造Email消息使用的是MIMEMultipart函数添加一个MIME消息部分,然后使用MIMEText()函数将指定的字符串生成Email消息内容,最后通过smtp.SMTP建立连接发送邮件;
第八行到第十一行定义了下面要用到的Email消息的头部信息,包括发件人,收件人以及邮件主题和邮件内容等;
第十四到第十九行使用MIMEMultipart()建议一个消息对象m,然后填充该消息对象的头部信息,之后添加使用MIMEText()函数生成的消息部分,注意这里的MIMEText()指定了消息格式为'html'以及字符集为'gb2312',使用默认的'plain'格式邮件查看会出现乱码;
第二十二到第二十五行使用提前准备的测试邮箱启动SMTP服务,发送邮件,这里需要先认证发送者身份,因此使用smtp.login()方法,最后smtp.close()关闭此次连接;
运行结果如下:

【本节要点:
1. 邮件构造模块email;
2. 邮件消息创建:email.mime.multipart中的MIMEMultipart()创建MIME消息对象m;
3. 邮件内容填充:email.mime.text中的MIMEText(msg, 'html', 'gb2312')函数,其中还有发送邮件时的m.as_string()函数将内容转换为字符串发送;
4. 邮件发送:模块smtp;
5. smtp.SMTP('SMTP Server域名')建立连接到SMTP服务器的对象;
6. 邮件发送:server.connect()或server.login(username, passwd);
7. 邮件发送:server.sendmail('你的SMTP邮箱账号', Receiver, msg);
8. 邮件发送:server.close()关闭邮件发送对象;】