CodeIgniter: как отправлять электронные письма в формате HTML с нелатинскими символами

Я занимаюсь разработкой системы управления отпусками с открытым исходным кодом для НПО. Программное обеспечение должно быть доступно на многих языках; например французский и кхмерский.

Я пытаюсь отправить HTML-письма с CodeIgniter 2.2.0. Я знаю, что это возможно, и что этот вопрос уже задавался здесь. Но я все еще терплю неудачу.

Чего я пытаюсь достичь:

  • Разобрать представление, чтобы создать текст сообщения электронной почты в формате HTML.
  • Отправьте электронное письмо в формате HTML.

Это работает для английского контента, но не работает, когда электронное письмо содержит нелатинские символы.

Я последовал советам предыдущих ответов:

  • Все файлы моего проекта в кодировке UTF-8 (без спецификации).
  • Некоторые люди предлагают установить для параметров ‘newline’ и ‘crlf’ значение «\ r \ n».

Давайте рассмотрим пример с моим проектом:

  • CI View который содержит текст сообщения электронной почты (пример на французском):
  • CI контроллер который отправляет электронное письмо:
  • Конфиг, который я использую (я пробовал с различными SMTP-серверами; демонстрационная версия demo.leave-management-system.org подключена к GMail):

$config['protocol'] = 'smtp';
$config['useragent'] = 'CodeIgniter';
$config['smtp_host'] = 'localhost';
$config['smtp_user'] = '';
$config['smtp_pass'] = '';
$config['_smtp_auth'] = TRUE;
$config['smtp_port'] = '25';
$config['smtp_timeout'] = '20';
$config['charset'] = 'utf-8';   //'iso-8859-1'
$config['mailtype'] = 'html';
$config['wordwrap'] = FALSE;
//$config['wrapchars'] = 80;
$config['validate'] = FALSE;
$config['priority'] = 3;
$config['newline'] = "\r\n";
$config['crlf'] = "\r\n";

0

Решение

После долгих поисков я сдался и решил использовать PHPMailer с оберткой для CodeIgniter. Я не знаю, что не так, но единственный способ заставить это работать, это явно установить кодирование собственность на кавычко версия для печати как в этом примере с PHPMailer:

<?php
echo "Start<br />\n";
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'localhost';
$mail->Port = 25;
$mail->setFrom('[email protected]', 'ប្រភេទនៃការសុំច្បាប់');
$mail->addAddress('[email protected]');
$mail->WordWrap = 70;
$mail->CharSet  = 'UTF-8';
$mail->Encoding = 'quoted-printable';
$mail->XMailer  = 'Test';
$mail->IsHTML(true);
$message = '<html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"><meta charset="UTF-8"></head><body>test: <ul><li>ប្រភេទឈប់សម្រាកបានធ្វើអោយទាន់សម័យដោយជោគជ័យ</li></ul></body></html>';
$mail->Subject = 'Khmer - ប្រភេទនៃការសុំច្បាប់';
$mail->Body = $message;
$mail->send();

Если вы не установите кодирование свойство, Subject и Sender будут установлены правильно, но не HTML Body …

Проблема библиотеки CI Mail заключается в том, что вы должны экранировать все нелатинские символы Body. Это нереально, если вы работаете с представлением HTML, содержащим неевропейский язык.

Вы могли бы использовать это обертка для CodeIgniter но не забудьте явно установить кодирование собственность на кавычко версия для печати перед обновлением свойства Body.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]