現在、新しいものをテストしようとしています Gmail REST API。
API Explorer では、OAuth 2.0を使用してリクエストを承認し、リクエストを実行、つまりメッセージを送信できます。
最初に承認しました。
私は次のテストデータを使用しています(もちろん、有効なto
メールアドレスを使用しました):
{
"raw": "c2VuZGluZyBhIG1haWwgdXNpbmcgR21haWwgUkVTVCBBUEk=",
"payload": {
"headers": [
{ "name": "to", "value": "[email protected]" },
{ "name": "from", "value": "[email protected]" },
{ "name": "subject", "value": "Test Gmail REST API" }
],
"mimeType": "text/plain"
}
}
また、200 OK
と次のresultが返されます。
{
"id": "146dee391881b35b",
"threadId": "146dee391881b35b",
}
ただし、メールは正常に送信されず、代わりに[email protected]
からのメッセージを受信ボックスで見つけることができます; "An error occurred, your message has not been sent."
質問:
1。誰かがこれを正常にテストしましたか?
2。これを実行するには、他のパラメーターを追加する必要がありますか?
[〜#〜] edit [〜#〜]:2つの異なるHTTPリクエストメソッドがあり、
The API Explorer currently supports metadata requests only
は、添付ファイルのないプレーンテキストメッセージを意味し、これが私がやろうとしていることです。
とった!
RFC 2822仕様 を読んだ後、完全なメッセージをraw
パラメーターで渡す必要があることがわかりました。例を参照してください。
From: John Doe <[email protected]>
To: Mary Smith <[email protected]>
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 -0600
Message-ID: <[email protected]>
This is a message just to say hello. So, "Hello".
したがって、完全なメッセージをbase64でエンコードし、他のパラメーターを使用せずにraw
パラメーターに渡すと、正常に機能します。
編集1:
@ Amitが述べたように、web-safe base64エンコードする必要があります。 https://code.google .com/p/stringencoders/wiki/WebSafeBase64
そのため、base64アルファを「Webセーフ」な形式に変換するには、次の変更をお勧めします。
+ --> - (char 62, plus to dash) / --> _ (char 63, slash to underscore) = --> * padding
+
を-
と/
to _
に変換するだけで十分でした。
編集2:
ここで@Hjulleの質問に答えるには、userId
と、リクエスト本文にraw
パラメーターのみが必要です。あなたのメールアドレスは[email protected]
であると仮定しましょう
最初のBase64は、 オンラインエンコーダー を使用して完全なメッセージ(上記を参照)をエンコードし、次の文字列を取得します。
RnJvbTogSm9obiBEb2UgPGpkb2VAbWFjaGluZS5leGFtcGxlPiAKVG86IE1hcnkgU21pdGggPG1h
cnlAZXhhbXBsZS5uZXQ+IApTdWJqZWN0OiBTYXlpbmcgSGVsbG8gCkRhdGU6IEZyaSwgMjEgTm92
IDE5OTcgMDk6NTU6MDYgLTA2MDAgCk1lc3NhZ2UtSUQ6IDwxMjM0QGxvY2FsLm1hY2hpbmUuZXhh
bXBsZT4KClRoaXMgaXMgYSBtZXNzYWdlIGp1c3QgdG8gc2F5IGhlbGxvLiBTbywgIkhlbGxvIi4=
+
を-
および/
to _
に変換すると、
RnJvbTogSm9obiBEb2UgPGpkb2VAbWFjaGluZS5leGFtcGxlPiAKVG86IE1hcnkgU21pdGggPG1h
cnlAZXhhbXBsZS5uZXQ-IApTdWJqZWN0OiBTYXlpbmcgSGVsbG8gCkRhdGU6IEZyaSwgMjEgTm92
IDE5OTcgMDk6NTU6MDYgLTA2MDAgCk1lc3NhZ2UtSUQ6IDwxMjM0QGxvY2FsLm1hY2hpbmUuZXhh
bXBsZT4KClRoaXMgaXMgYSBtZXNzYWdlIGp1c3QgdG8gc2F5IGhlbGxvLiBTbywgIkhlbGxvIi4=
これをAPI Explorerのraw
パラメーターに渡します。
注:これはPHP特定の回答ですが、あなたの一部はそれが有用であると確信しています。
PHPで行ったように、生データを正しく設定するのに苦労している場合、 PHPMailer を使用すると、物事がよりクリーンで簡単になります。
ライブラリをコードに含めた後(composerを使用する場合は、composer.jsonのrequireセクションに「phpmailer/phpmailer」:「〜5.2」を追加するだけです)、基本的な詳細を設定します。
_$mail = new PHPMailer();
$mail->From = 'FROM_EMAIL';
$mail->FromName = 'FROM_NAME';
$mail->addAddress('TO_EMAIL','TO_NAME');
$mail->Subject = 'EMAIL_SUBJECT';
$mail->Body = 'EMAIL_BODY';
$mail->preSend();
$mime = $mail->getSentMIMEMessage();
_
これで$ mimeをbase64でエンコードして、Gmail APIの生の文字列を取得できます。有効なWebセーフエンコード文字列を取得するには、単純なbase64_encodeの代わりにこれを使用します。 rtrim(strtr(base64_encode($mime), '+/', '-_'), '=');