我有一个发送电子邮件的轨道代码。以下是在我的控制器:没有错误的轨道增量
def create
@users = Users.find(:all)
@sub = params[:sub]
@body = params[:body]
@index = 0
@users.each {|i| index++; Notifier.deliver_notification(@users.email_address, @sub, @body, @users.unsubscribe_link);}
flash[:notice] = "Mail was sent to " + @index + " people"
end
我已经在我的模型
class Notifier < ActionMailer::Base
def notification(email, sub, content, link)
recipients email
from "[email protected]"
subject sub
body :content => recipient, :link => link
end
end
这一切工作正常以下。我的问题是:
例如,如果在向其中一个人发送邮件时发生错误,即使那时我的Flash消息也会说。 Mail was sent to X people
如何才能确保@index
只有在邮件成功发送时才会增加?
谢谢。我明白那个。只有我试图捕获的错误是如果电子邮件地址不存在或者电子邮件地址错误。在这些情况下,我注意到错误是马上扔掉的。 (至少在本地主机上) – 2010-08-06 19:27:32
没有可靠的方法来测试电子邮件地址是否存在。许多服务器实施悄悄地接受和丢弃无效的电子邮件,以防止垃圾邮件发送者进行字典探测有效的电子邮件地址。另外,由于您可能会将您的电子邮件发送给某种中介,因此您希望的最好方法是验证接收方的主机名或域是否有有效的MX。如果您想验证电子邮件地址,请根据[RFC822正则表达式](http://tfletcher.com/lib/rfc822.rb)进行检查。请参阅我的修改后的答案,了解如何更改计数。 – tadman 2010-08-08 18:46:42