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

在Cloud Foundry Node.js上发送Gmail SMTP电子邮件?,node.js,smtp,gmail,sendmail,cloud-foundry,Node.js,Smtp,Gmail,Sendmail,Cloud Foundry,下面的代码在本地运行,但当我部署到api.cloudfoundry.com时,根本没有发送电子邮件。你能帮我弄明白为什么吗?是因为云计算阻止了某些端口吗 var port = (process.env.VMC_APP_PORT || 3000), host = (process.env.VCAP_APP_HOST || 'localhost'), http = require('http'), async = require('async'); var email =

下面的代码在本地运行,但当我部署到
api.cloudfoundry.com
时,根本没有发送电子邮件。你能帮我弄明白为什么吗?是因为云计算阻止了某些端口吗

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);
var port=(process.env.VMC_APP|u port | 3000),
主机=(process.env.VCAP_APP_host | |“localhost”),
http=require('http'),
async=require('async');
var email=require(“emailjs”);
var server=email.server.connect({
用户:“用户名”,
密码:“密码”,
主机:“smtp.gmail.com”,
ssl:true
});
//发送消息并获取包含错误或已发送消息详细信息的回调
http.createServer(函数(req,res){
异步系列([
函数(回调){
server.send({
文字:“这应该是粗体……”,
发件人:“XXX”,
致:“YYY,ZZZ”,
抄送:“,
主题:“emailjs:测试HTML正文3”,
附件:
[
{data:“大a$$title
或者应该改为粗体!!”,可选:true} ] },函数(err,message){console.log(err | | message);}); 回调(null,“success”); } ], 功能(错误、结果){ res.writeHead(200,{'Content-Type':'text/plain'}); res.write(结果+“…”); }); }).侦听(端口、主机);
更新1:

看起来这是gmail SMTP问题。我做了
vmc文件myapp logs/stdout.log
,它显示:

{[Error:authorization.failed]代码:3,上一个:{[Error: 命令“cGludGVyZXN0”响应错误] 代码:2,, smtp:'535-5.7.1请使用您的web浏览器登录,然后重试。有关详细信息,请访问\n535 5.7.1 4. hn9sm22202393qab.8-gsmtp\r\n'},smtp:undefined}

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

然后我按照这个链接授权了这个应用程序

下一步

使用要授权访问您的应用程序登录 在接下来的十分钟内交代。谷歌将记住 应用程序登录后,将允许其访问您的 以后只要使用正确的密码,就可以使用该帐户

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

更新2:


我尝试使用另一个gmail帐户,并通过了批准Cloud Foundry进行应用程序访问的步骤。显然,对于不起作用的帐户,我错过了登录并批准Cloud Foundry的“10分钟窗口”。gmail从未回来要求再次批准。Miss是Miss:(

我自己刚刚尝试将其部署到Cloud Foundry,它似乎很管用——尽管应用程序不向HTTP客户端返回任何内容可能不是好的做法(在上一个函数中尝试res.end而不是res.write)

您还应该使用VCAP_APP_端口而不是VMC_APP_端口,尽管这两种端口目前都可以使用

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


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

如果您的应用程序不能与google gmail一起使用,请使用这两个链接

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


-禁用应用程序和登录的show captha

您实际上可以将主机和端口保留为localhost:3000,Cloud Foundry将在生产中覆盖它。我编辑了更多细节…感谢您的日志想法,先生。Cloud Foundry不是这里的错。