跳到內容 跳到搜尋

攝取從 SMTP 伺服器轉送的收件電子郵件。

使用 HTTP 基本存取驗證對請求進行驗證。使用者名稱永遠是 actionmailbox,而且會從應用程式的加密憑證或環境變數中讀取密碼。請參閱下方「使用方式」區段。

請注意在未加密 HTTP 上的基本驗證並不安全。攔截對入口通道的明文請求的攻擊者會得知其密碼。您只應透過 HTTPS 使用此入口通道。

傳回

  • 如果已成功記錄收件電郵並排隊路由到適當的信箱,則傳回 204 No Content

  • 如果無法對請求進行驗證,則傳回 401 Unauthorized

  • 如果未將 Action Mailbox 設定為接受來自 SMTP 伺服器的轉送收件電子郵件,則傳回 404 Not Found

  • 如果請求不包含 RFC 822 訊息,則傳回 415 Unsupported Media Type

  • 如果未設定入口通道密碼,或者 Active Record 資料庫、Active Storage 服務或 Active Job 後端錯誤設定或不可用,則傳回 500 Server Error

使用方式

  1. 通知 Action Mailbox 接受來自 SMTP 轉送的電子郵件。

    # config/environments/production.rb
    config.action_mailbox.ingress = :relay
    
  2. 產生強而有力的密碼,供 Action Mailbox 用於對入口通道請求進行驗證。

    使用 bin/rails credentials:edit 將密碼新增到應用程式的加密憑證,路徑為 `action_mailbox.ingress_password`,屆時 Action Mailbox 會於該處自動找到密碼

    action_mailbox:
      ingress_password: ...
    

    或者,在 `RAILS_INBOUND_EMAIL_PASSWORD` 環境變數中提供密碼。

  3. 將您的 SMTP 伺服器設定為將收件電子郵件導向適當的入口通道指令,並提供您先前產生的 URL 入口通道和 INGRESS_PASSWORD

    如果您的應用程式位於 https://example.com,則您會將 Postfix SMTP 伺服器設定為將收件電子郵件導向至下列指令

    $ bin/rails action_mailbox:ingress:postfix URL=https://example.com/rails/action_mailbox/postfix/inbound_emails INGRESS_PASSWORD=...
    

    下列熱門 SMTP 伺服器可使用內建入口通道指令

    • Exim (bin/rails action_mailbox:ingress:exim)

    • Postfix (bin/rails action_mailbox:ingress:postfix)

    • Qmail (bin/rails action_mailbox:ingress:qmail)

方法
C

執行個體公開方法

create()

# File actionmailbox/app/controllers/action_mailbox/ingresses/relay/inbound_emails_controller.rb, line 54
def create
  if request.body
    ActionMailbox::InboundEmail.create_and_extract_message_id! request.body.read
  else
    head :unprocessable_entity
  end
end