PHPMailer 忽略

问题描述 投票:0回答:6

我目前收到的使用纯文本/文本电子邮件从 PHPMailer 发送的电子邮件存在问题。我目前正在通过获取行并将其保存到变量 $message 中来从数据库返回电子邮件。数据库中的消息格式如下:

This is some email information. \r\n This is some more email information.

收到的电子邮件显示带有以下内容的消息 而不是返回新行。

我的 PHPMailer 代码类似于以下内容:

$subject = $row['subject'];
$message = $row['message'];

// PHP Mailer
$mail = new PHPMailer();
$mail->From = "[email protected]";
$mail->FromName = "MyWebsite.org";
$mail->AddAddress('[email protected]');
$mail->ContentType = 'text/plain';
$mail->IsHTML(false);
$mail->Subject = $subject;
$mail->Body = $message;
$mail->AltBody = $message;
if(!$email->Send()){
    echo "Mailer Error: " . $mail->ErrorInfo;
} 

我的问题:我怎样才能得到 使用 PHPMailer 正确格式化?这是 PHPMailer 设置还是我在代码中做错了什么?

php formatting phpmailer
6个回答
13
投票

这可能只是最初准备消息时使用单引号而不是双引号的简单情况。

使用单引号会导致 作为字符串的一部分存储在数据库中,然后 PHPMailer 将输出 在电子邮件中而不是实际的换行符。

使用双引号可以解决问题。

例如,

$message = 'Line 1\r\nLine 2';
(单引号) 将输出为

Line 1\r\nLine 2

while

$message = "Line 1\r\nLine 2";
(双引号) 将输出为

Line 1
Line 2

即使使用 AltBody 发送电子邮件的 HTML 和纯文本版本,这也适用于我。


11
投票

Ryan 在其他答案的评论中提到了这一点,但我对此感到挣扎,并认为这应该有自己的答案。

删除 AltBody 已成功。看起来像这样。

$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

无论 $mail->isHTML() 设置为 true 还是 false,情况似乎都是如此。我不知道为什么会出现这种情况。也许我和 Ryan 发送的客户只接受纯文本电子邮件,而 AltBody 不仅发送纯文本,而且实际上删除了换行符。如果您需要发送一条在客户端无法接受标签的情况下不会显示标签的 HTML 消息,那么我怀疑您要么必须忍受它,要么深入研究 PHPMailer 代码


7
投票

只需在字符串上创建 nl2br() ...但在 phpmailer 之外...然后将字符串写入正文“”;并且无需使用 preg_replace 或类似的东西。

我会一步步解释

$string = nl2br($_POST["message"]);

之后在 php 邮件程序的正文中像这样写

$mail->正文 = "$string";

那就是..这么简单...好吧


5
投票

看起来您已将

\r\n
作为文本保存到数据库中 - PHP 不会解析它。您实际上需要将新行保存到数据库中的“消息”中


3
投票
$body = stripcslashes(isset($body) 
? 
preg_replace('#(\\\r|\\\r\\\n|\\\n)#', '<br/>', $body) 
: 
false);
$body = str_replace("<br/><br/>","<br/>",$body);

这对我有用!


2
投票

这是一个老问题,但提供的解决方案对我不起作用。然而,以下内容确实有效,所以我认为它可能值得分享。

$body = nl2br($body);

© www.soinside.com 2019 - 2024. All rights reserved.