=?UTF-8?B ?? =通过php邮件发送的电子邮件问题

时间:2010-12-23 15:31:02

标签: linux apache php email postfix-mta

我有一个网站,在“联系方式”部分,我有一个表格,用户可以填写以便与我联系。 表单是一个简单的表单,其动作是一个php页面。

php代码:

 $to = "email@domain.com";

 $name=$_POST['name']; // sender name
 $email=$_POST['email']; // sender email
 $tel= $_POST['tel']; // sender tel
 $subject=$_POST['subject']; // subject CHOSEN FROM DROPLIST, ALL TESTED
 $text=$_POST['text']; // Message from sender
 $text.="\n\nTel:".$tel; // Added to message to show me the telephone nr to the sender at bottom of message

 $headers="MIME-Version: 1.0"."\n";
 $headers.="Content-type: text/plain; charset=UTF-8"."\n";
 $headers.="From: $name <$email>"."\n";

 mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $text, $headers, '-fno-reply@domain.com');

有人可以告诉我为什么这种情况大部分时间都有效,但有时我收到的电子邮件没有文字和主题行显示

=?UTF-8?B??=

我使用outlook express,我已阅读此System.Net.Mail and =?utf-8?B?XXXXX.... Headers 但它没有帮助。

问题不在Outlook中,因为当我登录到我从中获取POP3电子邮件的实际邮件程序时,电子邮件看起来是一样的。

当我右键单击Outlook并选择“消息源”时,没有“发件人”信息。

例如,一条好消息应如下所示:

Subject: =?UTF-8?B?w5Z2cmlndA==?=
MIME-Version: 1.0
Content-type: text/plain; charset=UTF-8
From: John Doe 

然而,有问题的人看起来像这样:

Subject: =?UTF-8?B??=
MIME-Version: 1.0
Content-type: text/plain; charset=UTF-8
From:  

好像信息丢失了。

你也应该知道我有自己管理的VPS。 我使用postfix作为电子邮件服务器,如果这与它有任何关系。 但话说回来,为什么它有时会起作用?

我注意到的另一件事是有时特殊字符没有正确显示(通过Outlook和Webmail)。

例如,瑞典语中的“Björkman”名称显示为Björkman,但有时仅显示。

我希望有人知道这个问题,因为我至少很难找到它。

如果您需要更多输入,请告诉我。

1 个答案:

答案 0 :(得分:0)

看起来表单已发布,所有字段都留空。有机器人爬网并提交空表格。您是否能够使用实际表单数据重现这一点?

其他提示:您的代码对电子邮件标题注入是开放的 - 我可以在$ _POST ['name']中发布我想要的任何标题,以换行符分隔,您的代码会将其放入电子邮件标题中。至少从将进入标题部分的用户数据中删除任何换行符。