在Cloud Foundry Node.js上发送Gmail SMTP电子邮件?

时间:2013-02-15 05:48:26

标签: node.js smtp gmail sendmail cloudfoundry

我的下面的代码在本地工作,但当我部署到api.cloudfoundry.com时,根本没有发送电子邮件。你能帮我理解为什么吗?是因为Cloud Foundry会阻止某些端口吗?

var port = (process.env.VMC_APP_PORT || 3000),
    host = (process.env.VCAP_APP_HOST || 'localhost'),
    http = require('http'),
    async = require('async');
var email   = require("emailjs");
var server  = email.server.connect({
   user:    "username", 
   password:"password", 
   host:    "smtp.gmail.com", 
   ssl:     true
});
// send the message and get a callback with an error or details of the message that was sent
http.createServer(function(req, res) {
async.series([
   function(callback){
server.send({
  text:    "This should be <b>BOLD</b>...", 
  from:    "XXX <xxx@gmail.com>", 
  to:      "YYY <yyy@gmail.com>, ZZZ <zzz@gmail.com>",
  cc:      "",
  subject: "emailjs: test HTML body 3",
   attachment: 
   [
      {data:"<h1>Big a$$ title</h1><br/>Or maybe this should be <b>BOLD</b> instead!!", alternative:true}

   ]
}, function(err, message) { console.log(err || message); });
       callback(null, 'success');
   }
],
function(err, results){
 res.writeHead(200, {'Content-Type': 'text/plain'});
 res.write(results + '...');
});
}).listen(port, host);

更新1:

看起来这是一个gmail SMTP问题。我做了vmc files myapp logs/stdout.log并显示:

  

{[错误:authorization.failed]代码:3,上一个:{[错误:   命令'cGludGVyZXN0'的错误响应]        代码:2,        smtp:'535-5.7.1请使用您的网络浏览器登录,然后重试。更多信息来自\ n535 5.7.1   https://support.google.com/mail/bin/answer.py?answer=7875 4   hn9sm22202393qab.8 - gsmtp \ r \ n'},smtp:undefined}

我测试了其他SMTP或不同的Gmail帐户,但它确实有效。所以它特定于我正在测试的这个Gmail帐户。

然后我按照此链接https://support.google.com/mail/bin/answer.py?hl=en&answer=78754授权应用

  

下一步

     

使用您要授权访问的应用程序登录   在接下来的十分钟内开户。谷歌会记得   登录后申请,并允许其访问您的   只要使用正确的密码,将来的帐户。

尝试再次登录,但仍然没有运气。我以为我应该在gmail中收到一封批准的电子邮件,但到目前为止还没有:(

更新2:

我尝试了另一个Gmail帐户并完成了批准Cloud Foundry进行应用访问的步骤,并且它可以正常运行。显然,对于不起作用的帐户,我错过了登录并批准Cloud Foundry的“10分钟窗口”。 Gmail从未回来,并要求再次批准。想念小姐:(

2 个答案:

答案 0 :(得分:2)

我刚刚尝试将此部署到Cloud Foundry,它似乎有效 - 尽管您的应用程序不向HTTP客户端返回任何内容可能不是一个好习惯(尝试res.end而不是res.write in你最后的功能)。

您也应该使用VCAP_APP_PORT而不是VMC_APP_PORT,尽管两者现在都可以使用。

在我的情况下,我还创建了一个包含async和emailjs依赖项的package.json文件,并在本地测试并将应用程序推送到Cloud Foundry之前运行了npm install和npm shrinkwrap。

你看到了什么错误?你检查了服务器端的日志(vmc logs命令)吗?

答案 1 :(得分:0)

如果您的应用程序不适用于Google gmail,请使用这两个链接。

one-允许安全性较低的应用

two-为应用程序和登录名禁用显示权限