Я пытаюсь отправить электронное письмо из учетной записи 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 предоставляет каталог представлений «Электронная почта», который используется для хранения всех шаблонов электронной почты.
Изменения в компоненте:
var
на public
Изменить public $layout = 'Emails';
to public $viewPath = '/Emails';
Измените путь рендеринга в _getBodyText
:
$body = $this->controller->render($this->viewPath . DS . 'text' . DS . $view, $this->layout . DS . 'text'.DS.'default');
_getBodyHtml
: $body = $this->controller->render($this->viewPath . DS . 'html' . DS . $view, $this->layout . DS . 'html'.DS.'default');
$bodyText = $this->_getBodyText($view); $message->setBody($bodyText, "text/plain");
Компонент Swiftmailer отправляет пустое электронное письмо, если вы устанавливаете как HTML & TEXT активным. Он читает и из представлений электронной почты, и добавляет тело для текста. Вот почему прокомментировать эти две строки, если вы хотите отправить html-письма.
Вторая причина заключается в том, что если оба активированы и у вас есть контент в email.html.ctp
и email.text.ctp
, он создает проблему с заголовком, поскольку только текстовый формат отображается в сообщениях электронной почты (на самом деле оба формата присутствуют в заголовке, но он подавляет часть html и показывает текстовую часть).