Продвинутый планировщик - Heroku - служба smtp отправляет на электронные письма - PullRequest
2 голосов
/ 27 февраля 2020

Я использую Расширенный планировщик в Heroku, чтобы попытаться запланировать задачу, которая будет отправлять электронную почту каждый день в 10:00. Команда, которая выполняется: npm start, потому что, когда приложение запускается, оно выполняет определенный запрос, который предназначен только для отправки электронного письма. Для отправки этого письма я использую nodemailer и службу smtp под названием smtp2 go, а на локальном хосте cron работает без проблем. Моя проблема в том, когда Advanced Scheduler выполняет задачу. Когда задача выполнена, она отправляет два электронных письма вместо одного. Я читал, что лучше всего реализовать функции async и await, но это не решило мою проблему.

const express = require('express');
const nodemailer = require('nodemailer');
let cron = require('node-cron');
var rp = require('request-promise');
var cors = require('cors');
var sleep = require('system-sleep');

const app = express();
const port = process.env.PORT || 3000;
const bodyParser = require('body-parser');

const transporter = nodemailer.createTransport({
  host: 'mail.smtp2go.com',
  port: 2525,
  secureConnection: false,
  requireTLS: true,
  auth: {
      user: 'xxx',
      pass: 'xxxx'
  },
  tls: {
    ciphers:'SSLv3'
}
});

app.use(bodyParser.json());

app.use((req, res, next) => {
  req.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type");
  res.header("Access-Control-Allow-Methods", "GET, POST","PUT", "DELETE");
  next();
});

app.post('/kitty', async function handler(req, res) {

  var apiKey = 'xxxxxxxx';    
  const baseUrl = "xxxxx";
  const baseUrl1 = "xxxxxxx";

      var options = {
        uri: baseUrl,
        method: 'GET',
        json: true,
        headers: {
          'x-api-key': apiKey
        }
      };

      var options1 = {
        uri: baseUrl1,
        method: 'GET',
        json: true,
      }

      rp(options)
      .then(function (resp) {

        rp(options1)
        .then(function (resp1) {

          let mailOptions = {
            from: 'xxxxx@gmail.com',
            to: 'xxx@gmail.com', 
            subject: 'xxxxxxx!',
            html: '<h1>xxxxxxx</h1>',
            attachments: [
                { 
                  filename: 'Cutecat.png',
                  path: resp[0]["url"]
              }
            ]
          };
          sleep(5000);

          transporter.sendMail(mailOptions, function (error, response) {
            if (error) {
              console.log(error);
              res.end('error');
            } else {
              console.log('Message sent: ', response);
              res.end('sent');
            }
          });
        });
      });
  });


app.listen(port, function () {
  console.log('Express started on port: ', port);
    Urltest = 'http://localhost:3000/kitty';
    Url = 'https://smtp-tufinho.herokuapp.com/kitty';

    var options = {
      uri: Url,
      method: 'POST',
      json: true,
    };
    rp(options).then(function () {
        console.log("exit");
        process.exit(0);
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...