2017-04-03 31 views
0

我試圖通過純PHP代碼發送電子郵件而無需登錄SMTP服務器後,發送郵件,代碼如下:PHP失敗recieving 354

<?php 
$from = "[email protected]"; 
$to = '[email protected]'; 
$domain = substr($to, strpos($to, '@')+1); 
$dns = dns_get_record($domain, DNS_MX); 
$mx = $dns[0]['target']; 
$message = " 
HELO localhost 
MAIL FROM: $from 
RCPT TO: $to 
DATA 
Subject: =?UTF-8?B?ztK1xLXa0ru49iBNb2RQSFAgs8zQ8g==?= 
From: $from 
To: $to 
Date: Mon, 03 Apr 2017 13:54:10 +0800 
Content-Transfer-Encoding: base64 
MIME-Version: 1.0 
Content-Type: text/plain 

SGVsbG8sIFdvcmxkIQ== 
. 
"; 
$server = fsockopen($mx, 25, $errno, $error, 10); 
if($errno){ 
    echo $error; 
}else{ 
    fputs($server, $message); 
    while(!feof($server)) { 
     echo fgets($server); 
    } 
    fclose($server); 
} 

打印

220 bizmx8.qq.com MX QQ Mail Server 
250 bizmx8.qq.com 
250 Ok 
250 Ok 
354 End data with <CR><LF>.<CR><LF> 

程序掛起後任何人都知道爲什麼,我怎麼能把這封電子郵件發送到給定的地址。 Plus:我非常確定我的腳本使用\ r \ n作爲行結尾。

+0

請告訴我爲什麼你使用這種方法,爲什麼你不使用郵件或任何第三方郵件服務? –

+0

像[swift郵件程序](http://swiftmailer.org/download) –

+0

這樣的用戶第三方郵件程序如果您可以告訴我如何解決此問題:mail():無法連接到「本地主機」端口25的郵件服務器,在php.ini驗證你的「SMTP」和「smtp_port」設置或者使用ini_set() –

回答

0

使用PHP的mail()函數是可能的。

<?php 
$to  = '[email protected]'; 
$subject = 'the subject'; 
$message = 'hello'; 
$headers = 'From: [email protected]' . "\r\n" . 
    'Reply-To: [email protected]' . "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 

mail($to, $subject, $message, $headers); 
?> 

採取下列參考更多:

php.ini文件來配置你的SMTP服務器設置:

php.ini配置是這樣的:

[mail function] 
; For Win32 only. 
; http://php.net/smtp 
SMTP = localhost 
; http://php.net/smtp-port 
smtp_port = 25 

添加您的服務器名稱而不是localhost

+0

如果你可以告訴我如何解決這個問題:mail():無法連接到「本地主機」端口25的郵件服務器, 「SMTP」和「smtp_port」在php.ini中設置或使用ini_set() –

+0

@Ayon,已更新答案。請再次檢查。 – LuFFy

+0

我想要的是發送電子郵件沒有SMTP服務器,顯然PHP的郵件()函數需要一個。 –

0

想要直接向收件人發送電子郵件,並且沒有SMTP服務器,只有一個解決方案。通常情況下,我們發送一封電子郵件,該過程是這樣的:

發送者>發件人的SMTP服務器 - >收件人的SMTP服務器 - >收件人

但我們可以削減發送者>發件人的SMTP服務器進程,直接發送郵件到收件人的SMTP服務器。整個信息和命令我們需要發送相同發送到發件人的SMTP服務器,但它必須是一個正確的順序,即

send a command 
wait for response 
send another command 
... 

這個序列,我們可以發送電子郵件到任何SMTP服務器,無論是發件人還是收件人。

+0

一旦你找到解決方案,保持接受答案的習慣,關心。 – LuFFy

+0

我不會判斷,因爲它可能會誤導其他訪問者。 –