【问题标题】:\r\n not working but \r\n\r\n works\r\n 不工作,但 \r\n\r\n 工作
【发布时间】:2013-09-12 06:55:59
【问题描述】:

我正在通过 CodeIgniter 的 email->send() 发送电子邮件。我遇到了一个我无法弄清楚的异常情况。

“\r\n”在电子邮件的某个部分不起作用。但是,如果我将“\r\n”切换为“\r\n\r\n”,它会起作用。我的意思是,它添加了预期的 2 个换行符。

问题区域在底部。

$order  = $this->ordersclass->getOrder( $order_id );
$quantity   = $order['no_codes'];
$client = $this->clientclass->getClient( $order['client_id'] );
$multi_d    = $this->session->userdata('multi-use-codes-d');
$multi_t    = $this->session->userdata('multi-use-codes-t');

$this->load->library('email');

$to         = $client['client_email'];
$subject    = 'Personal Resiliency Builder Order';
$from       = 'accounts@resiliencybuilder.com.au';

$message  = "TAX INVOICE\r\n\r\n";
$message .= "Client Name: ". $client['client_name']."\r\n";
$message .= "Invoice Number: ".$order['order_id']."\r\n";
$message .= "Invoice Date: ".$order['order_timestamp']."\r\n\r\n";

$message .= "TOTAL AMOUNT PAYABLE:     $".number_format($order['order_amount'],2)."\r\n";
$message .= "GST ON SERVICES:          $".number_format(($order['order_amount']/110)*10,2)."\r\n\r\n";

$message .= "ACCOUNT PAID IN FULL VIA CREDIT CARD\r\n\r\n";
$message .= "=============================================================\r\n";

$message .= "DESCRIPTION OF SERVICES\r\n\r\n";

$message .= "Code List Name: ".$this->session->userdata('codelistname') . "\r\n";
$message .= "Quantity: ".$quantity ."\r\n";
$message .= "Single-use Developmental Reports Purchased: ".$order['no_codes_d']."\r\n";
$message .= "Single-use Thriving Reports Purchased: ".$order['no_codes_t']."\r\n";

最后 2 个$message 变量是问题所在。

电子邮件如下所示:

应付总额:1,771.00 美元

服务消费税:$161.00

通过信用卡全额支付的帐户

================================================ ===============

服务说明

代码列表名称:fggdgfdgfd

数量:12

购买的一次性开发报告:7 份一次性使用蓬勃发展 购买的报告:5

购买的多用途发育报告:5 购买的多用途蓬勃发展报告:5

已解决。现在寻找它背后的理解。

经过多次测试,失败的公式是:失败= X + Y:

失败 = X 字符长度 + 空格。

此外,Microsoft Outlook 20xx 会出现此问题,但 hotmail 或 gmail 不会出现此问题。

例子:

$message .= "一次性使用:发育报告:ddddd\r\n"; ////// 失败 - 长度 41
$message .= "一次性使用:DevelopmentaldReportsd:dddddd\r\n"; /// 失败 - 长度 41
$message .= "一次性使用:dDevelopmentaldReportsd:dddddd\r\n"; // 通过 - 长度 41
$message .= "一次性使用:DevelopmentaldReportsd:dddddddddddddddddddddddddddddddddddddddd\r\n"; //通过

【问题讨论】:

  • 给$config['newline'] = "\r\n";这样的电子邮件配置并尝试。
  • 我添加了 $config['newline'] = "\r\n";进入 config.php 文件并像这样调用它: $this->config->config['newline'];它不起作用。电子邮件仍然具有上述相同的布局。

标签: codeigniter newline line-breaks php


【解决方案1】:

注意:此答案适用于使用 CodeIgniter 版本 2.1.3

的开发人员

这未在任何其他 PHP 框架上进行测试。

基于通过更改字符长度、添加/删除空格以及使用不同电子邮件服务进行测试的许多测试:

  • Outlook 版本 20xx
  • 热邮件
  • Gmail

可以安全地得出结论,CodeIgniter 版本 2.1.3 以这样一种方式解析消息:给定一个大约 40 个字符长 + 1 个空格字符 + 一个换行符的字符串长度,并将电子邮件发送到上面的所有三个电子邮件服务,即只有 Outlook 会确定换行符是“额外”换行符,因此将其删除。

可以更改 Outlook 设置以禁用 Outlook 删除多余的换行符

如链接所示:Microsoft Outlook Guide to disabling Extra Newline Removal

简单的开发者解决方案:

将字符串长度保持为最多 39 个字符,包括空格。

【讨论】:

  • 哇!我花了好几个小时试图弄清楚为什么我的电子邮件总是在某些行上删除换行符。这是完全一样的情况。 40 多个字符和空格以及所有内容。另外,仅供参考,我认为 PHP mail() 函数更是如此。我试图从 WordPress 实例中使用该函数并遇到了这种情况。
  • 感谢您提供有关 PHP mail() 函数的信息。我相信它会帮助可能遇到同样问题的其他人。
猜你喜欢
  • 1970-01-01
  • 2011-09-26
  • 2012-05-07
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
相关资源
最近更新 更多