CakePHP-2.0: Как я могу отправить электронную почту из учетной записи gmail, используя настройки CakEmail и SMTP?

Я пытаюсь отправить электронное письмо из учетной записи gmail с помощью настроек CakEmail и SMTP.

Было бы неплохо, если бы кто-то шаг за шагом рассказывал, что делать.

Я добавил следующее в app / Config / email.php =>

<?php class EmailConfig { public $smtp = array( 'host' => 'ssl://smtp.gmail.com', 'port' => 465, 'username' => 'my@gmail.com', 'password' => 'secret' ); } 

Теперь, как я могу отправить электронную почту на любую учетную запись электронной почты с «my@gmail.com»?

Это CakePHP-2.0

Из документов:

Вы можете настроить SSL SMTP-серверы, например, GMail. Для этого поставьте «ssl: //» в префикс в хосте и соответствующим образом настройте значение порта. Пример:

 <?php class EmailConfig { public $gmail = array( 'host' => 'ssl://smtp.gmail.com', 'port' => 465, 'username' => 'my@gmail.com', 'password' => 'secret' ); } 

http://book.cakephp.org/2.0/en/core-utility-libraries/email.html?highlight=cakeemail#CakeEmail

Правильная конфигурация:

 public $gmail = array( 'host' => 'ssl://smtp.gmail.com', 'port' => 465, 'username' => 'my@gmail.com', 'password' => 'secret', 'transport' => 'Smtp' ); 

Поэтому не забывайте транспортный элемент.

Просто установите from :

 <?php $email = new CakeEmail(); $email->from(array('my@gmail.com' => 'Your Name')); $email->to('foo@stackoverflow.com'); $email->subject('Sent from Gmail'); $email->send('My message'); // or use a template etc 

должен это сделать.

Вы также можете установить sender ; Я не 100%, но я думаю, что это будет полезно при отправке электронной почты «из» gmail через ваш собственный сайт; возможно, чтобы остановить отправку электронной почты как спама.

$email->sender('noreply@mydomain.com', 'MyApp emailer');

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

 // app/controllers/users_controller.php function sendemail($subject, $body, $to, $template) { $this->Email->smtpOptions = array( 'port'=>'465', 'timeout'=>'30', 'host' => 'ssl://smtp.gmail.com', 'username'=>'username@domain.com', 'password'=>'secret', ); $this->Email->delivery = 'smtp'; //$this->Email->delivery = 'debug'; $this->Email->from = 'Username <username@Domain.com>'; $this->Email->to = $to; $this->Email->subject = $subject; $this->set('body', $body); $this->set('smtp_errors', $this->Email->smtpError); $this->Email->send($content, $template); } // app/controllers/users_controller.php // Excerpt from new user method in users controller: function add() { // ...other stuff $body['user'] = $user['User']['username']; $this->sendemail('Domain.com New User Signup!', $body, 'destination@Domain.com', 'newuser'); // ...other stuff } // app/views/elements/email/text/newuser.ctp Everyone, Another new user just signed up for Domain. Stats below: User: <?php echo $body['user'] . "\r\r"; ?> Just thought you'd like to know :) -Janet - // app/controllers/users_controller.php function sendemail($subject, $body, $to, $template) { $this->Email->smtpOptions = array( 'port'=>'465', 'timeout'=>'30', 'host' => 'ssl://smtp.gmail.com', 'username'=>'username@domain.com', 'password'=>'secret', ); $this->Email->delivery = 'smtp'; //$this->Email->delivery = 'debug'; $this->Email->from = 'Username <username@Domain.com>'; $this->Email->to = $to; $this->Email->subject = $subject; $this->set('body', $body); $this->set('smtp_errors', $this->Email->smtpError); $this->Email->send($content, $template); } // app/controllers/users_controller.php // Excerpt from new user method in users controller: function add() { // ...other stuff $body['user'] = $user['User']['username']; $this->sendemail('Domain.com New User Signup!', $body, 'destination@Domain.com', 'newuser'); // ...other stuff } // app/views/elements/email/text/newuser.ctp Everyone, Another new user just signed up for Domain. Stats below: User: <?php echo $body['user'] . "\r\r"; ?> Just thought you'd like to know :) -Janet 

Используйте компонент Swiftmailer; это самый простой компонент для использования.

http://bakery.cakephp.org/articles/mhuggins/2008/06/11/improved-swiftmailer-component

Есть некоторые изменения, которые вам нужно сделать, используя это с CakePHP 2.0 и далее. CakePHP 2.0 предоставляет каталог представлений «Электронная почта», который используется для хранения всех шаблонов электронной почты.

Изменения в компоненте:

  1. Измените все объявления var на public
  2. Изменить public $layout = 'Emails'; to public $viewPath = '/Emails';

  3. Измените путь рендеринга в _getBodyText :

$body = $this->controller->render($this->viewPath . DS . 'text' . DS . $view, $this->layout . DS . 'text'.DS.'default');

  1. Измените путь рендеринга в _getBodyHtml :

$body = $this->controller->render($this->viewPath . DS . 'html' . DS . $view, $this->layout . DS . 'html'.DS.'default');

  1. Прокомментируйте строки:

$bodyText = $this->_getBodyText($view); $message->setBody($bodyText, "text/plain");

Компонент Swiftmailer отправляет пустое электронное письмо, если вы устанавливаете как HTML & TEXT активным. Он читает и из представлений электронной почты, и добавляет тело для текста. Вот почему прокомментировать эти две строки, если вы хотите отправить html-письма.

Вторая причина заключается в том, что если оба активированы и у вас есть контент в email.html.ctp и email.text.ctp , он создает проблему с заголовком, поскольку только текстовый формат отображается в сообщениях электронной почты (на самом деле оба формата присутствуют в заголовке, но он подавляет часть html и показывает текстовую часть).