[React] 포트폴리오 웹 사이트 제작 일지-4. EmailjS를 이용해 서버 없이 이메일 전송 구현하기

2023. 10. 13. 11:36·웹 프로젝트/🔮포트폴리오 사이트
목차
  1. emailjs
  2. emailjs 리액트
  3. 결과
반응형

Contact 페이지의 이메일 전송 폼을 모두 구현한 뒤 서버 구현 없이 이메일을 전송할 수 있는 방법 찾아보던 중, emailjs를 이용한 방법과 구글 스프레드 시트를 이용한 방법이 있다는 것을 알게 되었다.

두 방법을 모두 살펴보니 emailjs가 구현하기 쉬워 보여서(공식문서가 잘 되어 있다) emailjs를 이용하기로 했다.

 

emailjs

 

Send email directly from your code | EmailJS

No server side code required. Add static or dynamic attachments, dynamic parameters, captcha code and more. Start with our free tier!

www.emailjs.com

위 사이트에 접속해서 회원가입 후, Email Service 탭 > Add New Service를 선택하고 Gmail을 추가해 메일을 받을 구글 아이디와 연동을 시켰다.

Email Template 탭으로 가면 수신 이메일 양식을 수정할 수 있다.

여기서 사용되는 name, email, message 변수는 내가 코드의 form에서 사용할 input name 값과 동일해야 한다.

추가로 phone_number 등등 다양한 변수를 이용할 수도 있다.

여기까지 마무리 한 뒤 이제 리액트 코드를 작성한다.

 

emailjs 리액트

