使用PHP的mail()函数发送的邮件没有发件人信息

3
我正在使用PHP的邮件函数发送电子邮件。 它的功能正常,但所有的电子邮件客户端都显示空白的发件人字段。 以下是我使用该函数的方式:
mail( 'mail@example.com', 'Example subject', $msg, 
       implode( '\r\n', array( 'Content-Type: text/html; charset=UTF-8', 'From: test@example.com') ) );

我说过除了当消息到达时From字段为空之外,一切都正常。有什么想法为什么会发生这种情况?


那么,这个编辑后的代码的结果是什么? - Your Common Sense
尝试将 implode 函数与邮件功能结合,并将其保存为变量,然后在邮件功能中使用该变量。 - OM The Eternity
2
"\r\n"不起作用,你必须将它放在双引号中,这样它才能插值。 - K. Norbert
我将数组中“From”字符串的位置改变(将其移至第一位),现在我的电子邮件中正确显示了“From”字段。 但问题是,现在它搞乱了我的电子邮件正文。奇怪的换行符(超过10行)突然出现了。 这很奇怪。 - Nikkeloodeni
为什么在邮件函数中使用implode?@Nikkeloodeni - Ravi Delixan
显示剩余6条评论
2个回答

2

试试这个

<?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 
    $implode =implode( "\r\n", array( 'Content-Type: text/html; charset=UTF-8', 'From: test@example.com') );

    echo "<pre>";
    print_r($implode);
    ?>

这确实起作用,但我仍然不明白为什么我的版本不包括发件人标题(From header)?我也尝试添加 X-Mailer 和 Reply-To 标题,但发送的电子邮件中仍然没有 From 字段。 - Nikkeloodeni
尝试在邮件函数中使用implode,将其保存到一个变量中,并在邮件函数中使用该变量。 - OM The Eternity
你在邮件函数中使用了一个单独的变量来进行implode操作吗? - OM The Eternity
内容类型:文本/HTML;字符集:UTF-8 发件人:test@example.com - Nikkeloodeni

1

你在"Content-Type"之前缺少引号,可能将错误日志记录降低了,因此它正在忽略问题并混淆解析您的代码。

应该是:

mail( 'mail@example.com', "Example subject", $msg, 
       implode( "\r\n", array( 'Content-Type: text/html; charset=UTF-8', 'From: test@example.com') ) );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接