我在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;
?>
有什么建议可以帮我解决这个问题吗?
提前致谢!
//安德烈亚斯
答案 0 :(得分:0)
包含非ascii字符的电子邮件内容必须使用base64编码发送。
使用PHP的base64_encode()
函数这很简单,但坦率地说,使用PHP mail()
函数时有太多这样的怪癖要小心。
我的建议是使用已编写的现有类邮件程序类之一,为您完成所有艰苦工作 - 不再混淆标题,不再担心编码,发送附件变得容易等等。
通常推荐的课程Swiftmailer和phpMailer.。
使用它们中的任何一个,我保证你永远不会再想直接调用旧的mail()
函数。
答案 1 :(得分:0)
你必须在utf-8中保存gemailreminder.php,使用你的编辑器设置来做到这一点。
答案 2 :(得分:0)
供参考:
出于某种奇怪的原因,它突然又开始重新开始工作了。 也许我的webhotel提供商在他们的服务器或设置上遇到了一段时间的问题。
感谢您抽出时间和努力提供答案。我仍然会更熟悉Swiftmailer和phpMail类。
此致 安德烈亚斯