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、そしてそれは示しました:

{ [エラー: authentication.failed] コード: 3、前: { [エラー: コマンド 'cGludGVyZXN0' の応答が正しくありません] コード: 2、smtp: '535-5.7.1 Web ブラウザーでログインしてから、もう一度やり直してください。詳細については、\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に従ってアプリを承認しました

次のステップ

10 分以内にアカウントへのアクセスを許可するアプリケーションを使用してサインインしてください。Google はサインイン後にアプリケーションを記憶し、正しいパスワードを使用している限り、今後はアカウントへのアクセスを許可します。

もう一度ログインを試みますが、それでもうまくいきません。承認のためにgmail内でメールを受け取るはずだと思っていましたが、今のところ何もありません:(

更新 2:

別の gmail アカウントで試し、Cloud Foundry へのアプリ アクセスを承認する手順を実行したところ、機能しました。どうやら、機能しなかったアカウントについては、サインインして Cloud Foundry を承認するための「10 分ウィンドウ」を逃したようです。Gmail は戻ってくることはなく、再度承認するよう求められました。ミスはミスです:(

4

2 に答える 2

2

私はこれを Cloud Foundry に自分でデプロイしようとしましたが、うまくいくようです - アプリが HTTP クライアントに何も返さないことはおそらく良い習慣ではありません (最後の関数で res.write の代わりに res.end を試してください) )。

また、VMC_APP_PORT の代わりに VCAP_APP_PORT を使用する必要がありますが、現時点ではどちらも機能します。

私の場合、async と emailjs の依存関係を含む package.json ファイルも作成し、ローカルでテストしてアプリを Cloud Foundry にプッシュする前に、npm install と npm Shrinkwrap を実行しました。

どのようなエラーが表示されますか? サーバー側のログを確認しましたか (vmc logs コマンド)?

于 2013-02-15T10:23:47.793 に答える