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





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]Кол-во просмотров: 5040
Оцените статью:

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

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

2010-02-26 16:04:17
Masterpola
Компания<a href=http://ukladka-parketa.siteedit.su/> <b>"Мастер Паркет"</b></a> предлагает Вам следующие паркетные работы: укладка паркета тонировка, лакировка паркета и др. В том числе возможна художественная укладка паркета - с нанесением рисунков, узоров и орнаментов. Также вы можете заказать укладку паркета, выполненную из ценных, экзотических пород древесины. Мы выполняем паркетные работы с использованием самых эффективных технологий: укладка паркета паркетной доски плавающим способом, "под ключ", в виде приклеивания к основанию и др. Таким образом, мы практикуем комплексный и ответственный подход к паркетным работам.
Все паркетные работы выполняются только с использованием качественного паркетного лака и клея от ведущих торговых брендов: Minova, Neopur, ZAR и др.Укладка паркета паркетные работы силами нашей компании также отличаются высокой скоростью исполнения. Укладка паркета производится высококвалифицированными и опытными специалистами, поэтому мы гарантируем Вам, что Ваш пол прослужит Вам долго и по-настоящему украсит Ваш интерьер.
Наши возможности не ограничиваются укладкой паркета практически любого возможного рисунка. Укладка художественного паркета из самого качественного материала украсит Ваш дом или офис. Мы используем штучный паркет различных пород древесины от самых распространенных (дуб, бук, ясень) до экзотических (сапелли, бамбук, мербау). Качественно выполненные паркетные работы: укладка паркета, укладка ламината, укладка паркетной доски.
наши сайты:
http://parketmaster.siteedit.su/
http://ukladka-parketa.siteedit.su/

ВЫЗВАТЬ МАСТЕРА

Телефон:
+7 (495) 589-44-23
+7 (916) 63-123-63


Мы работаем с 09:00 до 21:00, без выходных

E-mail: rubli@mail.ru


2010-02-26 14:33:53
fotokiev2010
fotokiev.com - Киевская фотостудия Стельмах Эдуарда - это всегда профессиональный подход к каждому клиенту.
Узнайте на сайте fotokiev.com где можно сделать недорогое профессиональные фото и найти хорошего фотографа в Киеве.

2009-08-02 22:07:30
http://vmod.ru/
Разгон процессора и разгон процессора amd athlon на сайте vmod. Большое количество информации о компьютерах и комплектующих. Охлаждения, процессоры, блоки питания, обзоры железа, компьютерные статьи и множество прочего.

2009-07-23 02:02:30
http://pdcg.ru/
Наш учебный центр предлагает полный комплекс качественных услуг в сфере кадрового консалтинга и рекрутмента: подбор персонала, ассесмент и лизинг персонала, а также услуги таинственного покупателя в Москве н
а оптимальных условиях.

2009-05-21 14:33:58
http://eest.ru/
Недвижимость Продажа недвижимости Хабаровска Квартиры, офисы, участки под застройку Недвижимость за рубежом Любые операции с недвижимостью Жилищные сертификаты База предложений с фото и видео объектов, поиск по базе.

2009-05-15 16:28:55
andreu
Посмотреть самые <a href="http://films-kino.ru/category/topovye-filmy">топовые фильмы</a> такие как <a href="http://films-kino.ru/2009/05/14/koralina-v-strane-koshmarov-3d.html">Коралина в Стране Кошмаров 3D</a> , <a href="http://films-kino.ru/2009/05/14/obitaemyj-ostrov-sxvatka.html">Обитаемый остров: Схватка</a> , <a href="http://films-kino.ru/2009/05/14/put.html">Путь</a> и многие другие не менее интересные фильмы вы можете на сайте http://films-kino.ru

2009-05-05 05:11:03
http://akoc.ru/
Добро пожаловать на сайт компании "Акос" - Akoc.Ru. Наша компания является одним
из старейших продавцов автомобилей на рынке Республики Татарстан. Мы предлагаем: продажа, гарантийное обслуживание автомобилей в Альметьевске, Набережных Челнах, Казани.

2009-04-20 17:53:23
putilars
Известный веб ресурс Poputi предлагает Вашему вниманию огромное количество интересных сервисов для любителей туризма: самые лучшие маршруты по Европе на машине, расписание автобусов, такси в Таллинне и отдых в Эстонии.

2009-04-20 01:49:45
faetonsp
Основным направлением деятельности фирмы Фаэтон является предоставление различных услуг и товаров в сфере деревообработки: программы конструирования мебели, оборудование для деревообработки Scheer и множество других товаров.

2009-04-14 21:41:53
itekstom
На нашем сайте viteksstone представлен огромный каталог натуральных камней. Вам предоставляется возможность выбора из широкого ассортимента нашей продукции. Также мы предлагаем ознакомиться с нашими услугами.
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Какой ОПСОС лучше?
Megafon
27% (59)
MTS
22% (47)
Beeline
27% (58)
АТС
3% (6)
Тут таких нет ...
16% (34)
Я не пользуюсь телефоном.
6% (13)

Проголосовало: 217
Если у тебя есть постоянная девушка, то на всех вечеринках приходится использовать установки "default" (по умолчанию). Можно попробовать переустановить "систему" в режиме "custom", но получаться те же самые Windows-совские глюки. Если ты Unix-оид, то у тебя, скорей всего, нет постоянной девушки.
Рейтинг: 3/10 (2)
Посмотреть все анекдоты
компьютерный форум
 
eXcode.ru » Статьи » PHP » Трюки