CakePHP-2.0: Как я могу отправлять электронную почту из учетной записи Gmail, используя настройки CakEmail и SMTP? - PullRequest
5 голосов
/ 27 октября 2011

Я пытаюсь отправить электронное письмо из учетной записи 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

Ответы [ 5 ]

9 голосов
/ 27 октября 2011

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

Вы можете настроить SMTP-серверы SSL, например 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

3 голосов
/ 10 октября 2012

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

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

Итак, не забудьте про элемент transport .

2 голосов
/ 27 октября 2011

Просто установите 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');

0 голосов
/ 20 апреля 2012

Использовать компонент 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 и TEXT. Он читает из обоих видов электронной почты и добавляет текст для текста. Вот причина, чтобы прокомментировать эти две строки, если вы хотите отправлять html-письма.

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

0 голосов
/ 27 октября 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'=>'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
...