2014-09-05 299 views
3

我想通過Gmail PHP API發送電子郵件(https://developers.google.com/gmail/api/v1/reference/users/messages/send)。一切似乎都在發送消息。我的代碼是:Gmail PHP API發送電子郵件

private function createMessage($email) { 
    $message = new Google_Service_Gmail_Message(); 
    $message->setRaw(strtr(base64_encode($email), '+/=', '-_,'));  // $email is a raw email data string 
    return $message; 
} 

public function sendMessage($userID, $email) { 
    try { 
     $msg = $this->createMessage($email); 
     $this->service->users_messages->send($userID, $msg); 
    } catch (Exception $e) { 
     print 'An error occurred: ' . $e->getMessage(); 
    } 
} 

的代碼是打破在該行:

$this->service->users_messages->send($userID, $msg);

與錯誤:

An error occurred: Error calling POST https://www.googleapis.com/gmail/v1/users/[email protected]/messages/send: (400) Invalid value for ByteString: 

任何想法,這裏發生了什麼?謝謝!

+0

請問您能否提供您發送完整原始訊息的例子?我很難發送電子郵件。 – 2014-11-01 09:06:16

回答

4

您設置爲'raw'的電子郵件字符串需要爲url安全 base64編碼(略有不同的字母表)。

4

的問題,像埃裏克說,是url安全基礎64.您需要更改URL轉換到更多的東西是這樣的:

$message_object = new Google_Service_Gmail_Message(); 
$encoded_message = rtrim(strtr(base64_encode("PUT MESSAGE HERE"), '+/', '-_'), '='); 
$message_object->setRaw($encoded_message); 

同時一定要使用有效的mail mime,所以「PUT這裏的信息「在現實中不起作用。你需要包含有效的標題,如主題等。有some various PHP libraries來做這些,或者如果你可以自己用純文本。