При отправке электронной почты SMTP в CakePHP тема не указывается - PullRequest
0 голосов
/ 25 октября 2011

После того, как я переключил свое приложение CakePHP на использование SMTP для отправки электронной почты (с использованием компонента электронной почты), все отправленные письма теперь не имеют темы.

У них всегда была тема раньше, а все остальное теперь работает простобез темы.Я связался со службой поддержки сервера smtp, который я использую (SendGrid), и они заверили меня, что заголовки тем не включены в электронные письма.

CakePHP использует функцию _mail() по умолчанию или функцию _smtp(), когдаиспользуя smpt .

Я просмотрел код и вижу, где функция _mail использует тему, однако я не вижу _smtp или _smtpSend с использованием $this->subjectв любом месте.Я что-то упускаю?

Что мне нужно сделать, чтобы заставить предмет работать?


Обновление добавление кода :

Вот как я отправляю электронное письмо с моего контроллера:

$this->Email->to = $data['Order']['user_email'];
$this->Email->subject = 'Your Order Has Shipped';
$this->Email->template = 'order_shipped';
$this->Email->layout = 'sussex';
$this->Email->sendAs = 'html';

$this->Email->send();

Компонент Email является стандартным компонентом Cake 1.3 Email. Я добавил этот код в начало функции send():

$this->smtpOptions = array(
  'port'=>'587', 
  'timeout'=>'30',
  'host' => 'smtp.sendgrid.net',
  'username'=>'my_user',
  'password'=>'*******',
  'client' => 'www.example.com'
);
$this->delivery = 'smtp';

Ответы [ 3 ]

1 голос
/ 25 октября 2011

В приведенном выше коде, который вы упомянули, вы используете в методе отправки компонентов электронной почты, должен использовать перед вызовом $ this -> __ createHeader () ;. Так как для доставки по SMTP субъект устанавливается в методе __createHeader, это необходимо поставить $this->delivery = 'smtp'; перед вызовом __createHeader.

0 голосов
/ 22 июля 2018

Я также столкнулся с той же проблемой после расследования, я обнаружил, что php mbstring не установлен на сервере.После установки PHP Mbstring проблема решена, и я получаю тему в письмах.

Поскольку Cakephp использовал эту библиотеку для обработки строк, ему нужна эта библиотека.

 yum install php-mbstring 
0 голосов
/ 25 октября 2011

Я уже использовал компонент электронной почты с smtp (используя gmail), и он отлично работает, он устанавливает тему и все правильно.

Я использовал его следующим образом:

    $this->Email->reset();
    $this->Email->smtpOptions = $options;
    $this->Email->delivery = 'smtp';
    $this->Email->from = $from;
    $this->Email->to = $to;
    $this->Email->subject = $tittle;
    if ( $this->Email->send($message) ) {
        return true;
    } else {
        return false;
    }

и$ options is

    $options = array(
        'port'=>'465',
        'timeout'=>'30',
        'host'=>'ssl://smtp.gmail.com',
        'username'=>'yourAccount@gmail.com',
        'password'=>'yourPassword'
    );

Кроме того, функция _smtp использует createHeader , который использует тему.

Что может быть неправильным, объясняющим это поведение.У вас могут быть проблемы с кодировкой. Используете ли вы нормальные символы в вашей теме?некоторые функции в торт умирают, не выходя из них или что-то (у меня обычно есть испанский текст, так что я знаю из первых рук).Вы можете вставить var_dump, где он создает заголовок, чтобы увидеть, как он это делает ...

Надеюсь, это поможет вам, если не оставить комментарий:)

...