Home > Backend Development > PHP Tutorial > api - PHP调用java发邮件的服务,收件箱发现部分乱码,麻烦大家给我看看,谢谢

api - PHP调用java发邮件的服务,收件箱发现部分乱码,麻烦大家给我看看,谢谢

WBOY
Release: 2016-06-06 20:12:14
Original
1187 people have browsed it

<code>        $content = '活生生的';
        $email = 'test_email@gmail.com';

        $myHttp = new MyHttp();

        $data = array(
                'tenantid'       => UserLogicModel::getTenantId(),//租户id
                'suject'         => $subject,
                'text'           => base64_encode($content),
                'tomail'         => $email,
                'attachmentPath' => $attachmentPath,         //"attachmentPath":"/usr/local/files/入职offer通知.doc",
                'attachmentName' => $attachmentName,         //"attachmentName":"入职offer通知.doc"
        );
        


        $json_data = json_encode($data);
        $params    = "params=".$json_data;
        $res       = $myHttp->send(Dict::$STATIC_SEND_MAIL_URL, $params, "POST", "");</code>
Copy after login
Copy after login
<code>class MyHttp {
    
    //发送网络请求
    public function send($url,$data,$method,$token){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        //$header = array(
        //    'u:1234567777',
        //    't:1234568888',
        //);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('token:$token'));
        $tmpInfo = curl_exec($ch);
        if (curl_errno($ch)) {
          return curl_error($ch);
        }
        $stat=curl_getinfo($ch,CURLINFO_HTTP_CODE); //我知道HTTPSTAT码哦~
        curl_close($ch);
        switch ($stat) {
            case '200':
                if(empty($tmpInfo))
                    $tmpInfo='{"stat":"ok"}';
                break;
            
            default:
                # code...
                break;
        }
        if(empty($tmpInfo))
            $tmpInfo="";

        //记录与api接口之间的通信数据到日志
        \Think\Log::write("http $method req[$stat]:res($tmpInfo)",'ALERT');
        return $tmpInfo;
    }
</code>
Copy after login
Copy after login

上面是请求java接口的curl代码,无论我怎么求里面加指定charset=UTF-8,java端

<code> $head    = array("Content-Type: application/json;charset=UTF-8"); //解决java接口乱码问题,直接抛送json数据
        curl_setopt($ch, CURLOPT_HTTPHEADER,$head);
        加上这句代码,马上就接受不到参数.</code>
Copy after login
Copy after login

回复内容:

<code>        $content = '活生生的';
        $email = 'test_email@gmail.com';

        $myHttp = new MyHttp();

        $data = array(
                'tenantid'       => UserLogicModel::getTenantId(),//租户id
                'suject'         => $subject,
                'text'           => base64_encode($content),
                'tomail'         => $email,
                'attachmentPath' => $attachmentPath,         //"attachmentPath":"/usr/local/files/入职offer通知.doc",
                'attachmentName' => $attachmentName,         //"attachmentName":"入职offer通知.doc"
        );
        


        $json_data = json_encode($data);
        $params    = "params=".$json_data;
        $res       = $myHttp->send(Dict::$STATIC_SEND_MAIL_URL, $params, "POST", "");</code>
Copy after login
Copy after login
<code>class MyHttp {
    
    //发送网络请求
    public function send($url,$data,$method,$token){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        //$header = array(
        //    'u:1234567777',
        //    't:1234568888',
        //);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('token:$token'));
        $tmpInfo = curl_exec($ch);
        if (curl_errno($ch)) {
          return curl_error($ch);
        }
        $stat=curl_getinfo($ch,CURLINFO_HTTP_CODE); //我知道HTTPSTAT码哦~
        curl_close($ch);
        switch ($stat) {
            case '200':
                if(empty($tmpInfo))
                    $tmpInfo='{"stat":"ok"}';
                break;
            
            default:
                # code...
                break;
        }
        if(empty($tmpInfo))
            $tmpInfo="";

        //记录与api接口之间的通信数据到日志
        \Think\Log::write("http $method req[$stat]:res($tmpInfo)",'ALERT');
        return $tmpInfo;
    }
</code>
Copy after login
Copy after login

上面是请求java接口的curl代码,无论我怎么求里面加指定charset=UTF-8,java端

<code> $head    = array("Content-Type: application/json;charset=UTF-8"); //解决java接口乱码问题,直接抛送json数据
        curl_setopt($ch, CURLOPT_HTTPHEADER,$head);
        加上这句代码,马上就接受不到参数.</code>
Copy after login
Copy after login

其实应该是可以得,不知道你的java接口是不是规定了必须是json格式的,如果是,那么你这一句修改下:

<code>$params    = "params=".$json_data;    //你这是一个string,因为你前面加了params=这个,所以你直接把$json_data传送过去试试</code>
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template