概要
簡単なお問い合わせフォームが必要だったのでつくりました。
今回はさくらサーバのメールを使ってメールを送っています。
まずロジック側はこんな感じ。
contact.js
var express = require('express');
var router = express.Router();
// 下の2つはnpm installで新たに入れるもの
var nodemailer = require("nodemailer");
var smtpTransport = require('nodemailer-smtp-transport');
router.get('/', function(req, res, next) {
var types = [
{value:'--選択してください--'},
{value:'がっこうについて'},
{value:'ぶかつについて'},
{value:'その他'}
];
res.render('contact', {
title: 'お問い合わせ',
types: types,
});
});
router.post('/', function(req, res, next) {
// メール内容の取得
var types = req.body.type;
var name = req.body.name;
var email = req.body.mail;
var message = req.body.message;
// SMTPサーバーの設定
var transporter = nodemailer.createTransport(smtpTransport({
host: "XXXXX.sakura.ne.jp",
port: 587,
tls: true,
// webメールのログインアカウント
auth: {
user: "info@XXXXX.sakura.ne.jp",
pass: "passwd"
}
}));
transporter.sendMail({
from: 'お問い合わせ <info@example.com>',
// お問い合わせ受け取り先のメールアドレス
to: 'contact@example.com',
subject: types,
text: message + "/" + name + "/" + email,
html: message + "<br>" + name + "<br>" + email
}, function(err){
if(err) return next(err);
console.log("お問い合わせメール送信完了");
// 完了ページへリダイレクト
res.redirect('/done');
});
});
router.get('/done', function(req, res, next) {
res.render('contact_done', {
title: 'お問い合わせを受け付けました',
});
});
module.exports = router;
テンプレート側はこんな感じ。swigで書いてます。
contact.html
<section class="section">
<h1><span class="content">お問い合わせ</span></h1>
<form method="POST" class="content form contactForm">
<dl>
<dt>お問い合わせの種類 (必須)</dt>
<dd>
<div class="selectWrap">
<select name="type">
{% for t in types %}
<option value="{{t.value}}">{{t.value}}</option>
{% endfor %}
</select>
</div>
</dd>
<dt>お名前 (必須)</dt>
<dd><input type="text" name="name" required></dd>
<dt>メールアドレス (必須)</dt>
<dd><input type="email" name="mail" required></dd>
<dt>お問い合わせ内容</dt>
<dd><textarea name="message" required></textarea></dd>
</dl>
<div class="btnWrap">
<button type="submit" class="button">送信する</button>
</div>
</form>
</section>
それでは良きお問い合わせライフを!
環境
express4.9 / io.js v2.3.3