zoukankan      html  css  js  c++  java
  • php中发送email

    一、使用PHP内置的mail()函数

    看了一下手册,就直接开始写代码了,如下

    <?php 

    $to = "test@163.com"; //收件人 

    $subject = "Test"; //主题 

    $message = "This is a test mail!"; //正文  

    mail($to,$subject,$message);

    结果就直接报错,如下:

    Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() inD:/www/Zend/email/email.php on line 10

    看来本地需要有SMTP服务器,那就使用别人的试试吧,又改了下代码:

    <?php 

    $to = "test@163.com";//收件人 

    $subject = "Test";//邮件主题 

    $message = "This is a test mail!";//邮件正文 

    ini_set('SMTP','smtp.163.com');//发件SMTP服务器 

    ini_set('smtp_port',25);//发件SMTP服务器端口 

    ini_set('sendmail_from',"admin@163.com");//发件人邮箱  

    mail($to,$subject,$message);

    结果还是错误:

    Warning: mail() [function.mail]: SMTP server response: 553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S2 1301220947 inD:/www/Zend/email/email.php on line 9

     看来是需要验证信息,怎么写验证信息呢?在哪里配置呢?上网找了半天也没找出个所以然,最后看了别人一些技术文章后得出结论(由于对SMTP邮件什么的不 是非常了解,所以也不知道这个结论是否是正确的):使用mail()函数发送邮件就必须要有一台无需SMTP验证就可以发信的邮件服务器。但现在的 SMTP邮件服务器基本上都是需要验证的,所以要想使用它发邮件就只能自己在本地搭一个不需要验证的SMTP服务器。这就比较麻烦了,我是不想整,有兴趣 的同学可以自己试试搭一个,用windows自带的IIS就可以,或者从网上下载其他的SMTP服务器软件,我就不多说。

    结论:使用mail()函数发送邮件,就必须要有一台不需要验证的SMTP服务器。

    这样的话配置工作会多一点,但是使用的时候就比较省事了,几行代码就可以。

     二、使用封装SMTP协议的邮件类

    这种方法就比较常见了,尤其对于广大自己没有服务器,从网上购买虚拟主机的同学,

    第一种方法不现实,所以还是自己使用SMTP协议来发送邮件吧。

    不过要完成这项工作的话,就需要你对SMTP协议有一定的了解,喜欢事必躬亲的同学可以自己动手写一个,喜欢拿来主义的同学就可以从网上下载了,有很多。

    不过我比较推荐使用PEAR扩展中的Mail类,功能强大:可以支持纯文本、HTML格式的邮件;各字段都可设置编码,正确配置不会出现中文乱码情况;可以支持附件等等。

    在服务器可以使用 pear install Mail 命令快速安装,没有足够服务器权限的同学也可以直接下载类的PHP源码包含进来就可以了。

    注:Mail类依赖  Net/SMTP.php  和 Mail/mime.php ,要一块下载,使用时一块包含进来。

    详细安装方法可以在官网查看,http://pear.php.net/package/Mail

    <?php

    // Pear Mail 扩展 

    require_once('Mail.php'); 

    require_once('Mail/mime.php'); 

    require_once('Net/SMTP.php'); 

    $smtpinfo = array(); 

    $smtpinfo["host"] = "smtp.163.com";//SMTP服务器 

    $smtpinfo["port"] = "25"; //SMTP服务器端口 

    $smtpinfo["username"] = "username@163.com"; //发件人邮箱 

    $smtpinfo["password"] = "password";//发件人邮箱密码 

    $smtpinfo["timeout"] = 10;//网络超时时间,秒 

    $smtpinfo["auth"] = true;//登录验证 

    //$smtpinfo["debug"] = true;//调试模式 

    // 收件人列表 

    $mailAddr = array('receiver@163.com'); 

    // 发件人显示信息 

    $from = "Name <username@163.com>"; 

    // 收件人显示信息 

    $to = implode(',',$mailAddr); 

    // 邮件标题 

    $subject = "这是一封测试邮件"; 

    // 邮件正文 

    $content = "<h3>随便写点什么</h3>"; 

    // 邮件正文类型,格式和编码 

    $contentType = "text/html; charset=utf-8"; 

    //换行符号 Linux:    Windows:   

    $crlf = " "; 

    $mime = new Mail_mime($crlf); 

    $mime->setHTMLBody($content); 

    $param['text_charset'] = 'utf-8'; 

    $param['html_charset'] = 'utf-8'; 

    $param['head_charset'] = 'utf-8'; 

    $body = $mime->get($param); 

    $headers = array(); 

    $headers["From"] = $from; 

    $headers["To"] = $to; 

    $headers["Subject"] = $subject; 

    $headers["Content-Type"] = $contentType; 

    $headers = $mime->headers($headers); 

    $smtp =& Mail::factory("smtp", $smtpinfo); 

    $mail = $smtp->send($mailAddr, $headers, $body); 

    $smtp->disconnect(); 

    if (PEAR::isError($mail)) { 

    //发送失败 

    echo 'Email sending failed: ' . $mail->getMessage()." ";  

    else{ 

    //发送成功 

    echo "success! ";  

    }

    如果从网上找的SMTP类都是高度封装的,所以使用起来比上面会更简单,但使用方法都是比较相似的。 

      结论:这种方式发送邮件无需装任何软件,只需要包含进来一个PHP类,然后多写几行配置代码,就可以了。并且网上有很多示例的代码,很多时候只要复制过来然后修改个别的几个参数就可以用了,所以会很方便,推荐使用此方法。

  • 相关阅读:
    我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承(转载)
    我的WCF之旅(4):WCF中的序列化(Serialization) Part I(转载)
    我的WCF之旅(1):创建一个简单的WCF程序(转载)
    我的WCF之旅(3):在WCF中实现双向通信(Bidirectional Communication)(转载)
    我的WCF之旅(2):Endpoint Overview(转载)
    C#中Attribute特性的用法(转载)
    我的WCF之旅(5):Service Contract中的重载(Overloading)(转载)
    我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException的原因和解决方案(转载)
    [转] 81条经典话语~~~当裤子失去皮带,才懂得什麽叫做依赖
    HP大中华区总裁孙振耀退休十五天后九大感言,快毕业或者已经毕业的都来看看,与其浑浑噩噩一辈子,不如花这半小时看看
  • 原文地址:https://www.cnblogs.com/yeyublog/p/5875956.html
Copyright © 2011-2022 走看看