Contact Forms
연락 양식 빌더: 페이지에 양식을 삽입하고, 모든 제출 내용을 저장하며, 사이트의 제공자를 통해 이메일을 보냅니다.
플러그인
Contact Forms
연락 양식 빌더: 페이지에 양식을 삽입하고, 모든 제출 내용을 저장하며, 사이트의 제공자를 통해 이메일을 보냅니다.
설명
관리자 화면에서 연락 양식을 만들고, 블록으로 원하는 페이지에 놓은 뒤, 내장 받은편지함에서 모든 제출 내용을 확인하세요. 알림 이메일은 사이트가 이미 사용 중인 제공자를 통해 전송되며, 플러그인이 이메일 서비스와 직접 통신하는 일은 없습니다.
라이브 데모: emdashhq.com/contact — 이 플러그인이 실제 운영 중인 EmDash 사이트에서 렌더링하는 작동하는 양식입니다.
제공 기능
- 양식 — 양식을 만들고 편집하며, 필드(text, email, tel, url, number, textarea, select, checkbox)를 관리하고 순서를 바꾸고, 삭제하지 않고도 양식을 켜거나 끌 수 있습니다.
- 제출 받은편지함 — 모든 항목이 어느 페이지에서 왔는지와 함께 사이트 데이터베이스에 저장됩니다. 양식, 상태, 이메일 결과로 필터링하고, 읽음 처리나 보관, 알림 재전송, CSV로 복사를 할 수 있습니다.
- 이메일 로그 — 모든 전송 시도의 상태, 소요 시간, 제공자의 오류 메시지를 기록하므로 전송 실패를 조용히 넘기지 않고 진단할 수 있습니다.
- 대시보드 위젯 — 읽지 않은 수, 활성 양식, 최근 제출 내용.
- 스팸 방지 — 숨겨진 허니팟, 최소 입력 시간 함정, IP별 시간당 제한이 기본으로 켜져 있으며, 수동적인 함정만으로 부족할 때는 Cloudflare Turnstile을 선택적으로 사용할 수 있습니다.
- 보관 — 지정한 일수보다 오래된 제출 내용과 로그 항목을 선택적으로 삭제합니다.
방문자의 주소는 공개 양식 정의에 절대 나타나지 않으며, 양식의 수신자는 관리자 화면에만 있습니다.
설치
설치와 첫 양식
- EmDash 관리자 화면에서 Registry를 열고 Contact Forms를 검색한 뒤 Install을 클릭합니다. 사이트의 제공자를 통한 이메일 전송과
challenges.cloudflare.com접속 권한을 요청하며, 이 호스트는 Turnstile을 켰을 때만 사용됩니다. - Plugins → Contact forms → Settings를 열고 기본 알림 이메일을 설정합니다. 양식에서 따로 지정하지 않으면 제출 내용이 이곳으로 전송됩니다.
- Forms → New form을 엽니다. 이름을 붙이고
contact같은 슬러그를 지정한 뒤 필드를 추가하세요. 각 양식은 수신자, 제목 템플릿, 버튼 라벨, 성공 메시지를 따로 지정할 수 있습니다. - Contact form 블록으로 양식을 페이지에 놓고 슬러그를 입력합니다. 테마에 아직 이 블록이 없다면 패키지의
site/디렉터리에 복사할 파일 두 개가 있습니다. seed용block-type.json과 렌더러용ContactForm.astro이며, README에 과정이 안내되어 있습니다. - Settings → Email에서 제공자를 활성화하고 테스트 이메일을 보냅니다. 제공자가 없어도 제출 내용은 저장되지만 이메일은 전송되지 않으며, 이메일 로그에 그 이유가 표시됩니다.
첫 방문자가 제출하는 즉시 제출 내용이 Plugins → Contact forms → Submissions와 대시보드 위젯에 나타납니다.
자주 묻는 질문
제출 내용은 어디로 가나요?
사이트 자체 데이터베이스의 Plugins → Contact forms → Submissions에 저장됩니다. 제3자에게는 아무것도 전송되지 않으며, 외부로 나가는 호출은 제공자를 통한 알림 이메일과, 활성화한 경우 Turnstile 검증뿐입니다.
제공자를 설정하지 않아도 이메일이 전송되나요?
아니요. 하지만 괜찮습니다. 제출 내용은 이메일 상태 skipped로 저장됩니다. Settings → Email에서 제공자를 활성화하면 알림과 방문자 확인 메일이 전송되기 시작하고, 이메일 로그에 모든 시도가 기록됩니다.
스팸은 어떻게 막나요?
세 가지 수동적 방어가 항상 켜져 있습니다. 숨겨진 허니팟 필드, 최소 입력 시간 함정, 설정에서 조정할 수 있는 IP별 시간당 제출 제한입니다. 이것으로 부족하면 Cloudflare Turnstile의 사이트 키와 시크릿 키를 플러그인 설정에 붙여넣으세요. 그러면 무언가를 저장하기 전에 모든 양식이 검증됩니다.
방문자도 확인 이메일을 받을 수 있나요?
네. 양식은 자체 제목 템플릿을 사용해 방문자에게 확인 메일을 보낼 수 있습니다. 제목 템플릿에는 제출된 필드의 값을 쓸 수 있고, 알림 메일에 대한 답장은 방문자의 이메일 필드로 갑니다.
제출 내용을 내보낼 수 있나요?
제출 페이지에서 필터링된 보기를 CSV로 복사할 수 있고, 인증된 export 라우트도 같은 CSV를 제공하므로 스크립트나 API 토큰에서 사용할 수 있습니다.
제출 내용을 자동으로 삭제할 수 있나요?
플러그인 설정에서 **Keep submissions for (days)**를 지정하세요. 예약된 작업이 기한보다 오래된 제출 내용과 이메일 로그 항목을 삭제하며, 0이면 모두 보관합니다.
공개 양식이 수신자 주소를 노출하나요?
아니요. 공개 양식 라우트는 필드, 라벨, 옵션만 반환하며, 수신자와 알림 설정은 관리자 화면 밖으로 나가지 않습니다.
변경 내역
1.1.2
- 필수 체크박스는 이제 생략되었거나 잘못된 값을 조용히 통과시키지 않고 거부합니다.
- 이메일 처리보다 먼저 제출 내용을 저장합니다. 이후 제공자가 실패하면 해당 행은 실패로 표시되지만 메시지는 사라지지 않으며, 방문자는 저장된 응답을 받습니다.
- 제출 재시도는 멱등적입니다. 슬러그, IP, 값으로 만든 지문이 중복된 행과 중복된 이메일을 막습니다.
- 거부된 제출은 일회용 복구 레코드를 통해 필드별 오류와 함께 양식을 다시 채웁니다.
- Turnstile 검증에는 10초의 제한 시간이 있고 장애 시 정책을 설정할 수 있습니다(기본은 수락).
- IP별 속도 제한은 원자적이며 Turnstile보다 먼저 한도를 소모합니다.
cf_필드 키는 제출 프로토콜용으로 예약되어 있으며 관리자 화면에서 거부됩니다.- CSV 내보내기와 관리자 미리보기는 스프레드시트 수식 삽입을 무력화합니다.
- 시간별 정리 작업이 이제 오래된 속도 버킷, 복구 레코드, 멱등성 확보 기록도 삭제합니다.
- 문서: 라이브 데모 링크에 UTM 매개변수를 붙였습니다.
1.1.1
- 레지스트리 목록에 아이콘, 배너, 스크린샷, 설치 가이드, 자주 묻는 질문, 그리고 이 변경 내역이 추가되었습니다. 플러그인 자체는 변경되지 않았습니다.
1.1.0
- 모든 양식에 Cloudflare Turnstile 검증을 선택적으로 적용할 수 있습니다. 플러그인 설정에 사이트 키와 시크릿 키를 지정하면 저장 전에 제출 내용이 검증됩니다.
- 이 검사를 위해
challenges.cloudflare.com으로 제한된 새network:request권한이 추가되었습니다. - 상세 디버그 로그 설정이 추가되었으며, 새 이메일 제공자를 연결할 때 유용합니다.
1.0.0
- 첫 릴리스. 관리자 화면의 양식 빌더(필드 유형 8가지), 제출 받은편지함, 이메일 전송 로그, 대시보드 위젯.
ctx.email.send()를 통해 사이트의 활성 제공자로 알림 이메일과 방문자 확인 이메일을 전송합니다.- 허니팟, 최소 입력 시간, IP별 시간당 속도 제한이 기본으로 켜져 있으며, 오래된 제출 내용을 삭제하는 보관 정리는 선택 사항입니다.
- 공개
form및submit라우트와site/에 포함된 Contact form 페이지 블록.