июля
15

Отправка email с помощью CakePHP

Author admin    Category CakePHP     Tags ,

Отправка email с помощью CakePHP
Создание и отправка email сообщений может пригодится в различных ситуациях, начиная от регистрации пользователей и заканчивая реализацией личных сообщений между юзерами.

В CakePHP есть удобный и простой компонент для создания подобного функционала.

Подключение Email компонента

Первое, что нужно сделать – это подключить в контроллере нужный нам компонент Email.

1
var $components = array('Email');

Параметры

Затем в нужном месте задаем параметры для отправки электронного письма:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$this->Email->charset       = 'utf-8'; // кодировка
$this->Email->to            = $this->data['User']['email']; // адресат - кому отправляем письмо
$this->Email->сс          = 'newuser@yourdomain.ru'; // копии письма
$this->Email->bсс         = 'robot@yourdomain.ru'; // скрытые копии письма
$this->Email->replyTo       = 'admin@yourdomain.ru'; // email, на который можно ответить
$this->Email->return        = 'admin@yourdomain'; // адрес, на который будут приходить ошибки отправки, в случае их возникновения
$this->Email->from          = 'Администрация сайта <admin@yourdomain>'; // от кого письмо
$this->Email->subject       = 'Добро пожаловать на наш сайт'; // тема письма
$this->Email->template      = 'registration_template'; // шаблон письма
$this->Email->sendAs        = 'html'; // в каком формате отсылать письмо (text, html или both)
$this->Email->filePaths     = array('/home/username/'); // папка с файлами, которые хотите присоединить к письму
$this->Email->attachments   = array('foto.jpg'); // массив с файлами для отправки
$this->Email->delivery      = mail; // способ отправки (mail, smtp или debug)
$this->Email->smtpOptions   = array(
                        'port' => '25',
                        'timeout' => '30',
                        'host' => 'your.smtp.server',
                        'username' => 'your_smtp_username',
                        'password' => 'your_smtp_password',
                        'client' => 'smtp_helo_hostname'
                    ); // если выбран способ отправки SMTP, то необходимо задать параметры отправки в виде ассоциативного массива

Естественно, что указывать нужно не всё, а только нужное.

Отправка письма

После того, как все параметры заданы, отправляем письмо:

1
$this->Email->send();

Шаблоны письма

Если вы хотите использовать в письме html-тэги, чтобы сделать его более выразительным и функциональным (например, вставить тэги ссылок, заголовков, абзацы), то необходимо создать файлы шаблонов в структуре папок вашего проекта CakePHP.

Для начала, создаём layout для наших email сообщений. Добавим в папку app/views/layouts следующие подпапки и файлы:

1
2
3
4
5
    email/
        html/
            default.ctp
        text/
            default.ctp

Файл email/html/default.ctp должен иметь следующее содержание:

1
2
3
4
5
6
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <body>
        <?php echo $content_for_layout; ?>
    </body>
</html>

Файл email/text/default.ctp:

1
<?php echo $content_for_layout; ?>

Затем в директории app/views/elements/ создаём наши шаблоны. Их то мы и указываем в параметре template.

1
2
3
4
5
    email/
        html/
            registration_template.ctp
        text/
            registration_template.ctp

Для чего нужны две папки html и text, а не просто файл шаблона? Просто не все почтовики поддерживают HTML формат сообщений. И в этом случае, если параметр sendAs будет поставлен как ‘both’, то пользователь увидит именно тот формат письма, который может воспроизвести его почтовая программа (или онлайн-интерфейс).

Пример шаблона:

1
2
3
4
5
6
7
8
9
<p>Здравствуйте, <?php echo $user_name;?>!</p>

<p>Вы успешно зарегистрированы на нашем сайте".</p>

<p>Для завершения активации аккаунта, перейдите по следующей ссылке:<br />

<a href="<?php echo LIVE_URL.'/activate/'.$param;?>"><?php echo LIVE_URL.'/activate/'.$param;?></a>
</p>
<p>Спасибо за регистрацию!</p>

Переменные передаются в шаблон стандартным образом (после указания шаблона):

1
2
$this->set('param', $param);
$this->set('user_name', $user_name);

Отправка писем в цикле

Если вам необходимо отправить несколько email писем в цикле, но после отправки первого воспользуйтесь следующей функций для сброса параметров:

1
$this->Email->reset()

Вот и все основные инструкции по отправке email сообщений в CakePHP с помощью стандартного компонента Email. Всё достаточно просто – создаём шаблоны, подключаем компонент, задаём нужные параметры отправки – и готово!


Похожие статьи:

Комментарии

  • AlexMamonchik 24 августа 2010 в 06:25

    Тоесть без подключения каких-либо дополнительных библиотек на любом хостинге этот код будет отправлять письма?

    • admin 25 августа 2010 в 06:41

      До сих пор проблем с этим не видел, поэтому думаю что должно работать везде.

  • Yura 26 августа 2010 в 11:42

    captcha классная…

  • Паради 31 мая 2011 в 14:45

    Отличный пост! поставлю ссылку на вас……

    У вас в RSS картинки не показывает……

  • ннн 29 июня 2011 в 08:44

    ерунда

Добавить комментарий

Перед отправкой формы:
Human test by Not Captcha