课程咨询 :18087159764

保险公司承保达内学员学习效果

  • 达内PHP应用技巧:通过SMTP发送电子邮件

    发布:广州IT培训学校      来源:       时间:2017-05-28


  • 达内PHP培训小编今天和大家来聊聊关于如何玲php发生电子邮件。

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

    “使用php发送mail”最近已经成为继“register_globals”以后本版第二个新手陷阱,今天特地写这篇文章为新手解惑,希望可以为迷茫的人指明方向。

    让我们先从以下这个例子开始说起:

    引用:

    [root@server~/]# telnet localhost 25

    Trying ...

    Connected to localhost.

    Escape character is '^]'.

    220 ESMTP Postfix (2.1.0)

    MAIL FROM:

    250 Ok

    RCPT TO:

    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 ...

    Connected to localhost.

    Escape character is '^]'.

    220 ESMTP Postfix (2.1.0)

    这些东西是系统输出信息,说明已经连接上了,而且这个smtp服务器是postfix做的。

    “MAIL FROM: ”这个命令指明了发件地址是,“250 Ok”说明这条命令被服务器接受并正确执行,这类似http协议的200、404、500等状态代码。接下来的“RCPT TO: ”指明了收件地址是。

    引用:

    DATA

    354 End data with .

    teste

    .

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

    最后使用“QUIT”退出。

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

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

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

    代码:

    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'] = ''; //发信地址

    $headers['To'] = ''; //收信地址

    $headers['Subject'] = 'test mail send by php'; //邮件标题

    $mail_object = &Mailtory('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方面的东西以外,它还提供了很多其他方面的现成的工具,非常值得花时间学一学。

    达内php培训5月班,马上就要开班了,想要学习的小伙伴尽快与我们联系哦!

上一篇:辅助到底怎么玩? 手游常见辅助打法解析

下一篇:PHP编程在WAP开发中的应用

最新开班日期  |  更多

UED设计培训班

UED设计培训班

开班日期:6月28日

C++培训班

C++培训班

开班日期:6月30日

linux培训班

linux培训班

开班日期:6月30日

3D大数据培训班

3D大数据培训班

开班日期:6月30日

  • 地址:广州市天河区天寿路105号天寿大厦四楼
  • 课程培训电话:18087159764     全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2002-2018 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56