一,没有定义发送邮箱$mail->From或格式不正确,错误提示:Language string failed to load: recipients_failed test@test.com,注意,这个配置一定要正确,而且是正确的邮箱

二,没有定义邮件服务主机$mail->Host或连接失败,错误提示:Language string failed to load: connect_host

三,没有定义发送邮箱$mail->AddAddress或邮箱格式不正确,错误提示:Language string failed to load: provide_address

四,没有定义邮箱发送用户名$mail->Username,错误提示:Language string failed to load: connect_host

五,没有定义邮箱发送密码$mail->Password,错误提示:Language string failed to load: connect_host,这类错误非常明显,一般都是邮箱服务器配置不正确不能边接。

六,邮件正文编码,如果发送HTML邮件,需要定义正确的编码格式和字符,发送GBK邮件如下:
$mail->IsHTML ( true ); 是否支持HTML邮件
$mail->CharSet = “GB2312”; 字符设置
$mail->Encoding = “base64”; 编码方式
配置后可直接发送HTML邮件,如下:

<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
<title>PHPMailer邮件测试</title>
</head>
<body>
<div>PHPMailer邮件类使用错误分析</div>
</body>
</html>
七,学会正确使用错误提示$mail->ErrorInfo查看邮件错误,可直接查找问题。

使用PHPMailer邮件类发送邮件使用非常简单,基本配置如上所示,在使用过程中正确了解错误提示,并及时了解错误原因,对于正确使用PHPMailer邮件类来说非常重要。

==========================================================================


这几天做mail群发,碰到不少问题。一些常见的错误网上很多但没有答案,靠自己不断的尝试终于OK了~这里把几个常见的问题列出来做为工作笔记!
     要做发送邮件功能,首先要明白邮件收发的原理,引用网友一段话比较容易懂:

Java代码
在Internet上将一段文本信息从一台计算机传送到另一台计算机上,可通过两种协议来完成,即SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)和POP3(Post Office Protocol,邮局协议3)。SMTP是Internet协议集中的邮件标准。在Internet上能够接收电子邮件的服务器都有SMTP。电子邮件在发送前,发件方的SMTP服务器与接收方的SMTP服务器联系,确认接收方准备好了,则开始邮件传递;若没有准备好,发送服务器便会等待,并在一段时间后继续与接收方邮件服务器联系。这种方式在Internet上称为“存储——转发”方式。POP3可允许E-mail客户向某一SMTP服务器发送电子邮件,另外,也可以接收来自SMTP服务器的电子邮件。换句话说,电子邮件在客户PC机与服务提供商之间的传递是通过P0P3来完成的,而电子邮件在 Internet上的传递则是通过SMTP来实现。  
在Internet上将一段文本信息从一台计算机传送到另一台计算机上,可通过两种协议来完成,即SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)和POP3(Post Office Protocol,邮局协议3)。SMTP是Internet协议集中的邮件标准。在Internet上能够接收电子邮件的服务器都有SMTP。电子邮件在发送前,发件方的SMTP服务器与接收方的SMTP服务器联系,确认接收方准备好了,则开始邮件传递;若没有准备好,发送服务器便会等待,并在一段时间后继续与接收方邮件服务器联系。这种方式在Internet上称为“存储——转发”方式。POP3可允许E-mail客户向某一SMTP服务器发送电子邮件,另外,也可以接收来自SMTP服务器的电子邮件。换句话说,电子邮件在客户PC机与服务提供商之间的传递是通过P0P3来完成的,而电子邮件在 Internet上的传递则是通过SMTP来实现。

  如果觉得不够清楚的话,则引用网上的一张图来解释吧:
 
  有关phpmailer的介绍可以参考官网:http://phpmailer.codeworxtech.com/
  常见异常:
  1.SMTP Error: Could not authenticate.
   这个是因为smtp验证没通过,就是smtp server 的用户名和密码不正确了
   

