2016-07-21 37 views
1

GmailのAPIを使用してメールを送信しています。これで送信が正常に完了しました。私はその人に(すでに送信している)phpを使って返信する方法を知りたいです。Gmail APIを使用してメールに返信する方法

ここで私は、送信するための私のコードを添付:

$line = "\n"; 
$strMailContent = $message; 
$strMailTextVersion = strip_tags($strMailContent, ''); 

$strRawMessage = ""; 
$boundary = uniqid(rand(), true); 
$subjectCharset = $charset = 'utf-8'; 

$strToMail = $to; 

$strSubject = $subject; 

$strRawMessage .= 'To: ' . ($strToMail) . "\r\n"; 

if(!empty($_POST['cc']) || !empty($_POST['bcc'])){ 
    $cc = $_POST['cc']; 
    $bcc = $_POST['bcc']; 
    $strRawMessage .= "Cc: $cc". $line; 
    $strRawMessage .= "Bcc: $bcc". $line; 
} 

$strRawMessage .= 'Subject: =?' . $subjectCharset . '?B?' . base64_encode($strSubject) . "?=\r\n"; 
$strRawMessage .= 'MIME-Version: 1.0' . "\r\n"; 
$strRawMessage .= 'Content-type: Multipart/Mixed; boundary="' . $boundary . '"' . "\r\n"; 



$filePath = $file_tmp_name; 
$mimeType = 'text/plain; charset="UTF-8" '; 
$fileName = $file_name; 
$fileData = base64_encode(file_get_contents($filePath)); 

$strRawMessage .= "\r\n--{$boundary}\r\n"; 
$strRawMessage .= 'Content-Type: '. $mimeType .'; name="'. $fileName .'";' . "\r\n";    
$strRawMessage .= 'Content-Description: ' . $fileName . ';' . "\r\n"; 
$strRawMessage .= 'Content-Disposition: attachment; filename="' . $fileName . '"; size=' . filesize($filePath). ';' . "\r\n"; 
$strRawMessage .= 'Content-Transfer-Encoding: base64' . "\r\n\r\n"; 
$strRawMessage .= chunk_split(base64_encode(file_get_contents($filePath)), 76, "\n") . "\r\n"; 
$strRawMessage .= '--' . $boundary . "\r\n"; 



$strRawMessage .= $strMailContent; 

$mime = rtrim(strtr(base64_encode($strRawMessage), '+/', '-_'), '='); 

$base64 = base64_encode($mime); 
$data = '{ "raw" : "'.$mime.'" }'; 
$send = Qassim_HTTP(1, $url, $header, $data); 
ここ

私は、すでにsendedでは、人のメールIDと対象がすでに使用対象とされているアドレスに渡します。

このコードを変更して返信を送信する方法。助けてください

+0

http://stackoverflow.com/questions/32589476/how-to-send-a-reply-with-gmail-api – Kray

答えて

2

返信したいメッセージのスレッドIDを渡し、新しいメッセージに同じ件名を設定する必要があります。エラーの可能性を最小限に抑えるために、手動で書くのではなく、メッセージの生の文字列を生成するためにライブラリを使用する方が好きです。以下はPHPMailerの使用例です。

$gmail = new Google_Service_Gmail($client); 
$message = new Google_Service_Gmail_Message(); 
$optParam = array(); 
$referenceId = ''; 
$thread = $gmail->users_threads->get($userId, $threadId); 
$optParam['threadId'] = $threadId; 
$threadMessages = $thread->getMessages($optParam); 
$messageId = $threadMessages[0]->getId(); 
$messageDetails = $this->getMessageDetails($messageId); 
$messageDetails = $messageDetails['data']; 
$subject = $messageDetails['headers']['Subject']; 
$mail = new PHPMailer(); 
$mail->CharSet = 'UTF-8'; 
$mail->From = $from_email; 
$mail->FromName = $from_name; 
$mail->addAddress($to); 
$mail->Subject = $subject; 
$mail->Body = $body; 
$mail->preSend(); 
$mime = $mail->getSentMIMEMessage(); 
$raw = $this->Base64UrlEncode($mime); 
$message->setRaw($raw); 
$message->setThreadId($threadId); 
$response = $gmail->users_messages->send($userId, $message); 

userIdthreadIdは、あなたがに返信したいメッセージのスレッドのIDである一方で、ログインしているユーザーのIDです。

GoogleのPHP SDKに問題があり、適切な例がないため、Gmail APIの機能の大部分をカバーするPHPラッパーを作成しました。あなたはそれがhere見つけることができます、それは有用かもしれません。

+0

ご返信ありがとうございます。上記のコードにはプラグインまたはライブラリが必要ですか? – Nisanth

+0

コンポーザーで使用している場合は、それ自体が必要なものすべてをセットアップします。それ以外の場合は、手動で行う必要があります。 GoogleのPHP SDKとPHPMailerを使用します。作曲家と一緒に行くことは、ファイルを読み込むためにも良いでしょう。 – trajchevska

+0

私はこの返信を送信するためのコードを試しています。スレッドIDをこの行に渡す方法$ line = "\ n"; \t $ raw = "To:$ to"。$ line; if(!_ POST ['recc'])||!empty($ _ POST ['rebcc'])){ $ cc = $ _POST ['recc']; $ bcc = $ _POST ['rebcc']; $ raw。= "Cc:$ cc" $行; \t \t $ raw。= "Bcc:$ bcc" $行; } \t $ raw。= "Subject:$ subject"。$ line。$ line; \t $ raw。= $ message; \t $ base64 = base64_encode($ raw); \t $ data = '{"raw": "'。$ base64。 '"}'; \t $ send = Qassim_HTTP(1、$ url、$ header、$ data); – Nisanth

関連する問題