Невозможно отправить почту, используя gmail api node js - PullRequest
0 голосов
/ 12 ноября 2018

Я следовал Gmail API для отправки электронной почты. Я получаю сообщение об ошибке:

"message": "400 - \" {\ n \\ "error \\": {\ n \\ "errors \\": [\ n {\ n \\ "domain \\": \\ "global \\", \ n \\ "reason \\": \\ "invalidArgument \\", \ n \\ "message \\": \\ "'raw' строка сообщения полезной нагрузки RFC822 или загрузка сообщения через / upload / * Требуется URL-адрес \\ "\ n} \ n], \ n \\" code \\ ": 400, \ n \\" message \\ ": \\" 'raw' строка сообщения полезной нагрузки RFC822 или загрузка сообщения через / upload / * Требуется URL \\ "\ n} \ n} \ n \" "

Вот фрагмент кода, который я написал для отправки почты, используя gmail api с node.js. Помогите мне решить проблему.

router.post('/composeMail', async (req, res, next) => {
    function makeBody(to, from, subject, message) {
        let str = ["Content-Type: text/plain; charset=\"UTF-8\"\n",
            "Content-length: 5000\n",
            "Content-Transfer-Encoding: message/rfc822\n",
            "to: ", to,"\n",
            "from: ", from,"\n",
            "subject: ", subject,"\n\n",
            message
        ].join('');
        console.log("String: ", str);
        // let encodedMail = new Buffer(str).toString("base64").replace(/\+/g, '-').replace(/\//g, '_');
        let encodedMail = btoa(str).replace(/\+/g, '-').replace(/\//g, '_');
        return encodedMail;
    }
    let raw = makeBody("dinesh.kumar@gmail.com", "dinesh.kumar@gmail.com", "Test mail", "Everything is fine");
    let obj = {};
    obj.raw = raw;
    let body = JSON.stringify(obj);
    let option = {
        url: "https://www.googleapis.com/gmail/v1/users/userId/messages/send",
        method: 'POST',
        headers: {
            'Authorization': `Bearer ${req.query.access_token}`
        },
        qs: {
            userId: 'me'
        },
        body: body
    };

    await request(option).then(body => {
        return res.apiOk(body);
    }).catch(err => {
        return res.apiError(err);
    })
});

1 Ответ

0 голосов
/ 13 ноября 2018
  • Вы хотите отправить электронное письмо с помощью Gmail API модулем запроса.

Если мое понимание верно, как насчет этой модификации? Я думаю, что есть несколько ответов. Поэтому, пожалуйста, подумайте об этом как об одном из них.

Очки модификации:

Модифицированный скрипт:

Пожалуйста, измените makeBody() следующим образом.

function makeBody(to, from, subject, message) {
    let str = [
        "to: ", to, "\n",
        "from: ", from, "\n",
        "subject: ", subject, "\n\n",
        message,
    ].join('');
    return str;
}

Пожалуйста, измените option следующим образом.

let raw = makeBody("dinesh.kumar@gmail.com", "dinesh.kumar@gmail.com", "Test mail", "Everything is fine");
const userId = 'me'; // Please modify this for your situation.
let option = {
    url: "https://www.googleapis.com/upload/gmail/v1/users/" + userId + "/messages/send",
    method: 'POST',
    headers: {
        'Authorization': `Bearer ${req.query.access_token}`,
        'Content-Type': 'message/rfc822',
    },
    body: raw,
};

Примечание:

  • В этом измененном сценарии предполагается, что Gmail API включен на консоли API, а требуемая область для отправки электронных писем включена в область действия маркера доступа.

Справка:

В моем окружении я мог подтвердить, что этот модифицированный скрипт работал нормально. Но если это не то, что вы хотите, извините.

...