2

我在下面有这段代码,它可以在本地工作,但是当我部署到时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,它显示:

{ [Error: authorization.failed] code: 3, previous: { [Error: bad response on command 'cGludGVyZXN0'] code: 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授权该应用程序

下一步

在接下来的十分钟内使用您要授权访问您的帐户的应用程序登录。Google 会在登录后记住该应用程序,并且只要它使用正确的密码,它就会允许它在未来访问您的帐户。

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

更新 2:

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

4

2 回答 2

2

我刚刚尝试自己将其部署到 Cloud Foundry,它似乎可以工作 - 尽管您的应用程序不向 HTTP 客户端返回任何内容可能不是一个好习惯(在您的最后一个函数中尝试使用 res.end 而不是 res.write )。

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

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

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

于 2013-02-15T10:23:47.793 回答
1

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

- 允许不太安全的应用程序

- 禁用应用程序和登录的显示验证码

于 2018-09-28T09:01:26.593 回答