主要是编码的问题:解决办法就是: 读取的数据设置好编码方式; 发邮件的时候也指定编码方式;
先用函数base64_encode() 使用 MIME base64 对数据进行编码
标题字符串前加编码类型例如: =?UTF-8?B?
当然如果是gb2312的话就 =?GB2312?B?
标题字符串后加:?=
-----------我的供配置参考---------
- <html>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <body>
- <?php
- if(strlen($_POST["from"]) > 1)
- //if "email" is filled out, send email
- {
- //send email
- $email = $_POST["from"] ;
- $mailto = $_POST["mailto"];
- $subject = "=?UTF-8?B?" . base64_encode($_POST["subject"]) . "?=";
- $message = $_POST["message"] ;
- $header = 'MIME-Version: 1.0' . "\r\n"
- . "Content-type: text/html; charset=utf-8". "\r\n"
- . "From: <$email>"."\r\n";
- //echo "mailto:$mailto<br />", "Subject: $subject<br />", "message:$message<br />", "From: $email<br />" ;
- mail("$mailto", "$subject", $message, "$header" );
- echo "<br />Your mail has been sent !
- Thank you for using our Mail system ...<br />
- We shall go to main page in 3 seconds <br />";
- }
- else{
- echo "<center><h2>Welcome to Qunero-php Mail system </h2></center><br />";
- echo '<form method="post" action="index.php">
- From : <input type="text" name="from" /><br/ >
- MailTo : <input type="text" name="mailto" /><br />
- Subject : <input type="text" name="subject" /><br />
- Message : <br /><textarea name="message" rows="15" cols="80"> </textarea><br />
- <input type="submit" />
- </form>';
- }
- ?>
- </body>
- </html>
----------------- over ---------------
- <?php
- /**
- * PHP 邮件乱码处理.
- *
- * @author: Guya
- */
-
- /**
- * 邮件中文字符编码函数.
- * 通常编码就是 =? + 大写的页面编码 + ?B? + base_64()编码的字符 + ?= 很容易不是 :)
- *
- * @param string $text 要编码的字符串.
- * @param string $charset 页面编码.
- * @return string
- */
- function _encodeForMail($text, $charset) {
- return '=?' . strtoupper($charset) . '?B?' . base64_encode($text) . '?=';
- }
-
- //邮件编码
- $charset = 'utf-8';
-
- //邮件接收者
- $to = array(
- 'email' => 'test@test.com',
- 'nick' => '菜菜'
- );
-
- //邮件发送者
- $from = array(
- 'email' => 'master@mmclub.net',
- 'nick' => '管理员'
- );
-
- //邮件主题
- $subject = '测试邮件';
-
- //邮件内容
- $content = <<< HereDoc
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=$charset" />
- <title>Mail Test</title>
- </head>
- <body>
- 您好! mmclub.net
- </body>
- </html>
- HereDoc;
-
- //邮件头信息
- $header = 'MIME-Version: 1.0' . "\r\n";
- $header .= 'Content-type: text/html; charset=' . $charset . "\r\n";
- $header .= 'Content-Transfer-Encoding: 8bit' . "\r\n"; //这里要设置成 8bit, 不要使用 base64
- $header .= 'From: ' . _encodeForMail($from['name'], $charset) . ' <' . $from['email'] . '>' . "\r\n";
- $header .= 'X-Mailer: MF/1.0'; //本代码片段来自 Mm Framework 一下部分. 可忽略此行.
-
- $toString = _encodeForMail($to['name'], $charset) . ' <' . $to['email'] . '>';
- $subject = _encodeForMail($subject, $charset);
-
- //发送邮件. OK! 用客户端收一下看看. 正常显示中文了.
- mail($toString, $subject, $content, $header);
评论