AI와 함께 웹사이트를 직접 만들고 운영하며 배운 기록

홈 › 웹 제작

서버 없이 문의 폼 만들기: Formspree로 제휴 문의 받기

새벽뉴스 편집부 · · 웹 제작

GitHub와 Cloudflare Pages로 올린 사이트에는 서버가 없습니다. 그래서 방문자가 폼에 쓴 내용을 받아 줄 곳이 따로 필요한데, Formspree가 그 역할을 해 줍니다. 이 사이트의 문의 페이지도 Formspree로 만들었습니다.

Formspree가 하는 일

Formspree에 가입해 폼을 하나 만들면 https://formspree.io/f/영문숫자 모양의 주소를 줍니다. 내 폼이 이 주소로 내용을 보내면, Formspree가 가입한 이메일로 전달해 줍니다.

폼의 뼈대

<form id="contactForm" action="https://formspree.io/f/내폼주소" method="POST">
  <input name="이름" type="text" required>
  <input name="email" type="email" required>
  <textarea name="문의 내용" required></textarea>

  <!-- 받는 메일의 제목 -->
  <input type="hidden" name="_subject" value="[새벽뉴스] 새 제휴 문의">
  <!-- 스팸 로봇용 숨은 칸: 사람에게는 보이지 않음 -->
  <input type="text" name="_gotcha" style="display:none" tabindex="-1" autocomplete="off">

  <button type="submit">문의 보내기</button>
</form>

페이지를 떠나지 않고 보내기

폼을 그대로 보내면 Formspree의 감사 페이지로 이동합니다. 자바스크립트로 대신 보내면 내 사이트에 머문 채 결과만 보여 줄 수 있습니다.

contactForm.addEventListener("submit", async e => {
  e.preventDefault();                       // 페이지 이동 막기
  try {
    const res = await fetch(contactForm.action, {
      method: "POST",
      body: new FormData(contactForm),
      headers: { Accept: "application/json" }
    });
    if (!res.ok) throw new Error();
    contactForm.reset();                    // 성공하면 칸 비우기
    formMsg.textContent = "문의가 접수되었습니다.";
  } catch (err) {
    formMsg.textContent = "전송에 실패했습니다.";  // 실패하면 쓴 내용은 그대로 둠
  }
});

실패했을 때 칸을 비우지 않는 것이 작지만 중요한 배려입니다. 긴 문의를 쓴 사람이 처음부터 다시 쓰지 않아도 됩니다.

확인할 점

댓글