» Главная
eXcode.ru » Статьи » PHP » Трюки
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 11







TDD: Добавляем отправку письма при создании нового сообщения




Добавляем отправку письма при создании нового сообщения

Тестирование отправки почты при помощи FakeMail

Как было указано в новых требованиях, приложение должно оповещать администратора при появлении нового сообщения. Сделать это несложно, вопрос лишь в том, как можно это правильно протестировать? Дело в том, проверить обычными средствами отсылку письма довольно-таки сложная задача. На помощь нам придет пакет FakeMail(http://sourceforge.net/projects/fakemail), находящийся в разработке.

FakeMail эмулирует работу почтового сервера и складывает всю приходящую почту в заданное пользователем место. Таким образом, можно проконтролировать из теста все обращения к почтовому серверу. Центральной частью FakeMail является perl скрипт, запускаемый в режиме демона на определенном порту. Также в состав пакета входит класс FakeMailDaemon, удобным образом инкапсулирующий работу с perl сервером.

Чтобы запустить FakeMailDaemon в Windows, требуется наличие библиотеки cygwin, а именно интерпретатора perl, входящего в состав cygwin. Внимание: ActiveState Perl не работает с FakeMail.

Предположим для простоты, что вся уведомляющая почта доставляется на ящик admin@feedback.com. Изменим наши фукциональные тесты немного, заменим метод testOfSimpleSubmitFeedback на testOfSimpleSubmitFeedbackWithEmailNotification:

<?php
class AcceptanceTestOfFeedbackProject extends WebTestCase {
    function setUp() {
        DBC :: execute('DELETE FROM feedback');
        $this->_switchToWebTestingConfig();
        $this->fakemail = new FakeMailDaemon();
        $this->fakemail->start();
    }
 
    function tearDown() {
        $this->_switchToProductionConfig();
        $this->fakemail->stop();
        $this->fakemail->removeRecipientMail('admin@feedback.com');
    }
 
    function testOfSimpleSubmitFeedbackWithEmailNotification() {
        $this->_addFeedback($name = 'Bobby',
                            $email = 'email@dot.com',
                            $message = "This a message");
 
        $this->assertWantedPattern('/' . preg_quote($email) . '.*' .
                                         $name . '.*' .
                                         $message . '/s');
 
        $mails = $this->fakemail->getRecipientMailContents('admin@feedback.com');
        $this->assertTrue(sizeof($mails) == 1);
 
        $this->assertTrue(preg_match('~' . preg_quote($email) . '.*' .
                                           $name . '.*' .
                                           $message . '~s',
                                     $mails[0]));
    }
[...]
}
?>

Отметим, что нам также пришлось изменить фикстуру, теперь в ее обязанности также входит запуск/остановка FakeMailDaemon и очистка пришедшей почты.

Нам также пришлось добавить следующую строку в /tests/setup.php:

<?php
define('FAKE_MAIL_DUMP_PATH', dirname(__FILE__) . '/mail/'); 
?>

С помощью нее мы указали FakeMailDaemon сохранять всю временную почту в директории /tests/mail.

Как всегда, тест не сработал... теперь приступаем к реализации.

Отправка почты при помощи PHPMailer

Для отправки писем воспользуемся замечательным пакетом PHPMailer. Создадим небольшую глобально доступную фабричную функцию CreateMail() в файле mail.inc.php, которая будет скрывать детали инициализации phpmailer:

<?php
 
@define('USE_PHPMAIL', false);
@define('SMTP_PORT', '25');
@define('SMTP_HOST', 'localhost');
@define('SMTP_AUTH', false);
@define('SMTP_USER', '');
@define('SMTP_PASSWORD', '');
 
function & CreateMail()
{
  include_once(dirname(__FILE__) . '/external/phpmailer/class.phpmailer.php');
  $mail = new PHPMailer();
  $mail->LE = "\r\n";
  if(USE_PHPMAIL)
    return $mail;
 
  $mail->IsSMTP();
  $mail->Host = SMTP_HOST;
  $mail->Port = SMTP_PORT;
  if(SMTP_AUTH == true)
  {
    $mail->SMTPAuth = true;
    $mail->Username = SMTP_USER;
    $mail->Password = SMTP_PASSWORD;
  }
 
  return $mail;
}
?>

Теперь можно перейти к реализации в index.php:

<?php
ob_start();
 
require_once(dirname(__FILE__) . '/external/wact/framework/common.inc.php');
require_once(WACT_ROOT . '/template/template.inc.php');
require_once(dirname(__FILE__) . '/feedback.inc.php');
require_once(dirname(__FILE__) . '/mail.inc.php');
 
if(isset($_POST['submit'])) {
    $feedback = new Feedback($_POST['name'], $_POST['email'], $_POST['message'], $time = time());
    $feedback->save();
 
    $mail =& CreateMail();
    $mail->IsHTML(false);
    $mail->CharSet = 'windows-1251';
    $mail->AddAddress('admin@feedback.com');
    $mail->From = $_SERVER['SERVER_ADMIN'];
    $mail->FromName = $_SERVER['HTTP_HOST'];
    $mail->Subject = 'New feedback!!!';
    $mail->Body    = $_POST['email'] . "\n" . $_POST['name'] . "\n" . $_POST['message'];
    $mail->Send();
}
 
$page = new Template('/feedback.html');
$pager =& $page->getChild('pager');
 
$feedback =& $page->findChild('feedback');
$feedback->registerDataSet(Feedback :: getList($pager));
 
$page->display();
 
ob_end_flush();
?>

Вот теперь, пожалуй, все. Не так уж и плохо для первого раза.

К началу статьи





Добавил: PIXELДата публикации: 2008-03-05 09:11:04

Рейтинг статьи:0.00 [Голосов 0]Кол-во просмотров: 19478
Оцените статью:

Комментарии читателей

Всего комментариев: 4834

2012-05-17 19:42:08
httpnet
http://stomatolohija-nyzkyx-cin.com.ua Стоматология Киев низкие цены. Отзывы. Левый берег.
http://stomatolohija-nyzkyx-cin.com.ua Делая шаг на встречу Вам и устанавливая одни из самых низких цен на стоматологические услуги в Киеве, мы ставим цель удовлетворить каждого пациента, который в свою очередь оставляет положительные отзывы о качественном и доступном лечении в клинике.
http://stomatolohija-nyzkyx-cin.com.ua стоматология киев цены отзывы район дарница дарницкий позняки березняки харьковский троещина днепровский деснянский левобережная киева левый берег харьковское шоссе ленинградская площадь стоматологические клиники стоматологии недорого отбеливание услуги прейскурант
http://stomatolohija-nyzkyx-cin.com.ua
http://stomatolohija-nyzkyx-cin.com.ua/index.php?option=com_content&view=article&id=3&Itemid=3
http://stomatolohija-nyzkyx-cin.com.ua/index.php?option=com_content&view=article&id=8&Itemid=8
http://stomatolohija-nyzkyx-cin.com.ua/index.php?option=com_content&view=article&id=4&Itemid=15
http://stomatolohija-nyzkyx-cin.com.ua/index.php?option=com_content&view=article&id=6&Itemid=17
http://stomatolohija-nyzkyx-cin.com.ua/index.php?option=com_content&view=article&id=5&Itemid=18
http://stomatolohija-nyzkyx-cin.com.ua/index.php?option=com_content&view=article&id=7&Itemid=19
http://stomatolohija-nyzkyx-cin.com.ua/index.php?option=com_content&view=article&id=2&Itemid=20
http://stomatolohijanyzkyxcin.se-ua.net
http://stomatolohijanyzkyxcin.se-ua.net/page
http://stomatolohijanyzkyxcin.se-ua.net/page1
http://stomatolohijanyzkyxcin.se-ua.net/page2
http://stomatolohijanyzkyxcin.se-ua.net/page3
http://stomatolohijanyzkyxcin.se-ua.net/page4
http://stomatolohijanyzkyxcin.se-ua.net/page5
http://stomatolohijanyzkyxcin.se-ua.net/contact
http://stomatolog.se-ua.net
http://stomatolog.se-ua.net/about
http://stomatolog.se-ua.net/page1
http://stomatolog.se-ua.net/page2
http://stomatolog.se-ua.net/page3
http://stomatolog.se-ua.net/page4
http://stomatolog.se-ua.net/page6
http://stomatolog.se-ua.net/page12
http://stomatolog.se-ua.net/page13
http://stomatolohija-nyzkyx-cin.se-ua.net
http://stomatolohija-nyzkyx-cin.se-ua.net/about
http://stomatolohija-nyzkyx-cin.se-ua.net/page4
http://stomatolohija-nyzkyx-cin.se-ua.net/page5
http://stomatolohija-nyzkyx-cin.se-ua.net/page3
http://stomatolohija-nyzkyx-cin.se-ua.net/page6
http://stomatolohija-nyzkyx-cin.se-ua.net/page1
http://stomatolohija-nyzkyx-cin.se-ua.net/page2
http://nyzkyx-cin-stomatolohija.se-ua.net
http://nyzkyx-cin-stomatolohija.se-ua.net/about
http://nyzkyx-cin-stomatolohija.se-ua.net/page3
http://nyzkyx-cin-stomatolohija.se-ua.net/page4
http://nyzkyx-cin-stomatolohija.se-ua.net/page5
http://nyzkyx-cin-stomatolohija.se-ua.net/page6
http://nyzkyx-cin-stomatolohija.se-ua.net/page1
http://nyzkyx-cin-stomatolohija.se-ua.net/page2
http://stomat.se-ua.net
http://stomat.se-ua.net/about
http://stomat.se-ua.net/page1
http://stomat.se-ua.net/page3
http://stomat.se-ua.net/page4
http://stomat.se-ua.net/page5
http://stomat.se-ua.net/page6
http://stomat.se-ua.net/page2
http://dantist.se-ua.net
http://dantist.se-ua.net/about
http://dantist.se-ua.net/page1
http://dantist.se-ua.net/page2
http://dantist.se-ua.net/page3
http://dantist.se-ua.net/page4
http://dantist.se-ua.net/guestbook
http://dantist.se-ua.net/contact
http://econom-stomatologija.com.ua
http://econom-stomatologija.com.ua/index.php?option=com_content&view=article&id=45&Itemid=28
http://econom-stomatologija.com.ua/index.php?option=com_content&view=article&id=22&Itemid=29
http://econom-stomatologija.com.ua/index.php?option=com_content&view=article&id=19&Itemid=18
http://econom-stomatologija.com.ua/index.php?option=com_content&view=article&id=18&Itemid=30

http://зуба.net






2012-05-17 09:36:21
girasimys
Кино habary-info.ru кино и не тоько!
игры,музыку,кино,софт.









2012-05-17 05:05:25
artima7
Продаем бетон по рекордно низкой цене. Бетон от завода со скидкой. Любая форма оплаты. Доставочка по Киеву и области - тоже очень недорого. Покупайте товарный бетон всех марок только у нас. Вы все еще не купили бетон? Тогда мы идем до Вас. beton.ftes.info Контактное лицо: Александр Федорович, компания Артима Киев. Компания осуществляет поставку бетона на строительные объекты Киева и Киевской области, до 100 куб. м. в сутки.
<a href=http://beton.ftes.info>Скандально низкая цена на бетон</a> Прорабам за заказ - премия.



2012-05-17 05:05:23
artima7
Продаем бетон по рекордно низкой цене. Бетон от завода со скидкой. Любая форма оплаты. Доставочка по Киеву и области - тоже очень недорого. Покупайте товарный бетон всех марок только у нас. Вы все еще не купили бетон? Тогда мы идем до Вас. beton.ftes.info Контактное лицо: Александр Федорович, компания Артима Киев. Компания осуществляет поставку бетона на строительные объекты Киева и Киевской области, до 100 куб. м. в сутки.
<a href=http://beton.ftes.info>Скандально низкая цена на бетон</a> Прорабам за заказ - премия.



2012-05-17 05:05:22
artima7
Продаем бетон по рекордно низкой цене. Бетон от завода со скидкой. Любая форма оплаты. Доставочка по Киеву и области - тоже очень недорого. Покупайте товарный бетон всех марок только у нас. Вы все еще не купили бетон? Тогда мы идем до Вас. beton.ftes.info Контактное лицо: Александр Федорович, компания Артима Киев. Компания осуществляет поставку бетона на строительные объекты Киева и Киевской области, до 100 куб. м. в сутки.
<a href=http://beton.ftes.info>Скандально низкая цена на бетон</a> Прорабам за заказ - премия.



2012-05-17 05:05:21
artima7
Продаем бетон по рекордно низкой цене. Бетон от завода со скидкой. Любая форма оплаты. Доставочка по Киеву и области - тоже очень недорого. Покупайте товарный бетон всех марок только у нас. Вы все еще не купили бетон? Тогда мы идем до Вас. beton.ftes.info Контактное лицо: Александр Федорович, компания Артима Киев. Компания осуществляет поставку бетона на строительные объекты Киева и Киевской области, до 100 куб. м. в сутки.
<a href=http://beton.ftes.info>Скандально низкая цена на бетон</a> Прорабам за заказ - премия.



2012-05-17 05:05:20
artima7
Продаем бетон по рекордно низкой цене. Бетон от завода со скидкой. Любая форма оплаты. Доставочка по Киеву и области - тоже очень недорого. Покупайте товарный бетон всех марок только у нас. Вы все еще не купили бетон? Тогда мы идем до Вас. beton.ftes.info Контактное лицо: Александр Федорович, компания Артима Киев. Компания осуществляет поставку бетона на строительные объекты Киева и Киевской области, до 100 куб. м. в сутки.
<a href=http://beton.ftes.info>Скандально низкая цена на бетон</a> Прорабам за заказ - премия.



2012-05-17 05:05:18
artima7
Продаем бетон по рекордно низкой цене. Бетон от завода со скидкой. Любая форма оплаты. Доставочка по Киеву и области - тоже очень недорого. Покупайте товарный бетон всех марок только у нас. Вы все еще не купили бетон? Тогда мы идем до Вас. beton.ftes.info Контактное лицо: Александр Федорович, компания Артима Киев. Компания осуществляет поставку бетона на строительные объекты Киева и Киевской области, до 100 куб. м. в сутки.
<a href=http://beton.ftes.info>Скандально низкая цена на бетон</a> Прорабам за заказ - премия.



2012-05-17 05:05:16
artima7
Продаем бетон по рекордно низкой цене. Бетон от завода со скидкой. Любая форма оплаты. Доставочка по Киеву и области - тоже очень недорого. Покупайте товарный бетон всех марок только у нас. Вы все еще не купили бетон? Тогда мы идем до Вас. beton.ftes.info Контактное лицо: Александр Федорович, компания Артима Киев. Компания осуществляет поставку бетона на строительные объекты Киева и Киевской области, до 100 куб. м. в сутки.
<a href=http://beton.ftes.info>Скандально низкая цена на бетон</a> Прорабам за заказ - премия.



2012-05-17 01:45:39
artima7
Продаем бетон по рекордно низкой цене. Бетон от завода со скидкой. Любая форма оплаты. Доставочка по Киеву и области - тоже очень недорого. Покупайте товарный бетон всех марок только у нас. Вы все еще не купили бетон? Тогда мы идем до Вас. beton.ftes.info Контактное лицо: Александр Федорович, компания Артима Киев. Компания осуществляет поставку бетона на строительные объекты Киева и Киевской области, до 100 куб. м. в сутки.
<a href=http://beton.ftes.info>Скандально низкая цена на бетон</a> Прорабам за заказ - премия.


Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Вы программируйте ради
денег
15% (31)
славы
4% (8)
удовольствия
33% (68)
знаний
20% (40)
просто так
5% (10)
все вместе
23% (46)

Проголосовало: 203
Пpогpаммист увидел HЛО:
- У кого-то диск полетел...
Рейтинг: 3.8/10 (4)
Посмотреть все анекдоты

 
eXcode.ru » Статьи » PHP » Трюки