激活信件都是亂碼,可否指點一下

Home Home
引用 | 編輯 chialewang
2008-08-10 00:10
樓主
推文 x0
【類型】主程式
【版本】6.00
【問題文章演示網址】http://54.xxoo.to

各位前輩 您們好:

激活信件都是亂碼
是信箱的關係還是設定的關係、網頁、程式?
可否指點一下

http://54.xxoo.to

感恩

王嘉樂 敬啟

獻花 x0
引用 | 編輯 月光
2008-08-10 05:10
1樓
  
由於您的編碼為utf-8因此若您寄信到yahoo是亂碼沒錯...因為yahoo信箱採用的是big5編碼...因此非您程式問題是奇摩太笨了不會自動判斷。

獻花 x0
引用 | 編輯 aa
2008-08-12 10:01
2樓
  
如果你用的版本是 UTF-8 ,而只有標題是亂碼,那你要改一下 mail 時的標題編碼

$subj='=?utf-8?B?' . base64_encode("信件標題").'?='

獻花 x0
引用 | 編輯 chialewang
2008-08-14 20:43
3樓
  
站長 您好:

不止標題,連內文都是
請問要在哪個檔案去改?
我每個檔案都用記事本打開過了,就是找不到
不知道是不是漏掉

煩請指點
感恩

王嘉樂 敬啟

獻花 x0
引用 | 編輯 月光
2008-08-14 21:22
4樓
  
下面是引用aa於2008-08-12 10:01發表的 :
如果你用的版本是 UTF-8 ,而只有標題是亂碼,那你要改一下 mail 時的標題編碼

$subj='=?utf-8?B?' . base64_encode("信件標題").'?='

老大您這個是舊版的才是固定的啦...新版的都改用 $db_charset 變數後檯設定了所以應該不是這問題...還是yahoo的問題因為我用yahoo收google 寄來的信件只要是UTF8的就是亂碼

獻花 x0
引用 | 編輯 chialewang
2008-08-17 19:10
5樓
  
測試過了,用yahoo的信箱當站內發信也是,所以的確是yahoo的問題 =.=
gmail也是
而我的xxoo.to,會變為簡體、垃圾郵件

暈倒 表情

感謝兩位前輩的指點

獻花 x0
引用 | 編輯 月光
2008-09-02 03:03
6樓
  
下面是引用chialewang於2008-08-17 19:10發表的 :
測試過了,用yahoo的信箱當站內發信也是,所以的確是yahoo的問題 =.=
gmail也是
而我的xxoo.to,會變為簡體、垃圾郵件

暈倒 表情

感謝兩位前輩的指點

