Отправка 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. Всё достаточно просто – создаём шаблоны, подключаем компонент, задаём нужные параметры отправки – и готово!
Похожие статьи:
Комментарии
Добавить комментарий

admin

Тоесть без подключения каких-либо дополнительных библиотек на любом хостинге этот код будет отправлять письма?
До сих пор проблем с этим не видел, поэтому думаю что должно работать везде.
captcha классная…
Это NotCaptcha – http://wordpress.org/extend/plugins/wp-notcaptcha/
Отличный пост! поставлю ссылку на вас……
У вас в RSS картинки не показывает……
ерунда