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

Email send through nodemailer goes into spam for gmail

我正在通过 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: 'xxxxx@yyyy.com',
            pass: 'zzzzzz'
        }
    }

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

var context = {
  username:'Rajesh',
  email:'xxxxx@gmail.com',
  link : 'www.google.co.in'
};

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

  transporter.sendMail({
    from: '"Product Name" <no-reply@xxxxx.com>', // sender address
    to: 'xxxx@gmail.com',
      subject: 'Account activation',
      html: html,
      text:text    
  });    
});

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

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

但首先尝试删除该图标!

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

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

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

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

  • 您可以在许多不同的邮件中为您的电子邮件签名,以向服务器保证这封电子邮件是您发送的并且具有正确的签名。在线查看执行此操作的方法。

  • 在开发过程中,您发送过许多相似的电子邮件 - 发送完全相同的 "test" 电子邮件是您的电子邮件被列入黑名单的常见原因

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

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

在我的例子中,我需要指定表单,发件人需要是 = to user mail

auth: {
  user: "xxx@yyy.com",
  pass: "password",
      }, 
from: xxx@yyy.com, 

HTML 变成垃圾,纯文本不会

晚会..

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

var emailOptions = {
from: 'cxxxxxkxxxxx@xxxxx.com',
to: 'xxxx@xxxxxx.com',
cc:'sxxxxxxsh@xxxx.com, xxxa@xxx.com, aaaxxxx@xxxx.com',
    bcc:'xxxxx.wrxxxk@xxxx.com',
    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
    }]
};

献给还在为这个问题苦苦挣扎的人。我建议如下。

  1. 确保您和 from 字段匹配 auth.user
  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 有效负载中电子邮件的意图
  const mailOptions = {
    from: `myCompany <mycompanyemail@gmail.com>`,
    to: "recipient@gmail.com",
    subject: "[MYCOMPANY] YOUR EMAIL VERIFICATION",
    text: "Hello. This email is for your email verification.",
    html: <h1>Hello</h1>,
  };
  1. 如果#1 或#2 不能解决您的问题。尝试使用 test-mailer 并将电子邮件发送到他们提供的测试电子邮件地址。它将向您展示您的漏洞所在,尤其是您必须设置 SPFDKIMDMARC.

    的部分
  2. 如果您使用自定义域设置 SPF、DKIM、DMARC,请遵循此 article