Отправка почты через NODE.JS в функции IBM Cloud - PullRequest
0 голосов
/ 02 октября 2018

У меня похожая проблема, как здесь: Функция почты PHP не завершает отправку электронной почты Но после нескольких попыток я не думаю, что это мое решение ...

Цель: Создать действие, которое может отправлять электронную почту.Код:

function main(params) {
const params = {
    "payload": {
       "id": "sender.address@gmail.com",
       "password": "CodeForTheSenderAccount",
       "receiver": "another.mail.address@gmail.com",
       "subject": "Test Wikit",
       "body": "<html>HELLO WORLD</html>"
    }
}
const nodemailer = require('nodemailer');
//Creation of a SMTP transporter
var transporter = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
        user: params.payload.id,
        pass: params.payload.password
    }
});
//Creation of data to send
const mail = {
    from: '"Wikitest" <' + params.payload.id + '>',
    to: params.payload.receiver,
    subject: params.payload.subject,
    text: 'Hello World',
    html: params.payload.body
}
//Sending the mail
return(transporter.sendMail(mail, function (err, info) {
    if (err) {
        const ret = {status: 'OK'};
    } else {
        const ret = {status: 'KO'};
    }
    transporter.close();
    return (ret);
}));
}

Этот код работает локально, и я получаю электронное письмо.Но не при запуске функции в консоли IBM Cloud.

Я думаю, что это связано с SMTP-серверами, но я не уверен ...

Некоторые из вас увидят параметр "полезной нагрузки",Это потому, что это действие в последовательности и действие перед отправкой параметров.

1 Ответ

0 голосов
/ 02 октября 2018

При работе с асинхронным JavaScript в функциях без сервера вам необходимо вернуть и разрешить Обещание.Вот соответствующая документация для вашего примера https://github.com/apache/incubator-openwhisk/blob/master/docs/actions-node.md#creating-asynchronous-actions.

return(new Promise(function(resolve, reject) {
  transporter.sendMail(mail, function (err, info) {
    if (err) {
        const ret = {status: 'OK'};
    } else {
        const ret = {status: 'KO'};
    }
  transporter.close();
  resolve(ret);
}}));
...