Нужен PHP-код для аутентификации Oauth2 и отправки электронной почты через Gmail API без использования google-api-php-clPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Нужен PHP-код для аутентификации Oauth2 и отправки электронной почты через Gmail API без использования google-api-php-cl

Сообщение Anonymous »

Я узнал, что Digital Ocean не разрешает исходящие SMTP-запросы через порт 587 со своих серверов капель, поэтому я пытаюсь найти самый компактный доступный PHP-код для отправки электронной почты с помощью API Gmail. Для меня непрактично использовать официальный PHP-клиент Google для API, google-api-php-client, который состоит из нелепых 3 984 473 строк PHP-кода в 32 365 файлах - 180 МБ!
Поэтому мне нужен некоторый PHP-код, который может
  • получить токен доступа, который будет использоваться для отправки почты. Я не думаю, что мне понадобится какой-либо URL-адрес перенаправления. Я не пытаюсь настроить страницу для пользователей моего сайта для авторизации чего-либо, я просто хочу отправлять электронную почту из своей учетной записи Gmail.
  • Опознайте, если токен доступа устарел, и при необходимости обновите его.
  • Используйте токен доступа, чтобы связаться с Gmail API и отправить сообщение электронной почты, используя мою учетную запись Gmail.
Я включил API Gmail в своей облачной консоли Google, но процесс получения учетных данных предполагает, что я создаю общедоступную форму для развертывания на веб-сайте, чтобы я мог получать учетные данные от посетителей моего сайта. Это не то, что я пытаюсь сделать. Я просто хочу получить какой-то ключ API, чтобы иметь возможность отправлять электронную почту со своего веб-сайта, используя свою учетную запись Gmail. Итак, это Вопрос 1. Как мне получить учетные данные (предположительно Oauth2) для доступа к Gmail API?
Вопрос 2. Какой PHP-код мне нужен для получения и/или обновления токена доступа OAuth2, который я буду использовать для связи с Gmail API? Я не могу использовать клиент google-api-php-client. Я видел это сообщение, но, похоже, в нем есть $client_id и $client_secret для учетных данных, а также $redirect_url, который, как мне кажется, мне не нужен?
И Вопрос 3: если у меня есть действительный токен доступа, какой код PHP (предположительно с использованием CURL) я могу использовать для отправки сообщения электронной почты, сгенерированного в PHP? Мой поиск в Google дал результаты довольно интересный код, но он предполагает, что у меня есть $client_id, $client_secret и $access_token:

Код: Выделить всё

// Manually construct the email headers and body to comply with MIME standards.
function create_mime_message($to, $from, $subject, $body) {
$mime_message = "To: $to\r\n";
$mime_message .= "From: $from\r\n";
$mime_message .= "Subject: $subject\r\n";
$mime_message .= "MIME-Version: 1.0\r\n";
$mime_message .= "Content-Type: text/plain; charset=utf-8\r\n";
$mime_message .= "Content-Transfer-Encoding: base64\r\n\r\n";
$mime_message .= base64_encode($body) . "\r\n"; // Body should also be encoded
return $mime_message;
}

// The entire raw MIME message string needs to be base64url-encoded for the Gmail API.
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}

$raw_message = create_mime_message("recipient@example.com", "sender@gmail.com", "Test Subject", "This is the email body.");
$encoded_message = base64url_encode($raw_message);

// Use PHP's cURL extension to send a POST request to the https://www.googleapis.com endpoint, including the access token in the headers and the encoded message in the JSON payload

$access_token = "YOUR_VALID_ACCESS_TOKEN"; // Must be obtained via OAuth2
$post_data = json_encode(['raw' => $encoded_message]);

$ch = curl_init('https://www.googleapis.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Consider carefully in production
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer $access_token",
'Accept: application/json',
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($http_code == 200) {
echo "Email sent successfully!";
} else {
echo "Failed to send email. Response: " .  $response;
}

Если кто-то может помочь мне понять, как получить client_id, client_secret и access_token, я, возможно, смогу опробовать этот код.
А пока я умоляю Digital Ocean просто позволить мне отправлять почту SMTP на порт 587.
ОБНОВЛЕНИЕ: я добросовестно пытался использовать google-api-php-клиент для отправки этого электронного письма с мой сервер. ADyson предположил, что я рассматриваю сценарий учетной записи службы, и это кажется точным. Я следовал инструкциям по созданию учетной записи службы и пытаюсь назначить соответствующую роль/разрешения для отправки электронной почты (и ничего больше), поэтому я использую их кнопку «Помогите мне выбрать роли» и получаю этот комичный каштан:
Изображение
Я должным образом погуглил это и попал на эту страницу, на которой нет примера кода PHP. Приведенные примеры Java и Python подразумевают, что вы уже поняли, как получить учетные данные. В разделе авторизации этой документации не описано, как назначать какие-либо роли/разрешения учетной записи службы.

Подробнее здесь: https://stackoverflow.com/questions/798 ... hout-using
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»