那麼我同意OP。 W7(即使是旗艦版)在沒有SMTP服務器的情況下運行(我確信我們已經在Vista 64 Ultimate,甚至XP上運行了它)並不是很明顯,所以您將不得不識別要使用的服務器,無論是本地的還是遠程。
如果服務器不使用授權,那麼這應該不必亂用IIS7或IIS7快遞周圍的工作:如果服務器使用明文授權(不TLS/SSL)
$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);
,然後加入憑證可以正常工作,這取決於你的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('[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的快遞(這是我使用的是什麼)的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 = '[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而不必做任何額外的配置。
除非您嘗試將電子郵件發送到地址'@ localhost',否則不需要運行本地SMTP服務器以使用'mail()'發送。當你嘗試發送電子郵件時,你會得到什麼錯誤? – DaveRandom
我不想運行本地smtp服務器 - 我想在本地主機上偵聽並將郵件傳遞到遠程郵件服務器。 (我在IIS SMTP功能中配置) –
基於該錯誤,'mail()'正在工作,但SMTP服務器拒絕它。我要做的第一件事是獲取[Wireshark](http://www.wireshark.org/),並查看正在交換的原始SMTP。但是,警告:您無法在Windows上的Wireshark上監聽127.0.0.1上的流量。在調試時,您必須通過遠程計算機進行反彈(除非您從無線NIC進入有線NIC,反之亦然)... – DaveRandom