Rails Action Mailer 并在电子邮件已发送时返回状态 200
Rails Action Mailer and returning Status 200 if the email was sent
我有一个 Rails API,邮件程序如下:
def demo_request
@user = params[:user]
mail(
to: "foo@bar.com",
subject: "[DEMO REQUEST] #{@user[:name]} - #{@user[:email]}",
body: "A potential customer, #{@user[:name]}, requested a demo be sent to them. You can follow up with them at #{@user[:email]}",
content_type: "text/html"
)
end
很简单的一个,由以下控制器触发:
class DemoRequestsController < ApplicationController
skip_before_action :authenticate_user!
def create
@user = params.permit(:email, :name)
UserMailer.with(user: @user).demo_request.deliver_now
end
end
也非常简单,它只是在收到带有一些参数的 POST 请求时调用 Mailer。此 API 正被客户端应用程序使用,Rails 表单在这里不起作用。
在测试中,我可以看到 Mailer 似乎工作正常,但问题是,控制器显然会 return 一个 204: No Content
响应。
仅当 Mailer 成功时,让控制器 return 响应 200 OK
的正确方法是什么?否则,return 404 或错误消息或其他任何合适的信息。
不清楚您的控制器是从客户端应用程序调用的(您将其作为 JSON api 处理)还是纯 rails 形式。
如果 json api/service,你可以尝试渲染 json back
begin
UsererMailer.with(user: @user).demo_request.deliver_now
render json: { message: 'ok' }, status: 200
rescue StandardError => e
render json: { error: e.inspect }, status: 500
end
如果是常规 Rails controller/app,那么我建议将用户重定向到某个地方:
begin
UsererMailer.with(user: @user).demo_request.deliver_now
redirect_to some_path
rescue StandardError => e
redirect_to some_path, error: e.inspect
end
一个简单的head :ok
可能就足够了。
def create
@user = params.permit(:email, :name)
UserMailer.with(user: @user).demo_request.deliver_now
head :ok
end
因为如果发送电子邮件失败,那么无论如何都会有 500 ServerError
。
我有一个 Rails API,邮件程序如下:
def demo_request
@user = params[:user]
mail(
to: "foo@bar.com",
subject: "[DEMO REQUEST] #{@user[:name]} - #{@user[:email]}",
body: "A potential customer, #{@user[:name]}, requested a demo be sent to them. You can follow up with them at #{@user[:email]}",
content_type: "text/html"
)
end
很简单的一个,由以下控制器触发:
class DemoRequestsController < ApplicationController
skip_before_action :authenticate_user!
def create
@user = params.permit(:email, :name)
UserMailer.with(user: @user).demo_request.deliver_now
end
end
也非常简单,它只是在收到带有一些参数的 POST 请求时调用 Mailer。此 API 正被客户端应用程序使用,Rails 表单在这里不起作用。
在测试中,我可以看到 Mailer 似乎工作正常,但问题是,控制器显然会 return 一个 204: No Content
响应。
仅当 Mailer 成功时,让控制器 return 响应 200 OK
的正确方法是什么?否则,return 404 或错误消息或其他任何合适的信息。
不清楚您的控制器是从客户端应用程序调用的(您将其作为 JSON api 处理)还是纯 rails 形式。
如果 json api/service,你可以尝试渲染 json back
begin
UsererMailer.with(user: @user).demo_request.deliver_now
render json: { message: 'ok' }, status: 200
rescue StandardError => e
render json: { error: e.inspect }, status: 500
end
如果是常规 Rails controller/app,那么我建议将用户重定向到某个地方:
begin
UsererMailer.with(user: @user).demo_request.deliver_now
redirect_to some_path
rescue StandardError => e
redirect_to some_path, error: e.inspect
end
一个简单的head :ok
可能就足够了。
def create
@user = params.permit(:email, :name)
UserMailer.with(user: @user).demo_request.deliver_now
head :ok
end
因为如果发送电子邮件失败,那么无论如何都会有 500 ServerError
。