跳至内容 跳至搜索

接收来自 SMTP 服务器的中继入站电子邮件。

使用 HTTP 基本身份验证来验证请求。用户名始终是 actionmailbox,密码从应用程序的加密凭据或环境变量中读取。请参阅下面的“用法”部分。

请注意,未加密 HTTP 上的基本身份验证是不安全的。截获明文请求到入口点的攻击者可以获取其密码。您应该仅通过 HTTPS 使用此入口点。

返回值

  • 204 No Content:如果入站电子邮件已成功记录并排队以路由到相应的邮箱

  • 401 Unauthorized 如果请求未能通过身份验证

  • 404 Not Found 如果 Action Mailbox 未配置为接受从中继的 SMTP 服务器接收的入站电子邮件

  • 415 Unsupported Media Type 如果请求不包含 RFC 822 消息

  • 如果入站接口密码未配置,或者 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 ActionDispatch::Constants::UNPROCESSABLE_CONTENT
  end
end