【问题标题】:Send Gmail SMTP email on Cloud Foundry Node.js?在 Cloud Foundry Node.js 上发送 Gmail SMTP 电子邮件?
【发布时间】:2013-01-31 02:11:58
【问题描述】:

我在下面有这段代码,它可以在本地运行,但是当我部署到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: 未定义 }

我测试了另一个 SMTP 或不同的 gmail 帐户,它可以工作。所以它特定于我正在测试的这个 gmail 帐户。

然后我点击此链接https://support.google.com/mail/bin/answer.py?hl=en&answer=78754 来授权应用程序

下一步

使用您要授权访问您的应用程序的应用程序登录 在接下来的十分钟内记账。谷歌会记住 应用程序登录后,将允许它访问您的 以后只要使用正确的密码即可。

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

更新 2:

我尝试使用另一个 gmail 帐户并完成了批准 Cloud Foundry 访问应用程序的步骤,它可以正常工作。显然,对于不起作用的帐户,我错过了登录和批准 Cloud Foundry 的“10 分钟窗口”。 Gmail 再也没有回来并要求再次批准它。小姐就是小姐:(

【问题讨论】:

    标签: node.js smtp gmail sendmail cloud-foundry


    【解决方案1】:

    如果您的应用无法使用 google gmail,请使用这两个链接。

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

    two - 为应用和登录禁用显示验证码

    【讨论】:

      【解决方案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 命令)?

      【讨论】:

      • 您实际上可以将主机和端口保留为 localhost:3000,Cloud Foundry 将在生产中覆盖它。
      • 我编辑得更详细...谢谢你的日志想法先生。 Cloud Foundry 不是这里的错。
      猜你喜欢
      • 2015-10-09
      • 2014-12-24
      • 2017-02-09
      • 2014-10-19
      • 2016-02-29
      • 1970-01-01
      • 2016-09-02
      • 2016-10-25
      • 1970-01-01
      相关资源
      最近更新 更多