中国数据网
http://www.dbchina.net
收藏本页
联系我们
 
在PHP中发送MIME邮件4 ~ admin
第二种情况就是当不存在附件时,在这种情况下,如果提供了邮件文本,它将是包含在局部变量$msg中的唯一信息;在这种情况下不需要MIME头。(然而,在这种情况下我们还应该只把MIME-Version头指定出来)

  3、MIME信息头(MIME-Version,Content-Type, 等等。)在有附件的时候被创建。为了用MIME消息头来创建消息体,首先MIME信息头要被创建。然后各个有效的MIME段通过$mimeheaders数组被反复处理。这就是边界标识被实际使用的地点。根据规则的一致性,对一个MIME段被前缀上两个连接符('--'.$BOUNDARY.crlf)并且在最后一个MIME段的后面,在边界标识后追加两个连接符表示邮件范围结束。

  4、在变量$msg中的完整的信息作为这个方法的值被返回。

  下一个方法,get_email()通过build_message()方法完成MIME消息的生成。因为build_message()是一个内部方法,get_email()在调用完build_message()之后,创建RFC 822的信息头并且追加上MIME信息。

<?php
function gen_email($force=false) {
if (!empty($this->email) && !$force) return $this->email ; // saves processing
$email = "";
if (empty($this->subject)) $this->subject = NOSUBJECT;
if (!empty($this->from)) $email .= 'From: '.$this->from.CRLF;
if (!empty($this->headers)) $email .= $this->headers.CRLF;
$email .= $this->build_message();
$this->email = $email;
return $this->email;
}
?>

  对于我们的类的一个实例来说,类的成员$email拥有生成的整个邮件信息。为了避免信息被无必要的重新生成,这个方法继续创建邮件头,并且只有当$mail为空时才调用build_message()。然而,你可以通过调用gen_email()来强制重新处理。(如果"To"信息被改变或加入了一个新的附件,调用者显示想这么做)。

  gen_email()创建了更熟悉的From头。另外,如果没有指定主题,它将主题设为缺省值(No Subject)。我们直到后面才将To和Subject 的内含保存起来。这个方法返回完整的邮件信息,这样就结束了创建MIME信息的任务。

值得说明的其它两个方法是print_mail()和send_mail(),两个都使用了$force参数。print_mail()输出整个邮件信息,send_mail()使用PHP的mail()函数发送信息。可选的,send_mail()使用了一个SMTP对象和它的发送方法(由用户指定)来发送邮件。

  如何测试email的有效性?

一般我们常希望拜访自己网站的朋友能留下Email,但是很多人都会随便打,造成管理员的困扰,以下这个类可以在线检查Email是否有效(存不存在)

……
Function VerifyRule($email) ;
Function VerifyOnline($email) ;

function Verify($email,$type=0) {
if($type==0) return $this->VerifyRule($email) ; //为0只检查Email语法
else return $this->VerifyOnline($email) ; //否则在线检查
}
……

  基本思想是:

  首先检查是否符合Email语法标准,如果符合,取得用户输入的Email的主机信息,用getmxrr()函数取得改主机dns中的MX字段,然后进一步检查输入的Email是否存在。

  用法:

$input=new CEmail;
/检查语法
if($input->Verify("yourname@emailhost.com",0)) echo "有效";
else echo "无效";

//在线检查是否真的有该邮件
if($m->Verify("yourname@emailhost.com",1)) echo "有效";
else echo "无效";
Copyright ©2006-2009 DbChina.Net | 鲁ICP备05031207号