2014-09-26 122 views
0

我正在为非政府组织开发一个开源休假管理系统。该软件必须以多种语言提供;例如法国和高棉。CodeIgniter:如何发送非拉丁字符的HTML电子邮件

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

我想实现:

  • 解析一个视图中创建电子邮件的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"; 
+0

http://stackoverflow.com/questions/20655632/email-subject-shortened-in-codeigniter,希望这会有所帮助, – Rorschach 2014-09-26 11:12:34

+0

我已经阅读过这个答案。给出的解决方案是在配置数组中将'charset'设置为'utf-8'。我已经这样做了,但没有解决问题。此外,这个问题与这个问题有关,我的问题与按摩有关。不管怎样,谢谢你。 – 2014-09-26 11:48:28

+1

我明白了,你有没有看到这个http://www.ustrem.org/en/articles/send-mail-using-phpmailer-en/? – Rorschach 2014-09-26 11:53:01

回答

2

经过大量的搜索后,我放弃了并决定使用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(); 

如果你不” t设置编码属性,主题和发件人将正确设置,但不是HTML正文...

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

您可以使用此wrapper for CodeIgniter但不要忘了明确设置编码属性引用可打印更新Body属性之前。