Tài liệu dành cho nhà phát triển
Gửi email qua SMTP
Trỏ ứng dụng dùng SMTP vào Banger, từ Supabase Auth, WordPress đến trình gửi thư của framework. Khóa Banger API là mật khẩu, mọi tin nhắn gửi từ tên miền của bạn và xuất hiện trong Nhật ký.
Cài đặt
| Máy chủ | submit.bangermail.com |
|---|---|
| Cổng | 465 với TLS ngay từ đầu, hoặc 587 với STARTTLS. Nếu mạng chặn, dùng 2465 (TLS) hoặc 2587 (STARTTLS); cổng 25 cũng dùng STARTTLS. |
| Tên người dùng | banger. Giá trị nào cũng được: chỉ khóa API xác định không gian làm việc. |
| Mật khẩu | Khóa Banger API có phạm vi mail:send. |
| Mã hóa | TLS 1.2 trở lên. Chỉ cho đăng nhập sau khi TLS bắt đầu, nên khóa không bao giờ truyền qua mạng dưới dạng văn bản thuần. |
| Xác thực | PLAIN hoặc LOGIN. |
Trước khi bắt đầu
- Tạo khóa API. Trong ứng dụng Banger, mở Cài đặt → Nhà phát triển → Quản lý khóa API, chọn Tạo khóa API, chọn
mail:sendvà sao chép khóa: chỉ hiển thị một lần. Trang hiển thị các cài đặt SMTP này bên cạnh khóa. - Gửi từ luồng Sản phẩm. Địa chỉ From phải nằm trên tên máy chủ có luồng Sản phẩm hoạt động, dành cho biên nhận, cảnh báo và email khác từ ứng dụng. Trong Tên miền, chọn Thêm luồng, rồi Sản phẩm, và thêm bản ghi DNS được liệt kê. Luồng Mail (hộp thư nhóm) hoặc Chiến dịch không chuyển email ứng dụng, nên email ứng dụng không thể ảnh hưởng uy tín hộp thư đến của nhóm.
Ví dụ: Supabase Auth
Trong dự án Supabase, mở Authentication → Emails → SMTP Settings và bật SMTP tùy chỉnh:
| Email người gửi | Địa chỉ trên luồng Sản phẩm, như noreply@app.example.com |
|---|---|
| Tên người gửi | Tên sản phẩm của bạn. Banger gửi đúng như đã viết. |
| Máy chủ | submit.bangermail.com |
| Cổng | 465 |
| Tên người dùng | banger |
| Mật khẩu | Khóa API của bạn |
Lưu, rồi gửi liên kết đăng nhập từ Authentication → Users để kiểm tra đã đến.
Ví dụ: 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>",
}); Để thử từ terminal bằng 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 Điều xảy ra với mỗi tin nhắn
- Banger gửi tin nhắn như ứng dụng đã viết, với tên From của bạn, ký bằng khóa DKIM của tên miền và gửi từ tên miền thư trả lại của luồng Sản phẩm.
- Xóa
Bcc,Return-Pathvà header riêng của Banger, rồi thêmReply-Tochỉ địa chỉ From khi chưa có. - Mỗi người nhận được kiểm tra tại
RCPT TO: địa chỉ bị chặn gửi bị từ chối riêng, các địa chỉ khác vẫn được gửi. - Tin nhắn tối đa 10 MiB với tối đa 50 người nhận.
- Header
Idempotency-Keykhiến lần thử lại là cùng lượt gửi. Không có header, vẫn nhận ra lần thử lại cùng tin nhắn và người nhận. - Mọi tin nhắn xuất hiện trong Nhật ký với SMTP là nguồn và tính vào gói như lượt gửi khác.
Phản hồi và lỗi
Từ chối nêu nguyên nhân và có tham chiếu (ref …) khớp mục trong Nhật ký. Mã bắt đầu bằng 4 là tạm thời: ứng dụng có thể thử lại sau.
| Phản hồi | Ý nghĩa |
|---|---|
535 5.7.8 | Mật khẩu không phải khóa Banger API hợp lệ, khóa đã bị thu hồi hoặc thiếu mail:send. |
421 4.7.0 | Ba lần đăng nhập thất bại trên một kết nối: kết nối đóng. Kiểm tra khóa trước khi thử lại. |
454 4.7.0 | Quá nhiều đăng nhập thất bại từ mạng của bạn trong giờ qua. Thử lại sau. |
550 5.7.1 | Tên máy chủ From không có luồng Sản phẩm sẵn sàng gửi (phản hồi nêu điều còn thiếu), người nhận bị chặn gửi hoặc gửi bị tạm dừng vì uy tín. |
553 5.1.3 | Địa chỉ người nhận không hợp lệ. |
552 5.3.4 | Tin nhắn lớn hơn 10 MiB. |
554 5.6.0 | Tin nhắn sai định dạng, ví dụ header From hoặc Subject lặp lại, hoặc From có hơn một địa chỉ. |
451 4.7.0 | Đã dùng hết hạn mức gửi hoặc giới hạn ngày của không gian làm việc. Gia hạn vào kỳ thanh toán hoặc ngày tiếp theo, hoặc ngay khi nâng gói. |
451 4.3.0 | Banger chưa thể nhận tin nhắn lúc này. Thử lại. |
Bảo mật
- Banger chỉ lưu mã băm mỗi khóa. Thu hồi hoặc xoay khóa trong Quản lý khóa API; ứng dụng khách SMTP dùng khóa bị từ chối ở lần đăng nhập tiếp theo.
- Cấp SMTP khóa riêng chỉ có
mail:send, để mật khẩu bị lộ không thể đọc không gian làm việc. - Đăng nhập thất bại được giới hạn theo mạng ứng dụng khách và khóa; đăng nhập bị từ chối với khóa của bạn được ghi trong Nhật ký.
Thích HTTP hơn? Cùng khả năng gửi có qua Banger API.