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



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





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]Кол-во просмотров: 30885

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

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

2018-09-15 12:49:20
Justin
Вам нужен кредит для вашего бизнеса или личных целей? Мы оказываем финансовую помощь компаниям и частным лицам с удобной для кармана процентной ставкой в размере 3% годовых. Наши условия дешевы и понятны.

Свяжитесь с нами сегодня и будет финансироваться в течение 2-4 рабочих дней. E-mail: unique2aal@gmail.com

2018-08-13 12:13:23
kopilka_ws
Промокод на 100$
Программы взаимного финансирования:
Сообщество предлагает 3 вида программ взаимного финансирования,
приносящих дополнительный доход,
каждая из которых ориентирована на людей с разным достатком и уровнем жизни.
https://bit.ly/2nhMcD4
<a href=https://bit.ly/2nhMcD4></a>

2018-04-21 22:40:13
#gennick
Партнерская программа http://got.by/2g5ai6
Вы получаете 75% от нашего профита за приведенного пользователя
в первые 30 дней после его регистрации и до 80% в последующие пожизненно
http://got.by/2g5ai6



2018-04-18 14:56:35
#gennick
Партнерская программа http://got.by/2g5ai6
Вы получаете 75% от нашего профита за приведенного пользователя
в первые 30 дней после его регистрации и до 80% в последующие пожизненно
http://got.by/2g5ai6



2018-04-18 14:56:34
#gennick
Партнерская программа http://got.by/2g5ai6
Вы получаете 75% от нашего профита за приведенного пользователя
в первые 30 дней после его регистрации и до 80% в последующие пожизненно
http://got.by/2g5ai6



2018-04-18 14:56:33
#gennick
Партнерская программа http://got.by/2g5ai6
Вы получаете 75% от нашего профита за приведенного пользователя
в первые 30 дней после его регистрации и до 80% в последующие пожизненно
http://got.by/2g5ai6



2018-04-18 14:56:32
#gennick
Партнерская программа http://got.by/2g5ai6
Вы получаете 75% от нашего профита за приведенного пользователя
в первые 30 дней после его регистрации и до 80% в последующие пожизненно
http://got.by/2g5ai6



2018-04-18 14:56:31
#gennick
Партнерская программа http://got.by/2g5ai6
Вы получаете 75% от нашего профита за приведенного пользователя
в первые 30 дней после его регистрации и до 80% в последующие пожизненно
http://got.by/2g5ai6



2018-04-18 14:56:28
#gennick
Партнерская программа http://got.by/2g5ai6
Вы получаете 75% от нашего профита за приведенного пользователя
в первые 30 дней после его регистрации и до 80% в последующие пожизненно
http://got.by/2g5ai6



2018-04-18 14:56:28
#gennick
Партнерская программа http://got.by/2g5ai6
Вы получаете 75% от нашего профита за приведенного пользователя
в первые 30 дней после его регистрации и до 80% в последующие пожизненно
http://got.by/2g5ai6


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

Пароль:



Регистрация

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

Проголосовало: 193
- Служба технической подержки, здравствуйте!
- У меня не запускается компьютер. Ваш высокоскоростной интернет сломал его.
- Что вы имеете ввиду?
- Я говорю вам, он не запускается.
- Он работал, когда наш специалист был у Вас.
- Да, он перестал работать после того, как я его накрыла.
- Накрыли?
- Я накрыла его пластиковой пленкой, чтобы туда не пропадали кошачьи волосы. У меня много кошек. Не плохая идея, на правда ли?
Рейтинг: 3/10 (3)
Посмотреть все анекдоты