无法使用gmail SMTP

3

我正在尝试使用node_mailer来使用Gmail SMTP。在我的Node.js日志中(使用nodester),我收到以下错误消息。这是我的代码:

var email = require('mailer');
email.send({
    host : "smtp.gmail.com",              
    port : "465",                     
    ssl : true,
    domain : "domain.com",            
    to : "emailId@gmail.com",
    from : "email@gmail.com",
    subject : "You have been registered",
    body: "<B>Hello! This is a test of the node_mailer.</B>",
    authentication : "login",        // auth login is supported; anything else is no auth
    username : /* username */,
    password : /* password */      
    },
    function(err, result){
      if(err){ self.now.error(err); console.log(err); return;}
      else this.now.successfullySent(result);
});

我在堆栈中没有看到任何错误,但是电子邮件没有被发送。

感谢@work4liberty和@David Ellis的建议,但似乎问题并不在我的服务器代码上,而是因为我从客户端javascript发送了错误的emailId值。Nodemailer帮助我使用正确的错误文本调试了该问题。


请适当缩进您的代码。 - ThiefMaster
2个回答

6
一些要点:
  1. 按照目前代码的写法,它将抛出解释器错误并无法运行。(例如,没有在电子邮件地址周围加上引号。)
  2. 那个库已经有一段时间没有更新了。我强烈推荐使用正在积极开发并且名字相似的Nodemailer库,该库对于常见服务(如Gmail的SMTP)有简写。
完全披露: 我为Nodemailer贡献了Amazon SES功能(尽管最近从0.1.x到0.3.x的基础架构重写意味着我不再出现在git blame中了)。
编辑:我仔细查看了您的代码。假设您的实际代码中没有拼写错误,我怀疑以下行是罪魁祸首:this.now.successfullySent(result); 基本上,回调函数的this不是你想要的。你需要通过将其分配给一个变量(比如self)来在其范围内缓存this对象。(假设我们没有处理底层库的问题。)

我在这里发布时不小心删除了电子邮件地址周围的引号,但我已经更正了。此外,我已将“this”缓存为“self”。但这不是问题所在。好的一点是,自从上次更新以来,这个库已经有7个月了。我会尝试使用nodemailer。 - Juzer Ali

2

将 xxx 替换为我的密码,这段代码对我有效。复制并粘贴它,看看它是否有效。如果对你无效,可能只是偶尔发生的延迟,或者(希望不是)你的 IP 或消息中的某些内容使 Gmail 认为它是垃圾邮件。

var email = require('mailer');
email.send({
    host : "smtp.gmail.com",
    port : "465",
    ssl : true,
    domain : "domain.com",
    to : "work4liberty@gmail.com",
    from : "work4liberty@gmail.com",
    subject : "You have been registered",
    body: "<B>Hello! This is a test of the node_mailer.</B>",
    authentication : "login",        // auth login is supported; anything else $
    username : 'work4liberty@gmail.com',
    password : 'xxx'
    },
    function(err, result){
      if(err){ self.now.error(err); console.log(err); return;}
      else console.log('looks good')
});

我的代码与你的完全相似,但我仍然无法发送邮件。可能是因为我的应用程序部署在nodester上,你有什么想法吗? - Juzer Ali
你可以尝试使用建议的Nodemailer,因为那是我通常使用的。如果你能找到IP地址,你可以检查一下是否被垃圾邮件数据库屏蔽,或者甚至直接问谷歌是否以某种方式阻止了它。也许你可以问问nodester是否被谷歌屏蔽了,或者他们是否以某种方式进行了阻止。 - work4liberty
实际上,我尝试了两种方法,现在两种都可以工作了。问题出在我的客户端脚本上。我没有正确获取电子邮件ID,真是太愚蠢了。我已经在我的问题中写明了这一点。 - Juzer Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接