Meteorでメール配備
カテゴリー:Meteor 作成日:2015年4月11日22:08
Meteorでコメントがあったり、BBSで投稿があった場合サイトの管理者(ここでは私)はその事を知りたいと思いました。
そこで、投稿があったらメールで管理者に知らせる為にメール送信機能を組み込みました。
参考サイト Meteorで、メール送信
いつものようにパッケージを組み込む
meteor add email
そして server/mailserver.jsへ自分が使っているsmtpサーバの情報を入力する。
これはGmailの設定例です。
Meteor.startup(function () {
process.env.MAIL_URL="smtp://メールアドレス:パスワード@smtp.gmail.com:587";
});
このサイトで使ってるBBSの例
client/template/bbs/bbs.html
<template name="bbscomment">
<span id="labeltitle">お名前<input type="text" id="bbs_name" value="{{cookie_bbs_name}}"/></span>
<span id="labeltitle">パスワード<input type="password" id="bbs_password" value="{{cookie_bbs_password}}"/></span>
<textarea id="bbscomment_message" class="form-control" rows="6" placeholder="パスワードを入力すると自分のコメントを編集できます。マークダウン使えますが、htmlタグ制限があります 。Aboutを見て下さい。"></textarea>
<span id="labeltitle">{{randomtext}}</span> 左の数値を入力して下さい <input type="text" id="random_id" />
<hr />
<button id="btn_comment" class="btn btn-info">追加</button>
</template>
client/template/bbs/bbs.js
Template.bbs.events({
'click #btn_comment': function(event, template){
var md5str;
var randomst = String($('#random_id').val());
if(randomst !== String(Session.get('bbs_random_text'))) return;
var bbs_name = $('#bbs_name').val();
var bbs_password = $('#bbs_password').val();
var bbs_comment = $('#bbscomment_message').val();
var mid = Session.get('bbs_mid');
// パスワードが空白でなければ、 Crypt を使って Base64で暗号化
if(bbs_password !==''){
md5str = CryptoJS.MD5(bbs_password).toString(CryptoJS.enc.Base64);
} else {
md5str ='';
}
if(bbs_name==='' || bbs_comment==='') return;
//コメントのインサート
Meteor.call('bbsCommentInsert', mid, bbs_name, md5str, bbs_comment,
function(err, result){
if(!err){ // エラーがなければ
$('#random_id').val('');
$('#bbs_name').val('');
$('#bbs_password').val('');
$('#bbscomment_message').val('');
if(bbs_password !== '') {
// クッキーをサイトルートで一年間セット
Cookie.set('_cookie_bbs_name', bbs_name, {
path: '/',
expires: 365
});
Cookie.set('_cookie_bbs_password', bbs_password, {
path: '/',
expires: 365
});
};
// メールの送信はここから
var maintitle =NewMainBbs.findOne({mid:Session.get('bbs_mid')}).maintitle;
var to = 'kiyo@yosiki.org';
var from = 'kiyo@yosiki.org';
var subject = 'kiyoSite からメール';
var mes = maintitle +' '+bbs_name+ '様からコメントがありました。';
// Meteor server methodsのsendEmailをコール
Meteor.call('sendEmail', to, from, subject, mes,
function (err, result) {
if (err) {
console.log('メールの送信に失敗');
} else {
console.log('メール送信 完了');
}
});
server/server.js
Meteor.methods({
//メールの送信
'sendEmail': function(to, from, subject, text){
check([to, from, subject, text], [String]);
// 同じクライアントからの、ほかのメソッド呼び出しが
// メール送信完了を待つことなく実行が開始されるように
// 設定します。
this.unblock();
Email.send({
to: to,
from: from,
subject: subject,
text: text
});
}
});