找回密码
 注册
【阿里云】2核2G云新老同享 99元/年,续费同价华为云精选云产品特惠做网站就用糖果主机Jtti,新加坡服务器,美国服务器,香港服务器
查看: 691|回复: 1

使用php通过smtp发送邮件新手指南

[复制链接]
发表于 2005 年 10 月 8 日 15:42:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
  由于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文档,偷懒,直接用现成的。首先是使用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。 引用ATA 354 End data with . teste .这一段是输入邮件正文,输入“DATA”以
后系统提示使用“.”来结束输入,正文内容是“teste”。 最后使用“QUIT”退出。 以上就是最简单的一次发送mail的过程,
从这个例子我们可以看出,发送mail其实是很简单的事情,实质上也就是建立一个对smtp服务器的连接,然后发送一些简单的命
令给它,一封内容简单的邮件就发送出去了,至于更加复杂内容的邮件或者操作,其实也就是在此基础上稍加扩展而已。 把这个
过程用php来实现,其实就是利用php的Socket functions、Network Functions等等操作socket的函数来和smtp服务器建立一个连
接,然后发送文本的命令给服务器,如果你亲自去看看那些写好的利用smtp协议发送邮件的类或者函数,相信可以印证我的说
法。 由于已经存在很多现成的封装得很好的类或者函数替我们完成底层的socket级操作,我们只需要直接拿来用就好,而我也不
会费时费神的在本文里去讨论底层的代码,有精神去研究的话,自己找代码来研究吧。现在继续跟我走,我们来点实际的代码来
说明如何使用php发送邮件,采用的类是PEAR::Mail。 代码: '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 = 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方面的东西以外,它还提供了很多其他方面的现成的工具,非常值得
花时间学一学。


转自:  http://edu.chinaz.com
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
 楼主| 发表于 2005 年 10 月 8 日 15:42:20 | 显示全部楼层
【腾讯云】2核2G云服务器新老同享 99元/年,续费同价

使用php通过smtp发送邮件新手指南

  由于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文档,偷懒,直接用现成的。首先是使用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。 引用ATA 354 End data with . teste .这一段是输入邮件正文,输入“DATA”以
后系统提示使用“.”来结束输入,正文内容是“teste”。 最后使用“QUIT”退出。 以上就是最简单的一次发送mail的过程,
从这个例子我们可以看出,发送mail其实是很简单的事情,实质上也就是建立一个对smtp服务器的连接,然后发送一些简单的命
令给它,一封内容简单的邮件就发送出去了,至于更加复杂内容的邮件或者操作,其实也就是在此基础上稍加扩展而已。 把这个
过程用php来实现,其实就是利用php的Socket functions、Network Functions等等操作socket的函数来和smtp服务器建立一个连
接,然后发送文本的命令给服务器,如果你亲自去看看那些写好的利用smtp协议发送邮件的类或者函数,相信可以印证我的说
法。 由于已经存在很多现成的封装得很好的类或者函数替我们完成底层的socket级操作,我们只需要直接拿来用就好,而我也不
会费时费神的在本文里去讨论底层的代码,有精神去研究的话,自己找代码来研究吧。现在继续跟我走,我们来点实际的代码来
说明如何使用php发送邮件,采用的类是PEAR::Mail。 代码: '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 = 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方面的东西以外,它还提供了很多其他方面的现成的工具,非常值得
花时间学一学。


转自:  http://edu.chinaz.com
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|金光论坛

GMT+8, 2024 年 11 月 20 日 06:22 , Processed in 0.023110 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表