代码之家  ›  专栏  ›  技术社区  ›  Asur

PHPMailer适用于CakeEmail不具有相同配置的情况

  •  1
  • Asur  · 技术社区  · 9 年前

    我有以下问题,正如你可能在标题中想象的那样,我有一个带有联系人表单的CakePHP v2.5.6应用程序,每次提交它时都会给我一个身份验证错误,这让我感到惊讶,在使用PHPMailer尝试了一个简单的测试后,它显然可以完美地使用相同的配置。

    CakePHP配置(app/Config/email.php)

    <?php
    
    class EmailConfig {
    
    public $info = array(
        'transport' => 'Smtp',
        'host' => 'smtp.foo.com',
        'port' => 25,
        'username' => 'username',
        'password' => 'password'
        );
    }   
    

    CakePHP发送方代码

    CakeEmail::deliver('foo@foo.es', 'Subject', 'Test', 'info');  
    

    CakePHP错误报告

    enter image description here

    PHPMailer测试脚本

    <?php
    require './PHPMailer/PHPMailerAutoload.php';
    
    $mail = new PHPMailer;
    
    //$mail->SMTPDebug = 3;                               
    
    $mail->isSMTP();                                     
    $mail->Host = 'smtp.foo.com';  
    $mail->SMTPAuth = true;                              
    $mail->Username = 'username';               
    $mail->Password = 'password';                           
    $mail->Port = 25;                                   
    
    $mail->setFrom('info@example.es', 'Mailer');
    $mail->addAddress('foo@foo.es', 'Mr. foo');                  
    $mail->addReplyTo('info@example.es', 'Information');
    
    $mail->isHTML(true);                                  // Set email format to HTML
    
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    
    if(!$mail->send()) {
        echo 'Message could not be sent.';
        echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
        echo 'Message has been sent';
    }  
    

    所以我的问题是,配置之间是否真的存在差异,或者我遗漏了什么?为什么PHPMailer工作而CakeEmail不工作?
    提前感谢:)

    1 回复  |  直到 9 年前
        1
  •  1
  •   Asur    9 年前

    我找到了一个看起来很伪的解决方案,但调试信息对错误原因并不完全准确。
    这是缺失的,PHPMailer和CakeEmail的不同之处在于 from config字段。

    来自配置的PHPMailer

    $mail->setFrom('info@example.es', 'Mailer');  
    

    正如您可能注意到的那样,CakeEmail配置文件缺少该字段,因此只需添加它,错误就会消失。

    最终的CakeEmail配置文件应如下所示:

    <?php
    
    class EmailConfig {
    
    public $info = array(
        'transport' => 'Smtp',
        'host' => 'smtp.foo.com',
        'port' => 25,
        'username' => 'username',
        'password' => 'password',
        'from' => 'info@example.es'
        );
    }   
    

    我希望这对某人有所帮助:)