linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > php >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·PHP生成静态页面的一些经验
·PHP无限分类与树型论坛的实现方
·php5学习笔记
·入门级PHP程序员面试题
·PHP 和 MySQL初学入门
·PHP入门速成
·vim的代码折叠
·文件下载统计php编程代码
·如何建立自己的新闻发布系统
·织梦CMS中文转换拼音函数研究
·Windows下Apache+Tomcat+MySQL
·PHP初学者头疼问题总结
·Cookie及其使用详细介绍
·生成sessionid和随机密码的例子
·使用无限生命期Session的方法
最新文章
·PHP入门速成
·用php实现广告轮播
·Zend Optimizer 问题浅析
·功能强大的CGI语言----PHP3
·用Session对Web页面进行保护
·PHP--进行模块化设计
·如何将PHP的结果输出到非PHP页
·如何开发一个虚拟域名系统
·PHP4调用自己编写的COM组件
·简单的页面缓冲技术(三)
·简单的页面缓冲技术(二)
·简单的页面缓冲技术(一)
·用Socket发送电子邮件(二)
·用Socket发送电子邮件(一)
·PHP/MySQL 购物车
Google
 
使用php通过smtp发送邮件新手指南
[ 作者:  加入时间:2008-01-28 11:41:53  来自:Linux联盟收集整理 ]
由于PHP没有提供现成的smtp函数,却提供了一个功能不甚灵活的mail()函数,这个函数需要服务器配置上的支持,并且不支持smtp验证,在很多场合无法正常的工作,因此不建议使用。本文的目的在于为新手指明方向,并没有涉及那些高级的内容,一来本身水平有限,二来也担心不能准确的讲述相关的概念,进而对各位造成误导,还请自行深入学习。本文撰写日期是2004年7月2日,阅读时请注意时效性。 h99Linux联盟
   h99Linux联盟
  “使用php发送mail”最近已经成为继“reGISter_globals”以后本版第二个新手陷阱,今天特地写这篇文章为新手解惑,希望可以为迷茫的人指明方向。 h99Linux联盟
  让我们先从以下这个例子开始说起: h99Linux联盟
  引用: h99Linux联盟
  [root@server~/]# telnet localhost 25 h99Linux联盟
  Trying 127.0.0.1... h99Linux联盟
  Connected to localhost. h99Linux联盟
  Escape character is '^]'. h99Linux联盟
  220 server.domain.com.br ESMTP Postfix (2.1.0) h99Linux联盟
  MAIL FROM: teste@dominio.com.br h99Linux联盟
  250 Ok h99Linux联盟
  RCPT TO: teste@dominio.com.br h99Linux联盟
  250 Ok h99Linux联盟
  DATA h99Linux联盟
  354 End data with <CR><LF>.<CR><LF> h99Linux联盟
  teste h99Linux联盟
  . h99Linux联盟
  250 Ok: queued as 7B41F4665A h99Linux联盟
  QUIT h99Linux联盟
  221 Bye h99Linux联盟
  Connection closed by foreign host. h99Linux联盟
  注:以上来自netkiller的postfix文档,偷懒,直接用现成的。 h99Linux联盟
   h99Linux联盟
  首先是使用telnet来连接本地的25端口,稍微熟悉点网络的人都知道smtp协议使用25端口,这也就是说,现在在连接本地的smtp服务器。 h99Linux联盟
  引用: h99Linux联盟
  Trying 127.0.0.1... h99Linux联盟
  Connected to localhost. h99Linux联盟
  Escape character is '^]'. h99Linux联盟
  220 server.domain.com.br ESMTP Postfix (2.1.0) h99Linux联盟
   h99Linux联盟
  这些东西是系统输出信息,说明已经连接上了,而且这个smtp服务器是postfix做的。 h99Linux联盟
   h99Linux联盟
  “MAIL FROM: teste@dominio.com.br”这个命令指明了发件地址是teste@dominio.com.br,“250 Ok”说明这条命令被服务器接受并正确执行,这类似http协议的200、404、500等状态代码。接下来的“RCPT TO: teste@dominio.com.br”指明了收件地址是teste@dominio.com.br。 h99Linux联盟
  引用: h99Linux联盟
  DATA h99Linux联盟
  354 End data with <CR><LF>.<CR><LF> h99Linux联盟
  teste h99Linux联盟
  . h99Linux联盟
   h99Linux联盟
  这一段是输入邮件正文,输入“DATA”以后系统提示使用“<回车>.<回车>”来结束输入,正文内容是“teste”。 h99Linux联盟
  最后使用“QUIT”退出。 h99Linux联盟
   h99Linux联盟
  以上就是最简单的一次发送mail的过程,从这个例子我们可以看出,发送mail其实是很简单的事情,实质上也就是建立一个对smtp服务器的连接,然后发送一些简单的命令给它,一封内容简单的邮件就发送出去了,至于更加复杂内容的邮件或者操作,其实也就是在此基础上稍加扩展而已。 h99Linux联盟
   h99Linux联盟
  把这个过程用php来实现,其实就是利用php的Socket functions、Network Functions等等操作socket的函数来和smtp服务器建立一个连接,然后发送文本的命令给服务器,如果你亲自去看看那些写好的利用smtp协议发送邮件的类或者函数,相信可以印证我的说法。 h99Linux联盟
   h99Linux联盟
  由于已经存在很多现成的封装得很好的类或者函数替我们完成底层的socket级操作,我们只需要直接拿来用就好,而我也不会费时费神的在本文里去讨论底层的代码,有精神去研究的话,自己找代码来研究吧。现在继续跟我走,我们来点实际的代码来说明如何使用php发送邮件,采用的类是PEAR::Mail。 h99Linux联盟
  代码: h99Linux联盟
  <?php h99Linux联盟
  require_once 'Mail.php'; h99Linux联盟
   h99Linux联盟
  $conf['mail'] = array( h99Linux联盟
   'host' => 'xx.xx.xx.xx', //smtp服务器地址,可以用ip地址或者域名 h99Linux联盟
   'auth' => true, //true表示smtp服务器需要验证,false代码不需要 h99Linux联盟
   'username' => 'tester', //用户名 h99Linux联盟
   'password' => 'retset' //密码 h99Linux联盟
  ); h99Linux联盟
   h99Linux联盟
  /*** h99Linux联盟
  * 使用$headers数组,可以定义邮件头的内容,比如使用$headers['Reply-To']可以定义回复地址 h99Linux联盟
  * 通过这种方式,可以很方便的定制待发送邮件的邮件头 h99Linux联盟
  ***/ h99Linux联盟
  $headers['From'] = 'tester@domain.com'; //发信地址 h99Linux联盟
  $headers['To'] = 'tester@domain.com'; //收信地址 h99Linux联盟
  $headers['Subject'] = 'test mail send by php'; //邮件标题 h99Linux联盟
  $mail_object = &Mail::factory('smtp', $conf['mail']); h99Linux联盟
   h99Linux联盟
  $body = <<< MSG //邮件正文 h99Linux联盟
  hello world!!! h99Linux联盟
  MSG; h99Linux联盟
   h99Linux联盟
  $mail_res = $mail_object->send($headers['To'], $headers, $body); //发送 h99Linux联盟
   h99Linux联盟
  if( Mail::isError($mail_res) ){ //检测错误 h99Linux联盟
   die($mail_res->getMessage()); h99Linux联盟
  } h99Linux联盟
  ?> h99Linux联盟
   h99Linux联盟
  以上的代码非常的简单,配合注释应该不难看懂,关于PEAR和PEAR::Mail的更多信息,可以自己去翻阅PEAR Manual得到进一步的信息。 h99Linux联盟
   h99Linux联盟
  现在你依葫芦画瓢已经可以开始工作了,不过如果你还想做得更好、做得更多的话,我在这里提供一些更多的指南。 h99Linux联盟
   h99Linux联盟
  1、SMTP协议 h99Linux联盟
  熟悉并了解SMTP协议的内容,这样你可以进行更多的高级操作,甚至自己写一个满足自己特别需求的发邮件程序。以上的代码虽然简单,但是肯定还是有很多人不了解注释里提到的邮件头是什么东西,它到底对发出的邮件有什么样的影响。 h99Linux联盟
  比如“发送html邮件为什么对方看到的是乱码”等等问题都可能和邮件头相关,如果对smtp协议比较了解的话,可以很快的知道问题所在。 h99Linux联盟
  2、MIME规范 h99Linux联盟
  如果想要发送html邮件甚至多媒体邮件,一定是需要对MIME有一定了解的,有了这方面的知识你就可以发送内容更加精彩的邮件。 h99Linux联盟
  3、PEAR h99Linux联盟
  PEAR并非唯一的发送邮件的工具,但是PEAR包含了Mail、Mail_Mime等等已经封装好了的类,可以让我们的开发事半功倍,并且除了Mail方面的东西以外,它还提供了很多其他方面的现成的工具,非常值得花时间学一学。 h99Linux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Linux操作系统下安装Apache与PHP的方法  (2008-01-23 10:02:59)
 ·PHP5 OOP编程之代理与定制异常(2)  (2007-12-28 16:29:45)
 ·PHP5this,self, parent 关键字祥解  (2007-12-28 16:29:07)
 ·PHP开发中接收复选框信息的方法  (2007-12-28 16:24:29)
 ·用PHP操纵Oracle的LOB类型的数据  (2007-12-28 16:19:42)
 ·PHP程序加速探索之加速工具软件  (2007-12-28 16:19:11)
 ·(PHP)模板引擎Smarty介绍(2)  (2007-12-28 16:13:27)
 ·(PHP)模板引擎Smarty介绍(1)  (2007-12-28 16:12:18)
 ·理解PHP中的MVC编程之控制器(2)  (2007-12-28 16:11:02)
 ·理解PHP中的MVC编程之控制器(1)  (2007-12-28 16:09:42)