不断获取发送消息所需的发件人(返回路径、发件人或发件人)

Posted

技术标签:

【中文标题】不断获取发送消息所需的发件人(返回路径、发件人或发件人)【英文标题】:Keep getting A sender (Return-Path, Sender or From) required to send a message 【发布时间】:2012-03-30 05:27:03 【问题描述】:
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

我已经设置了我的默认值 :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

我就这么称呼它,SupportMailer.support_response(@message).deliver

我该如何解决这个问题?

【问题讨论】:

标题绝对不需要;代码看起来正确,在您的情况下,default :frommail 方法调用中的值覆盖。我会看看上游的交货地点!方法被调用,或者可能在环境文件中。错误来自交付后的第一个测试! smtp 模块中的方法。 我查看了我的控制器。看起来不错。我的配置看起来不错。我会发布它们 我已经在headers "return-path" =&gt; "email1@gmail.com" 方法中添加了这一行,现在它在抱怨At least one recipient (To, Cc or Bcc) is required to send a message,看起来mail(...) 没有获取它的参数。 嗯——我用我的 gmail 帐户进行了测试,并举了一个简单的例子。也许我看到了问题:我看到的所有建议都建议从环境文件之一定义配置(我把我的放在app/config/environments/development.rb 中只是为了测试。它开始config.action_mailer.raise_delivery_errors = trueconfig.action_mailer.delivery_method = :smtpconfig.action_mailer.smtp_settings = ...也许这个是问题吗?否则,我会说:简化——去掉所有不重要的东西。 【参考方案1】:

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

【讨论】:

这是正确的。理想情况下,将逻辑从邮件中拉出来。如果您不想这样做,您可以随时这样做:self.message.perform_deliveries = false 如果您决定中止交付,请不要调用 return,因为它将继续执行并抛出相同的错误。

以上是关于不断获取发送消息所需的发件人(返回路径、发件人或发件人)的主要内容,如果未能解决你的问题,请参考以下文章

Outlook 365 EWS 流式通知 |如何计算发送和接收消息所需的时间?

防止向电子邮件发件人发送错误消息

使用 python 发送邮件 - 如何设置与“发件人”地址不同的返回路径

自动 GCM 注册?

获取由消息发送者的“dbus_request_name”设置的总线名称

如何获取带有发件人时间的时间戳消息