发送邮件时字符错误

时间:2013-08-09 12:58:42

标签: utf-8 php

我在PHP中使用mail()函数发送的电子邮件的字符设置存在问题。

我编写PHP代码的实际文件是UTF-8字符集。我还确保在电子邮件的标题中设置了charset = UTF-8,我甚至在标题中为基本HTML内容添加了元标记。不过,它不起作用。

这就是PHP代码的样子:

// Prepare the e-mail to the GUEST
$to = $email;
$subject = "PÅMINNELSE: Bekräfta registrering för Event";

// Defining the headers
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";
$headers .= "From: Pre-registration <event@adomain.com>" . "\r\n";

include("gemailreminder.php");

// Send the mail now!
mail($to, $subject, $message, $headers);

包含文件gemailreminder.php的内容如下所示:

<?php
$message = <<< MESSAGE
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>REMINDER E-MAIL</title>
</head>
<body>
<p >text...</p >
</body>
</html>
MESSAGE;
?>

有什么建议可以帮我解决这个问题吗?

提前致谢!

//安德烈亚斯

3 个答案:

答案 0 :(得分:0)

包含非ascii字符的电子邮件内容必须使用base64编码发送。

使用PHP的base64_encode()函数这很简单,但坦率地说,使用PHP mail()函数时有太多这样的怪癖要小心。

我的建议是使用已编写的现有类邮件程序类之一,为您完成所有艰苦工作 - 不再混淆标题,不再担心编码,发送附件变得容易等等。

通常推荐的课程SwiftmailerphpMailer.

使用它们中的任何一个,我保证你永远不会再想直接调用旧的mail()函数。

答案 1 :(得分:0)

你必须在utf-8中保存gemailreminder.php,使用你的编辑器设置来做到这一点。

答案 2 :(得分:0)

供参考:

出于某种奇怪的原因,它突然又开始重新开始工作了。 也许我的webhotel提供商在他们的服务器或设置上遇到了一段时间的问题。

感谢您抽出时间和努力提供答案。我仍然会更熟悉Swiftmailer和phpMail类。

此致  安德烈亚斯