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

В данном примере рассмотрим одну из практик отправки писем из платформы DVelum.

Создадим файл настройки почтовых сообщений system/sonfig/email.php, в котором будем хранить список писем, отправляемых из системы, например:

return array(
     'forgot_password' => array(
     'subject' => 'Восстановление пароля',
     'fromAddress' => 'noreply@mysite.com',
     'fromName' => 'Мой сайт',
     'template' => './templates/mail/forgot_password.php',
    )
);

В качестве ключа используем текстовый идентификатор типа письма, в качестве значения передадим настройки. В данном примере настройка template - это файл шаблона письма.

Опишем шаблон письма (./templates/mail/forgot_password.php):

<?php
if(!defined('DVELUM'))exit;
   $url = "{$this->url}?c={$this->confirmation_code}";
?>
<h2>Здравствуйте, <?php echo $this->name; ?>!</h2>
<p>Вы получили это письмо потому, что вы (либо кто-то, выдающий себя за вас)
попросили установить новый пароль к вашей учётной записи.
Если вы не просили выслать пароль, то не обращайте внимания на это письмо,
если же подобные письма будут продолжать приходить, обратитесь в техническую поддержку нашего сайта.</p>
<p>Для изменения текущего пароля перейдите по ссылке:</p>
<p><a href="<?php echo $url; ?>"><?php echo $url; ?></a></p>
<p>Данная ссылка будет действовать до <?php echo $this->confirmation_date; ?></p>

Далее в нужном месте инициируем отправку письма, например в контроллере:

	 		 	 	
/**
* Отправка письма с кодом авторизации пользователю
* @param Db_Object $user -  ORM объект
*/
protected function sendEmail(Db_Object $user)
{
    $mailCfg = Config::factory(Config::File_Array, $this->_configMain->get('configs') . 'email.php')->get('forgot_password');

    $userData = $user->getData();
    $confDate = new DateTime($userData['confirmation_date']);

    $template = new Template();
    $template->setProperties(array(
        'name' => $userData['name'],
        'email' => $userData['email'],
        'confirmation_code' => $userData['confirmation_code'],
        'confirmation_date' => $confDate->format('d.m.Y H:i'),
        'url' => 'http://my_site.com/some_page.html'
    ));

    $mailText = $template->render($mailCfg['template']);

    $mail = new Zend_Mail('UTF-8');
    $mail->setHeaderEncoding(Zend_Mime::ENCODING_BASE64)
        ->setSubject( $mailCfg['subject'])
        ->setFrom(  $mailCfg['fromAddress'],   $mailCfg['fromName'])
        ->addTo($userData['email'], $userData['name'])
        ->setBodyHtml($mailText, 'utf-8');
    $mail->send();
}