我正在尝试使用SMTP协议和áéíó等特殊字符发送电子邮件库。问题是,即使使用UTF-8配置,电子邮件发送时也没有这个特殊字符。
我正在使用Amazon SES。
看代码
//Libraries
$ci->load->library('email');
//Seta gMail
$config['protocol'] = "smtp";
$config['smtp_host'] = "ssl://";
$config['smtp_user'] = "user";
$config['smtp_pass'] = "pass";
$config['smtp_port'] = "465";
$config['smtp_timeout'] = 30;
$config['charset'] = "utf-8";
$config['wordwrap'] = TRUE;
$config['validate'] = TRUE;
$config['mailtype'] = "html";
$config['newline'] = "'r'n";
$ci->email->initialize($config);
//Carrega o modelo do e-mail
$mensagem = $conteudo;
//Seta variáveis
$ci->email->from("cool@email.com", $titulo);
$ci->email->reply_to('cool@email.com', 'New user');
$ci->email->set_alt_message($conteudo);
$ci->email->to($email_destino);
$ci->email->subject($titulo);
$ci->email->message($mensagem);
$ci->email->send();
只需对主题进行编码就可以了。提供的字符串必须是纯文本/没有编码,否则它将不起作用。
$ci->email->subject(utf8_encode("Special characters : éàî"));
这行不通
$ci->email->subject(utf8_encode("Special characters : éàî"));
对于电子邮件正文,不确定所有特殊字符都被正确编码
$ci->email->message("<p>Special characters : éàî</p>");
这行不通
$ci->email->message("<p>Special characters : éàî</p>");
CodeIgniter内部电子邮件库的问题是,发送带有非拉丁字符的正文是一件痛苦的事情。如果可以转义欧洲语言的某些字符,那么转义完全由非拉丁字符组成的整个文本是不现实的。
即使某些解决方案似乎有效,您也可能面临与某些电子邮件客户端兼容的问题。
一个更好的解决方案是嵌入PHPMailer库,它比内部CI库要好得多。您可以为CodeIgniter使用这个包装器,并通过set_encoding($encoding)
.