팀원 소개를 하는 미니프로젝트를 하면서 문의를 받는 contact 페이지를 만드는 도중에, 이메일보내는 기능을 추가하는 작업을 하려고 하다가..
js로 이메일을 보내는 방식중에 emailJS
라는걸 찾았다.
emailJS
는 jsAPI로 웹페이지에서 바로 나한테 이메일을 보내는 기능을 지원하는데, 한달에 200개까지무료로 사용할 수 있고 RestAPI
로 별도 라이브러리 없이 깔끔하게 요청을 보내는 것도 가능하다.
리액트 같은거 안쓰는 프로젝트를 하는 상황이기 때문에 RestAPI
로 해봤다.
http://www.emailjs.com
에
우선 간단한 회원가입을 하면, 아래처럼 Email Services를 추가할 수 있는데,
여기서 Gmail로 추가했다.
- Gmail과 연동할 때 나를 대신하여 전송 체크하고 연동했다.
그리고 Email Templates도 추가해야 하는데, 아래처럼 원하는 방식으로 변수도 사용해서 추가하자
본인은 위처럼 했고 To Email에는 본인 이메일을 기입했다.
From Name도 그냥 내 이름으로 함 ㅇㅇ
EmailJS Docs를 대충 살펴보니 Rest API로 요청할 수 있는 쉬운 방법이 있다!
POST https://api.emailjs.com/api/v1.0/email/send-form
response는 뭐 이메일 보내기만 하면 되니까 그냥 대충 안들여다봤다.
이 Docs를 통해서 한번 대충 만들어보면
요청보낼 때 form submit한거로 보낼거라서 name은 Templates
만들때 썼던 변수같은 거 그거랑 똑같이 쓰자.
부트스트랩을 이용해서 이쁘지 않은 폼을 대충 만들어봤다.
대충 만들었으니까 class나 style같은거 더러운거 감안해서 봐용
<div class="title-wrap pt-4">
<h1>Contact Us 👋</h1>
</div>
<div class="form-wrap my-4 p-4">
<form style="width: 100%" id="contact-form">
<div id="tagArea" style="padding: 0 4px"></div>
<div class="form-floating mb-3">
<input type="text" class="form-control" id="inputName" name="name" aria-describedby="emailHelp" placeholder="Your name" />
<label for="inputName" class="form-label">Your name</label>
</div>
<div class="form-floating mb-3" style="margin-left: auto; margin-right: auto">
<input type="email" class="form-control" id="inputEmail" name="email" aria-describedby="emailHelp" placeholder="Your phone number" />
<label for="inputPhone" class="form-label">Your email address</label>
</div>
<div class="form-floating mb-3">
<input type="text" class="form-control" id="inputPhone" name="phone" aria-describedby="emailHelp" placeholder="Your email address" />
<label for="inputEmail" class="form-label">Your phone number</label>
</div>
<div class="form-floating mb-3">
<textarea class="form-control" style="height: 13rem; resize: none" name="message" id="floatingTextarea" placeholder="Comments"></textarea>
<label for="floatingTextarea">Comments</label>
</div>
<div class="nav justify-content-end px-2">
<button name="submit" class="btn btn-outline-success">전송</button>
</div>
</form>
</div>
$(document).ready(function () {
// form submit
$("#contact-form").on("submit", function (event) {
event.preventDefault();
// formData 넣어주고
const formData = new FormData(this);
// 파라미터 조건들 넣어줘야함
// ID나 Key들은 각자 다르기때문에 EmailJS에서 확인하고 기입
formData.append('service_id', 'YOUR_SERVICE_ID');
formData.append('template_id', 'YOUR_TEMPLATE_ID');
formData.append('user_id', 'YOUR_PUBLIC_KEY');
$.ajax("https://api.emailjs.com/api/v1.0/email/send-form", {
type: "POST",
data: formData,
contentType: false,
processData: false,
})
.done(function () {
alert('성공');
})
.fail(function (error) {
alert("Oops... " + JSON.stringify(error));
});
});
});
formData에 append할 때 ID나 Key들은 각자 다르기때문에 EmailJS에서 확인하고 기입
service_id
는 EmailService에,
stemplate_id
는 Email Templates에,
user_id
는 Account에 public key이다.
요청을 보내고 이메일을 확인하면 잘 들어오는 것을 확인 할 수 있다.