前提・実現したいこと
はじめての質問なので至らない点があるかもしれませんがご了承ください。
作っているのはPHPにてお問い合わせフォームから情報を受け取り、Sheets Apiを使いそれをspreadsheetに記述、そしてGmail Apiを使用して返信メールを送信するというものです。
今の状況としましては、spreadsheetに記述するまではできたのですがメール作成の際にエラーが出てしまいました。
自分なりに解決しようと頑張っていましたがどうしても上手くいかずこうして皆さんのご助力を願う次第です。
試したこと
コードを書く際に公式のドキュメント
https://developers.google.com/gmail/api/guides/sending
https://developers.google.com/gmail/api/v1/reference/users/messages/send
を読みますと、
「RFC 2822に準拠し、base64url文字列としてエンコードされたMIMEメールをrawプロパティに設定してください。」
とありました。
ですが、「base64url文字列としてエンコードされたMIMEメール」の作成方法がわからなかったので、
https://stackoverflow.com/questions/34125436/php-create-mime-message-for-gmail-api
を参考にしました。
そこではメール作成にswift mailerを使うといいよと書いてありました。
しかし、swift mailerを使ってもmessageに対してBad Requestとエラーが出てしまい現状に至ります。
補足情報(バージョンなど)
XAMPP for Windows 7.2.7
"google/apiclient": "^2.0"
"swiftmailer/swiftmailer": "^6.0"
コード内の個人情報を含むものはxxxに変えてあります。
発生している問題・エラーメッセージ
Fatal error: Uncaught Google_Service_Exception: { "error": { "errors": [ { "domain": "global", "reason": "failedPrecondition", "message": "Bad Request" } ], "code": 400, "message": "Bad Request" } }
該当のソースコード
php
1<?php 2date_default_timezone_set('Asia/Tokyo'); 3$date = date('Y/ m/ d/ H:i:s'); 4$name = $_POST['name']; 5$mail = $_POST['mail']; 6$inquiry = $_POST['inquiry']; 7 8require __DIR__ .'\vendor\autoload.php'; 9 10putenv('GOOGLE_APPLICATION_CREDENTIALS='.dirname(__FILE__).'\xxx.json'); 11 12$client = new Google_Client(); 13$client -> useApplicationDefaultCredentials(); 14$client -> addScope(Google_Service_Sheets::SPREADSHEETS); 15$service = new Google_Service_Sheets($client); 16 17$spreadsheetId = 'xxx-xxx_xxx'; 18$sheetId = x; 19//ヘッダーの下に行を挿入 20$requestBody = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest(array( 21 'requests' => array( 22 'insertDimension' => array( 23 'range' => array( 24 'sheetId' => $sheetId, 25 'dimension' => 'ROWS', 26 'startIndex' => 1, 27 'endIndex' => 2 28 ), 29 'inheritFromBefore' => FALSE 30 ) 31 ) 32)); 33$response = $service -> spreadsheets -> batchUpdate($spreadsheetId, $requestBody); 34//スプレッドシートに書き込む 35$range = 'シート1!A1:D1'; 36$requestBody = new Google_Service_Sheets_ValueRange(array( 37 'values' => [array($date, $name, $mail, $inquiry)] 38)); 39$params = array('valueInputOption' => 'USER_ENTERED'); 40$response = $service -> spreadsheets_values -> append($spreadsheetId, $range, $requestBody, $params); 41 42//メール返信 43$client = new Google_Client(); 44$client -> useApplicationDefaultCredentials(); 45$client -> addScope(Google_Service_Gmail::GMAIL_SEND); 46 47$service = new Google_Service_Gmail($client); 48$userId = 'xxx@gmail.com'; 49 50$message = new Google_Service_Gmail_Message(); 51$msg = (new Swift_Message('お問い合わせありがとうございます')) 52 -> setFrom(['xxx@gmail.com' => '送信者名']) 53 -> setTo([$mail => 'お客様']) 54 -> setBody('この度はお問い合わせありがとうございます。'); 55$msg = rtrim(strtr(base64_encode($msg), '+/', '-_'), '='); 56$message -> setRaw($msg); 57$message = $service -> users_messages -> send($userId, $message); 58?> 59 60 <!DOCTYPE html> 61 <html lang="ja" dir="ltr"> 62 <head> 63 <meta charset="utf-8"> 64 <title>thanks</title> 65 </head> 66 <body> 67 <p>thanks!!</p> 68 </body> 69 </html>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/20 05:33