我正在使用gmail从我的应用程序发送电子邮件。预计非常低的流量,但可能超过我可能会达到gmail邮件限制,所以我设置它(在我的应用程序控制器中)根据一天中的时间使用两个不同的帐户。
我已成功使用此设置但现在我已经引入了“大于”或“小于”符号,我收到有关“何时”的错误消息。在另一个应用程序中我做了
when Time.now == 1
....
when Time.now == 2
...etc
它工作正常。
谁能告诉我这有什么问题?
case
when Time.now.hour > 12
ActionMailer::Base.smtp_settings = {
:user_name => "blahblahblah@gmail.com",
:password => ENV['GMAIL_PASS'],
:address => "smtp.gmail.com",
:port => 587,
:tls => true
}
when Time.now.hour < 12
ActionMailer::Base.smtp_settings = {
:user_name => "blahblah@gmail.com",
:password => ENV['GMAIL_PASS'],
:address => "smtp.gmail.com",
:port => 587,
:tls => true
}
end
答案 0 :(得分:2)
为什么只使用2个选项的case语句?一种非常简单,更优雅的方式来完成你想做的事情:
username = ["email1@gmail.com", "email2@gmail.com"].sample
然后你会得到一个随机分布,随着时间的推移将是50/50。我认为通常使用gmail进行批量邮寄很糟糕。任何体面的主机都可以为您提供SMTP服务器。
答案 1 :(得分:1)
我无法回答错误发生的原因。我测试了它,就像@summea说的那样,似乎没有else
就可以工作(尽管使用else
更好 - 你的例子在Time.now.hour == 12
)时无效
但是,我认为按小时划分帐户是一个坏主意。 我怀疑这种用法是否会均匀分布;因为世界不同的地方会在不同的时间睡觉。 因此,您可能会发现80%的邮件是通过一个帐户发送的。
如果你按秒分割,你会获得更均匀的分布。
为了使后续修改更简单,您可能还需要为user_name设置变量,并避免重复其他服务器设置:
case
when Time.now.sec > 29
user_name = "blahblahblah@gmail.com"
else
user_name = "blahblah@gmail.com"
end
ActionMailer::Base.smtp_settings = {
:user_name => user_name,
:password => ENV['GMAIL_PASS'],
:address => "smtp.gmail.com",
:port => 587,
:tls => true
}
答案 2 :(得分:0)
第二个“何时”应该是“其他”