Rya*_*yan 6 php formatting phpmailer
我目前收到的是从PHPMailer使用普通/文本电子邮件发送的收到的电子邮件问题.我目前通过获取行并保存到变量$ message来从数据库返回电子邮件消息.数据库中的消息格式如下:
This is some email information. \r\n This is some more email information.
Run Code Online (Sandbox Code Playgroud)
收到的电子邮件显示的是带有\ r \n的消息,而不是返回一个新行.
我的PHPMailer代码类似于以下内容:
$subject = $row['subject'];
$message = $row['message'];
// PHP Mailer
$mail = new PHPMailer();
$mail->From = "noreply@mywebsite.org";
$mail->FromName = "MyWebsite.org";
$mail->AddAddress('recipient@email.com');
$mail->ContentType = 'text/plain';
$mail->IsHTML(false);
$mail->Subject = $subject;
$mail->Body = $message;
$mail->AltBody = $message;
if(!$email->Send()){
echo "Mailer Error: " . $mail->ErrorInfo;
}
Run Code Online (Sandbox Code Playgroud)
我的问题:如何使用PHPMailer正确格式化\ r \n?这是PHPMailer设置还是我在代码中做错了什么?
这可能只是在最初准备消息时使用单引号而不是双引号的简单情况.
使用单引号将导致\ r \n作为字符串的一部分存储在数据库中,然后PHPMailer将在电子邮件中输出\ r \n而不是实际的换行符.
使用双引号将解决问题.
例如,$message = 'Line 1\r\nLine 2';(单引号)将输出为
Line 1\r\nLine 2
Run Code Online (Sandbox Code Playgroud)
while $message = "Line 1\r\nLine 2";(双引号)将输出为
Line 1
Line 2
Run Code Online (Sandbox Code Playgroud)
即使使用AltBody发送电子邮件的HTML和纯文本版本,这对我也有用.
小智 6
只需在字符串上制作 nl2br() ......但是在 phpmailer 之外......然后将字符串写入正文“”; 并且不需要使用 preg_replace 或类似的东西。
我会一步一步解释
$string = nl2br($_POST["message"]);
之后在php mailer的正文中这样写
$mail->Body = "$string";
并且它.. 如此简单......好吧
小智 5
看起来您已\r\n作为文本保存到数据库中 - PHP 不会解析它。您实际上需要在数据库中的“消息”中保存一个新行
Ryan在对另一个答案的评论中提到了这一点,但我对此感到挣扎,觉得这应该是它自己的答案.
删除AltBody已经奏效.看起来像这样.
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
Run Code Online (Sandbox Code Playgroud)
这似乎是$ mail-> isHTML()设置为true或false的情况.我不确定为什么会出现这种情况.也许客户我和Ryan发送只接受纯文本电子邮件,AltBody不仅发送纯文本,而且实际上删除了换行符.如果您需要发送一条HTML消息,如果客户端无法接受标签,则不会显示标签,那么我怀疑您要么必须使用它,要么深入了解PHPMailer代码
| 归档时间: |
|
| 查看次数: |
13820 次 |
| 最近记录: |