Php代码
$mail->Username   = “smtp@163.com“;     // SMTP server username   
t;Password   = “******”;     
         $mail->Username   = “smtp@163.com“;     // SMTP server username
 $mail->Password   = “******”; 
   
    2.Could not execute: /usr/sbin/sendmail
    这是因为
   

Java代码
$mail->IsSendmail();  // tell the class to use Sendmail    
      $mail->IsSendmail();  // tell the class to use Sendmail
   
   去掉上面的代码就ok了!

3.关于phpmailer发送邮件产生中文乱码问题
  环境一:在普通环境,即标题内容等含中文的内容是在脚本中加上去的,或从文本中获取的,只需要进行如下操作(网上有很多):
   修改class.phpmailer.php中的EncodeHeader函数,改为:

Php代码
public function EncodeHeader($str, $position = ‘text’, $pl = 0) {   
   $x = 0;   
   if ($pl){return “=?”.$this->CharSet.”?B?”.base64_encode($str).”?=”;}   
 public function EncodeHeader($str, $position = ‘text’, $pl = 0) {
    $x = 0;
    if ($pl){return “=?”.$this->CharSet.”?B?”.base64_encode($str).”?=”;}

再改下使用这个函数的一段:

Php代码
if($this->Mailer != ‘mail’) {   
      $result .= $this->HeaderLine(‘Subject’, $this->EncodeHeader($this->SecureHeader($this->Subject),’text’,1));   
    }  
if($this->Mailer != ‘mail’) {
      $result .= $this->HeaderLine(‘Subject’, $this->EncodeHeader($this->SecureHeader($this->Subject),’text’,1));
    }
   当然编码设置也不能少了:

Php代码
$mail->CharSet=”utf-8″;    
       $mail->Encoding = “base64”;  
 $mail->CharSet=”utf-8″;
        $mail->Encoding = “base64”;
环境二:从excel中提取内容然后再发送excel中的内容给用户,这个折腾了我好久。最终找到解决办法了。最关键的地方是:excel中的编码是html格式的unicode,所以得使用下面这个函数将其转化为utf8,这个帖子的最后回复的人帮了我,谢谢他!帖子地址是:http://www.phpchina.com/bbs/viewthread.php?tid=111554

Php代码
private function uc2html($str)   
  {   
    $ret = ”;   
    for( $i=0; $i<strlen($str)/2; $i++ )   
    {   
        $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);   
        $ret .= ‘&#’.$charcode.’;’;   
     }   
    return mb_convert_encoding($ret,’UTF-8′,’HTML-ENTITIES’);   
  }   
    
private function uc2html($str)
  {
    $ret = ”;
    for( $i=0; $i<strlen($str)/2; $i++ )
    {
        $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
        $ret .= ‘&#’.$charcode.’;’;
     }
    return mb_convert_encoding($ret,’UTF-8′,’HTML-ENTITIES’);
  }
 

下面贴段测试代码:
  

Php代码
<?php   
/**  
* Simple example script using PHPMailer with exceptions enabled  
* @package phpmailer  
* @version $Id$  
*/  
  
require ‘../class.phpmailer.php’;   
  
try {   
    $mail = new PHPMailer(true); //New instance, with exceptions enabled   
  
    $body             = file_get_contents(‘contents.html’);   
    $body             = preg_replace(‘//’,”, $body); //Strip backslashes   
  
    $mail->IsSMTP();                           // tell the class to use SMTP   
    $mail->SMTPAuth   = true;                  // enable SMTP authentication   
    $mail->Port       = 25;                // set the SMTP server port   
    $mail->Host       = “smtp.xxxx.com”; // SMTP server   
    $mail->Username   = “xxx@xxx.com“;     // SMTP server username   
    $mail->Password   = “xxxx”;            // SMTP server password   
  
    $mail->IsSendmail();  // tell the class to use Sendmail   
  
    $mail->AddReplyTo(“xxx@sina.com”,”xxxx“);   
  
    $mail->From       = “xxxx@m6699.com“;   
    $mail->FromName   = “DJB”;   
  
    $to = “xxx@sina.com“;   
  
    $mail->AddAddress($to);   
  
    $mail->Subject  = “First PHPMailer Message”;   
  
    $mail->AltBody    = “To view the message, please use an HTML compatible email viewer!”; // optional, comment out and test   
    $mail->WordWrap   = 80; // set word wrap   
  
    $mail->MsgHTML($body);   
  
    $mail->IsHTML(true); // send as HTML   
  
    $mail->Send();   
    echo ‘Message has been sent.’;   
} catch (phpmailerException $e) {   
    echo $e->errorMessage();   
}   
?>   
     
<?php
/**
* Simple example script using PHPMailer with exceptions enabled
* @package phpmailer
* @version $Id$
*/

require ‘../class.phpmailer.php’;

try {
 $mail = new PHPMailer(true); //New instance, with exceptions enabled

 $body             = file_get_contents(‘contents.html’);
 $body             = preg_replace(‘//’,”, $body); //Strip backslashes

 $mail->IsSMTP();                           // tell the class to use SMTP
 $mail->SMTPAuth   = true;                  // enable SMTP authentication
 $mail->Port       = 25;                // set the SMTP server port
 $mail->Host       = “smtp.xxxx.com”; // SMTP server
 $mail->Username   = “xxx@xxx.com“;     // SMTP server username
 $mail->Password   = “xxxx”;            // SMTP server password

 $mail->IsSendmail();  // tell the class to use Sendmail

 $mail->AddReplyTo(“xxx@sina.com”,”xxxx“);

 $mail->From       = “xxxx@m6699.com“;
 $mail->FromName   = “DJB”;

 $to = “xxx@sina.com“;

 $mail->AddAddress($to);

 $mail->Subject  = “First PHPMailer Message”;

 $mail->AltBody    = “To view the message, please use an HTML compatible email viewer!”; // optional, comment out and test
 $mail->WordWrap   = 80; // set word wrap

 $mail->MsgHTML($body);

 $mail->IsHTML(true); // send as HTML

 $mail->Send();
 echo ‘Message has been sent.’;
} catch (phpmailerException $e) {
 echo $e->errorMessage();
}
?>
  

再给一个网上的操作excel的类,返回结果是一个数组。非常方便!用到的组件是PHP ExcelParser Pro v.4.2

Php代码
<?php   
/**  
 * CopyRight (c) 2009,  
 * All rights reserved.  
 * 文件名:excel数据获取  
 * 摘  要:  
 *  
 * @author 星期八 [email=ixqbar@hotmail.com]ixqbar@hotmail.com[/email]  
 * @version 0.1  
 */  
  
class ExcelParser   
{   
    private $_data=array(0,”);   
    private $_excel_handle;   
    private $_excel=array();   
    /**  
     * 构造函数  
     * @param <string> $filename 上传文件临时文件名称  
     */  
    public function __construct($filename)   
    {   
        /**  
         * 引入excelparser类  
         * 普通方法为  
         * requires 路径.’excelparser.php’;  
         * import为ThinkPHP自带导入类方法  
         */  
         require(“excelparser.php”);   
        $this->_excel_handle=new ExcelFileParser();   
        //错误获取   
        $this->checkErrors($filename);   
    }   
    /**  
     * 错误校验  
     */  
    private function checkErrors($filename)   
    {   
        /**  
         * 方法一  
         */  
        $error_code=$this->_excel_handle->ParseFromFile($filename);   
        /**  
         * 方法二  
         * $file_handle = fopen($this->_filename,’rb’);  
         * $content = fread($file_handle,filesize($this->_filename));  
         * fclose($file_handle);  
         * $error_code = $this->_excel->ParseFromString($content);  
         * unset($content,$file_handle);  
         */  
        switch($error_code)   
        {   
            case 0:   
                //无错误不处理   
                break;   
            case 1:   
                $this->_data=array(1,’文件读取错误(Linux注意读写权限)’);   
                break;   
            case 2:   
                $this->_data=array(1,’文件太小’);   
                break;   
            case 3:   
                $this->_data=array(1,’读取Excel表头失败’);   
                break;   
            case 4:   
                $this->_data=array(1,’文件读取错误’);   
                break;   
            case 5:   
                $this->_data=array(1,’文件可能为空’);   
                break;   
            case 6:   
                $this->_data=array(1,’文件不完整’);   
                break;   
            case 7:   
                $this->_data=array(1,’读取数据错误’);   
                break;   
            case 8:   
                $this->_data=array(1,’版本错误’);   
                break;   
        }   
        unset($error_code);   
    }   
    /**  
     * Excel信息获取  
     */  
    private function getExcelInfo()   
    {   
        if(1==$this->_data[0])return;   
        /**  
         * 获得sheet数量  
         * 获得sheet单元对应的行和列  
         */  
        $this->_excel[‘sheet_number’]=count($this->_excel_handle->worksheet[‘name’]);   
        for($i=0;$i<$this->_excel[‘sheet_number’];$i++)   
        {   
            /**  
             * 行于列  
             * 注意:从0开始计数  
             */  
            $row=$this->_excel_handle->worksheet[‘data’][$i][‘max_row’];   
            $col=$this->_excel_handle->worksheet[‘data’][$i][‘max_col’];   
            $this->_excel[‘row_number’][$i]=($row==NULL)?0:++$row;   
            $this->_excel[‘col_number’][$i]=($col==NULL)?0:++$col;   
            unset($row,$col);   
        }   
    }   
    /**  
     * 中文处理函数  
     * @return <string>  
     */  
  private function uc2html($str)   
  {   
    $ret = ”;   
    for( $i=0; $i<strlen($str)/2; $i++ )   
    {   
        $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);   
        $ret .= ‘&#’.$charcode.’;’;   
     }   
    return mb_convert_encoding($ret,’UTF-8′,’HTML-ENTITIES’);   
   }   
    /**  
     * Excel数据获取  
     */  
    private function getExcelData()   
    {   
        if(1==$this->_data[0])return;   
  
        //修改标记   
        $this->_data[0]=1;   
        //获取数据   
        for($i=0;$i<$this->_excel[‘sheet_number’];$i++)   
        {   
            /**  
             * 对行循环  
             */  
            for($j=0;$j<$this->_excel[‘row_number’][$i];$j++)   
            {   
                /**  
                 * 对列循环  
                 */  
                for($k=0;$k<$this->_excel[‘col_number’][$i];$k++)   
                {   
                    /**  
                     * array(4) {  
                     *   [“type”]   => 类型 [0字符类型1整数2浮点数3日期]  
                     *   [“font”]   => 字体  
                     *   [“data”]   => 数据  
                     *   …  
                     * }  
                     */  
                    $data=$this->_excel_handle->worksheet[‘data’][$i][‘cell’][$j][$k];   
                    switch($data[‘type’])   
                    {   
                        case 0:   
                            //字符类型   
                            if($this->_excel_handle->sst[‘unicode’][$data[‘data’]])   
                            {   
                                //中文处理   
                                $data[‘data’] = $this->uc2html($this->_excel_handle->sst[‘data’][$data[‘data’]]);   
                            }   
                            else  
                            {   
                                $data[‘data’] = $this->_excel_handle->sst[‘data’][$data[‘data’]];   
                            }   
                            break;   
                        case 1:   
                            //整数   
                            //TODO   
                            break;   
                        case 2:   
                            //浮点数   
                            //TODO   
                            break;   
                        case 3:   
                            //日期   
                            //TODO   
                            break;   
                    }   
                    $this->_data[1][$i][$j][$k]=$data[‘data’];   
                    unset($data);   
                }   
            }   
        }   
    }   
    /**  
     * 主函数  
     * @return <array> array(标识符,内容s)  
     */  
    public function main()   
    {   
        //Excel信息获取   
        $this->getExcelInfo();   
        //Excel数据获取   
        $this->getExcelData();   
        return $this->_data;   
    }   
}  


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/binger819623/archive/2009/06/25/4294236.aspx

Comments are closed.

Post Navigation