今天我針對這問題去研究了一下發現PHPWIND 6.0以下的版本 使用 mail 函數發送 時 sendemail.php 並沒有標示utf-8因此...是亂碼經過參考6.3版本的 sendemail.php 只要把原本的
複製程式
       if($M_db->S_method == 1){
              if(@mail($toemail,$send_subject,$send_message,$additional)){
                     return true;
              } else{
                     return false;
              }

修改為

複製程式
       $subject = stripslashes($subject);
       $message = stripslashes($message);
       $send_subject = "=?$db_charset?B?".base64_encode(str_replace(array("\r","\n"), array('',' '),$subject)).'?=';
       $send_message = chunk_split(base64_encode(str_replace("\r\n.", " \r\n..", str_replace("\n", "\r\n", str_replace("\r", "\n", str_replace("\r\n", "\n", str_replace("\n\r", "\r", $message)))))));
       $send_from = "=?$db_charset?B?".base64_encode($windid)."?= <$fromemail>";
       $send_to = "=?$db_charset?B?".base64_encode($sendtoname)."?= <$toemail>";
       substr(str_replace(array("\r","\n"),array('','<rn>'),$additional),-4) != '<rn>' && $additional .= "\r\n";
       $additional = "To: $send_to\r\nFrom: $send_from\r\nMIME-Version: 1.0\r\nContent-type: text/plain; charset=$db_charset\r\n{$additional}Content-Transfer-Encoding: base64\r\n";
       if($M_db->S_method == 1){
              if(@mail($toemail,$send_subject,$send_message,$additional)){
                     return true;
              } else{
                     return false;
              }
就好了

獻花 x1
引用 | 編輯 chialewang
2008-11-03 22:46
7樓
  
感恩

抱歉回覆的晚,沒有您說的那一大段耶

全詳文


<?php
require_once('global.php');
require_once(R_P.'require/header.php');

$groupid=='guest' && Showmsg('not_login');
InitGP(array('action'));
!$action && $action='mailto';

list(,,,,$othergd)=explode("\t",$db_gdcheck);

if($action == 'mailto'){
     InitGP(array('uid','username'));
     if($username || is_numeric($uid)){
           if($username){
                 $sql="username='".addslashes($username)."'";
           } else{
                 $sql="uid='$uid'";
           }
           $userdb=$db->get_one("SELECT uid,username,email,publicmail,receivemail FROM pw_members WHERE $sql");
     } else{
           $userdb='';
     }
     !$userdb && Showmsg('undefined_action');
     
     $rt = $db->get_one("SELECT lasttime FROM pw_memberinfo WHERE uid='$winduid'");
     if($timestamp-$rt['lasttime'] < 60){
           Showmsg('sendeamil_limit');
     }
     if(!$_POST['step']){
           if(!$userdb['receivemail'] && $groupid!='3' && $groupid!='4'){
                 Showmsg('sendeamil_refused');
           }
           $to_mail = $userdb['email'];
           $to_user = $userdb['username'];

           if($userdb['publicmail']!=1 && $groupid!='3' && $groupid!='4'){
                 $hiddenmail=1;
           } else {
                 $hiddenmail=0;
           }
           require_once(PrintEot('sendmail'));footer();
     } else {
           $othergd && GdConfirm($_POST['gdcode']);

           if(!$userdb['receivemail'] && $groupid!='3' && $groupid!='4'){
                 Showmsg('sendeamil_refused');
           }
           $sendtoemail = $userdb['email'];
           InitGP(array('subject','atc_content','fromname','fromemail','sendtoname'));

           if(empty($subject)){
                 Showmsg('sendeamil_subject_limit');
           }
           if(empty($atc_content) || strlen($atc_content)<=20){
                 Showmsg('sendeamil_content_limit');
           } elseif (!ereg("^[-a-zA-Z0-9_\.]+\@([0-9A-Za-z][0-9A-Za-z-]+\.)+[A-Za-z]{2,5}$",$sendtoemail) || !ereg("^[-a-zA-Z0-9_\.]+\@([0-9A-Za-z][0-9A-Za-z-]+\.)+[A-Za-z]{2,5}$",$fromemail)){
                 Showmsg('illegal_email');
           }
           if($rt){
                 $db->update("UPDATE pw_memberinfo SET lasttime='$timestamp' WHERE uid='$winduid'");
           } else{
                 $db->update("INSERT INTO pw_memberinfo (uid,lasttime) VALUES('$winduid','$timestamp')");
           }
           require_once(R_P.'require/sendemail.php');

           if(sendemail($sendtoemail,$subject,$atc_content,'email_additional')){
                 refreshto('index.php','mail_success');
           } else{
                 Showmsg('mail_failed');
           }
     }
}
?>

獻花 x0
引用 | 編輯 月光
2008-11-05 01:10
8樓
  
下面是引用chialewang於2008-11-03 22:46發表的 :
感恩
抱歉回覆的晚,沒有您說的那一大段耶
全詳文

<?php
.......

是 require 裡面的 sendemail.php ..........

獻花 x0
引用 | 編輯 chialewang
2008-11-05 19:42
9樓
  
月光 前輩 您好:

感謝您的指導
信件亂碼、簡體、跑到垃圾區的問題,都解決了^^

感恩感恩

王嘉樂 敬啟

獻花 x0
引用 | 編輯 benshaoxw
2008-11-08 10:06
10樓
  
編碼為utf-8 和YAHOO的編碼不一樣 所以就出現這一類的現像 你最好把編碼轉換成一樣的就好了!

獻花 x0
引用 | 編輯 chialewang
2008-11-13 16:21
11樓
  
下面是引用benshaoxw於2008-11-08 10:06(10樓)發表的 :
編碼為utf-8 和YAHOO的編碼不一樣 所以就出現這一類的現像 你最好把編碼轉換成一樣的就好了!

您好:

之前試過轉換編碼無效
還是得用小道前輩所提供的原始碼來修改

王嘉樂 敬啟

獻花 x0