收到354

时间:2017-04-03 06:42:45

标签: php email smtp

我试图通过纯PHP代码发送电子邮件而无需登录SMTP服务器,代码如下:

<?php
$from = "test@localhost";
$to = 'ayon@hyurl.com';
$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>

程序挂断,有人知道原因,我怎样才能将此电子邮件发送到指定地址。另外:我非常确定我的脚本使用 \ r \ n 作为行尾。

2 个答案:

答案 0 :(得分:0)

使用PHP的mail()功能是可能的。

<?php
$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\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

答案 1 :(得分:0)

想要直接向收件人发送电子邮件,而没有SMTP服务器,只有一个解决方案。通常,我们发送电子邮件,程序如下:

  

sender-&gt;发件人的SMTP服务器 - &gt;收件人的SMTP服务器 - &gt;收件人

但我们可以减少发件人 - >发件人的SMTP服务器流程,直接将电子邮件发送到收件人的SMTP服务器。我们需要发送的整个消息和命令与发送到发件人的SMTP服务器相同,但它必须按照正确的顺序排列,即

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

按照这个顺序,我们可以向任何SMTP服务器发送电子邮件,无论是发件人还是接收者。