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



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







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

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

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

2012-02-04 11:19:46
altonika-TD
Система радиоохраны недвижимости <a href=http://www.altonika-td.ru/catalog/sec277.html>Lonta Optima</a> решает задачи создания пульта централизованной охраны для:
- охранного предприятия
- государственной охранной структуры
- службы безопасности коммерческой организации

Позволяет обеспечить безопасность:
- охраняемых объектов, распределенных в объеме города (офисы, склады, квартиры, магазины и пр.), <a href=http://www.altonika-td.ru>радиоохрана</a> городской инфраструктуры.
- объектов на территории крупных предприятий и заводов
- райцентров и ближних пригородов
- коттеджных поселков и садоводств
- крупных торговых и бизнес - центров
- гаражных кооперативов и пр.

Особенности системы:
- в системе цетрализованной радиоохраны Lonta Optima применяется высоконадежный помехоустойчивый радиоканал от системы RS-202 (сверхузкополосный радиоканал, ППРЧ, 512 каналов на систему) на частоте 433 МГц с мощностью передатчиков 10 мВт, что не требует получения лицензий на частоты или разрешений ГосСвязьНадзора. Эксплуатация системы абсолютно бесплатно - нет оплаты трафика связи.
- дальность связи без ретрансляции составляет до 50 км. и более.
- контроль связи (тестирование) с каждым объектовым передатчиком в системе осуществляется автоматически раз в 20 минут
- емкость базовой станции системы составляет 500 передатчиков. Цена комплекта базовой станции - от 20 000 рублей
- объектовые передатчики представлены стационарными охранными панелями на 2 - 64 шлейфов и носимыми тревожными радиокнопками для охранников. Цена передатчиков - от 3300 (тревожные радиокнопки - от 2000).

Торговый Дом <a href=http://www.altonika-td.ru>Альтоника</a> приглашает к сотрудничеству региональных дилеров и дистрибьюторов в России и СНГ.



2012-02-03 22:51:05
baltazar
Самые лучшие туры и курорты мира.Любой отдых,любые виды,скидки и горяшии путёвки всё у нас
Отдохните вместе с нами www.prosti00004.narod.ru

2012-02-03 12:02:35
martstroy2011
Интернет-магазин Электрооборудования martstroy.ru.
Электрика, розетки, выключатели, ABB, Legrand, Gira, Siemens, узо, светильники, уличное освещение, датчики движения, теплый пол, Arnold Rak, Devi, Kima, Rehau, лампы, Ecola, Electrostandard, Feron,светодиодная лента, smd, rgb, автоматы, боксы, светорегуляторы, садовые светильники, электроинструмент, ручной инструмент, крепеж, тепловое оборудование,тепловые пушки,конвекторы,генераторы

2012-02-03 12:02:35
martstroy2011
Интернет-магазин Электрооборудования martstroy.ru.
Электрика, розетки, выключатели, ABB, Legrand, Gira, Siemens, узо, светильники, уличное освещение, датчики движения, теплый пол, Arnold Rak, Devi, Kima, Rehau, лампы, Ecola, Electrostandard, Feron,светодиодная лента, smd, rgb, автоматы, боксы, светорегуляторы, садовые светильники, электроинструмент, ручной инструмент, крепеж, тепловое оборудование,тепловые пушки,конвекторы,генераторы

2012-02-03 12:02:34
martstroy2011
Интернет-магазин Электрооборудования martstroy.ru.
Электрика, розетки, выключатели, ABB, Legrand, Gira, Siemens, узо, светильники, уличное освещение, датчики движения, теплый пол, Arnold Rak, Devi, Kima, Rehau, лампы, Ecola, Electrostandard, Feron,светодиодная лента, smd, rgb, автоматы, боксы, светорегуляторы, садовые светильники, электроинструмент, ручной инструмент, крепеж, тепловое оборудование,тепловые пушки,конвекторы,генераторы

2012-02-03 12:02:33
martstroy2011
Интернет-магазин Электрооборудования martstroy.ru.
Электрика, розетки, выключатели, ABB, Legrand, Gira, Siemens, узо, светильники, уличное освещение, датчики движения, теплый пол, Arnold Rak, Devi, Kima, Rehau, лампы, Ecola, Electrostandard, Feron,светодиодная лента, smd, rgb, автоматы, боксы, светорегуляторы, садовые светильники, электроинструмент, ручной инструмент, крепеж, тепловое оборудование,тепловые пушки,конвекторы,генераторы

2012-02-03 12:02:33
martstroy2011
Интернет-магазин Электрооборудования martstroy.ru.
Электрика, розетки, выключатели, ABB, Legrand, Gira, Siemens, узо, светильники, уличное освещение, датчики движения, теплый пол, Arnold Rak, Devi, Kima, Rehau, лампы, Ecola, Electrostandard, Feron,светодиодная лента, smd, rgb, автоматы, боксы, светорегуляторы, садовые светильники, электроинструмент, ручной инструмент, крепеж, тепловое оборудование,тепловые пушки,конвекторы,генераторы

2012-02-03 12:02:32
martstroy2011
Интернет-магазин Электрооборудования martstroy.ru.
Электрика, розетки, выключатели, ABB, Legrand, Gira, Siemens, узо, светильники, уличное освещение, датчики движения, теплый пол, Arnold Rak, Devi, Kima, Rehau, лампы, Ecola, Electrostandard, Feron,светодиодная лента, smd, rgb, автоматы, боксы, светорегуляторы, садовые светильники, электроинструмент, ручной инструмент, крепеж, тепловое оборудование,тепловые пушки,конвекторы,генераторы

2012-02-03 12:02:31
martstroy2011
Интернет-магазин Электрооборудования martstroy.ru.
Электрика, розетки, выключатели, ABB, Legrand, Gira, Siemens, узо, светильники, уличное освещение, датчики движения, теплый пол, Arnold Rak, Devi, Kima, Rehau, лампы, Ecola, Electrostandard, Feron,светодиодная лента, smd, rgb, автоматы, боксы, светорегуляторы, садовые светильники, электроинструмент, ручной инструмент, крепеж, тепловое оборудование,тепловые пушки,конвекторы,генераторы

2012-02-03 04:19:32
domovenokedic
Предлагаю Вашему вниманию замечательный сайтик с оригинальным именем Домовёнок Эдик! Приходите и Вы! Обязательно увидимся!

P.S. Буду рад если этот сайтик вам тоже поможет...














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

Пароль:



Регистрация

Как вы относитесь к спаму?
Положительно, Я сам спамер.
11% (21)
Безразлично
11% (21)
Нормально, сам бы спамил
6% (11)
Отрицательно
67% (129)
А ЧТО, ЕСТЬ СПАМ ...
6% (11)

Проголосовало: 193
Если бы автомобилестроение развивалось такими же темпами, как компьютерная индустрия, Роллс-Ройс стоил бы 5 долларов, ездил 1000 миль на галлон бензина и раз в год взрывался с четырьмя пассажирами.
Рейтинг: 8/10 (3)
Посмотреть все анекдоты

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