2017-11-08 2 views
1

Ich benutze Google Mail-API, um E-Mails an verschiedene Kontakte aus meiner Datenbank zu senden. Wenn ich die Nachricht sende, funktionieren die Stile nicht, da dies geschieht, weil das Gleichheitszeichen "=" verloren ist.Gleiches Symbol ist verloren beim Senden einer E-Mail mit gmail api

Zum Beispiel des in der Nachricht bei der Umsetzung

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

Aber stattdessen bekam ich das, wo ich setze =

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

Dies ist der Teil meiner Funktion, wo ich die Zeichenfolge mache für die Nachricht

$strSubject = $data['subject']; 
    //$strRawMessage = "From: myAddress<[email protected]>\r\n"; 
    $strRawMessage = "From: <".$data['from'].">\r\n"; //email consultor 
    //$strRawMessage .= "To: toAddress <[email protected]>\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); 

Und hier muss ich die Codierung für die Nachricht

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; 
} 

Ich versuchte mit verschiedenen Methoden auf meine Funktion createMessage(), aber ich habe immer noch dieses Problem.

Antwort

1

um dieses Problem zu lösen i = umwandeln hex (= hex ist 3D)

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

diese Weise kann ich den Charakter nicht verlieren, wenn die Nachricht gesendet wird.

1

Da Sie "quoted printable" als Inhaltscodierung verwenden, sind Gleichheitszeichen Escape-Zeichen und müssen explizit als =3D codiert werden.

Siehe: https://en.wikipedia.org/wiki/Quoted-printable

Jeder 8-Bit-Byte-Wert mit 3 Zeichen codiert werden: an = durch zwei Hexadezimalziffern (0-9 oder A-F), die der numerischen Wert des Byte. Beispielsweise kann ein ASCII-Formularvorschubzeichen (Dezimalwert 12) durch "= 0C" dargestellt werden, und ein ASCII-Gleichheitszeichen (Dezimalwert 61) muss durch = 3D dargestellt werden. Alle Zeichen außer druckbaren ASCII Zeichen oder Zeilenendezeichen (aber auch =) müssen auf diese Weise in codiert werden.

Verwandte Themen