emailjs sdk 설치 (https://www.emailjs.com/docs/sdk/installation/)

npm install @emailjs/browser --save

 

emailjs 리액트 코드( https://www.emailjs.com/docs/examples/reactjs/ )

import React, { useRef } from 'react';
import emailjs from '@emailjs/browser';
export const ContactUs = () => {
const form = useRef();
const sendEmail = (e) => {
e.preventDefault();
emailjs.sendForm('YOUR_SERVICE_ID', 'YOUR_TEMPLATE_ID', form.current, 'YOUR_PUBLIC_KEY')
.then((result) => {
console.log(result.text);
}, (error) => {
console.log(error.text);
});
};
return (
<form ref={form} onSubmit={sendEmail}>
<label>Name</label>
<input type="text" name="user_name" />
<label>Email</label>
<input type="email" name="user_email" />
<label>Message</label>
<textarea name="message" />
<input type="submit" value="Send" />
</form>
);
};

sdk 설치 후 공식문서의 코드를 그대로 프로젝트에 반영하면 된다.

sendForm으로 전송할 Key들의 위치는 아래와 같다.

 

Service Id

Template Id

Public Id

 

내가 작성한 최종 코드이다.

 

contact.js

import { useRef } from "react";
import emailjs from "@emailjs/browser";
import Card from "../components/Card";
import "./Contact.css";
const Contact = () => {
const form = useRef();
const sendEmailHandler = (e) => {
e.preventDefault();
emailjs
.sendForm(
process.env.REACT_APP_EMAILJS_SERVICE_ID,
process.env.REACT_APP_EMAILJS_TEMPLATE_ID,
form.current,
process.env.REACT_APP_EMAILJS_PUBLIC_KEY
)
.then(
function (response) {
console.log("SUCCESS!", response.status, response.message);
alert(
"이메일 전송이 완료되었습니다! 빠른 시일 내에 답장 드리겠습니다."
);
form.current.name.value = "";
form.current.email.value = "";
form.current.message.value = "";
},
function (error) {
console.log("FAILED...", error);
}
);
};
return (
<div className="contact">
<h1 className="contact-title">
<a name="Contact">Contact</a>
</h1>
<p>
<a href="mailto:seaofiandme35@gmail.com" className="email-link">
📧 seaofiandme35@gmail.com
</a>
</p>
<div className="contact-card-wrapper">
<Card className="contact-card">
<form className="contents" ref={form} onSubmit={sendEmailHandler}>
<h3>Name</h3>
<input type="text" name="name" />
<h3>Email</h3>
<input type="email" name="email" />
<h3>Message</h3>
<textarea name="message" />
<div className="send-btn">
<button type="submit">Send</button>
</div>
</form>
</Card>
</div>
</div>
);
};
export default Contact;

 

결과

반응형
저작자표시 비영리 변경금지 (새창열림)

'웹 프로젝트 > 🔮포트폴리오 사이트' 카테고리의 다른 글

[React] 포트폴리오 웹 사이트 제작 일지-7. 전체 스타일링 수정, 디자인 변경  (1) 2023.10.15
[React] 포트폴리오 웹 사이트 제작 일지-6. 최상단 이동버튼, Tech Skill 기술스택 추가, Portfollio 내용 추가  (1) 2023.10.14
[React] 포트폴리오 웹 사이트 제작 일지-5. 상단 메뉴바 구현 (useref 를 이용한 컴포넌트 간 스크롤 이동)  (0) 2023.10.13
[React] 포트폴리오 웹 사이트 제작 일지-3. Archiving, Skills, Project, Contact 컴포넌트 생성 및 기본 CSS 작성 + 리액트 버튼에 내부 링크 걸기  (0) 2023.10.13
[React] 포트폴리오 웹 사이트 제작 일지-2. 리액트 프로젝트 시작, Home 컴포넌트 구현-2초마다 title 글자 변경+Fade in 효과  (0) 2023.10.12
[React] 포트폴리오 웹 사이트 제작 일지-1. 기획 및 디자인 구상  (0) 2023.10.10
  1. emailjs
  2. emailjs 리액트
  3. 결과
'웹 프로젝트/🔮포트폴리오 사이트' 카테고리의 다른 글
  • [React] 포트폴리오 웹 사이트 제작 일지-6. 최상단 이동버튼, Tech Skill 기술스택 추가, Portfollio 내용 추가
  • [React] 포트폴리오 웹 사이트 제작 일지-5. 상단 메뉴바 구현 (useref 를 이용한 컴포넌트 간 스크롤 이동)
  • [React] 포트폴리오 웹 사이트 제작 일지-3. Archiving, Skills, Project, Contact 컴포넌트 생성 및 기본 CSS 작성 + 리액트 버튼에 내부 링크 걸기
  • [React] 포트폴리오 웹 사이트 제작 일지-2. 리액트 프로젝트 시작, Home 컴포넌트 구현-2초마다 title 글자 변경+Fade in 효과
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 프로그래밍 N
        • Programming
        • C | C++
        • Java N
        • Python
      • 웹 프로그래밍
        • HTML | CSS
        • JavaScript | TypeScript
        • React
        • Vue.js
        • Next.js
        • Spring & Spring Boot
        • JSP & Servlet
        • DB
      • 웹 프로젝트
        • 웹 프로젝트
        • 🥨스낵몰
        • 👨‍👨‍👧‍👧소셜 가계부
        • 🌜꿈 일기장
        • 🔮포트폴리오 사이트
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼
        • 😺Just Meow It: 고양이의 조언
      • 앱 프로그래밍
        • Flutter
        • Kotlin
      • Problem Solving
        • 백준
        • 프로그래머스
        • SWEA
      • Computer Science
        • 알고리즘
        • 컴퓨터 네트워크
        • 이산수학
      • Developer
        • 후기
        • 자료정리
        • 취업 | 취준
        • 웹개발 교육 프로그램
        • TIL
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    자바스크립트
    ZeroCho
    SWEA
    플러터
    리액트
    공식문서
    강의내용정리
    컴퓨터네트워크
    클론 프로젝트
    Jiraynor Programming
    bfs
    알고리즘
    Next.js
    블로그 제작
    뉴렉처
    백준
    d3
    Til
    프로젝트
    타입스크립트
    mysql
    구현
    파이썬
    AWS
    spring boot
    웹사이트
    포트폴리오
    프로그래머스
    자바
    React
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[React] 포트폴리오 웹 사이트 제작 일지-4. EmailjS를 이용해 서버 없이 이메일 전송 구현하기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.