邮件
例子邮件格式浅析
>一.简介>>本文将介绍基本的邮件格式(internet message format),
一些必要及常用的标头(header field)。>>根据本文邮件标示(ail
headers)的内容,读者可以发一些简单的邮件或发现一些伪造邮
件。>>二.邮件的构成>>邮件分为内容(body)和标示(header
section)。>>内容是一般邮件的主要部分。标示则是描述邮件的信
息,如发件方,收件方,发送时间,接收时间等等。邮件的内容的标题
也在header section中。>>一封邮件往往会通过多个服务器传送
(mail transfer agent),每次转发后会在邮件前留下包含received:开
头的header。>>一个qq信箱邮件的例子:>>//去除部分header>>//
由发件方fujiayi.china@gmail.com发送至收件方*@qq.com
received:from 209.85.218.224(unknown[209.85.218.224])>>by newmx26.qq.com(newmx)with smtp id for*@qq.com;thu,1apr 2010 07:28:13+0800(cst)>>---以上是由收件方信箱的服务器写入邮件的
header,也是最后写入的--第一部分--->>received:from
209.85.218.224(gmail.com[172.22.2.88])>>by
mxproxy13(qq.com)with smtp id vkotgxro;thu,01apr 2010 07:28:12+0800>>(envelope-from
fujiayi.china@gmail.com)received:by 10.204.4.150 with smtp id
22mr 282939bkr.192.1270078089743;>>wed,31mar 2010 16:28:09-0700(pdt)>>return-path:fujiayi.china@gmail.com received:from[192.168.1.*](*.rev.gaoland.net[77.203.*.*])>>by mx.google.com with esmtps id d5sm
61603917bkd.7.2010.03.31.16.28.08>>(version=tlsv1/sslv3cipher=rc4-md5);wed,31mar 2010 16:28:09-0700(pdt)>>--以上是邮件传送的
服务器写入邮件的header--第二部分>>message-id:4bb3da
89.7070400@gmail.com date:thu,01apr 2010 01:28:09+0200 from:fujiayi fujiayi.china@gmail.com to:*@qq.com subject:csdn content-type:text/plain;charset=gb2312
content-transfer-encoding:7bit internet message format>>--以上是
收件方自己写入的--第三部分--->>第一部分是由收件方的邮件服
务器添加,认为是可以信任的。这个部分一般是认证邮件来源后加
入邮件的。>>之后的部分均可能伪造。>>第一部分影响邮件在信
箱里的位置,如第二行thu,01apr 2010 07:28:12+0800
示收件人方
信箱收到的日期,>>第二部分则是邮件的传送,可能通过多个服务
器及防火墙。>>最后部分往往是咱们看见的邮件内容。很不幸,这
部分内容由发件人供给,可以无需认证随意填写。>>三.常用header
field>>一般句法格式:field_name:field_body crlf//每一行不得超过
998个字符,建议不超过78字符。>>crlf指carriage return(ansii 13)
和line feed(ansii 10)。>>注意field_name首字母大写>>例
如:subject:csdn/r/n received(0-n):此信息由服务器接收此邮件后添
加至顶端,包含当前服务器的信息,前一服务器的地址和通讯时间。>>//此处0-n表示最少出现0次,最多n次。0次即表示此header不出现在邮件内。>>date(1-1):表示邮件写完的日期,与发信时间无关。此项必须填写,如缺省则由发件方的smtp服务器用当前时间填写。>>//1-1表示最少出现一次,最多出现一次,即必须填写,并且只能写一次。>>例:tue,10feb 2009 14:00:00+0800>>可以简化为:10feb 2009 14:00+0800>>注:9feb 09 14:1+0800必须格式化为09feb 2009 14:10+0800>>礼拜几必须
为:”mon”/”tue”/”wed”/”thu”/”fri”/”sat”/”sun”>>月必须为:”jan”/”feb”/”mar”/”apr”/”may”/”jun”/”jul”/”aug”/”sep”/”oct”/”nov”/”dec”>>from(1-1):表示发件人的地址。因为可以任意填写,很多告白邮件都此处在伪造。但是大部分数常用信箱的服务器都不允许from的地址和发件人的账号不同。>>例如:from:fujiayi.china@gmail.com也可以写为from:fujiayi
fujiayi.china@gmail.com>>邮件地址有两种表示法,可以添加描述,如fujiayi fujiayi.china@gmail.com,也可以直接写fujiayi.china@gmail.com reply-to(0-1):表示回复的默认地址,即按”回复”后自动填写的发送地址。多个地址用”,”(逗号)分开。如此项不存在,一般用from的地址作为回复地址。>>to(0-1):表示收件人的地址,可以不写。不过之后cc和bcc也不写的话当然发不出啦!多个地址用”,”(逗号)分开。>>cc(0-1):抄送,即以备份的形式发送。多个地址用”,”分开。>>bcc(0-1):密抄送,多个地址用”,”分开。由发
送方服务器处理后删除,不显示在邮件内。因此如果接收人的地址
在bcc内的话,那么他只能看见to和cc的地址,邮件内是不含他的
地址。>>message-id,in-reply-to,reference应自动生成,用于辨识邮
件。>>message-id(0-1):用于接借方辨识的邮件,缺省通常由发件方
服务器填写。>>in-reply-to(0-1):用于发送方辨识回复的邮件,缺省可能由回复方服务器填写。>>reference(0-1):用于对话(“thread”of conversation)。例如发件方和回复方对统一主题的会
商。>>subject(0-1):邮件的标题。>>四.举出例子>>产生上述邮件的
php代码:>>view plaincopy to clipboardprint?>>?php>>//请事前在
php.ini中配置好smtp的服务
器>>$mail_to=“recipient@aaa.com”;>>$mail_subject=“csdn exple”;>>//ini_set(‘sendmail_from’,”aaa@bbb.com”);>>$mail_message=“i’m administrator.\n”;>>$mail_message.=“the message line 2\n”;>>$mail_message.=“the message line
3\n”;>>$mail_headers=“date:fri,01apr 1994 12:44:31+0100”.”\r\n”;>>$mail_headers.=“from:administrator@csdn.com”.”\r\n”;>>$mail_headers.=“reply-to:no-reply@csdn.com”.”\r\n”;>>$mail_headers.=“cc:00000000@qq.com”.”\r\n”;>>$mail_parameters=““;>>if(mail($mail_to,$mail_subject,$mail_message,$mail_
headers,$mail_parameters))>>{>>echo”well
done!”.$mail_headers;>>}>>?>>?php>>//请事前在php.ini中配置
好smtp的服务
器>>$mail_to=“recipient@aaa.com”;>>$mail_subject=“csdn
exple”;>>//ini_set(‘sendmail_from’,”aaa@bbb.com”);>>$mail_message=“i’m administrator.\n”;>>$mail_message.=“the message line 2\n”;>>$mail_message.=“the message line
3\n”;>>$mail_headers=“date:fri,01apr 1994
12:44:31+0100”.”\r\n”;>>$mail_headers.=“from:administrator@csdn.com”.”\r\n”;>>$mail_headers.=“reply-to:no-reply@csdn.com”.”\r
\n”;>>$mail_headers.=“cc:00000000@qq.com”.”\r\n”;>>$mail_parameters=““;>>if(mail($mail_to,$mail_subject,$mail_message,$mail_
headers,$mail_parameters))>>{>>echo”well
done!”.$mail_headers;>>}>>?>>五.其他>>邮件原代码(original)可以
在邮件客户端中查看,如以文本格式打开l文件。>>gmail网页祭祀
物品给查看代码的链接。>>参考文档:>>internet message format[rcf5322]>>wikipedia ail message format>