2017-04-03 22 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

我不会判断,因为它可能会误导其他访问者。 –