首页 > 编程技术 > php

RFC821-简单邮件传输协议(SMTP)中文版 - 1

发布时间:2016-11-25 17:03

3.7. 域    
  域是最近被引入ARPA Internet邮件系统的。使用域可以使地址空间从一
个平面的普通字符串主机名变成全局地址的一个层次结构。主机由一个域名取
代,起始主机是由一系列元串组成,它们由逗号按最特殊到一般的顺序排列。
  例如,"USC-ISIF.ARPA","Fred.Cambridge.UK"和"PC7.LCS.MIT.ARPA"可
能是主机-域标识符。
  无论域名在SMTP中如何使用,只有正式的名称才可以被使用,不可以使用
假名或昵称。
3.8. 改变角色
  TURN命令可以用来改变在传输信道上通信的程序的角色。如果程序A现在是
发送SMTP,它发送TURN命令并接到OK应答(250)后,它就变为接收SMTP了。同
理,程序B也可以从接收SMTP变为发送SMTP。若要拒绝改变角色,接收方可以发
送502作为应答。
  注意:此命令是可选的。在使用TCP的传输信道时,一般不使用此命令。然
而,当建立传输信道的代价比较大时,此命令很有用。例如,此命令可以支持一
般公共交换电话系统作为传输信道。
4. SMTP说明    
4.1. SMTP命令    
4.1.1. 命令语法    
  SMTP命令定义了邮件传输或由用户定义的系统功能。它的命令是由<CRLF>
结束的字符串。而在带有参数的情况下,命令本身由<SP>和参数分开,如果
未带参数可以直接和<CRLF>连接。邮箱的语法格式必须和接收站点的格式一致。
下面讨论SMTP命令和应答。
  发送邮件操作涉及到不同的数据对象,它们由不同的参数相互连接。回
复路径就是MAIL命令的参数,而转发路径则是RCPT命令的参数,邮件日期是
DATA命令的参数。这些参数或者数据对象必须跟在命令后。这种模式也就要
求有不同的缓冲区来存储这些对象,也就是说,有一个回复路径缓冲区,一
个转发路径缓冲区,一个邮件内容缓冲区。特定的命令产生自己的缓冲区,
或使一个或多个缓冲的内容被清除。
  HELLO (HELO)
  此命令用于向接收SMTP确认发送SMTP。参数域包括发送SMTP的主机名。
接收SMTP通过连接确认命令来向发送SMTP确认接收SMTP。引命令和OK响应确
认发送和接收SMTP进入了初始状态,也就是说,没有操作正在执行,所有状态
表和缓冲区已经被子清除。
环境:中文w2k+apache+php4.06(smtp在linux上)
我在使用mail函数发信的时候发现,如果我的subject是中文,那么收到的mail就会把中文显示为"XXXX"
调用过程如下:
<?php
$to = "customer@263.net";
$subject = "商城";
$msg = "注册会员成功<br>";
$msg .= "会员名:wayne<br>";
$msg .= "密码:wayne";
$headers = "From: webmaster@263.net Content-Type: text/html; charset=gb2312 ";
mail("$to", "$subject", "$msg", "$headers");    
?>
程序调用以后,使用outlook6.0收信,发现"商城"被显示为"XXXX",而msg中的中文可以正确显示,根据经验,知道要把subject进行编码。明确方向以后,我就着手寻找php的编码函数。
http://www.linuxforum.net Jephe Wu (2001-04-21 18:17:49)
一 简介:
1. POP适用于C/S结构的脱机模型的电子邮件协议,目前已发展到第三版,称POP3。脱机模型即不能在线
   操作,不像IMAP4(netscape支持IMAP4)
2. 当客户机与服务器连接并查询新电子邮件时,被该客户机指定的所有将被下载的邮件都将被程序下载到
   客户机,下载后,电子邮件客户机就可以删除或修改任意邮件,而无需与电子邮件服务器进一步交互。
3. POP3客户向POP3服务器发送命令并等待响应,POP3命令采用命令行形式,用ASCII码表示。
   服务器响应是由一个单独的命令行组成,或多个命令行组成,响应第一行以ASCII文本+OK或-ERR指出相应
   的操作状态是成功还是失败
4. 在POP3协议中有三种状态,认可状态,处理状态,和更新状态。
   当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,
   在完成相应的操作后客户机发出quit命令,则进入更新状态,更新之后最后重返认可状态。如下图
 等待连接        身份确认         quit命令
   ——  |认可|————— |处理|——————|更新|
           |__________________________________|
                  重返认可状态
5. 认可状态的命令语句
   一般情况下,大多数现有的POP3客户与服务器执行采用ASCII明文发送用户名和口令,在认可状态等
待客户连接的情况下,客户发出连接,并由命令user/pass对在网络上发送明文用户名和口令给服务器
进行身份确认。一旦确认成功,便转入处理状态。
    为了避免发送明文口令的问题,有一种新的认证方法,命令为APOP,使用APOP,口令在传输之前被加密。
当第一次与服务器连接时,POP3服务器向客户机发送一个ASCII码问候,这个问候由一串字符组成对每个客
户机是唯一的,与当时的时间有关,然后,客户机把它的纯文本口令附加到从服务器接收到的字符串之后,
然后计算出结果字符串的MD5单出函数消息摘要,客户机把用户名与MD5消息摘要作为APOP命令的参数一起发送
出去。
    目前,大多数windows上的邮件客户软件不支持APOP命令,qpopper支持。
6. POP3命令码如下:
 命令          参数       状态     描述
Advanced Example
Here we will show the full capabilities of the PHP mail function.
PHP Code:
<?php
echo "<html><body>";
$recipient = "Kris Arndt <karn@nucleus.com>,npl@nucleus.com";
$subject = "Testing the mail function";
$message = "Hello! This is the body of the message. ";
$extra = "From: kris@phpworld.com Reply-To: karn@nucleus.com ";
mail ($recipient, $subject, $message, $extra);
echo "Sending mail...";
echo "</body></html>";
?>

We send an email to two people this time, by putting two email addresses in the recipient field and separating them with commas.
The fourth parameter holds extra headers for the email.    We specify who the email was from and who the recipient should reply to.    When entering multiple headers, separate them with the line feed and new line combination (' ').

<?
class mime_decode {
    var $content     = Array();
    function mime_encode_headers($string) {
        if($string == "") return;
        if(!eregi("^([[:print:]]*)$",$string))
       $string = "=?ISO-8859-1?Q?".str_replace("+","_",str_replace("%","=",urlencode($string)))."?=";
        return $string;
    }
    function decode_mime_string($string) {
        if(($pos = strpos($string,"=?")) === false) return $string;
        while(!($pos === false)) {
       $newresult .= substr($string,0,$pos);
       $string = substr($string,$pos+2,strlen($string));
       $intpos = strpos($string,"?");
       $charset = substr($string,0,$intpos);
       $enctype = strtolower(substr($string,$intpos+1,1));
       $string = substr($string,$intpos+3,strlen($string));
       $endpos = strpos($string,"?=");
       $mystring = substr($string,0,$endpos);
       $string = substr($string,$endpos+2,strlen($string));
       if($enctype == "q") {
           $mystring = str_replace("_"," ",$mystring);
           $mystring = $this->decode_qp($mystring);
标签:[!--infotagslink--]

您可能感兴趣的文章: