2017-04-17 28 views
1

ユーザーが連絡フォームを送信した後でnodemailerを使用してメールを送信すると、ユーザーは感謝のページに移動します。私は今このプロジェクトをcloud9で作業しました。ここに私のコードは次のとおりです。Nodemailerは電子メールを送信した後に非常に遅い

var express     = require("express"), 
    bodyParse    = require("body-parser"), 
    multer     = require("multer"), 
    nodemailer    = require("nodemailer"); 

var app = express(); 

app.use(bodyParse.urlencoded({extended: true})); 

var smtpTransport = nodemailer.createTransport({ 
service: "Gmail", 
auth: { 
    type: "OAuth2", 
    user: "[email protected]", 
    clientId: "xxxxxx", 
    clientSecret: "xxxxx", 
    refreshToken: "xxxxx", 
    accessToken: "xxxxx" 
    } 
}); 
app.post("/upload", function(req, res){ 
    var mailOptions = { 
    from: "xxxx <[email protected]", // sender address 
    to: "[email protected]", // list of receivers 
    subject: "xxxx", // Subject line 
    text: "xxxx", 
    attachments: [ 
     { // file on disk as an attachment 
     filename: 'xxxx.txt', 
     path: './uploads/' + req.body.filename // stream this file 
     } 
    ] 
    }; 

// send mail with defined transport object 
smtpTransport.sendMail(mailOptions, (error, info) => { 
    if (error) { 
     return console.log(error); 
    } 
    console.log('Message %s sent: %s', info.messageId, info.response); 
    }); 
}) 

私は添付のメールが正常に送出することができ、そして、私は、フォームを提出した後、数秒でそれを見ることができますが、ページが(いくつかのエラーを表示するまで永遠に読み込みを続けます以下のエラーメッセージ)。この期間中、私は1つまたは2つ以上の同じメールを受信します。

<html> 
<head> 
    <meta charset='utf-8'> 
    <title>Error 502 - Bad Gateway</title> 
    <link rel="stylesheet" type="text/css" 
    href="https://cdn.c9.io/errors/style.css" /> 
    <style type="text/css"> 
    .error_content { 
    background: rgba(255, 255, 255, 0.23); 
    padding: 10px; 
    width: 641px; 
    margin: 25px 0; 
    display: none; 
    } 

    #error-msg { 
    display: block; 
    } 
    </style> 
</head> 
<body class="errorUnknown light"> 
    <div id="wrapper"> 
    <h1>Error 502 - Bad Gateway</h1> 
    <div class="error_content" id="error-msg"> 
     <p>Please click <a href="javascript:location.reload(true)">here</a> to try again, if the issue persists please contact <a href="https://c9.io/support">support</a></p> 
    </div> 

    <a href="http://status.c9.io">Status Page</a> | 
    <a href="https://c9.io/support">Support</a> | 
    <a href="https://c9.io/dashboard.html">Dashboard</a> | 
    <a href="https://c9.io">Home</a> 
    </div> 
</body> 
</html> 

QQQQQ:これを修正するにはどうすればよいですか? QQQQQ:これは私のコードまたはcloud9サーバーの問題ですか?

答えて

2

あなたがapp.post()ハンドラのブラウザに返信することは決してありません。だから、ブラウザはあなたのサーバからの返信を待っているだけで、決して時間切れになることはありません。これは完全にあなたのコードであり、クラウドプロバイダーとは関係ありません。

ハンドブックapp.post()ハンドラの内部には、res.send(xxx)のような何らかの応答コンテンツが必要です。これはブラウザに投稿要求が完了したことを通知します。このPOSTがajax呼び出しからのものである場合は、クライアント側のJavascriptに返す応答を送信することができます。 POSTリクエストがブラウザのフォーム送信の場合、ブラウザがロードしてユーザに表示するHTMLページを返送する必要があります。

+0

ありがとう、それは問題です。 – simonhb1990

+0

私に知らせてくれてありがとう。 – simonhb1990

関連する問題