最初に詳細を教えてください。私はノードのノードメーラーを使ってフォーム上の送信された情報から電子メールを送信します。一度に一人の受信者と一人のHTML本体が送信されたとき、うまくいきました。しかし、mailOptions2
をfor
ループに入れると、異なる配列の受信者とhtmlボディで電子メールを送信できます。それから、私は望みどおりに電子メールとhtmlの内容を別々に送信します。しかし、フォームが提出されると、/send
州ではロードが維持され、ページの生のHTML、つまりCSSはロードされません。ノードjsにフォームがサブミットされた後にCSSファイルをロードできません
Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:489:11)
at ServerResponse.setHeader (_http_outgoing.js:496:3)
at ServerResponse.header (C:\Users\Ahmet Ömer\Desktop\Repairtechnician\node_modules\express\lib\response.js:767:10)
at ServerResponse.send (C:\Users\Ahmet Ömer\Desktop\Repairtechnician\node_modules\express\lib\response.js:170:12)
at done (C:\Users\Ahmet Ömer\Desktop\Repairtechnician\node_modules\express\lib\response.js:1004:10)
at Immediate._onImmediate (C:\Users\Ahmet Ömer\Desktop\Repairtechnician\node_modules\express-handlebars\lib\utils.js:26:13)
at runCallback (timers.js:781:20)
at tryOnImmediate (timers.js:743:5)
at processImmediate [as _immediateCallback] (timers.js:714:5)
このエラーの原因はわかっていますが、私はかなり初心者ですから、私の場合はそれを解決する方法がわかりませんでした。
Nodejs:
app2.engine('handlebars', exphbs2());
app2.set('view engine', 'handlebars');
// Static folder
app2.use('/public', express2.static(path2.join(__dirname, 'public')));
app2.use('/', express2.static(path2.join(__dirname, '')));
// Body Parser Middleware
app2.use(bodyParser2.urlencoded({ extended: false }));
app2.use(bodyParser2.json());
app2.get('/', (req, res) => {
res.render('services');
});
app2.post('/send', (req, res) => {
let mailList = ['xyz', '[email protected]'];
let outputs = [
`
<div>
</div>
`,
`
<div>
</div>
`];
// create reusable transporter object using the default SMTP transport
let transporter2 = nodemailer2.createTransport({
service: 'gmail',
port: 25,
secure: false,
auth: {
user: '[email protected]', // senders email
pass: 'xyz' // senders password
},
tls:{
rejectUnauthorized:false
}
});
for (var i = 0; i < mailList.length; i++) {
// setup email data with raw html
let mailOptions2 = {
from: '"xyz" <[email protected]>', // sender address
to: mailList[i], // receiver or receivers
subject: 'xyz', // Subject line
html: outputs[i] // html body
};
// send mail with defined transport object
transporter2.sendMail(mailOptions2, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
console.log('Preview URL: %s', nodemailer2.getTestMessageUrl(info));
res.render('services', {msg2:'xyz'});
});
}
});
私が言ったように、私が指定した領域に異なる値を渡すためにmailOptions2
ためfor
ループを使用していなかった場合、それがうまく働いてきたでしょう。役立つ可能性がある場合はここで
は、上記のファイルの私の構造です:
server.js
services.html
public
css
styles.css
あなたは電子メールを送信したPOSTリクエストを送信しながら、1つのページにユーザーを維持しようとしていますか?ポストリクエストの後に、ページのスタイルを変更したいですか?あなたが達成しようとしていることをより明確に示すために質問を更新してみてください。ページにスタイルを追加するだけで、フォームが '.form-sent'で送信された後に適用されるスタイルを記述し、' .form-sent'クラスをPOSTのトップタグ(bodyのような)に追加することができますフォーム... – duhaime
私は何も変えたくない、同じままにしておきたい。フォームが提出された後、ページが読み込まれると、cssファイルがロードされないため、生のhtmlだけが読み込まれるためです。 @duhaime –