Class MailOutboundPolicy

java.lang.Object
io.leandev.appfuse.mail.MailOutboundPolicy

public final class MailOutboundPolicy extends Object

外寄郵件的安全政策——環境層、對所有 Mailer 一律生效

為何是單一落點

防火牆/白名單/debug/改寄/特殊訊息回答的都是「這個環境能不能把信寄到真實收件者」, 與「是誰在寄」無關。故它們是環境設定(參考接線為 app.mail.*),不是郵件設定資源的欄位。

曾經不是這樣,而那製造了一個安全漏洞:系統預設 Mailer 讀環境防火牆設定,但每個範圍 自己的 Mailer 走另一條路、防火牆值取自設定資源(預設關)——於是環境宣告的 「firewall 開 + 空白名單=全擋 fail-fast,不會默默全寄」保證對那些 Mailer 不成立

現在政策是 DirectMailer建構參數——不給政策就建不出 Mailer,兩條路徑 (系統預設、RoutingMailer 依 spec 建立)不可能分岔。

建構即驗證(fail-fast)

MailOutboundPolicy.Builder.build() 驗證政策組合並回傳不可變實例。危險組合直接拋例外(見 MailOutboundPolicy.Builder.build()):

  • firewall 開但白名單空(全擋)且部署已明確配置郵件 → 啟動失敗,迫使明確決策
  • redirect 開卻沒填收件信箱 → 同上

「已明確配置郵件」由 MailOutboundPolicy.Builder.mailConfigured 宣告(參考接線為「app.mail.type 已設」)。 未明確配置時不擋啟動、以 WARN 留痕——政策仍然生效(漏設定的後果是寄不出去,不是誤寄)。

  • Method Details

    • builder

      public static MailOutboundPolicy.Builder builder()
    • isFirewallActive

      public boolean isFirewallActive()
      firewall 是否實際生效(redirect 全攔時短路為 false,見 MailOutboundPolicy.Builder.build()
    • getAllowedDomains

      public List<String> getAllowedDomains()
    • isDebugEnabled

      public boolean isDebugEnabled()
    • isRedirectActive

      public boolean isRedirectActive()
    • getRedirectTo

      public String getRedirectTo()
    • getNoticeSubjectPrefix

      public String getNoticeSubjectPrefix()
      特殊訊息主旨前綴的環境預設(範圍專屬設定可覆寫,見 DirectMailer 建構子)
    • getNoticeHeaders

      public Map<String,String> getNoticeHeaders()
    • describe

      public Map<String,Object> describe()
      供診斷/測試檢視當前政策