【nodemailer】「ローカルサーバでは送信可能なのに、デプロイ後にエラー」になるのを解決したいです。

実現したいこと

メールの送受信ができるようにしたい

前提

ポートフォリオサイトにメールフォームを設置しました。
node.js環境にて、nodemailerを使用して、送られてきたメールがgmailアドレスに届くように設定しました。
localhost環境では無事にメールが届くのですが、「fly.io」上にデプロイするとエラーが出てしまいます。

発生している問題・エラーメッセージ

①ブラウザ上(javascriptで出るように設定したもの)

something went wrong

②ブラウザ上(デベロッパーツールのコンソール)

error (script.js:509)

該当のソースコード1

script.js

1const contactForm = document.querySelector('.contact-form'); 2let name = document.getElementById('name'); 3let email = document.getElementById('email'); 4let message = document.getElementById('message'); 5 6 contactForm.addEventListener('submit', (e) => { 7 e.preventDefault(); 8 9 let formData = { 10 name: name.value, 11 email: email.value, 12 message: message.value 13 } 14 15 let xhr = new XMLHttpRequest(); 16 xhr.open('POST', '/'); 17 xhr.setRequestHeader('content-type', 'application/json'); 18 xhr.onload = function() { 19 console.log(xhr.responseText); 20 if(xhr.responseText == "成功しました") { 21 alert('メッセージありがとうございました!'); 22 name.value = ''; 23 email.value = ''; 24 message.value = ''; 25 } else { 26 alert('something went wrong') 27 } 28 } 29 xhr.send(JSON.stringify(formData)); 30 })

該当のソースコード2

app.js:

1const express = require("express"); 2const app = express(); 3const taskRoute = require("./routes/tasks"); 4const connectDB = require("./db/connect"); 5const nodemailer = require("nodemailer"); 6require("dotenv").config(); 7app.use(express.json()); 8app.use(express.static("./public")); 9 10 11const PORT = 5000; 12 13・・・(中略)・・・ 14 15//Middleware 16 17app.get('/', (req, res) => { 18 res.sendFile(__dirname + '../public/index.html'); 19}) 20 21app.post('/', (req, res) => { 22 console.log(req.body); 23 24 const transporter = nodemailer.createTransport({ 25 host: 'smtp.gmail.com', 26 port: 587, 27 auth: { 28 user: process.env.GMAILUSER, 29 pass: process.env.GMAILPASSWORD, 30 }, 31 }); 32 //管理人が受け取るメール 33 const mailOptions = { 34 from: req.body.email, 35 to: 'yabuuchi.a.yano@gmail.com', 36 subject: `[お問い合わせ]: ${req.body.name}様より`, 37 text: `${req.body.message} Send from ${req.body.email}`, 38 html: ` 39 <p>【名前】</p> 40 <p>${req.body.name}</p> 41 42 <p>【メールアドレス】</p> 43 <p>${req.body.email}</p> 44 45 <p>【メッセージ内容】</p> 46 <p>${req.body.message}</p> 47 `, 48 }; 49 50 transporter.sendMail(mailOptions, (error, info) => { 51 if (error) { 52 console.log(error); 53 res.send('error'); 54 } else { 55 console.log('Email sent: ' + info.response); 56 res.send("成功しました"); 57 } 58 }) 59})

該当のソースコード3

index.html

1<form class="contact-form"> 2 <label for="name">お名前<span> ※必須</span></label> 3 <input type="text" name="お名前" class="validate required" id="name"> 4 5 <label for="email">メールアドレス<span> ※必須</span></label> 6 <input type="email" value="" name="メールアドレス" class="validate required email" id="email"> 7 8 <label for="message">メッセージ<span> ※必須</span></label> 9 <textarea id="message" name="メッセージ" rows="10" cols="60" class="validate required"></textarea> 10 11 <p><input type="submit" value="送信"></p> 12</form> 13 14・・・(中略)・・・ 15 16<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> 17<script type="text/javascript" src="./script.js"></script>

試したこと

ぐぐってみたのですが、解決策を見つけることができませんでした。
EC2の場合にエラーが出る事象を見つけまして、
fly.io側がメールの利用を制限しているという可能性があるのかなと思ったりもしましたが、
明確な回答がわかりませんでした。

もしご存じの方がいらっしゃいましたら、教えていただけますと幸いです。
どうぞよろしくお願いいたします。

コメントを投稿

0 コメント