ข้ามไปยังเนื้อหา

Email

ส่งอีเมลธุรกรรมจากแอปของคุณ จัดการตัวตนผู้ส่งและติดตามการส่งได้ที่ Admin > Email ของแอป

ทุกแอปบน Proyecta สามารถส่งอีเมลธุรกรรมได้ เพียงยืนยันตัวตนผู้ส่ง แล้วส่งจากโค้ดแอปของคุณได้เลย — โดยไม่ต้องสมัครบัญชีกับผู้ให้บริการอีเมลแยกต่างหาก

เปิด Admin > Email ใน builder — หรือไปที่ /admin บนเว็บไซต์ที่เผยแพร่แล้ว ซึ่งประกอบด้วยสองส่วน:

ส่วน ใช้สำหรับ
Identities เพิ่มและยืนยันอีเมลผู้ส่งหรือโดเมน
Sent ดูอีเมลที่ส่งแล้วพร้อมสถานะการส่ง (sent, delivered, bounced ฯลฯ)

คุณสามารถเพิ่มตัวตนผู้ส่งใหม่และดูประวัติการส่งอีเมลได้ทั้งหมด — โดยไม่ต้องเขียนโค้ด

  1. สร้างและยืนยันตัวตนผู้ส่ง (อีเมลหรือโดเมน) ในแผง admin ของคุณ
  2. ส่ง — จากแอปด้วย useSendEmail() หรือจากแผง admin สำหรับแคมเปญ

วิธีที่ง่ายที่สุดคือขอใช้ที่อยู่เดียวบนโดเมนการส่งร่วมของ Proyecta ที่ @proyectamail.com โดยจะยืนยันทันทีที่คุณสร้าง — เพราะแพลตฟอร์มเป็นเจ้าของโดเมนนั้นอยู่แล้ว คุณจึงไม่ต้องตั้งค่า DNS record ใดๆ

ทำได้ในส่วน Emails ของแผง admin ของแอป: ระบุที่อยู่ที่ต้องการ แล้วพร้อมใช้งานทันที

ที่อยู่เดียวใช้งานได้เฉพาะกับ @proyectamail.com เท่านั้น หากขอใช้โดเมนอื่น (เช่น hello@myapp.com) จะถูกปฏิเสธ — หากต้องการส่งจากโดเมนของตัวเอง ให้ยืนยันทั้งโดเมนแทน (ดูด้านล่าง) ที่อยู่ร่วมแต่ละรายการถูกจองไว้ทั่วโลก ดังนั้นสองแอปจะไม่สามารถส่งในฐานะผู้ส่ง @proyectamail.com รายเดียวกันได้

หากต้องการส่งจากโดเมนของตัวเอง — จากที่อยู่ใดก็ได้ในโดเมนนั้น (hello@, support@, noreply@ ฯลฯ) — ให้ยืนยันทั้งโดเมน ต่างจากที่อยู่ร่วม @proyectamail.com ตรงที่โดเมนส่วนตัวจะ ไม่ ยืนยันทันที

เพิ่มโดเมนในส่วน Emails เดียวกัน ระบบจะลงทะเบียนกับผู้ให้บริการอีเมลและแสดง SPF, DKIM และ DMARC records ที่คุณต้องเผยแพร่ใน DNS ของคุณ ผู้ส่งจะอยู่ในสถานะ pending จนกว่า record เหล่านั้นจะ propagate และผู้ให้บริการยืนยัน จากนั้นจะเปลี่ยนเป็น verified — กดปุ่มตรวจสอบใหม่หลังจากเผยแพร่ record แล้ว

การยืนยันโดเมนผ่าน DNS ได้รับการรองรับอย่างสมบูรณ์ — record ถูกสร้างโดยผู้ให้บริการ และการตรวจสอบแต่ละครั้งจะ poll สถานะจากผู้ให้บริการใหม่

