» Главная
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
Рейтинг статьи:1.33 [Голосов 9]Кол-во просмотров: 29158

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

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

2017-12-05 13:46:00
Ivan77123345
Предлагаем e-mail базы по доступным ценам.
Для маркетинговых, рекламных, рассылок.
Это самый эффективный способ привлечения клиентов для Вашего бизнеса.
Страна : Кол-во е-майл адресов: Цена $
RU : 8,1 млн. : 110$
AU : 3,6 млн. : 50$
CA : 3,3 млн. : 50$
DE : 8,3 млн. : 110$
FR : 2,7 млн. : 35$
NZ : 0,7 млн. : 10$
UK : 6,6 млн. : 100$
US : 1,9 млн. : 20$
COM 55,1 млн. : 350$
ВЕСЬ МИР 228 млн. : 1500$
Кроме того мы можем предоставить базу по любой стране МИРА.
Создаем сайты под заказ любой сложности, цена от 100$.
Имеем большой опыт в разработке и написание сайтов знакомств и партнерских программ.
Предоставим уникальную библиотеку по бизнес тематике, состоящую более чем из 370 электронных книг за 40$.
Детали по е-mail: ivan100050@rambler.ru или по ICQ: 666784430

2017-11-15 21:07:59
ded2000000
LETOMUMORYA.RU
Новогодние подарки для всей семьи. Скидки 90%.
Спешите, количество ограничено.
Подарите родным немного счастья.
http://LETOMUMORYA.RU
С наступающим Вас и Ваших близких!













2017-11-07 15:01:11
oleg7753191
ОЧЕНЬ ВАЖНО!!!
Бизнес идея. Удалённая работа. Заработок в сети.
Фриланс. Работа на дому. Удалённая работа.
Форекс. Торги на валютной бирже.
Быстрый заработок. Как быстро заработать.
Интернет бизнес. Бизнес в Интернете.
http://DOLLAR7753191.RU





2017-10-08 16:57:09
Casino7753191
Casino. Very BIG Bonus. Казино очень большие бонусы.
Welcome to the Casino. Добро пожаловать в казино.
http://businesvdoma.ru





2017-10-08 16:57:08
Casino7753191
Casino. Very BIG Bonus. Казино очень большие бонусы.
Welcome to the Casino. Добро пожаловать в казино.
http://businesvdoma.ru





2017-10-08 16:57:07
Casino7753191
Casino. Very BIG Bonus. Казино очень большие бонусы.
Welcome to the Casino. Добро пожаловать в казино.
http://businesvdoma.ru





2017-10-08 16:57:07
Casino7753191
Casino. Very BIG Bonus. Казино очень большие бонусы.
Welcome to the Casino. Добро пожаловать в казино.
http://businesvdoma.ru





2017-10-08 16:57:06
Casino7753191
Casino. Very BIG Bonus. Казино очень большие бонусы.
Welcome to the Casino. Добро пожаловать в казино.
http://businesvdoma.ru





2017-10-08 16:57:06
Casino7753191
Casino. Very BIG Bonus. Казино очень большие бонусы.
Welcome to the Casino. Добро пожаловать в казино.
http://businesvdoma.ru





2017-10-08 16:57:05
Casino7753191
Casino. Very BIG Bonus. Казино очень большие бонусы.
Welcome to the Casino. Добро пожаловать в казино.
http://businesvdoma.ru




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

Пароль:



Регистрация

Что вы думаете о девушках -программистах?
Ни разу таких не встречал
24% (89)
Очень любопытное зрелище
10% (36)
Мне все равно
3% (12)
Это очень сексуально!
6% (21)
Я и есть девушка -программист
11% (40)
Уважаю таких
9% (33)
Считаю это бесмысленным
6% (22)
Где бы мне найти такую?
13% (46)
Я их боюсь :)
6% (22)
Считаю, что это нормально
12% (45)

Проголосовало: 366
А кофе на клавиатуру тоже вирус пролил?
Рейтинг: 7/10 (10)
Посмотреть все анекдоты