PHPMailer работает там, где CakeEmail не работает с той же конфигурацией

У меня есть следующая проблема, как вы могли догадаться по заголовку. У меня есть приложение 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('[email protected]', 'Subject', 'Test', 'info');  

Отчет об ошибках CakePHP

введите здесь описание изображения

Тестовый сценарий 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('[email protected]', 'Mailer');
$mail->addAddress('[email protected]', 'Mr. foo');                  
$mail->addReplyTo('[email protected]', '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 нет?
Заранее спасибо :)


person Asur    schedule 24.02.2016    source источник
comment
Вы уверены, что ваш сервер разрешает незашифрованную аутентификацию? PHPMailer использует оппортунистический TLS, который может работать здесь — установите SMTPDebug = 2, и вы увидите.   -  person Synchro    schedule 24.02.2016
comment
@Synchro Да, для этого требуется базовая аутентификация, на самом деле я попросил администратора сервера указать нужную мне конфигурацию, и они настояли на этом.   -  person Asur    schedule 24.02.2016
comment
@Synchro Часть аутентификации отладки выглядит нормально для меня ... 2016-02-24 11:07:15 SERVER -> CLIENT: 235 2.7.0 Authentication successful   -  person Asur    schedule 24.02.2016
comment
Хорошо, так что это не автоматический TLS заставляет его работать - я думаю, вам нужно получить Cake, чтобы дать вам больше отладочного вывода. Кстати, эти случайные строки легко декодируются в настоящий пароль, поэтому я предлагаю вам отредактировать их.   -  person Synchro    schedule 24.02.2016
comment
@Synchro Спасибо за совет! Я думаю, что нашел причину ошибки, хотя отладка не была полностью точной в отношении причины...   -  person Asur    schedule 24.02.2016


Ответы (1)


Я нашел решение, которое кажется довольно фиктивным, но отладочная информация не была полностью точной в отношении причины ошибки.
Эта вещь отсутствует, а отличие PHPMailer и CakeEmail находится в поле конфигурации from.

PHPMailer из конфигурации

$mail->setFrom('[email protected]', 'Mailer');  

Как вы могли заметить, в конфигурационном файле CakeEmail этого поля нет, поэтому просто добавив его, ошибка исчезнет.

Окончательный файл конфигурации CakeEmail должен выглядеть так:

<?php

class EmailConfig {

public $info = array(
    'transport' => 'Smtp',
    'host' => 'smtp.foo.com',
    'port' => 25,
    'username' => 'username',
    'password' => 'password',
    'from' => '[email protected]'
    );
}   

Я надеюсь, что это помогает кому-то :)

person Asur    schedule 24.02.2016