메일 서비스(사이트 대표·독립)·메일함·사용량·보안·전환·보존과 AriMail 도입 수정(KST 월 경계, 발신 키 오류, 도메인별 보장량, 100% 제한, 발송 큐·속도, 운영 상태, SSO) (§15~§18·§0.4)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
a014e3cd05
commit
a1cde81332
@@ -16,7 +16,8 @@
|
||||
import { resend, providerStatus as resendStatus } from './resend.mjs';
|
||||
import { sendViaSmtp } from './smtp.mjs';
|
||||
import { smtpProbe } from './smtp-client.mjs';
|
||||
import { now } from '../util.mjs';
|
||||
import { now, address } from '../util.mjs';
|
||||
import { enqueue, finish, pace } from '../sendqueue.mjs';
|
||||
|
||||
export const OUTBOUND_MODES = ['resend', 'haraka', 'smtp'], INBOUND_MODES = ['resend', 'haraka'];
|
||||
/** 설정된 발신 방식(알 수 없는 값은 resend). env.MAIL_OUTBOUND 는 config.mjs 의 applyConfig 가 채웁니다. */
|
||||
@@ -43,8 +44,15 @@ export function relaySettings(env, mode = outboundMode(env)) {
|
||||
*/
|
||||
export async function sendMail(env, payload, key) {
|
||||
const mode = outboundMode(env);
|
||||
if (mode === 'resend') return resend(env, '/emails', 'POST', payload, key);
|
||||
return sendViaSmtp(env, payload, relaySettings(env, mode));
|
||||
// [Ariweb Suite 변경] 발송 대기열 기록 → 안전 발송 속도(도메인·서버 초당 5건) → 발송 모듈. 같은 멱등 키가 이미 보내졌으면 다시 보내지 않습니다.
|
||||
const domain = String(env.MAILBOX || '').split('@')[1] || 'localhost';
|
||||
const q = await enqueue(env, { domain, mailbox: address(payload.from), key, payload });
|
||||
if (q.alreadySent) return { id: q.providerId, duplicate: true };
|
||||
try {
|
||||
await pace(domain);
|
||||
const r = mode === 'resend' ? await resend(env, '/emails', 'POST', payload, key) : await sendViaSmtp(env, payload, relaySettings(env, mode));
|
||||
await finish(env, q.id, { providerId: r.id }); return r;
|
||||
} catch (e) { await finish(env, q.id, { error: e.message + (e.providerMessage ? ' ' + e.providerMessage : '') }); throw e; }
|
||||
}
|
||||
|
||||
// 상태 캐시는 env(= DB) 마다 따로 둡니다(시험처럼 한 프로세스에 여러 env 가 있을 때 섞이지 않게). 운영은 env 가 하나라 전역 캐시와 같습니다.
|
||||
|
||||
Reference in New Issue
Block a user