เบื้องหลัง: Proyecta ยืนยันโดเมนการส่งของคุณกับผู้ให้บริการตัวตนอีเมล (Resend) และส่งข้อความผ่านผู้ให้บริการธุรกรรม (SendGrid) โดยคุณไม่ต้องจัดการบัญชีกับผู้ให้บริการทั้งสองรายเลย

จากหน้าต่างๆ ในแอป คุณส่งด้วย hook useSendEmail() โดยเลือก template และส่ง variables ไป แพลตฟอร์มจะ render ข้อความในภาษาของแอปและส่งให้:

import { useSendEmail } from '@/hooks/useEmail.ts';
function ConfirmButton({ booking }) {
const { send, isPending, error } = useSendEmail();
return (
<button
disabled={isPending}
onClick={() =>
send({
template: 'booking_confirmation',
variables: { date: booking.date, service: booking.service },
})
}
>
Email me the details
</button>
);
}

สังเกตว่าคุณ ไม่ ต้องส่ง: ผู้รับ, subject หรือ HTML เพราะแต่ละ template กำหนดกลุ่มผู้รับของตัวเองไว้แล้ว:

  • self (ยืนยันการจอง/คำสั่งซื้อ, ยินดีต้อนรับ) → ที่อยู่ของผู้ใช้ที่ลงชื่อเข้าใช้ ดึงมาจาก session ของพวกเขา
  • owner (owner_alert) → ผู้ดูแลระบบของแอป

ทั้งสองรูปแบบต้องการ session ที่ลงชื่อเข้าใช้แล้ว ซึ่งเป็นเรื่องตั้งใจ ไม่ใช่ช่องโหว่: publishable key ที่ยืนยันตัวตนการเรียกนั้นถูกส่งมาในซอร์สของหน้า ดังนั้นหากส่งไปยังผู้รับใดก็ได้ จะทำให้ทุกคนสามารถใช้แอปของคุณเป็น spam relay ได้ หากต้องการแจ้งเตือนตัวเองจากผู้เยี่ยมชมที่ไม่ได้ลงชื่อเข้าใช้ ให้ใช้ฟอร์ม — การส่งฟอร์มจะส่งอีเมลถึงเจ้าของและยืนยันกับผู้ส่งโดยอัตโนมัติอยู่แล้ว และเส้นทางนั้นไม่สามารถปลอมแปลงจาก browser ได้

ข้อผิดพลาดจะมาในรูป PlatformApiError: 401 (ต้องมี session), 403 (template ไม่ได้เปิดใช้งานสำหรับแอปนี้), 429 (rate limited — แสดงข้อความและเสนอให้ลองใหม่), 422 (ไม่มีที่อยู่อีเมลในระบบ)

แท็บ Sent ในแผง admin ของคุณแสดงรายการทุกอีเมลที่แอปส่งออกไปพร้อมเหตุการณ์การส่งล่าสุด — delivered, opened, clicked, bounced, complained — โดยปกติแล้วคุณไม่จำเป็นต้องเขียนโค้ดสำหรับส่วนนี้เลย

แต่ละรายการมีสถานะ — sent, delivered, opened, clicked, bounced หรือ complained — และคุณสามารถเปิดดูข้อความใดก็ได้เพื่ออ่าน HTML และข้อความที่ส่งออกไปจริงๆ หากการส่งล้มเหลว นี่คือจุดแรกที่ควรตรวจสอบ

คุณไม่จำเป็นต้องเขียนเองทั้งหมด:

  • "Verify hello@myapp.com as a sending identity."
  • "Email the customer a confirmation after they finish booking."
  • "After a successful checkout, send the customer their receipt."
  • "Show me the last 20 emails we've sent and whether they bounced."
  • ที่อยู่ from ต้องเป็น identity ที่ยืนยันแล้ว การส่งด้วยที่อยู่ที่ยังไม่ยืนยันจะคืนค่าเป็น error
  • มีขีดจำกัดรายเดือน ตามแผนของ Proyecta ที่คุณใช้
  • Template editor — ออกแบบ transactional template แบบ visual ใน builder
  • Bulk/batch send endpoint สำหรับการส่งอีเมลจำนวนมาก