继续获取发送消息所需的发件人(Return-Path,Sender或From)

Jos*_*ech 6 actionmailer return-path ruby-on-rails-3 ruby-on-rails-3.2

class SupportMailer < ActionMailer::Base
  default :from => "email1@gmail.com"

  def welcome_email(ticket)
    case ticket.game
    when "gameone"
        @ticket = ticket
        headers["Reply-to"] = "email1+#{ticket.token}@gmail.com"
        headers["Return-Path"] = "email1+#{ticket.token}@gmail.com"
        mail(:from => "email1@gmail.com", :to => ticket.email, :subject => "Welcome to 1 Support Ticket")
    when "gametwo"
        @ticket = ticket
        headers["Reply-to"] = "email2+#{ticket.token}@gmail.com"
        headers["Return-Path"] = "email2+#{ticket.token}@gmail.com"
        mail(:from => "email2@gmail.com", :to => ticket.email, :subject => "Welcome to 2 Support Ticket")
    when "gamethree"
        @ticket = ticket
        headers["Reply-to"] = "email3+#{ticket.token}@gmail.com"
        header["Return-Path"] = "email3+#{ticket.token}@gmail.com"
        mail(:from => "email3@gmail.com", :to => ticket.email, :subject => "Welcome to 3 Support Ticket")
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我已经设置了我的默认值:from,所以我不知道为什么我一直收到这条消息,我也试图通过标题来设置它无济于事.

这是我的设置

ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :domain               => "gmail.com",
  :user_name            => "emailx@gmail.com",
  :password             => "password",
  :authentication       => "plain",
  :enable_starttls_auto => true
}
Run Code Online (Sandbox Code Playgroud)

我只是这样称呼, SupportMailer.support_response(@message).deliver

我该如何解决?

dav*_*aro 3

我注意到您的案例声明没有默认案例。如果您最终没有在 Mailer 类的方法中调用“mail”方法,您将收到该错误。尝试将您的案例陈述移至您致电 SupportMailer 的位置,也许每个案例都有方法。这样,除非您已经确定了正确的门票游戏,否则您永远不会致电 SupportMailer。

  • 这是对的。理想情况下,将逻辑从邮件程序中拉出来。如果您不想,您可以随时执行以下操作:`self.message.perform_deliveries = false` 如果您决定中止传递,请不要调用 return,因为它将继续执行并抛出相同的错误。 (3认同)