2013-07-16 3 views
0

Я пытаюсь заставить CakeEmail работать, и я получаю сообщение «Не удалось отправить электронную почту» Внутренняя ошибка.cakephp 2 CakeEmail Не удалось отправить сообщение об ошибке

В последней строке трассировки стека является

CORE/Cake/Network/Email/MailTransport.php line 47 -> MailTransport->_mail(string,string,string,string,null) 

В моей email.php конфигурации у меня есть

class EmailConfig { 

    public $default = array(
     'transport' => 'Mail', 
     'from' => '[email protected]' 
     ); 
} 

Я получаю свой адрес электронной почты из формы и пытаюсь отправить по электронной почте подписчика. Мой код выглядит следующим образом

$email_addr = $subs_data['Subscriber']['subscriber']; 

$Email = new CakeEmail('default'); 

$Email->emailFormat('html') 
     ->template('welcome') 
     ->to($email_addr) 
     ->subject('New Subscription') 
     ->send(); 

Я сделал некоторые тесты и значение в $ EMAIL_ADDR именно то, что исходит от формы и действительный адрес электронной почты.

У меня есть шаблон в Список/Письма/html/welcome.ctp, что на данный момент это просто очень простой сообщение

Глядя на трассировку стека и линии 47 в MailTransport.php Я нашел ошибку, как представляется, быть связанным с адресом «по». Я не могу понять, что с ним не так. Я просмотрел множество примеров, и, насколько я могу судить, я не делаю ничего плохого.

Буду признателен за любую помощь, чтобы я мог получить это приложение.

С наилучшими пожеланиями

Richard

+0

Что выводит? пр ($ EMAIL_ADDR); –

+0

Загрузили ли вы библиотеку электронной почты в контроллер или AppController /? App :: uses ('CakeEmail', 'Network/Email'); – Fury

ответ

1

Вы должны добавить больше конфигурации в EmailConfig.

Посмотрите на мой код:

class EmailConfig {  
    public $fast = array( 
     'transport' => 'Smtp',  
     'from' => array('[email protected]' => 'Test Mail name sender'),  
     'host' => 'ssl://smtp.gmail.com',  
     'port' => 465,  
     'username' => '[email protected]',  
     'password' => 'password');  
} 

И в контроллере:

CakeEmail::deliver('[email protected]', 'Subject', 'Content'); 

Вот оно!

+0

Всегда вы можете отбрасывать «из» из переменной $ fast и добавлять в CakeEmail :: доставлять в 4-м параметре, так как массив – kicaj

+0

Вам не нужен SMTP.Но - в большинстве случаев - рекомендуется использовать его. Обычная среда PHP вокруг 'mail()' может быть неправильно настроена. Это будет работать во всех случаях. Я отвечу на этот ответ. – mark

+0

Моя почтовая среда PHP работает нормально, и я могу отправить почту из командной строки в простой скрипт PHP. Я не хочу или должен использовать smtp. Поэтому мне не нужны дополнительные элементы в конфиге. – rickl

0

Попробуйте со следующей конфигурацией в email.php

public $default = array(
    'transport' => 'Mail', 
    'from' => '[email protected]', 
    'charset' => 'utf-8', 
    'headerCharset' => 'utf-8' 
); 
0

ли вы загрузить библиотеку электронной почты в контроллер или AppController /?

App::uses('CakeEmail', 'Network/Email'); 

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

public $smtp = array(

       'transport' => 'Smtp', 
     'from' => array('[email protected]' => 'Company name'), 
     'host' => 'mail.test.com', 
     'port' => 25, 
     'timeout' => 30, 
     'username' => 'email', 
     'password' => 'password', 
     'client' => null, 
     'log' => false, 

    ); 


и для набора шаблон взгляд на мой ответ here:

Email template not using themed version

+0

Если сообщение отображается, класс загружается –

Смежные вопросы