PHP电子邮件编码?

Jas*_*onS 32 php email encoding

发送电子邮件时遇到外国字符问题.有人可以告诉我该怎么办?我怀疑问题可能是三件事之一.

  1. html页面编码不正确.(这会影响表单中的POST数据吗?)
  2. 邮件功能没有任何编码.因此程序不知道如何阅读它.(最有可能的)
  3. 文件本身没有正确的编码,因此会产生问题.(可能不太可能)

还有其他可能的原因吗?

我试图逐个敲出这些,直到我发现问题.我认为选项2是最可能的原因.如何为邮件功能添加适当的通用编码?

这就是我现在所拥有的.

$mail_sent = mail($client_email, $title, $message, "From: {$visitor_email}");
Run Code Online (Sandbox Code Playgroud)

我目前知道表单不会发送波兰语或瑞典语字符.

如果有人可以指出任何其他可能的原因并告诉我需要使用哪种编码来发送电子邮件,我将非常感激.

非常感谢.

Bel*_*rog 30

据我所知,PHP不支持UTF-8作为其字符串的默认编码.您需要使用相关的编码/处理函数来进行您希望的编码.

还要Content-Type:text/html;charset=utf-8在电子邮件标题中添加一个,以便电子邮件客户端正确显示字符(或替换为您选择的编码).

  • 对于基于文本的电子邮件(不是在html中)使用:'Content-Type:text/plain; charset = utf-8' (9认同)

Gum*_*mbo 24

您没有指定内容的类型和编码.试试这个:

$headerFields = array(
    "From: {$visitor_email}",
    "MIME-Version: 1.0",
    "Content-Type: text/html;charset=utf-8"
);
$mail_sent = mail($client_email, $title, $message, implode("\r\n", $headerFields));
Run Code Online (Sandbox Code Playgroud)


小智 10

使用此代码

function mail_send($arr)
{
    if (!isset($arr['to_email'], $arr['from_email'], $arr['subject'], $arr['message'])) {
        throw new HelperException('mail(); not all parameters provided.');
    }

    $to      = empty($arr['to_name']) ? $arr['to_email'] : '"' . mb_encode_mimeheader($arr['to_name']) . '" <' . $arr['to_email'] . '>';
    $from    = empty($arr['from_name']) ? $arr['from_email'] : '"' . mb_encode_mimeheader($arr['from_name']) . '" <' . $arr['from_email'] . '>';

    $headers = array
    (
        'MIME-Version: 1.0',
        'Content-Type: text/html; charset="UTF-8";',
        'Content-Transfer-Encoding: 7bit',
        'Date: ' . date('r', $_SERVER['REQUEST_TIME']),
        'Message-ID: <' . $_SERVER['REQUEST_TIME'] . md5($_SERVER['REQUEST_TIME']) . '@' . $_SERVER['SERVER_NAME'] . '>',
        'From: ' . $from,
        'Reply-To: ' . $from,
        'Return-Path: ' . $from,
        'X-Mailer: PHP v' . phpversion(),
        'X-Originating-IP: ' . $_SERVER['SERVER_ADDR'],
    );

    mail($to, '=?UTF-8?B?' . base64_encode($arr['subject']) . '?=', $arr['message'], implode("\n", $headers));
}
Run Code Online (Sandbox Code Playgroud)

来自:http://php.net/manual/en/function.mail.php


tee*_*moo 8

除了之前所说的,不必强制发送HTML格式的邮件以便能够使用UTF-8,您也可以将其格式化为标题中的简单文本:

'Content-Type: text/plain;charset=utf-8'
Run Code Online (Sandbox Code Playgroud)


Ata*_*ara 5

我使用以下代码:

  $text = "";
  $text .= "<html>\n";
  $text .= "<body style=\"font-family:Arial; \">\n";

  $text .= "<b>Add Your text here . . .</b>";
  $text .= date("d.m.Y") . " <br><br>\n\n";

  $text .= "</body>\n";
  $text .= "</html>\n";

$headers = 'From: ' . $myEmail . "\r\n";
$headers .= 'To: ' . $depEmail . "\r\n";    
$headers .= 'Return-Path: ' . $myEmail . "\r\n";
$headers .= 'MIME-Version: 1.0' ."\r\n";
$headers .= 'Content-Type: text/HTML; charset=ISO-8859-1' . "\r\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\r\n";
$headers .= $text . "\r\n";

set_time_limit(30);
if (!mail('', 'Demande information', '', $headers)) {
  Alert(...)
Run Code Online (Sandbox Code Playgroud)