나의 개발일지(김지헌)
nodemailer로 메일 보내기 본문
GMAIL 접속후 설정에서 IMAP사용으로 변경
구글로 로그인 후 계정관리 클릭 (2단계 인증 해야 사용가능)
-> 검색 창에 앱 비밀번호 검색
-> 이름 작성후 기기용 앱 비밀번호 복사(메일 접근 권한 비밀번호)
-> 코드
//user.conller.js
controller:async(req,res,next)=>{
try{
const { toEmail } = req.body
if(!toEmail) throw new Error("이메일이 없습니다")
const ServiceInstance = Container.get(Service)
const result = await ServiceInstance.sendmail(toEmail)
console.log(result,"컨트롤러")
let status = 200
if(result == false){
status = 404
}
return res.status(200).json({
status,
message:'success',
})
}catch(e){
console.log(e.message)
return res.status(200).json({
status: 500,
message: 'Server error',
data: e.message
})
}
}
//user.service.js
async sendmail(toEmail){
try{
console.log(toEmail,"서빗")
const emailparam = {
toEmail,
subject:`안녕하세요 테스트메일입니다`,
html:`
<h1>테스트 입니다 내가 보냈어요</h1>
<b>1231313131321</b>
`
}
return await mailer.sendGmail(emailparam)
}catch(e){
return e
}
}
// utill/mail.js
import nodemailer from 'nodemailer'
import dotenv from 'dotenv'
dotenv.config()
/*
const transporter = nodemailer.createTransport({
service:'gmail', //전송하는 서비스
host: 'smtp.gmail.com',
port:587,
secure: false, // 465의 경우 true, 다른 포트의 경우 false
auth: {
// Gmail 주소 입력, 'testmail@gmail.com'
user: process.env.GMAIL_ID,
// Gmail 패스워드 입력
pass: process.env.GMAIL_APP_PW,
}
const mailOptions = {
from: process.env.GMAIL_ID, // 보내는 메일의 주소
to: param.toEmail, // 수신할 이메일
subject: param.subject, // 메일 제목
html: param.html // 메일 내용
};
//메일 보내기
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
const message = {
from: "sender@server.com", 보낸 사람의 이메일 주소입니다
to: "receiver@sender.com", 쉼표로 구분된 목록 또는 받는 사람
subject: "Message title", 제목
text: "Plaintext version of the message", 유니코드 문자열, 버퍼, 스트림 또는 첨부 파일과 같은 객체
html: "<p>HTML version of the message</p>" 메시지의 HTML 버전으로 유니코드 문자열, 버퍼, 스트림 또는 첨부 파일과 같은 객체
let transporter = nodemailer.createTransport(options[, defaults])
}; */
/* 메일 전송 객체 */
export const mailer = {
/* 메일 전송 */
sendGmail: async (param)=>{
console.log(process.env.GMAIL_ID)
const transporter = nodemailer.createTransport({
service:'gmail', //전송하는 서비스
host: 'smtp.gmail.com',
port:587,
secure: false, // 465의 경우 true, 다른 포트의 경우 false
auth: {
// Gmail 주소 입력, 'testmail@gmail.com'
user: process.env.GMAIL_ID,
// Gmail 입 비밀번호 입력
pass: process.env.GMAIL_APP_PW,
},
})
/* 메일 옵션 */
const mailOptions = {
from: process.env.GMAIL_ID, // 보내는 메일의 주소
to: param.toEmail, // 수신할 이메일
subject: param.subject, // 메일 제목
html: param.html // 메일 내용
};
/* 메일 전송 */
/* transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
}); */
//예외 처리를 위해
try{
const result = await transporter.sendMail(mailOptions);
console.log('Email sent: ' + result.response)
return true
}catch(e){
console.log(e.message)
return false
}
}
}
'공부' 카테고리의 다른 글
시퀄라이즈 hooks 사용해보기 (0) | 2023.04.27 |
---|---|
route53 S3버킷으로 HTTP 도메인 리다이렉션하기 + 클라우드 프론트 (0) | 2023.04.18 |
Typedi로 api작성 해보기 (0) | 2023.04.06 |
typedi로 의존성 관리 해보기 (0) | 2023.04.06 |
초기 세팅 (0) | 2023.04.03 |