由于php没有提供现成的smtp函数,却提供了一个功能不甚灵活的mail()函数,这个函数需要服务器配置上的支持,并且不支持smtp验证,在很多场合无法正常的工作,因此不建议使用。本文的目的在于为新手指明方向,并没有涉及那些高级的内容,一来本身水平有限,二来也担心不能准确的讲述相关的概念,进而对各位造成误导,还请自行深入学习。本文撰写日期是2004年7月2日,阅读时请注意时效性。
“使用php发送mail”最近已经成为继“register_globals”以后本版第二个新手陷阱,今天特地写这篇文章为新手解惑,希望可以为迷茫的人指明方向。
让我们先从以下这个例子开始说起:
引用: |
[root@server~/]# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is ^]. 220 server.domain.com.br ESMTP Postfix (2.1.0) MAIL FROM: teste@dominio.com.br 250 Ok RCPT TO: teste@dominio.com.br 250 Ok DATA 354 End data with teste . 250 Ok: queued as 7B41F4665A QUIT 221 Bye Connection closed by foreign host. 注:以上来自netkiller的postfix文档,偷懒,直接用现成的。 |
引用: |
Trying 127.0.0.1... Connected to localhost. Escape character is ^]. 220 server.domain.com.br ESMTP Postfix (2.1.0) |
引用: |
DATA 354 End data with teste . |
代码: |
require_once Mail.php; $conf[mail] = array( host => xx.xx.xx.xx, //smtp服务器地址,可以用ip地址或者域名 auth => true, //true表示smtp服务器需要验证,false代码不需要 username => tester, //用户名 password => retset //密码 ); /*** * 使用$headers数组,可以定义邮件头的内容,比如使用$headers[Reply-To]可以定义回复地址 * 通过这种方式,可以很方便的定制待发送邮件的邮件头 ***/ $headers[From] = tester@domain.com; //发信地址 $headers[To] = tester@domain.com; //收信地址 $headers[Subject] = test mail send by php; //邮件标题 $mail_object = &Mail::factory(smtp, $conf[mail]); $body = hello world!!! MSG; $mail_res = $mail_object->send($headers[To], $headers, $body); //发送 if( Mail::isError($mail_res) ){ //检测错误 die($mail_res->getMessage()); } ?> |