Ну, я согласен с 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 и не требуя дополнительной настройки.
Нельзя запускать локальный SMTP-сервер для отправки с помощью 'mail()', если вы не пытаетесь отправить электронные письма на адрес '@ localhost'. Какая ошибка возникает при попытке отправить электронное письмо? – DaveRandom
Я не пытаюсь запустить локальный smtp-сервер - я хочу слушать на localhost и передавать почту на удаленный почтовый сервер. (который я настроил в функции SMTP IIS) –
на основе этой ошибки работает 'mail()', но сервер SMTP отклоняет его. Первое, что я хотел бы сделать, это получить [Wireshark] (http://www.wireshark.org/) и посмотреть на необработанный SMTP, который обменивается. Однако, оговорка: вы не можете слушать трафик на 127.0.0.1 в Wireshark в Windows. Вам придется отскакивать через удаленный компьютер во время отладки (если вы не выходите из своей беспроводной сетевой платы и в проводную сетевую карту или наоборот ... – DaveRandom