top of page

[Node.js/cloud functions] nodemailerでyahooメールアカウントからメール送信

  • 執筆者の写真: M.R
    M.R
  • 2022年1月13日
  • 読了時間: 2分

概要


スマホアプリで、ある特定の種類のデータが投稿されたら自分にメールで通知が来るような機能をfirebaseのcloud functionsを用いて実装しました。途中いくつか躓いた点がありましたので書き残しておこうと思います。



詳細


全体像

cloud functionsでメール送信をする関数を作成します。関数の実行されるトリガはfirestoreの"\data"コレクションにドキュメントが作成された時。メールの送信元はyahoo Japanのメールアカウント、メール送信先はgmailアカウントです。


実装

以下のように実装しました。


const functions=require("firebase-functions");
const admin=require("firebase-admin");
admin.initializeApp(functions.config().firebase);

const nodemailer=require('nodemailer');
const smtpTransport=require("nodemailer-smtp-transport");

const email=functions.config().mailfrom.address;
const password=functions.config().mailfrom.password;

let transporter=nodemailer.createTransport(smtpTransport({
    host: 'smtp.mail.yahoo.co.jp',
    port: 465,
    secure: true,
    auth: {
        user: email,
        pass: password
    }
}));

exports.sendOpinion=functions.firestore.document('data/{id}')
.onCreate((snapshot,context)=>{
    const to=functions.config().mailto.address;
    const data=snapshot.data();
    const title=data.title;
    const detail=data.detail;
    const msg="タイトル: "+title+"\n詳細: "+detail;
    const mailOptions={
        from: email,
        to: to,
        subject: 'データが投稿されました',
        text: msg
    };
    
    return transporter.sendMail(mailOptions, (erro,info)=>{
        if(erro){
            return res.send(erro.toString());
        }
        return res.send('Sended');
    });
        
});

firestoreの\data以下は

data

|- title

|- detail

となっています。


また、送信元、送信先のメールアドレス、パスワードはfirebaseの環境変数に設定しています。(コードに直書きしないように)



エラーと対応


Too many bad auth attempts.

→ nodemailer-smtp-transportを使っていなかった


554 Cannot send message due to possible spam

→ 本文(text)がなかった


Greeting never received

→ secure: trueにする



最後に


無事データが投稿されたらメール通知できるようになりました。

僕の場合は、アプリに対する意見が投稿された場合に上記を使用していますが、他にもユーザが追加されたら、などの使い方もあると思います。


最新記事

すべて表示

Comments


カテゴリ

あなたの買い物をサポートする
アプリ Shop Plan

iphone6.5p2.png

​いつ何を買うかの計画を立てられるアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

靴を大切にしよう!靴管理アプリ SHOES_KEEP

納品:iPhone6.5①.png

靴の履いた回数、お手入れ回数を管理するアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

「後で読む」を忘れないアプリ ArticleReminder

気になった​Webサイトを登録し、指定時刻にリマインダを送れるアプリです

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

お問い合わせ:Twitterまでお願いします

  • Twitter
bottom of page