арендую арендовал VPS сервер и установил на него Windows Server 2012. На нем крутились разного рода сайты, в том числе PHP, которые в некоторых случая требуют отправки почты. Плюс ко всему, потребовалась функция email подписки/рассылки на сайте, вот что из этого вышло…
Глаз пал на Busmail и как оказалось — не зря. Этот сервис предлагает услуги массовой рассылки по вашим базам, рассылки объявлений по интернет доскам, еще много всяких приколюх, но самое главное у них можно купить PHP-скрипт, который позволяет делать рассылку со своего сервера самому с разными параметрами (задержкой, подменой текста и т.д). Кстати, поддержка у Busmail очень отзывчивая, мы вместе решали мою проблему и наконец решили. Одним словом: совветую!
Оплатил, скачал и сконфигурировал скрипт. После чего поместил его рядом с работающим сайтом на WordPress, подумав, что раз WordPress на PHP работает отлично, то и скрипт на PHP будет работать также — я ошибался. Дело в том, что по умолчанию функция mail() на PHP с Windows не работает.
Перелопатил много статей, мучился с разными утилитами (наподобие Sendmail), в итоге нашел решение:
Устанавливаем службу SNTP server (она идет вместе с IIS 6.0)
Запускаем Диспетчер служб IIS 6.0
Заходим в Свойства SMTP Virtual Server > вкладка Доступ > Ретрансляция
Добавляем в список разрешенных компьютеров, компьютер с ip 127.0.0.1 (после чего перезапускаем SMTP)
Теперь нам надо сконфигурировать PHP. Заходим в папку, куда он установлен, у меня это C:\Program Files (x86)\PHP\v5.3\ и находим файл PHP.ini
В нем нам надо найти раздел [mail function] и в следующих строка прописать свои параметры:
SMTP = localhost smtp_port = 25 sendmail_from = email_kotoriy_budet_otpravitelem@mail.ru
Сохраняем файл, и попробуем протестировать отправку. Создадим PHP скрипт, со следующим кодом:
<?php error_reporting(E_ALL); ini_set('display_errors', true); ini_set('error_reporting', E_ALL); session_start(); ?> <pre> <?php print_r($_SESSION); if (function_exists('mail')) {echo "Есть";}else{echo"Нет";} // Сообщение $message = "Line 1\nLine 2\nLine 3"; // На случай если какая-то строка письма длиннее 70 символов мы используем wordwrap() $message = wordwrap($message, 70); $headers = 'From: email_kotoriy_budet_otpravitelem@mail.ru; // Отправляем mail('email-na-kotoriy-pridet-testovoe-pismo@mail.ru', 'My Subject', $message, $headers); ?> </pre>
И назовем его test.php, после чего зальем на сервер, и попробуем выполнить – указав в адресной строке браузера http://адресс-сервера-или-домен/путь-до-файла/test.php (например, http://mysite.ru/test.php). Должны увидеть:
Array ( ) Есть
Через некоторое время на указанный емейл (вы должны были его прописать в test.php, вместо email-na-kotoriy-pridet-testovoe-pismo@mail.ru) нам придет письмо от email_kotoriy_budet_otpravitelem@mail.ru с текстом:
Line 1 Line 2 Line 3
Вот и все, никаких утилит типа Sendmail нам не надо – обошлись стандартными средствами от Microsoft, если не считать PHP.