Nodemailer:如何正确转发?

时间:2018-07-13 22:22:23

标签: node.js email smtp nodemailer email-forwarding

我想将一些到达SMTP服务器的邮件原封不动地转发到外部邮件地址。如果我现在转发此邮件时保持不变,则我的邮件提供商会遇到问题,因为该邮件被怀疑为垃圾邮件。邮件提供商完全阻止了运送。

在我看来,有人怀疑邮件中(原始数据中)的发件人地址不是我自己的地址,而是原始发件人的地址。信封中的发件人地址设置为我的地址,收件人地址设置为新收件人的地址。

我认为邮件提供商意识到原始数据中的地址与信封和可疑垃圾邮件中的地址不匹配。

如何正确转发邮件?收件人应将发件人视为正确的发件人地址,并且应将响应发送给原始收件人。收件人应该是原始收件人地址(我的服务器之一)。

const options = {
  disabledCommands: ['AUTH'],
  name: 'SMTP-Server',
  secure: false,
  logger: true,
  key: fs.readFileSync('/home/node/app/private.key'),
  cert: fs.readFileSync('/home/node/app/server.crt'),
  onRcptTo: (address, session, callback) => {
    let found = false;
    config.domains.forEach(element => {   //allow only my domains
      if (address.address.toLowerCase().endsWith('@' + element))
        found = true;
    });
    if (found) {
      found = false;
      let addr = address.address.substr(0, address.address.indexOf('@'));
      config.aliases.forEach(alias => {
        if (alias.address === addr) {
          found = true;
        }
      });
    }
    if (found)
      return callback();
    return callback(new Error('Unbekannter Empfänger!'));
  },
  onData: (stream, session, callback) => {
    let data = '';
    stream.on('data', (chunk) => {
      data += chunk;
    });
    stream.on('end', () => {
      const message = {
        envelope: {
          from: config.mail,                        //my Address
          to: getTargets(session.envelope.rcptTo)   //the new target(s)
        },
        raw: data
      };
      transporter.sendMail(message, (err, info) => {
        if (err) {
          console.log(err);
          callback(new Error('Please try again later!'));
        } else {
          callback();
        }
      });
    });
  }
};

const server = new SMTPServer(options);

server.on('error', err => {
  console.log('Error %s', err.message);
});

server.listen(25);

我认为有趣的部分是“ stream.on('end'”-Part。

如果不可能,实现此方法的“正确方法”是什么?

我的意思是,邮件转发通常如何工作?

谢谢

基督徒

0 个答案:

没有答案