通过 nodemailer 发送的电子邮件进入 gmail 的垃圾邮件

问题描述 投票:0回答:6

我通过 nodemailer 发送电子邮件,如果我从本地服务器运行,它会进入 gmail 的收件箱,但如果我从 Microsoft azure 服务器运行脚本,它会进入 gmail 的垃圾邮件。 以下是我的脚本

var nodemailer = require('nodemailer');
var EmailTemplates = require('swig-email-templates');
var smtpConfig =  {
        service: 'smtp.office365.com',
        host: 'smtp.office365.com',
        port: 587,
        starttls: {
            enable: true
        },
        secureConnection: true,
        auth: {
            user: '[email protected]',
            pass: 'zzzzzz'
        }
    }

var templates = new EmailTemplates();  
var transporter = nodemailer.createTransport(smtpConfig);   

var context = {
  username:'Rajesh',
  email:'[email protected]',
  link : 'www.google.co.in'
};

templates.render('activate_email.html', context, function(err, html,text, subject) {    

  transporter.sendMail({
    from: '"Product Name👥" <[email protected]>', // sender address
    to: '[email protected]',
      subject: 'Account activation',
      html: html,
      text:text    
  });    
});
node.js gmail nodemailer email-spam
6个回答
28
投票

事实是,您的问题没有简单的一线解决方案 :) 发生这种情况的原因有很多,这里是其中的一些:

  • 你的主机被标记为垃圾邮件 - 如果你没有验证你的电子邮件或者你从同一主机发送了太多电子邮件,就会发生这种情况。共享主机通常被标记为这样,因此邮件服务器会定期将它们标记为垃圾邮件

  • 您的

    from
    字段与您允许使用的字段不同 - 我看到您使用的是 smtp,对于您可以发送的邮件有严格的规定。当然你总是可以从
    [email protected]
    发送电子邮件,但是由于你的 SMTP 主机是 not facebook.com,你的电子邮件肯定会被标记为垃圾邮件

  • 您可以在许多不同的邮件中对您的电子邮件进行签名,以确保服务器这封电子邮件是您发送的并且具有正确的签名。在线查看这样做的方法。

  • 在开发过程中,您发送了很多相似的电子邮件 - 发送完全相同的“测试”电子邮件是您的电子邮件被列入黑名单的常见原因

  • 您的主题中有表情符号 - 这不是 100% 的原因,但服务器经常将此类电子邮件标记为垃圾邮件,特别是在其他领域(如

    from

不幸的是,正如我所说,没有一个真正的原因,可能有很多。我希望这至少能有所帮助 :)


7
投票

在我的例子中,我需要指定表单,发件人需要是=到用户邮件

auth: {
  user: "[email protected]",
  pass: "password",
      }, 
from: [email protected], 

6
投票

请去掉👥,再尝试发送。我曾经在一篇文章中读到,电子邮件客户不喜欢这些图标,因为很多垃圾邮件发送者都在使用它们。

尝试将其发送到多个 Gmail 帐户。除此之外,代码没有任何问题。如果您在共享主机或本地主机上,它也可能进入垃圾文件夹。在这种情况下,您将不得不考虑从不同的 IP 发送电子邮件,最好是在您将电子邮件发送到的国家/地区。

但首先尝试删除该图标!

附言。我会把这个答案作为评论,但由于代表率低,我不能。


4
投票

对于那些仍在为这个问题而苦苦挣扎的人。我建议如下。

  1. 确保添加与
    from
    匹配的
    auth.user
  2. 字段
  let transporter = nodemailer.createTransport({
    host: "smtp-mail.outlook.com",
    secureConnection: false,
    port: 587,
    tls: {
      ciphers: "SSLv3",
    },
    auth: {
      user: <YOUR_EMAIL_ACCOUNT>,
      pass: <YOUR_EMAIL_PASSWORD>,
    },
    from: <YOUR_EMAIL_ACCOUNT>,
  });
  1. 添加
    text
    字段,描述您在
    options
    payload
  2. 中对电子邮件的意图
  const mailOptions = {
    from: `myCompany <[email protected]>`,
    to: "[email protected]",
    subject: "[MYCOMPANY] YOUR EMAIL VERIFICATION",
    text: "Hello. This email is for your email verification.",
    html: <h1>Hello</h1>,
  };
  1. 如果#1 或#2 不能解决您的问题。尝试使用 test-mailer 并将电子邮件发送到他们提供的测试电子邮件地址。它会告诉你你的漏洞在哪里,尤其是你必须设置

    SPF
    DKIM
    DMARC.

    的部分
  2. 如果您使用的是自定义域设置

    SPF
    DKIM
    DMARC
    遵循此article.


2
投票

晚会..

尝试在您的 emailConfig 中同时添加 HTML 和文本版本,如下所示。这样电子邮件就会出现在收件箱中。它对我有用。

var emailOptions = {
from: '[email protected]',
to: '[email protected]',
cc:'[email protected], [email protected], [email protected]',
    bcc:'[email protected]',
    subject: 'xxxxxxxxxx',
    /* Adding HTML and Text Version, so the email will not land up in the Spam folder */
    html: 'Hello Team! <br><br>Please find attached...<br><br>Thanks,<br>XXXXX',
    text: 'Hello Team! <br><br>Please find attached...<br><br>Thanks,<br>XXXXX',
    attachments: [{
        // file on disk as an attachment, concatenating the file extension separately since NODE is not renaming the file properly with fs.renameSync
        filename: finalFileNameWithoutExt + '.xlsx',
        path: reportsLocationPathWithYearMonth + finalFileNameWithoutExt + '.xlsx' // stream this file
    }]
};

-3
投票

HTML 变成垃圾,纯文本不会

© www.soinside.com 2019 - 2024. All rights reserved.