LoginSignup
26
23

More than 5 years have passed since last update.

expressで簡単お問い合わせフォーム

Posted at

概要

簡単なお問い合わせフォームが必要だったのでつくりました。
今回はさくらサーバのメールを使ってメールを送っています。

まずロジック側はこんな感じ。

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

26
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
23