0

我使用 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;
?>

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

提前致谢!

//安德烈亚斯

4

3 回答 3

0

您必须将gemailreminder.php 保存在utf-8 中,使用您的编辑器设置来执行此操作。

于 2013-08-09T13:11:19.320 回答
0

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

使用 PHP 的函数执行此操作相当简单base64_encode(),但坦率地说,在使用 PHP 的函数时有太多这样的怪癖需要提防mail()

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

通常推荐的类是SwiftmailerphpMailer。.

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

于 2013-08-09T13:05:18.593 回答
0

供参考:

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

感谢您花费时间和精力来提供答案。我仍然会更加熟悉 Swiftmailer 和 phpMail 类。

真诚的,安德烈亚斯

于 2013-08-10T06:32:11.273 回答