Как использовать функцию mail() в PHP на IIS сервере?

арендую арендовал 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 > вкладка Доступ > Ретрансляция

IIS

Добавляем в список разрешенных компьютеров, компьютер с ip 127.0.0.1 (после чего перезапускаем SMTP)

SMTP SMTP-Settings

Теперь нам надо сконфигурировать 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.