2011-08-27 5 views
5

Я настроил приложение php/mysql на своем локальном ноутбуке, используя iis7 для тестирования. Я использую php mail() для отправки электронной почты с помощью службы localhost smtp на сервере и хочу реплицировать локально для тестирования. (он долго работал на сервере, поэтому я просто хочу реплицировать локально для целей тестирования.)Настройка smtp на windows-7 iis-7.5

Использование статьи в области технологий: http://technet.microsoft.com/en-us/library/cc772058(WS.10).aspx Мне удалось настроить параметры SMTP, однако я все еще не могу отправить письмо.

Я переработал сервер несколько раз без эффекта.

Я запустил netstat -an и ничего не слушает на port25 - есть ли что-то еще, что мне нужно сделать, чтобы заставить smtp-сервис прослушивать порт25?

Ошибка я получаю:

PHP Предупреждение: почта() [function.mail]: Не удалось подключиться к MailServer на " локальном хосте " порт 25, проверить свой " SMTP " и " smtp_port " установки в php.ini или использовать ini_set()

php.ini:

SMTP = localhost 
smtp_port = 25 
+0

Нельзя запускать локальный SMTP-сервер для отправки с помощью 'mail()', если вы не пытаетесь отправить электронные письма на адрес '@ localhost'. Какая ошибка возникает при попытке отправить электронное письмо? – DaveRandom

+0

Я не пытаюсь запустить локальный smtp-сервер - я хочу слушать на localhost и передавать почту на удаленный почтовый сервер. (который я настроил в функции SMTP IIS) –

+0

на основе этой ошибки работает 'mail()', но сервер SMTP отклоняет его. Первое, что я хотел бы сделать, это получить [Wireshark] (http://www.wireshark.org/) и посмотреть на необработанный SMTP, который обменивается. Однако, оговорка: вы не можете слушать трафик на 127.0.0.1 в Wireshark в Windows. Вам придется отскакивать через удаленный компьютер во время отладки (если вы не выходите из своей беспроводной сетевой платы и в проводную сетевую карту или наоборот ... – DaveRandom

ответ

16

Вы можете использовать что-то вроде smtp4dev (http://smtp4dev.codeplex.com/) вместо iis для целей тестирования. Работает как прелесть для меня.

+0

Означает ли это, что функция SMTP в IIS не работает? –

+0

Это действительно работает, но, видимо, не в Windows 7. Это операционная система поставляется без встроенного SMTP-сервера. – Dima

+0

Работал отлично для меня в Win7. – jvenema

2

Windows 7 не отправляет службу SMTP. Поэтому вы должны использовать сторонний продукт. Это была хорошо известная проблема, но не знаю, почему вы ее не нашли, выполнив поиск в Интернете.

+0

назовите меня к документу, в котором говорится, что iis 7.5 smtp не будет работать на окнах 7 без сервера smtp? –

+0

Не следует настраивать приложение и пытаться найти локальный SMTP-сервер (как вы упомянули выше) , Если вы хотите, чтобы это сработало, вам нужно, чтобы SMTP-сервер работал локально. Это здравый смысл, и я не думаю, что его нужно где-то документировать. –

+0

Что? здравый смысл знать, что функция SMTP в IIS не предоставляет функции SMTP? Как может быть здравый смысл знать, что ????? –

1

Ну, я согласен с OP. Не сразу становится очевидным, что W7 (даже Ultimate) поставляется без SMTP-сервера (я уверен, что у нас это было на Vista 64 Ultimate и, возможно, даже на XP), поэтому вам нужно будет определить сервер, который будет использоваться, будь то локальный или дистанционный пульт.

Если сервер не использует авторизацию, то это должно работать, не имея возиться с IIS7 или IIS7 Экспрессом:

$smtpserver = 'host.domain.tld'; 
$port = 25; 
$from = '[email protected]'; 
$replyto = $from; 
$headers = 'From: ' . $from . "\r\n" . 'Reply-To: ' . $replyto . "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 
$to = '[email protected]'; 
$subject = 'Test Message'; 
ini_set('SMTP', $smtpserver); 
ini_set('smtp_port', $port); 
$message = wordwrap("Hello World!", 70); 
$success = mail($to, $subject, $message, $headers); 

Если сервер использует незашифрованную авторизацию (не TLS/SSL), затем добавить учетные данные могут работать в зависимости от версии PHP:

ini_set('username', 'yourusername'); 
ini_set('password', 'yourpwd'); 

Если сервер навязывает использование TLS/SSL для соединения с учетными данными, как GMail делает, то xpm4 пакет Sourceforge является простым решением. Есть два способа вы можете использовать его с GMail (это прямо из примеров, приведенных в упаковке):

// manage errors 
error_reporting(E_ALL); // php errors 
define('DISPLAY_XPM4_ERRORS', true); // display XPM4 errors 
// path to 'MAIL.php' file from XPM4 package 
require_once '../MAIL.php'; 
// initialize MAIL class 
$m = new MAIL; 
// set from address 
$m->From('[email protected]'); 
// add to address 
$m->AddTo('[email protected]'); 
// set subject 
$m->Subject('Hello World!'); 
// set HTML message 
$m->Html('<b>HTML</b> <u>message</u>.'); 
// connect to MTA server 'smtp.gmail.com' port '465' via SSL ('tls' encryption) 
// with authentication: '[email protected]'/'password' 
// set the connection timeout to 10 seconds, the name of your host 'localhost' 
// and the authentication method to 'plain' 
// make sure you have OpenSSL module (extension) enable on your php configuration 
$c = $m->Connect('smtp.gmail.com', 465, '[email protected]', 'password', 'tls', 10, 
      'localhost', null, 'plain') 
     or die(print_r($m->Result)); 
// send mail relay using the '$c' resource connection 
echo $m->Send($c) ? 'Mail sent !' : 'Error !'; 
// disconnect from server 
$m->Disconnect(); 

IIS7 Express (который является то, что я использую) FastCGI PHP модуль устанавливает с поддержкой OpenSSL Extension включен. Вышеупомянутое позволяет использовать HTML-теги в содержимом вашего сообщения.Второй способ использования пакета xpm4 будет показано ниже, для текстовых только сообщений (опять же, пример из источника пакета):

// manage errors 
error_reporting(E_ALL); // php errors 
define('DISPLAY_XPM4_ERRORS', true); // display XPM4 errors 
// path to 'SMTP.php' file from XPM4 package 
require_once '../SMTP.php'; 
$f = '[email protected]'; // from (Gmail mail address) 
$t = '[email protected]'; // to mail address 
$p = 'password'; // Gmail password 
// standard mail message RFC2822 
$m = 'From: '.$f."\r\n". 
    'To: '.$t."\r\n". 
    'Subject: test'."\r\n". 
    'Content-Type: text/plain'."\r\n\r\n". 
    'Text message.'; 
// connect to MTA server (relay) 'smtp.gmail.com' via SSL (TLS encryption) with 
// authentication using port '465' and timeout '10' secounds 
// make sure you have OpenSSL module (extension) enable on your php configuration 
$c = SMTP::connect('smtp.gmail.com', 465, $f, $p, 'tls', 10) or die(print_r($_RESULT)); 
// send mail relay 
$s = SMTP::send($c, array($t), $m, $f); 
// print result 
if ($s) echo 'Sent !'; 
else print_r($_RESULT); 
// disconnect 
SMTP::disconnect($c); 

Оба выше работы с GMail, на дату этого поста, используя IIS7 и не требуя дополнительной настройки.

Смежные вопросы