Отправка электронной почты из моего приложения Javascript через API GMail - почта отображается в списке отправленных сообщений GMail, но не доставляется на целевой адрес электронной почты

Я писал клиентское приложение (браузер Chrome), которое интегрируется с GMail через REST API. Мое приложение написано на Javascript / Angular, и большая часть интеграции с GMail работает нормально. Он может получать из GMail - электронные письма, профили, ярлыки и т. Д.

Я не могу отправлять электронные письма, которые я создаю. Однако письма, которые я пытаюсь отправить, появляются в списке отправленных сообщений GMail, и, если я изменяю письмо, добавляя метку «INBOX», они также появляются в почтовом ящике GMail. Но ни одно из писем не доходит до места назначения. Я тестировал несколько учетных записей электронной почты - Hotmail, Yahoo и еще одну учетную запись GMail. Письма никогда не доставляются по назначению - я проверил почтовые ящики, спам и т. Д.

Мой код ниже ... Сначала запускается функция 'initializeGMailInterface' (через пользовательский интерфейс) для авторизации, а затем функция 'sendEmail' (также через пользовательский интерфейс). Код, кажется, соответствует примерам, которые я видел, и документации, которую Google предоставляет для их REST API. Аутентификация, похоже, работает нормально - и, как я уже упоминал, я могу получать электронные письма и т. Д.

Как мне доставить электронные письма по назначению?

var CLIENT_ID = '853643010367revnu8a5t7klsvsc5us50bgml5s99s4d.apps.googleusercontent.com';
var SCOPES = ['https://mail.google.com/', 'https://www.googleapis.com/auth/gmail.send', 'https://www.googleapis.com/auth/gmail.modify', 'https://www.googleapis.com/auth/gmail.labels'];

function handleAuthResult(authResult) {
    if (authResult && !authResult.error) {
        loadGmailApi();
    }
}

$scope.initializeGMailInterface = function() {
    gapi.auth.authorize({
        client_id: CLIENT_ID,
        scope: SCOPES,
        immediate: true
    }, handleAuthResult);
};

function loadGmailApi() {
    gapi.client.load('gmail', 'v1', function() {
        console.log("Loaded GMail API");
    });
}

$scope.sendEmail = function() {
    var content     = 'HELLO';
    // I have an email account on GMail.  Lets call it '[email protected]'
    var sender      = '[email protected]';
    // And an email account on Hotmail.  Lets call it '[email protected]'\
    // Note: I tried several 'receiver' email accounts, including one on GMail.  None received the email.
    var receiver    = '[email protected]';
    var to          = 'To: '   +receiver;
    var from        = 'From: ' +sender;
    var subject     = 'Subject: ' +'HELLO TEST';
    var contentType = 'Content-Type: text/plain; charset=utf-8';
    var mime        = 'MIME-Version: 1.0';

    var message = "";
    message +=   to             +"\r\n";
    message +=   from           +"\r\n";
    message +=   subject        +"\r\n";
    message +=   contentType    +"\r\n";
    message +=   mime           +"\r\n";
    message +=    "\r\n"        + content;

    sendMessage(message, receiver, sender);
};

function sendMessage(message, receiver, sender) {
    var headers = getClientRequestHeaders();
    var path = "gmail/v1/users/me/messages?key=" + CLIENT_ID;
    var base64EncodedEmail = btoa(message).replace(/\+/g, '-').replace(/\//g, '_');
    gapi.client.request({
        path: path,
        method: "POST",
        headers: headers,
        body: {
            'raw': base64EncodedEmail
        }
    }).then(function (response) {

    });
}

var t = null;
function getClientRequestHeaders() {
    if(!t) t = gapi.auth.getToken();
    gapi.auth.setToken({token: t['access_token']});
    var a = "Bearer " + t["access_token"];
    return {
        "Authorization": a,
        "X-JavaScript-User-Agent": "Google APIs Explorer"
    };
}

person RAdair    schedule 29.04.2016    source источник


Ответы (2)


Ваш код выполняет insert (). Вместо этого выполните send ():

var path = "gmail/v1/users/me/messages/send?key=" + CLIENT_ID;
person Brandon Jewett-Hall    schedule 29.04.2016

«EmailJS» - хорошее решение для отправки электронной почты из Javascript.

EmailJS помогает отправлять электронные письма только с использованием клиентских технологий. Сервер не требуется.

Кроме того, вы можете легко добавлять вложения, требовать проверки CAPTCHA, переключать

между почтовыми службами без изменения кода, просмотрите историю

запрос по электронной почте и многое другое.

Дополнительная информация

person Iman Bahrampour    schedule 24.11.2017