使用PHP通过SMTP发送邮件新手指南

2016-01-29 14:13 52 1 收藏

使用PHP通过SMTP发送邮件新手指南,使用PHP通过SMTP发送邮件新手指南

【 tulaoshi.com - PHP 】

由于PHP没有提供现成的smtp函数,却提供了一个功能不甚灵活的mail()函数,这个函数需要服务器配置上的支持,并且不支持smtp验证,在很多场合无法正常的工作,因此不建议使用。本文的目的在于为新手指明方向,并没有涉及那些高级的内容,一来本身水平有限,二来也担心不能准确的讲述相关的概念,进而对各位造成误导,还请自行深入学习。

  “使用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 <CR><LF>.<CR><LF>
teste
.
250 Ok: queued as 7B41F4665A
QUIT
221 Bye
Connection closed by foreign host.
  注:以上来自netkiller的postfix文档,偷懒,直接用现成的。

  首先是使用telnet来连接本地的25端口,稍微熟悉点网络的人都知道smtp协议使用25端口,这也就是说,现在在连接本地的smtp服务器。

  引用:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server.domain.com.br ESMTP Postfix (2.1.0)
  这些东西是系统输出信息,说明已经连接上了,而且这个smtp服务器是postfix做的。

  “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。

  引用:

DATA
354 End data with <CR><LF>.<CR><LF>
teste
.
  这一段是输入邮件正文,输入“DATA”以后系统提示使用“<回车>.<回车>”来结束输入,正文内容是“teste”。

  最后使用“QUIT”退出。

  以上就是最简单的一次发送mail的过程,从这个例子我们可以看出,发送mail其实是很简单的事情,实质上也就是建立一个对smtp服务器的连接,然后发送一些简单的命令给它,一封内容简单的邮件就发送出去了,至于更加复杂内容的邮件或者操作,其实也就是在此基础上稍加扩展而已。

  把这个过程用php来实现,其实就是利用php的Socket functions、Network Functions等等操作socket的函数来和smtp服务器建立一个连接,然后发送文本的命令给服务器,如果你亲自去看看那些写好的利用smtp协议发送邮件的类或者函数,相信可以印证我的说法。

由于已经存在很多现成的封装得很好的类或者函数替我们完成底层的socket级操作,我们只需要直接拿来用就好,而我也不会费时费神的在本文里去讨论底层的代码,有精神去研究的话,自己找代码来研究吧。现在继续跟我走,我们来点实际的代码来说明如何使用php发送邮件,采用的类是PEAR::Mail。

  代码:

<?php
 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 = <<< MSG //邮件正文
 hello world!!!
 MSG;

 $mail_res = $mail_object->send($headers['To'], $headers, $body); //发送

 if( Mail::isError($mail_res) ){ //检测错误
  die($mail_res->getMessage());
 }
?>
  以上的

来源:http://www.tulaoshi.com/n/20160129/1492794.html

延伸阅读
标签: PHP
  作者:Kartic Krishnamurthy 译者:limodou "好,如何创建符合MIME的信息呢?" 通过上面的一般性的描述,让我们现在看一下所谓的MIME信息到底是什么! 最简单的MIME信息 这个信息没有任何段,也就是,没有附件。然而,因为它是一个MIME消息,它必须有必要的头。 From: php@php.net To: 'Alex (the Great)'...
标签: PHP
  limodou 值得说明的其它两个方法是print_mail()和send_mail(),两个都使用了$force参数。print_mail()输出整个邮件信息,send_mail()使用PHP的mail()函数发送信息。可选的,send_mail()使用了一个SMTP对象和它的发送方法(由用户指定)来发送邮件。 结论 创建一个符合MIME的信息不象看上去那么复杂,可以通过一个相当简单...
初识MSN新手指南 MSN Messenger(Windows Live Messenger)简介 使用 MSN  Messenger,您可以通过文本、语音、移动电话甚至视频对话实时地与您的朋友、家人或同事联机聊天。您可以通过传情动漫和动态显示图片表现您自己,或即时地共享照片、文件、搜索及更多内容。您还可以通过移动设备与您的联系人聊天。立即获得  MSN Mess...
标签: 网络游戏
《水浒无双》新手指南   《 水浒无双 》新手指南 安装运行: 1、双击安装文件进入安装程序,点击“下一步(N)” 2、阅读用户许可证协议,点击“我接受”进入下一步 3、选择安装位置,点击“安装”按钮开始安装过程 4、安装完成,点击“完成”,进入登录界面     《水浒无双》名人堂第...
美食摄影新手指南   近期我们将推出由知名美食摄影师Evi Abeler 写作的美食摄影锦囊妙计系列。该系列有三部分,由专业美食摄影师提供最实用的建议,帮助大家拍摄出令人垂涎三尺的美食摄影! 前期准备和工具:光线、食物和背景 从前,你面对烹饪书和美食博客上看起来美味绝伦的食物流口水,现在!你可以准备亲自把美食...

经验教程

523

收藏

75
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部