激活信件都是乱码,可否指点一下

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