2014-07-24 247 views
1

我正在使用https://github.com/google/google-api-php-client,我想用用戶的授權gmail帳戶發送測試電子郵件。使用gmail-api和google-api-php-client發送電子郵件

這是我到目前爲止有:

$msg = new Google_Service_Gmail_Message(); 
$msg->setRaw('gp1'); 
$service->users_messages->send('me', $msg); 

這導致反彈的電子郵件,因爲我不知道如何設置的原始郵件。我看到經過身份驗證的用戶的收件箱中的反彈。我想了解如何爲電子郵件的「收件人」,「抄送」,「密送」,「主題」和「正文」設置值。我相信我還需要對原始數據進行64位編碼。我可能想在我的電子郵件正文中使用一些html。

請幫助提供一個使用gmail-api和google-api-php-client發送電子郵件的工作示例。

這裏是在收件箱中的電子郵件反彈:

Bounce [email protected] 12:58 PM (7 minutes ago)
to me
An error occurred. Your message was not sent.

‚ Date: Thu, 24 Jul 2014 10:58:30 -0700 Message-Id: CABbXiyXhRBzzuaY82i9iODEiwxEJWO1=jCcDM_TH-

回答

6

我問a more specific question這使我一個答案。我現在使用PHPMailer來構建消息。然後我從PHPMailer對象中提取原始消息。例如:

require_once 'class.phpmailer.php'; 
$mail = new PHPMailer(); 
$mail->CharSet = "UTF-8"; 
$subject = "my subject"; 
$msg = "hey there!"; 
$from = "[email protected]"; 
$fname = "my name"; 
$mail->From = $from; 
$mail->FromName = $fname; 
$mail->AddAddress("[email protected]"); 
$mail->AddReplyTo($from,$fname); 
$mail->Subject = $subject; 
$mail->Body = $msg; 
$mail->preSend(); 
$mime = $mail->getSentMIMEMessage(); 
$m = new Google_Service_Gmail_Message(); 
$data = base64_encode($mime); 
$data = str_replace(array('+','/','='),array('-','_',''),$data); // url safe 
$m->setRaw($data); 
$service->users_messages->send('me', $m); 
+0

我還決定「發件人」,「ReturnPath這樣」和「從」空〜應變gs,因爲頭文件中的Return-Path被我的服務器自動填充並導致我的字節字符串無效。 –

+0

剛剛更新了我的答案,來自http://stackoverflow.com/questions/25694923/gmail-php-api-sending-email和http://php.net/manual/en/function.base64-encode.php –

0

使用phpmailer創建郵件在本地環境中工作正常。在生產我得到這個錯誤:

Invalid value for ByteString 

爲了解決這個問題,刪除行:

$mail->Encoding = 'base64'; 

因爲郵件編碼兩次。

此外,在其他問題/問題,我搜了下:

使用

strtr(base64_encode($val), '+/=', '-_*') 

,而不是

我用這個解決方案,以及
strtr(base64_encode($val), '+/=', '-_,') 
+0

確切的錯誤:'錯誤調用POST https://www.googleapis。com/gmail/v1/users/me/messages/send:(400)ByteString'的值無效 –

1

,具有運行良好很少的調整:

創建PHPMailer對象時,默認編碼設置爲'8bit'。 所以我不得不否決與:

$mail->Encoding = 'base64'; 

其他的事情我需要做的就是調整的MIME一點使它POST準備好了谷歌的API,我已經使用ewein解決方案:

Invalid value for ByteString error when calling gmail send API with base64 encoded <or>

無論如何,這是我怎麼替你解決問題:

//prepare the mail with PHPMailer 
$mail = new PHPMailer(); 
$mail->CharSet = "UTF-8"; 
$mail->Encoding = "base64"; 

//supply with your header info, body etc... 
$mail->Subject = "You've got mail!"; 
... 

//create the MIME Message 
$mail->preSend(); 
$mime = $mail->getSentMIMEMessage(); 
$mime = rtrim(strtr(base64_encode($mime), '+/', '-_'), '='); 

//create the Gmail Message 
$message = new Google_Service_Gmail_Message(); 
$message->setRaw($mime); 
$message = $service->users_messages->send('me',$message);