我试图通过纯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 作为行尾。
答案 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服务器发送电子邮件,无论是发件人还是接收者。