首页 > 编程技术 > php

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

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

本文出自: 作者: (2001-11-23 09:08:00)
第二步:转发主机到目的主机
R: 220 BBN-VAX.ARPA Simple Mail Transfer Service Ready
S: HELO USC-ISIE.ARPA
R: 250 BBN-VAX.ARPA
 
S: MAIL FROM:<@USC-ISIE.ARPA:JQP@MIT-AI.ARPA>
R: 250 OK
 
S: RCPT TO:<Jones@BBN-VAX.ARPA>
R: 250 OK
 
S: DATA
R: 354 Start mail input; end with <CRLF>.<CRLF>
S: Received: from MIT-AI.ARPA by USC-ISIE.ARPA ;
2 Nov 81 22:40:10 UT
S: Date: 2 Nov 81 22:33:44
S: From: John Q. Public <JQP@MIT-AI.ARPA>
S: Subject: The Next Meeting of the Board
S: To: Jones@BBN-Vax.ARPA
S:
S: Bill:
S: The next meeting of the board of directors will be
S: on Tuesday.
S: John.
S: .
R: 250 OK
 
S: QUIT
R: 221 USC-ISIE.ARPA Service closing transmission channel
    
确认和发送
R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready
S: HELO MIT-MC.ARPA
R: 250 SU-SCORE.ARPA
 
S: VRFY Crispin
R: 250 Mark Crispin <Admin.MRC@SU-SCORE.ARPA>
 
S: SEND FROM:<EAK@MIT-MC.ARPA>
R: 250 OK
 
S: RCPT TO:<Admin.MRC@SU-SCORE.ARPA>
R: 250 OK
 
S: DATA
R: 354 Start mail input; end with <CRLF>.<CRLF>
S: Blah blah blah...
S: ...etc. etc. etc.
S: .
R: 250 OK
 
S: QUIT
R: 221 SU-SCORE.ARPA Service closing transmission channel
    
获得和发送邮件 首先确定用户名,然后尝试将邮件发送到用户终端,
当它失败时,发送到用户邮箱。
R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready
S: HELO MIT-MC.ARPA
R: 250 SU-SCORE.ARPA
 
S: VRFY Crispin
R: 250 Mark Crispin <Admin.MRC@SU-SCORE.ARPA>
 
S: SEND FROM:<EAK@MIT-MC.ARPA>
R: 250 OK
 
S: RCPT TO:<Admin.MRC@SU-SCORE.ARPA>
/**
 * 判断字符串emailAddr是否为合法的email格式
 * 主要判断'@'及'.'是否出现,以及两者的位置
 * @param emailAddr 输入的email地址
 * @return true/false。
 */
function emailCheck(emailAddr)
{
      if((emailAddr == null) || (emailAddr.length < 2)) return false ;
      // 需出现'@',且不在首字符.
      var aPos = emailAddr.indexOf("@" ,1) ;
      if(aPos < 0)
      {
     return false ;
      }
      // '@'后出现'.',且不紧跟其后.
      if(emailAddr.indexOf("." ,aPos+2) < 0)
      {
     return false ;
      }
      return true ;
}
<?php
if ($EMAIL_INC) return;
$EMAIL_INC=    "defined";
define( "SmtpPort",25);
class Pop3 {
    var $subject;             // 邮件主题    
    var $from_email;               // 发件人地址
    var $from_name;              // 发件人姓名
    var $to_email;               // 收件人地址
    var $to_name;             // 收件人姓名
    var $body;              // 邮件内容
    var $filename;               // 文件名
    var $socket;            // 当前的 socket
    var $Line;
    var $Status;
    function pop3_open($server, $port)     
    {
        $this->Socket = fsockopen($server, $port);
        if ($this->Socket <= 0){
       return false;
        }
    $this->Line = fgets($this->Socket, 1024);
    $this->Status[ "LASTRESULT"] = substr($this->Line, 0, 1);
    $this->Status[ "LASTRESULTTXT"] = substr($this->Line, 0, 1024);
function build_text_body($body) {
        return " <pre>".$this->make_link_clickable($this->linesize(htmlspecialchars($body),85))."</pre> ";
    }
    function decode_qp($text) {
        $text = quoted_printable_decode($text);
        /*
        $text = str_replace("","",$text);
        $text = ereg_replace("= ", "", $text);
        $text = str_replace(" "," ",$text);
        */
        $text = ereg_replace("=", "", $text);
        return $text;
    }
    function make_link_clickable($text){
        $text = eregi_replace("([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])",
       "<a class="autolink" href="1://23" target="_new">1://23</a>", $text);
        $text = eregi_replace("([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*.[a-z]{2,3})","<a class="autolink"    href="newmsg.php?mailto=1&nameto=1">1</a>", $text);
        return $text;
    }
    function process_message($header,$body) {
        global $mime_show_html;
        $mail_info = $this->get_mail_info($header);
1. 简介
  对于在网络上的比较小的结点,支持消息传输系统(MTS)是不实际
的。例如,一台工作站可能不具有充足的资源允许SMTP服务器和相当的本地邮件传送系统保持序驻留,并持续运行。同样的,将一台个人计算机长时间连接在IP类型网络上的费用也是可观的(结点缺少的资源被称为"联络性")。
  虽然如此,在这样的小结点上允许管理邮件是十分有用的,并且这些结点经常支持一个用户代理来管理邮件。为解决这一问题,能够支持MTS的结点就为这些不能支持的结点提供了邮件存储功能。邮局协议-版本3就是使这样的工作站可以用一种比较实用的方法来访问存储于服务器上的储存邮件。通常,这意味着工作站可以从服务器上取得邮件,而服务器为它暂时保存邮件。
  在下文中,客户主机指的是利用POP3服务的主机,而服务器主机指的是提供POP3服务的主机。
2. 简单说明
  在此文档中不指明客户主机如何将邮件送入到传送系统中去。但这里有一个说明:当用户代理需要将信息送到传送系统时,它在接力主机上建立SMTP连接(这些接力主机可以是POP3主机,也可以不是)。
 
3. 基本操作
  初始时,服务器通过侦听TCP端口110开始POP3服务。当客户主机需要使用服务时,它将与服务器主机建立TCP连接。当连接建立后,POP3发送确认消息。客户和POP3服务器相互(分别)交换命令和响应,这一过程一直要持续到连接终止。
  POP3命令由一个命令和一些参数组成。所有命令以一个CRLF对结束。命令和参数由可打印的ASCII字符组成,它们之间由空格间隔。命令一般是三到四个字母,每个参数却可达40个字符长。
  POP3响应由一个状态码和一个可能跟有附加信息的命令组成。所有响应也是由CRLF对结束。现在有两种状态码,"确定" ("+OK")和"失败" ("-ERR")。
  对于特定命令的响应是由许多字符组成的。在这些情况中,下面一一表述:在发送第一行响应和一个CRLF之后,任何的附加信息行发送,他们也由CRLF对结束。当所有信息发送结束时,发送最后一行,包括一个结束字符(十进制码46,也就是".")和一个CRLF对。如果信息中的任何一行以结束字符开始,此行就是通过在那一行预先装入结束而进行字符填充的。因此,多行响应由五个CRLF.CRLF 结束。当检测多行响应时,客户检测以确认此行是否以结束字符开始。如果是的,而且其后的字符不是CRLF,此行的第一个字符(结束字符)将被抛弃;如果其后紧跟CRLF,从POP服务器来的响应终止,包括.CRLF 的行也不被认为是多行响应的一部分了。
标签:[!--infotagslink--]

您可能感兴趣的文章: