不断获取发送消息所需的发件人(返回路径、发件人或发件人)
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 :from
被mail
方法调用中的值覆盖。我会看看上游的交货地点!方法被调用,或者可能在环境文件中。错误来自交付后的第一个测试! smtp 模块中的方法。
我查看了我的控制器。看起来不错。我的配置看起来不错。我会发布它们
我已经在headers "return-path" => "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 = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings =
...也许这个是问题吗?否则,我会说:简化——去掉所有不重要的东西。
【参考方案1】:
我注意到您的 case 语句没有默认案例。如果您从未在 Mailer 类的方法中调用“mail”方法,您将收到该错误。尝试将您的案例声明移到您调用 SupportMailer 的地方,也许每个案例都有方法。这样,除非您已经确定了正确的票务游戏,否则您永远不会致电 SupportMailer。
【讨论】:
这是正确的。理想情况下,将逻辑从邮件中拉出来。如果您不想这样做,您可以随时这样做:self.message.perform_deliveries = false
如果您决定中止交付,请不要调用 return,因为它将继续执行并抛出相同的错误。以上是关于不断获取发送消息所需的发件人(返回路径、发件人或发件人)的主要内容,如果未能解决你的问题,请参考以下文章
Outlook 365 EWS 流式通知 |如何计算发送和接收消息所需的时间?
使用 python 发送邮件 - 如何设置与“发件人”地址不同的返回路径