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

时间:2014-09-26 09:14:17

标签: php codeigniter utf-8

我正在为非政府组织开发一个开源假期管理系统。该软件必须以多种语言提供;例如法国人和高棉人。

我在尝试使用 CodeIgniter 2.2.0 发送HTML电子邮件时遇到了困难。我知道这是可能的,这个问题已在这里提出。但我仍然失败。

我想要实现的目标:

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

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

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

  • 我项目的所有文件都是UTF-8(无BOM)编码。
  • 有人建议将'newline'和'crlf'设置设为“\ r \ n”。

让我们以我的项目为例:

  • 包含电子邮件HTML正文的CI View(法语示例):
  • 发送电子邮件的CI controller
  • 我使用的配置(我尝试过各种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";

1 个答案:

答案 0 :(得分:2)

经过大量搜索后,我放弃了,决定使用PHPMailer和CodeIgniter的包装器。我不知道出了什么问题,但让它工作的唯一方法是使用PHPMailer将编码属性显式设置为 quoted-printable ,如此示例: / p>

<?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();

如果您未设置编码属性,则会正确设置主题和发件人,但不会设置HTML正文...

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

您可以使用此wrapper for CodeIgniter,但在更新Body属性之前,请不要忘记将编码属性明确设置为 quoted-printable