CodeIgniter:如何发送非拉丁字符的HTML电子邮件


CodeIgniter : how to send HTML e-mails with non-latin characters

我正在为非政府组织开发一个开源的休假管理系统。该软件必须有多种语言版本;例如french和khmer。

我在尝试用CodeIgniter 2.2.0发送HTML电子邮件时遇到了困难。我知道这是可能的,而且这个问题已经在这里被问过了。但我还是失败了。

我正在努力实现的目标:

  • 分析视图以创建电子邮件的HTML正文
  • 以HTML格式发送电子邮件

这适用于英语内容,但当电子邮件包含非拉丁字符时就不起作用了。

我遵循了之前答案的建议:

  • 我项目的所有文件都是UTF-8(无BOM)编码的
  • 有些人建议将"换行符"answers"crlf"设置设置为"''r''n"

让我们以我的项目为例:

  • 包含电子邮件HTML正文的CI视图(法语示例):
  • 发送电子邮件的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";

经过大量搜索,我放弃了,决定使用PHPMailer和CodeIgniter的包装器。我不知道出了什么问题,但使其工作的唯一方法是显式地将Encoding属性设置为引用的可打印,如PHPMailer:

<?php
echo "Start<br />'n";
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'localhost';
$mail->Port = 25;
$mail->setFrom('test@gmail.com', 'ប្រភេទនៃការសុំច្បាប់');
$mail->addAddress('target@example.com');
$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();

如果不设置Encoding属性,将正确设置Subject和Sender,但不会设置HTML Body。。。

CI邮件库的问题是必须转义正文中的所有非拉丁字符。如果使用包含非欧洲语言的HTML视图,这是不现实的。

您可以将此包装用于CodeIgniter,但在更新Body属性之前,不要忘记将Encoding属性显式设置为可引用