Настройка smtp на windows-7 iis-7.5 - PullRequest
5 голосов
/ 27 августа 2011

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

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

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

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

Я получаю сообщение об ошибке:

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

php.ini:

SMTP = localhost
smtp_port = 25

Ответы [ 3 ]

16 голосов
/ 27 августа 2011

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

2 голосов
/ 27 августа 2011

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

1 голос
/ 04 мая 2012

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

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

$smtpserver = 'host.domain.tld';
$port = 25;
$from = 'mailbox@domain.tld';
$replyto = $from;
$headers = 'From: ' . $from . "\r\n" . 'Reply-To: ' . $replyto . "\r\n" . 
    'X-Mailer: PHP/' . phpversion();
$to = 'mailbox@domain.tld';
$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, тоПакет Sourceforge xpm4 является простым решением.Есть два способа использовать его с 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('username@gmail.com');
// add to address
$m->AddTo('client@destination.net');
// 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: 'username@gmail.com'/'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, 'username@gmail.com', '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Поддержка расширений включена.Вышесказанное позволяет использовать теги 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 = 'username@gmail.com'; // from (Gmail mail address)
$t = 'client@destination.net'; // 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 и не прибегая к дополнительной настройке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...