Как отправить электронное письмо, используя Google Gmail API в php с CURL? - PullRequest
1 голос
/ 17 февраля 2020

У меня проблема с отправкой почты с использованием Google Api в Php и cURL,

Я пробовал это:

// ENVOIE EMAIL

$message="To: test@example.com\r\nFrom: test@example.com\r\nSubject: GMail test.\r\n My message";
$email=base64_encode($message);

$url_email = 'https://www.googleapis.com/upload/gmail/v1/users/me/messages/send';

$curlPost = array(
    'raw' => $email,
);
$ch = curl_init();      
curl_setopt($ch, CURLOPT_URL, $url_email);      
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);      
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer '. $AccessToken, 'Accept: application/json','Content-Type: application/json'));    
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($curlPost));
$data = curl_exec($ch);
// $data = json_decode(curl_exec($ch), true);;
curl_close($ch);
echo '<br/><h2>Send email</h2>';
print_r($data);

Но я получаю сообщение об ошибке, подобное этому:

{"error": {"errors": [{"domain": "global", "reason": "badContent", "message": "Тип носителя 'application / json' Не поддерживается. Допустимые типы носителей: [message / rfc822] "}]," code ": 400," message ":" Тип носителя 'application / json' не поддерживается. Допустимые типы носителей: [message / rfc822] "}}

И когда я попробовал с:

'Content-Type: message/rfc822';

У меня новое сообщение об ошибке:

{" error ": {" ошибки ": [{" domain ":" global "," reason ":" invalidArgument "," message ":" Требуется адрес получателя "}]," code ": 400," message ":" Требуется адрес получателя "}}

Я не хочу использовать библиотеку, предлагаемую Google.

1 Ответ

1 голос
/ 17 февраля 2020

Похоже, что вы отправляете JSON закодированные данные, в то время как вы должны соблюдать message/rfc822 формат .

Вы, вероятно, не должны кодировать base64 + json -кодировать ваше сообщение:

<?php
$message = "To: test@example.com\r\nFrom: test@example.com\r\nSubject: GMail test.\r\n My message";


$ch = curl_init('https://www.googleapis.com/upload/gmail/v1/users/me/messages/send'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $AccessToken", 'Accept: application/json', 'Content-Type: message/rfc822'));    
curl_setopt($ch, CURLOPT_POSTFIELDS, $message);
$data = curl_exec($ch);
...