使用gmail api发送电子邮件时,相同的符号会丢失

时间:2017-11-08 09:22:06

标签: php encoding google-api gmail-api google-api-php-client

我使用gmail-api从我的数据库向不同的联系人发送电子邮件。 当我发送消息时,样式不会发生,因为这是相同的符号" ="失去了。

例如,将其放入消息中

<img src="mysite.com/image.jpg"/>

但是我得到了这个我把=

<img src"mysite.com/image.jpg"/>

这是我的功能的一部分,我为消息制作字符串

    $strSubject = $data['subject'];
    //$strRawMessage = "From: myAddress<pblanco@mysite.com>\r\n"; 
    $strRawMessage = "From: <".$data['from'].">\r\n"; //email consultor
    //$strRawMessage .= "To: toAddress <pblanco@mysite.com>\r\n";
    $strRawMessage .= "To: <".$data['to'].">\r\n"; //email destinatario
    $strRawMessage .= 'Subject: =?utf-8?B?' . base64_encode($strSubject) . "?=\r\n"; //asunto
    $strRawMessage .= "MIME-Version: 1.0\r\n";
    $strRawMessage .= "Content-Type: text/html; charset=utf-8\r\n";
    $strRawMessage .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n\r\n";
    $strRawMessage .= $data['message']."\r\n"; //mensaje
    // The message needs to be encoded in Base64URL
    $msg = $this->createMessage($strRawMessage);

在这里,我对消息进行编码

public function createMessage($string){
    //$mime = rtrim(strtr(base64_encode($string), '+/', '-_'), '=');
    $mime = strtr(base64_encode($string), array('+' => '-', '/' => '_'));
    $message = new Google_Service_Gmail_Message();
    $message->setRaw($mime);
    return $message;
}

我在我的函数createMessage()上尝试了不同的方法,但我仍然遇到这个问题。

2 个答案:

答案 0 :(得分:2)

由于您使用“quoted printable”作为内容编码,因此等号是转义字符,必须明确编码为=3D

请参阅:https://en.wikipedia.org/wiki/Quoted-printable

  

任何8位字节值都可以用3个字符编码:an = follow   由两个十六进制数字(0-9或A-F)表示字节的数字   值。例如,ASCII换页符(十进制值12)   可以用“= 0C”和ASCII等号(十进制值)表示   61)必须用= 3D表示。除可打印ASCII以外的所有字符   必须编码字符或行尾字符(但也=)   这种时尚。

答案 1 :(得分:1)

要解决此问题,我将=转换为十六进制(=十六进制为3D)

    $strRawMessage .= strtr($data['message'], array('=' => '=3D'))."\r\n"; 

这样我就不会在收到消息时丢失角色。