黑客集中营首页|黑客新闻|黑客文章|黑营动画|黑客软件|黑客论坛 |黑客商城 |黑营招聘
热门搜索:杀毒 安全工具 黑客集中营 安全 黑客
 您现在的位置: 黑客集中营 >> 技术中心 >> 网络编程 >> 正文
使用php通过smtp发送邮件新手指南
作者:佚名    文章来源:不详    点击数:    更新时间:2008-6-14          
由于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 <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());
}
?>
以上的代码非常的简单,配合注释应该不难看懂,关于PEAR和PEAR::Mail的更多信息,可以自己去翻阅PEAR Manual得到进一步的信息。

现在你依葫芦画瓢已经可以开始工作了,不过如果你还想做得更好、做得更多的话,我在这里提供一些更多的指南。

1、SMTP协议
熟悉并了解SMTP协议的内容,这样你可以进行更多的高级操作,甚至自己写一个满足自己特别需求的发邮件程序。以上的代码虽然简单,但是肯定还是有很多人不了解注释里提到的邮件头是什么东西,它到底对发出的邮件有什么样的影响。
比如“发送html邮件为什么对方看到的是乱码”等等问题都可能和邮件头相关,如果对smtp协议比较了解的话,可以很快的知道问题所在。
2、MIME规范
如果想要发送html邮件甚至多媒体邮件,一定是需要对MIME有一定了解的,有了这方面的知识你就可以发送内容更加精彩的邮件。
3、PEAR
PEAR并非唯一的发送邮件的工具,但是PEAR包含了Mail、Mail_Mime等等已经封装好了的类,可以让我们的开发事半功倍,并且除了Mail方面的东西以外,它还提供了很多其他方面的现成的工具,非常值得花时间学一学。

『关闭该页』 『打印该页』

  • 上一篇文章:
  • 责任编辑:封情
  • 下一篇文章:
  • 热门文章
    普通文章Windows 2K 微软最成功
    普通文章企业防病毒策略如何做
    普通文章网络安全特警2005评测
    普通文章网吧生存手册:10秒钟
    普通文章资深Linux程序员的开发
    普通文章用组策略限制软件使用
    普通文章浅谈网络监控软件的部
    普通文章入侵检测及网络安全发
    普通文章谈谈针对Linux的病毒起
    普通文章普遍存在的在线安全四
    相关文章
    建立PHP的本地调试环境
    php通用检测函数集(1)
    php通用检测函数集(2)
    php通用检测函数集(3)
    php通用检测函数集(4)
    php通用检测函数集(5)
    使用PHP维护文件系统
    PHP文件上传的具体思路及
    php优化及高效提速问题小
    用php实现qq挂机
    PHPbb2.0.15远程命令执行
    PHP:404错误陷阱并email
    将PHP作为Shell脚本语言
    一个简单的php在线端口扫
    Php高手带路--问题汇总解
    PHP/MySQL三日通-第一天
    PHP/MySQL三日通-第一天
    PHP/MySQL三日通-第二天
    PHP/MySQL三日通-第二天
    PHP/MySQL三日通-第二天
    关于我们 | 加入会员| 投稿方法 | 友情连接 | 网站地图 | 黑营论坛 | 黑营招聘
    加入会员咨询QQ:66647470 合作QQ:197430910 投稿:66647470 mail:85soft#163.com(#改@)
    版权:2003-2008HACK52.COM 集中营宣言普及黑客安全意识!打造顶尖黑客安全资讯网!
    浙ICP备06050453号