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' => '[email protected]',
        'password' => 'secret'
    );
}

Теперь, как я могу отправить электронное письмо на любую учетную запись электронной почты с «[email protected]»?

Это CakePHP-2.0


person shibly    schedule 27.10.2011    source источник


Ответы (5)


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

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

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

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

person RichardAtHome    schedule 27.10.2011

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

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

Итак, не забывайте об элементе transport.

person Dirk    schedule 10.10.2012

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

<?php
$email = new CakeEmail();
$email->from(array('[email protected]' => 'Your Name'));
$email->to('[email protected]');
$email->subject('Sent from Gmail');
$email->send('My message'); // or use a template etc

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

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

$email->sender('[email protected]', 'MyApp emailer');

person Ross    schedule 27.10.2011

В настоящее время я использую учетную запись 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'=>'[email protected]',
        'password'=>'secret',
    );
    $this->Email->delivery = 'smtp';
    //$this->Email->delivery = 'debug';
    $this->Email->from    = 'Username <[email protected]>';
    $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, '[email protected]', '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
person Tom Rose    schedule 27.10.2011
comment
Это более старый компонент электронной почты. - person shibly; 27.10.2011

Используйте компонент 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'; на 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 и ТЕКСТ. Он читает из обоих представлений электронной почты и добавляет текст для текста. Это причина прокомментировать эти две строки, если вы хотите отправлять электронные письма в формате html.

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

person Vijay Kumbhar    schedule 20.04.2012