php发送邮件,从数据库里拿出收件人,发送邮件后在邮件的收件人那行都是乱码而信件内容和信件标题不是,这是从页面上输入的该怎么解决呢? 愁死我了

解决方案 »

  1.   

    开始的时候从数据库里拿出来收件人是乱码,加一句mysql_query("SET NAMES UTF8");拿出来的数据不乱了,可是执行发信函数到油箱里后收件人就全乱码了
      

  2.   

    你是不是用 phpmailer,,直接去那类里面改unicode为utf8
      

  3.   


    $name=iconv('utf-8','gb2312',$收件人);//utf-8改为你数据库编码,gb2312改位你面页编码
      

  4.   

    没有,数据库里我都改成utt-8了,我用的mail函数mail($to, $subj, $cal_msg, $header, "")发的,有什么不妥的地方吗?
      

  5.   

    还是不行,收件人列表是$toname 是Mary <[email protected]>, Kelly <[email protected]>形式的
    $name=iconv('utf-8','gb2312',$toname);
    $header = 'To:' . $name .  "\r\n";  $header .= "From: " . $from . "\r\n" .
              "MIME-Version: 1.0\r\n" .
               "Content-Type: text/calendar;method=REQUEST";
    这样写有什么错误吗
      

  6.   

    是乱码,是不是outlook的事?我从outlook拿数据到数据库,数据库里的数据乱码了,正常数据发邮件,名字也乱码了 
      

  7.   

    $name=iconv('utf-8','gb2312',$toname);
    中文的话,还是转gb2312吧,,我也遇到过这个问题.
      

  8.   


    $name=iconv('utf-8','gb2312',$toname); $header = 'To:' . $name . "\r\n"; $header .= "From: " . $from . "\r\n" .  "MIME-Version: 1.0\r\n" .  "Content-Type: text/calendar;method=REQUEST";
    header('Content-Type:text/html;charset=gb2312');//加上字头试试
      

  9.   


    header('Content-Type: text/html; charset=utf-8');
    mysql_query(set names utf8);
      

  10.   

    上面的写错了,忘了引号header('Content-Type: text/html; charset=utf-8');
    mysql_query("set names utf8");
      

  11.   


    To: =?utf-8?B?TExD5LqV5LiKIOa1qeS4gA==?= <[email protected]>,
            =?utf-8?B?TExD5LqV5LiKIOeroA==?= <[email protected]>,
            =?utf-8?B?TExD5LqU5Y2B5bWQ5paH5ZKM?= <[email protected]>,
            =?utf-8?B?UFPmnb7mnKzoi7HpmoY=?= <[email protected]>,
            =?utf-8?B?UFPopb/jgIDpm4XlvaY=?= <[email protected]>,
            =?utf-8?B?UFPol6TkupXoi7HlvrM=?= <[email protected]>,
            =?utf-8?B?UFPpvYvol6Tml6XntbHnvo4=?= <[email protected]>,
            =?utf-8?B?Q0Qg5p2cIOadseayog==?= <[email protected]>,
            =?utf-8?B?Q0Tlrokg55Gb5aay?= <[email protected]>,
            =?utf-8?B?Q0Tnjosg5pil6Zye?= <[email protected]>,
            =?utf-8?B?Q0TlvpAg6JmO?= <[email protected]>,
            =?utf-8?B?Q0Tppqwg546y546y?= <[email protected]>,
            =?utf-8?B?Q0Tppqwg6I6J?= <[email protected]>,
            =?utf-8?B?Q0TnjJsg57+g5aif?= <[email protected]>,
            =?utf-8?B?Q0Tmu5XkuabmiJA=?= <[email protected]>
    找了下邮件里的头文件是这样写的,我是不是跟据这个写啊?但是中间那些字母到底是什么啊,是不是根据人的名字生成的什么码?
      

  12.   

    我的计算机系统是日语的,页面是日语的,
    outlook是汉语的,mysql,php是英语的出现乱码是哪个环节不知道,是不是outlook的原因呢,
    我从outlook取出的数据是乱码,写进去也是乱码(只是收件人)
      

  13.   


    以 =?utf-8?B?TExD5LqV5LiKIOa1qeS4gA==?= 为例.
    <?php$a = '=?utf-8?B?TExD5LqV5LiKIOa1qeS4gA==?=';$b = explode('?', $a);
    header("Content-Type:text/html; charset=".$b[1].";");
    var_dump($b);
    var_dump(base64_decode($b[3]));
    exit;
      

  14.   

    你先写个测试程序,收件人,内容都写成固定的,然后发信.看看结果.
    一般outlook看到乱码,在outlook里改变编码就可以了,默认的是西欧iso的.为什么,人家发送的邮件是正常的呢.如23楼所示,在邮件里指明了utf8,并且用base64加密,这样outlook就不会使用默认的去读了.这是关键之处.建议楼主解决完问题以后,多了解一下mail的规范.
      

  15.   

    谢谢楼上27,28楼有耐心的回答,我改成了固定的人名也是乱码,23楼的写法我不知道怎么具体对应到我的代码中
    <?phpheader("content-type:text/html;charset=Shift-JIS");
    //header('Content-Type:text/html;charset=gb2312');//  session_start();  $conn = @ mysql_connect("localhost", "root", "") or die("データベース連接エラー");
     if($conn) mysql_select_db("business",$conn);
    /*
    function ckcount(){
    $count=0;
    foreach($_POST['ck'] as $v)
    {
    $count ++;
    }
    return $count;
    }if (ckcount()==0)
    {echo '<script>;alert("Please choose receiver")</script>;';}
    */function getsql(){
    //error_reporting(E_ALL);if ( in_array( '99', $_POST[ 'ck' ] ) )
    {
    $Sql = "select MailAdd,StaffName from staff where MailAdd<>'" . $_SESSION['MailAddress'] . "'";
    }
    else{
    $Sql = "select MailAdd,StaffName from staff where MailAdd<>'" . $_SESSION['MailAddress'] . "'";
    $index = 0;
    foreach($_POST['ck'] as $v)
    {
    if($index == 0)
    $Sql.= " and StaffType = '$v'";
    else
    $Sql.= "or StaffType ='$v'";
    $index ++;
    }
    }
    return $Sql;
    }
    $Sql=getsql();mysql_query("SET NAMES UTF8");$ResultMailAdd=mysql_query($Sql);$to="";
    $toname="";
    $cout=0;
    while($mailAdd = mysql_fetch_array($ResultMailAdd))
      {
       if ($cout==0)
       {
       $to= $mailAdd[MailAdd];
       $toname= $mailAdd[StaffName] . '<' . $mailAdd[MailAdd] . '>';
       }
       else
       {
       $to.= ',' . $mailAdd[MailAdd];
       $toname.= ',' . $mailAdd[StaffName] . '<' . $mailAdd[MailAdd] . '>';
       }
       $cout++;
      }
    echo $toname;
      $from = $_SESSION['MailAddress'];
      $subj =$_POST["Subject"];// "my test subject";
      $msg  =$_POST["Body"];// "this is the email body";
      $location=$_POST["Location"];//
      $starttime=$_POST["StartTime"];
    $endtime=$_POST["EndTime"];
    //$name=iconv('utf-8','Shift-JIS',$toname);
    $name=iconv('utf-8','gb2312',$toname);
    echo $name;
    $header = 'To:' . $toname .  "\r\n";  $header .= "From: " . $from . "\r\n" .
              "MIME-Version: 1.0\r\n" .
               "Content-Type: text/calendar;method=REQUEST";  //Various ways to creat a new, random UID
      $cal_uid = "{" . uniqid(mt_rand(), true) . "}";
      $cal_uid = "{" . date('Ymd').'T'.date('His')."-".rand()."@mydomain.com}";
     // $cal_uid = com_create_guid();  $cal_msg =
    "BEGIN:VCALENDAR
    PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN
    VERSION:2.0
    METHOD:REQUEST
    BEGIN:VEVENT
    ORGANIZER:MAILTO:
    DTSTART:" . $starttime . "
    DTEND:" . $endtime . "
    UID:" . $cal_uid . "
    LOCATION:" . $location . "
    TRANSP:OPAQUE
    SEQUENCE:0
    DTSTAMP:20060309T045649Z
    CATEGORIES: Meeting
    DESCRIPTION:" . $msg . "
    SUMMARY:" . $subj . "
    PRIORITY:5
    X-MICROSOFT-CDO-IMPORTANCE:1
    CLASS:PUBLIC
    BEGIN:VALARM
    TRIGGER:-PT3D
    ACTION:DISPLAY
    DESCRIPTION:Reminder
    END:VALARM
    BEGIN:VTIMEZONE
    TZID:US/Central
    END:VTIMEZONE
    END:VEVENT
    END:VCALENDAR"; if (mail($to, $subj, $cal_msg, $header, ""))
      {
     echo "mail sent";
      }
    mysql_close($conn);  ?>
      

  16.   

    $headers = 'To: "=?utf-8?B?' . base64_encode("测试") . '?=" <[email protected]> '. "\r\n";
    $headers = 'From: "=?utf-8?B?' . base64_encode("测试") . '?=" <[email protected]> '. "\r\n";
    像这样,确定取出来的数据为utf-8,然后将数据用base64编码.