เอกสารสำหรับนักพัฒนา
ส่งอีเมลผ่าน SMTP
ตั้งแอปใดที่ใช้ SMTP ให้ส่งผ่าน Banger ตั้งแต่ Supabase Auth, WordPress ถึงตัวส่งอีเมลของเฟรมเวิร์ก ใช้คีย์ Banger API เป็นรหัสผ่าน ทุกข้อความส่งจากโดเมนของคุณและแสดงในบันทึก
การตั้งค่า
| โฮสต์ | submit.bangermail.com |
|---|---|
| พอร์ต | 465 ใช้ TLS ตั้งแต่เริ่ม หรือ 587 ใช้ STARTTLS หากเครือข่ายบล็อก ให้ใช้ 2465 (TLS) หรือ 2587 (STARTTLS) พอร์ต 25 รองรับ STARTTLS ด้วย |
| ชื่อผู้ใช้ | banger ใช้ค่าใดก็ได้ คีย์ API เพียงอย่างเดียวระบุพื้นที่ทำงาน |
| รหัสผ่าน | คีย์ Banger API ที่มีขอบเขต mail:send |
| การเข้ารหัส | TLS 1.2 หรือใหม่กว่า เปิดให้เข้าสู่ระบบหลังเริ่ม TLS เท่านั้น คีย์จึงไม่ผ่านเครือข่ายเป็นข้อความธรรมดา |
| การยืนยันตัวตน | PLAIN หรือ LOGIN |
ก่อนเริ่ม
- สร้างคีย์ API ใน แอป Banger เปิด การตั้งค่า → นักพัฒนา → จัดการคีย์ API เลือก สร้างคีย์ API เลือก
mail:sendและคัดลอกคีย์ ซึ่งแสดงเพียงครั้งเดียว หน้านี้แสดงการตั้งค่า SMTP เหล่านี้ข้างคีย์ - ส่งจากช่องทางผลิตภัณฑ์ ที่อยู่ From ต้องอยู่บนชื่อโฮสต์ที่มีช่องทางผลิตภัณฑ์ใช้งาน สำหรับใบเสร็จ การแจ้งเตือน และอีเมลอื่นจากแอป ใน โดเมน เลือก เพิ่มช่องทาง แล้ว ผลิตภัณฑ์ และเพิ่มระเบียน DNS ที่ระบุ ช่องทาง Mail (กล่องจดหมายทีม) หรือแคมเปญไม่ส่งอีเมลแอป อีเมลแอปจึงไม่กระทบชื่อเสียงกล่องจดหมายเข้าของทีม
ตัวอย่าง: Supabase Auth
ในโปรเจกต์ Supabase เปิด Authentication → Emails → SMTP Settings และเปิด SMTP ที่กำหนดเอง:
| อีเมลผู้ส่ง | ที่อยู่ในช่องทางผลิตภัณฑ์ เช่น noreply@app.example.com |
|---|---|
| ชื่อผู้ส่ง | ชื่อผลิตภัณฑ์ของคุณ Banger ส่งตามที่เขียน |
| โฮสต์ | submit.bangermail.com |
| พอร์ต | 465 |
| ชื่อผู้ใช้ | banger |
| รหัสผ่าน | คีย์ API ของคุณ |
บันทึกแล้วส่ง magic link จาก Authentication → Users เพื่อตรวจว่าได้รับ
ตัวอย่าง: Node.js
import nodemailer from "nodemailer";
const transport = nodemailer.createTransport({
host: "submit.bangermail.com",
port: 465,
secure: true,
auth: { user: "banger", pass: process.env.BANGER_API_KEY },
});
await transport.sendMail({
from: "Acme <noreply@app.example.com>",
to: "person@example.com",
subject: "Your receipt",
html: "<p>Thanks for your order.</p>",
}); ทดสอบจากเทอร์มินัลด้วย swaks:
swaks --server submit.bangermail.com:465 --tls-on-connect \
--auth PLAIN --auth-user banger --auth-password "$BANGER_API_KEY" \
--from noreply@app.example.com --to you@example.com สิ่งที่เกิดกับแต่ละข้อความ
- Banger ส่งข้อความตามที่แอปเขียน พร้อมชื่อ From ของคุณ ลงลายเซ็นด้วยคีย์ DKIM ของโดเมนและส่งจากโดเมนอีเมลตีกลับของช่องทางผลิตภัณฑ์
- นำ
Bcc,Return-Pathและส่วนหัวของ Banger ออก และเพิ่มReply-Toที่ระบุที่อยู่ From หากไม่มี - ตรวจผู้รับแต่ละรายที่
RCPT TOปฏิเสธที่อยู่ระงับเฉพาะรายและส่งให้รายอื่น - ข้อความขนาดสูงสุด 10 MiB มีผู้รับสูงสุด 50 ราย
- ส่วนหัว
Idempotency-Keyทำให้การลองซ้ำเป็นการส่งเดิม หากไม่มี ยังตรวจรู้การลองส่งข้อความและผู้รับเดิมได้ - ทุกข้อความแสดงใน บันทึก โดยมี SMTP เป็นแหล่ง และนับในแผนเหมือนการส่งอื่น
การตอบกลับและข้อผิดพลาด
การปฏิเสธระบุสาเหตุและมีรหัสอ้างอิง (ref …) ที่ตรงกับรายการในบันทึก รหัสเริ่มด้วย 4 เป็นปัญหาชั่วคราว แอปลองใหม่ภายหลังได้
| การตอบกลับ | ความหมาย |
|---|---|
535 5.7.8 | รหัสผ่านไม่ใช่คีย์ Banger API ที่ใช้ได้ คีย์ถูกเพิกถอน หรือไม่มี mail:send |
421 4.7.0 | เข้าสู่ระบบล้มเหลวสามครั้งในการเชื่อมต่อเดียว จะปิดการเชื่อมต่อ ตรวจคีย์ก่อนลองใหม่ |
454 4.7.0 | เข้าสู่ระบบล้มเหลวจากเครือข่ายมากเกินไปในชั่วโมงที่ผ่านมา ลองอีกครั้งภายหลัง |
550 5.7.1 | ชื่อโฮสต์ From ไม่มีช่องทางผลิตภัณฑ์พร้อมส่ง (การตอบกลับระบุสิ่งที่ขาด) ผู้รับถูกระงับ หรือหยุดส่งเพราะชื่อเสียง |
553 5.1.3 | ที่อยู่ผู้รับไม่ถูกต้อง |
552 5.3.4 | ข้อความใหญ่กว่า 10 MiB |
554 5.6.0 | รูปแบบข้อความผิด เช่น ส่วนหัว From หรือ Subject ซ้ำ หรือ From มีมากกว่าหนึ่งที่อยู่ |
451 4.7.0 | ใช้โควตาส่งหรือขีดจำกัดรายวันของพื้นที่ทำงานหมดแล้ว ต่อใหม่เมื่อถึงรอบเรียกเก็บเงินหรือวันถัดไป หรือทันทีเมื่ออัปเกรดแผน |
451 4.3.0 | Banger รับข้อความตอนนี้ไม่ได้ ลองใหม่ |
ความปลอดภัย
- Banger เก็บเฉพาะแฮชแต่ละคีย์ เพิกถอนหรือหมุนเวียนคีย์ใน จัดการคีย์ API ไคลเอนต์ SMTP ที่ใช้จะถูกปฏิเสธในการเข้าสู่ระบบครั้งถัดไป
- ให้ SMTP มีคีย์แยกที่มีเพียง
mail:sendเพื่อให้รหัสผ่านรั่วไม่สามารถอ่านพื้นที่ทำงาน - จำกัดการเข้าสู่ระบบล้มเหลวต่อเครือข่ายไคลเอนต์และต่อคีย์ และบันทึกการเข้าสู่ระบบที่ปฏิเสธด้วยคีย์ของคุณในบันทึก
ต้องการ HTTP? ส่งแบบเดียวกันได้ผ่าน Banger API