【问题标题】:php mail () /r/n and <br> have no effectphp mail() /r/n 和 <br> 没有效果
【发布时间】:2013-11-09 13:03:31
【问题描述】:

我已经查看了一些解决方案,但都没有奏效。

<?php
    $name = $_POST['name'] . "<br>" ;
    $email = $_POST['email'] . "/r/n";
    $phone = $_POST['phone'] . "/r/n";
    $message = $_POST['message'] . "/r/n";
    $from = 'From: email@place.com';
    $to = 'mail@otherplace.com';
    $subject = 'subject here';

    $body = "From: $name E-Mail: $email Phone: $phone $message"
?>
<?php
    if ($_POST['submit']) {
        if (mail ($to, $subject, $body, $from)) {
            echo '<p>Your message has been sent</p>';
        }else{
            echo '<p>Something went wrong, go back and try again.</p>';
        }
    }
?>

这不仅在一行上显示所有内容,而且还显示 /r/n 和
标签,就好像它们只是文本一样。

【问题讨论】:

    标签: php email newline


    【解决方案1】:

    简单:

    您需要将所有/r/n 更改为\r\n

    现在为了使&lt;br&gt; 生效,您需要将其添加到您的headers

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

    有关mail()headers() 的更多信息,请参阅PHP 手册

    【讨论】:

    • 我认为邮件协议需要\r\n,不一定和PHP_EOL一样。
    • @zneak 那你认为我应该删除我提到的内容吗?不过,我在几分钟前研究它时确实找到了一些关于它的信息。
    • 是的,我现在可以确认 SMTP 标头行需要以 CRLF 终止,因此 不应该 使用 PHP_EOL。查找RFC 2821 的第 2.3.7 节。
    • @ShankarDamodaran 感谢 Shankar,这确实是一个不错的数字!也感谢您的 +1,干杯:)
    • 又短又甜,+1 :)
    【解决方案2】:

    您的&lt;br&gt; 将不起作用,因为您没有发送 HTML 电子邮件。为什么不简单地在HEREDOC 块中构造正文,例如

    $name = isset($_POST['name']) ? $_POST['name'] : 'Not set';
    $email = isset($_POST['email']) ? $_POST['email'] : 'Not set';
    $phone = isset($_POST['phone']) ? $_POST['phone'] : 'Not set';
    $message = isset($_POST['message']) ? $_POST['message'] : null;
    
    $body = <<<_TXT
    From: $name
    E-mail: $email
    Phone: $phone
    
    $message
    _TXT;
    

    【讨论】:

      猜你喜欢
      • 2011-03-04
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 2014-07-24
      • 2012-06-10
      • 2014-06-28
      • 2011-09-03
      • 1970-01-01
      相关资源
      最近更新 更多