PHP邮件:发送ÅÄÖ字符?

时间:2011-09-27 15:49:26

标签: php email character-encoding

我正在尝试发送包含ÅÄÖ字符(瑞典语)的邮件。

我已经尝试将邮件标题更改为UTF-8和iso-8859-1,但这些都不起作用。我也尝试在utf8_encode()以及mb_encode_mimeheader()中包装文本,但没有成功。在某些情况下,我会得到中文字符,而不是我想要的。

我只是尝试使用没有结果的htmlentities()。

        $values = array(
            'name' => $this->input->post('name'),
            'email' => $this->input->post('email'),
            'ref' => $this->input->post('ref'),
            'sex' => $this->input->post('sex'),
            'age' => $this->input->post('age'),
            'question' => $this->input->post('msg'),
            'ip' => $_SERVER['REMOTE_ADDR']
        );

        $to      = '@live.se';
        $subject = $values['name'] . ' har skickat en fråga!';
        $message  = 'Namn:'.$values['name']." \r\n";
        $message .= "\r\nEmail:".$values['email']." \r\n";
        $message .= "\r\nKön:".(($values['sex'] == 'f') ? 'Kvinna' : 'Man')." \r\n";
        $message .= "\r\nÅlder:".$values['age']." \r\n";
        $message .= "\r\nReferensnummer:".$values['ref']." \r\n";
        $message .= "\r\nMeddelande: \r\n".$values['question'];

        $headers = 'From: noreply@.se' . "\r\n" .
            'Content-type: text/html; charset=iso-8859-1' . "\r\n" .
            'Reply-To: ' .$this->input->post('email') . "\r\n" .
            'X-Mailer: PHP/' . phpversion();

        $message = htmlentities($message);

        if(@mail($to, $subject, $message, $headers)) {
            if($this->input->is_ajax_request()) {
                echo 1;
            }else {

                $data['message']['header'] = 'Tack så mycket!';
                $data['message']['content'] = 'Din fråga skickades utan problem! Jag återkommer snarast möjligt.';

                echo $this->load->view('includes/header', array(), true);
                echo $this->load->view('message', $data['message'], true);
                echo $this->load->view('includes/footer', array(), true);
            }
        }else {
            $fail = true;
        }

3 个答案:

答案 0 :(得分:3)

我不知道这是否是实现这一目标的最佳方法。但我过去常常使用这样的邮件:

mail($to, "=?utf-8?B?".base64_encode($subject)."?=", $message, $headers);

答案 1 :(得分:0)

在试图解决这个问题时,我记得我正在使用Codeigniter,并且想到也许,只是也许,codeigniter有一个内置的电子邮件库。事实证明它确实如此!

所以我试了一下,发现它有一个严重的错误。幸运的是,我在这里找到了该文件的固定版本:http://codeigniter.com/forums/viewthread/87108/P15/#753867

现在它有效。我不确切知道codeigniter是做什么来使它工作,但我很高兴它做到了!

tl;博士:我没有真正解决问题的方法。

答案 2 :(得分:-4)

此。

  $message = preg_replace('/[^(\x20-\x7F)]*/','', $message);