邮件 - \r\n 个字符在收到的电子邮件中可见
Mail - \r\n characters visible in recieved email
我正在向自己发送一封测试电子邮件,其中包含插入到表单中的值。
我收到了电子邮件,但“格式”很奇怪,\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
2cn 电子邮件:
Date of arrival: 19-02-2021%0D%0A
Date of departure: 26-02-2021%0D%0A
编辑 我刚刚注意到第 2 封电子邮件包含的出发日期与第 1 封不同。我不知道为什么会这样,所以我也会添加 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'
});
});
在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
是可见的。我也尝试了 %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
2cn 电子邮件:
Date of arrival: 19-02-2021%0D%0A
Date of departure: 26-02-2021%0D%0A
编辑 我刚刚注意到第 2 封电子邮件包含的出发日期与第 1 封不同。我不知道为什么会这样,所以我也会添加 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'
});
});
在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!');
?>
已经包含换行符。