邮件 - 在收到的电子邮件中可见 \r\n 个字符 [重复]

Posted

技术标签:

【中文标题】邮件 - 在收到的电子邮件中可见 \\r\\n 个字符 [重复]【英文标题】:Mail - \r\n characters visible in recieved email [duplicate]邮件 - 在收到的电子邮件中可见 \r\n 个字符 [重复] 【发布时间】:2021-05-19 19:23:38 【问题描述】:

我正在向自己发送一封测试电子邮件,其中包含插入到表单中的值。

我收到了电子邮件,但“格式”很奇怪,\r\n 是可见的。我也试过%0D%0A</br>(虽然没有指定它是html),它也是可见的。我也试过php_EOL

此外,我还在第一封电子邮件之后收到了第二封电子邮件,但它只包含之前表单的一小部分。

第一封电子邮件:

Date of arrival: 19-02-2021%0D%0A
                                                                        Date of departure: 27-02-2021%0D%0A
                                                                        Room selected:  Room 01 %0D%0A
                                                                        Name: dread%0D%0A
                                                                        Surname: Zxy%0D%0A
                                                                        Email myemail@gmail.com%0D%0A
                                                                        Phone number: 012345678

第二封电子邮件:

Date of arrival: 19-02-2021%0D%0A
                                                                        Date of departure: 26-02-2021%0D%0A

编辑 我刚刚注意到第二封电子邮件的出发日期与第一封不同。我不知道为什么会这样,所以我也会添加 jQuery 代码。

如果有人知道如何解决这个问题,我将非常感激。

代码:

<?php
    if(isset($_POST['submit'])) 
        $arrivalDate = $_POST['arrivalDate'];
        $departureDate = $_POST['departureDate'];
        $room = $_POST['room'];
        $user_name = $_POST['user_name'];
        $surname = $_POST['surname'];
        $email = $_POST['email'];
        $tel = $_POST['tel'];
                    
        $to = $_POST['email'];
        $subject = 'Reservation';
        $body = 'Date of arrival: '.$arrivalDate.'\r\n
                Date of departure: '.$departureDate.'\r\n
                Room selected: '.$room.'\r\n
                Name: '.$user_name.'\r\n
                Surname: '.$surname.'\r\n
                Email '.$email.'\r\n
                Phone number: '.$tel;
                            
        wp_mail( $to, $subject, $body );
        echo "Sent!";
    
?>
jQuery(document).ready(function($) 
    $("#arrivalDate").datepicker(
        minDate: 'dateToday',
        dateFormat: 'dd-mm-yy',
        onSelect: function (date) 
            $("#departureDate").datepicker('option', 'minDate', date);
        
    );
    $("#departureDate").datepicker(
        dateFormat: 'dd-mm-yy'
    );
);

【问题讨论】:

%0D%0A 垃圾在你的字符串中做什么?只需在双引号内使用\r\n 已编辑。这是我的电子邮件的“内容”。你是说应该是"\r\n" 它们在字符串之外。这段代码对我来说毫无意义。请记住,双引号,而不是单引号。 好吧,你说的'string displayed' . $variable . "\r\n" 不,我在回答中添加了一个更好的例子。使用连接和两种不同的引用风格,你会弄得一团糟。 【参考方案1】:

在 PHP 中,单引号和双引号之间存在天壤之别:

<?php echo('\r\n'); ?>

这产生\r\n,字面意思是文本,而这个:

<?php echo("\r\n"); ?>

根据需要实际发出 CRLF。

单引号字符串没有内插,并且不支持控制字符,如\r。双引号字符串可以。

话虽如此,有更好的表达方式:

<?php
$body = implode("\r\n", [
  "Date of arrival: $arrivalDate",
  "Date of departure: $departureDate",
  "Room selected: $room",
  "Name: $user_name",
  "Surname: $surname",
  "Email $email",
  "Phone number: $tel"
]);                        

让字符串插值为您完成工作,然后使用implode() 将它们连接在一起。

在您的代码中,您不仅要输入\r\n,而且字符串跨越多行,您至少还包括一个LF,另一个无关紧要的\n

这意味着:

<?php

echo('I love
newlines!');
?>

已经包含一个换行符。

【讨论】:

好的。谢谢你。带双引号的"\r\n" 确实解决了它,但我可能会使用你的答案。如果我想在正文中添加额外的字符串(让我们说:谢谢您的注册。您从 xy 到 yx 保留了 room1,内爆也可以处理)?我会在 2 分钟内接受 anwser。需要等待... 你可以随时根据需要添加额外的行,这种格式非常开放。 是的,继续字符串。抱歉有点累。我实际上对此有一个疑问。如何直接在变量旁边添加字符。类似"price: €$price_per night"? 你可以添加任何你想要的东西,PHP strings 相当灵活。 文档解释得更详细,但通常只吸收“类变量”组件。 $room! 很好。 $rooms 如果你想要 s 单独不是,你必须做 $rooms

以上是关于邮件 - 在收到的电子邮件中可见 \r\n 个字符 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

zabbix邮件发不出去

收到的电子邮件正文全部都是乱码该怎么办呢?很着急

从 Gmail API 解码 MIME 电子邮件 - \r\n 和 3D - Python

如何解码收到的电子邮件主题行的UTF8字符集[重复]

base64的MIME

OUTLOOK VBA 收到新邮件后自动保存包含特定字符的附件到指定文件夹