\ r \ n не работает, но \ r \ n \ r \ n работает

Я отправляю электронное письмо по адресу электронной почты-> Отправить () CodeIgniter. Я столкнулся с аномалией, которую я не могу понять.

«\ 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 переменными $message являются проблема.

Электронная почта выглядит так:

ОБЩАЯ СУММА ПЛАТЕЖИ: 1 771,00 долларов США

GST ON SERVICES: 161,00 $

АККАУНТ ПОЛУЧЕН В ПОЛНОЙ КРЕДИТНОЙ КАРТЕ

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

ОПИСАНИЕ УСЛУГ

Имя кодового списка: fggdgfdgfd

Количество: 12

Единичные отчеты о развитии, приобретенные: 7 Приобретенные единичные отчеты о потреблении: 5

Многопользовательские отчеты о развитии, приобретенные: 5 многоцелевых отчетов о проделанной работе: 5

Решаемые. Теперь ищем понимание этого.

После многих тестов формула для отказа: Failure = X + Y:

Failure = длина символа X + пробелы.

Кроме того, эта проблема возникает с Microsoft Outlook 20xx, но не с hotmail или gmail.

Пример:

$ message. = "Единое использование: отчеты о развитии: ddddd \ r \ n"; ////// fail-length 41
$ message. = "Single-use: DevelopmentaldReportsd: dddddd \ r \ n"; /// fail-length 41
$ message. = "Single-use: dDevelopmentaldReportsd: dddddd \ r \ n"; // пропуск – длина 41
$ message. = "Single-use: DevelopmentaldReportsd: dddddddddddddddddddddddddddddddddddddddddddddd \ r \ n"; // проходить

ПРИМЕЧАНИЕ. Этот ответ предназначен для разработчиков, использующих CodeIgniter версии 2.1.3

Это не проверено ни на одной другой PHP Framework.

Основываясь на многих тестах, изменяя длину символа, добавляя / удаляя пробелы и тестируя различные службы электронной почты:

  • Версия Outlook 20xx
  • Hotmail
  • Gmail

Можно с уверенностью заключить, что CodeIgniter версии 2.1.3 анализирует сообщение таким образом, чтобы длина строки длиной около 40 символов + 1 символ пробела + символ новой строки и отправка электронной почты всем трем адресам электронной почты, указанным выше, что только Outlook будет определите, что символ новой строки является символом «Extra» новой строки и, следовательно, удаляет его.

Можно изменить настройки внешнего вида, чтобы отключить Outlook от удаления дополнительных символов новой строки

Как видно из ссылки: Microsoft Outlook Руководство по отключению удаленного удаления новой строки

РЕШЕНИЕ ЛЕГКОГО РАЗРАБОТЧИКА:

Держите длину строки не более 39 символов, включая пробелы.