php mail()html-以纯文本格式发送

时间:2018-09-09 16:01:43

标签: php html email

伙计,

这些年来,我使用PHP发送了许多电子邮件,但从未遇到HTML问题。 前几天,我启动了新的Apache / PHP服务器,并且电子邮件发送正常。

所有电子邮件均以纯文本形式发送。似乎编码无法正常工作。

即使有:

$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

正在设置...发送的电子邮件不是HTML,而是纯文本。

我可以使用相同的PHP脚本,然后在另一台服务器上运行它,并收到HTML电子邮件。

所以我知道我的PHP脚本是正确的。 PHP / Apache中的哪种服务器设置会导致所有电子邮件以纯文本格式发送?

收件人是收件人在文本电子邮件的消息区域中收到的消息:

Content-type: text/html; charset=iso-8859-1

From: no-reply@yahoo.com
Message-Id: <20180909154528.C4128612EC@ww1.localdomain>
Date: Sun,  9 Sep 2018 11:45:28 -0400 (EDT)

<html><body><h1>Hello, World!</h1></body></html>

我的脚本代码:
    

$to = 'test99@domain.com';
$subject = 'php test';

$from='no-reply@yahoo.com';

$headers ='';
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: '.$from.' '. "\r\n";

$message = '<html><body>';
$message .= '<h1>Hello, World!</h1>';
$message .= '</body></html>';

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

1 个答案:

答案 0 :(得分:1)

我认为,您的电子邮件客户端正在考虑smtp服务器“不安全”,因此只会将所有html显示为纯文本,而不是将其呈现。 (为避免触发隐藏脚本,隐藏脚本可以通过加载某些链接的资源(如CSS或图像)来调用)

PHP mail()函数使用在php.ini中配置的smtp服务器。在大多数情况下,根本没有配置任何内容,因此服务器本身就充当“ smtp服务器”,可以保证将其检测为垃圾邮件,因为最基本的垃圾邮件检查中约有99%会失败。

我建议切换到某些可用的PHP-Mail-Client(例如https://github.com/PHPMailer/PHPMailer),并配置要通过已知可靠的服务器发送(使用SMTP-Auth)的每封电子邮件和配置良好的SMTP服务器,而不是“ localhost”。