\ r \ n无效但\ r \ n \ r \ n无效

时间:2013-09-12 06:56:00

标签: codeigniter newline line-breaks php

我通过CodeIgniter的电子邮件发送电子邮件 - > 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美元

     

GST ON SERVICES:$ 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:ddddddddddddddddddddddd \ r \ n”; //传递

1 个答案:

答案 0 :(得分:1)

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

的开发人员

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

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

  • Outlook版本20xx
  • 的Hotmail
  • 的Gmail

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

可以更改Outlook设置以禁用Outlook删除额外的换行符

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

易于开发的解决方案:

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