如何从 Rails 应用程序中的一系列电子邮件中过滤掉不活动的电子邮件?
Posted
技术标签:
【中文标题】如何从 Rails 应用程序中的一系列电子邮件中过滤掉不活动的电子邮件?【英文标题】:How to filter out inactive emails from an array of emails in a rails application? 【发布时间】:2021-11-26 23:08:55 【问题描述】:我目前正在处理一张票,它要求我过滤掉任何要发送给收件人的非活动电子邮件。这是我正在研究的方法:
def self.delivering_email(message)
return if email_to_be_delivered?(message.subject)
email_list = message.to
if email_list.is_a?(String)
email_list = email_list.split(",").map(&:strip)
end
email_list.each |email|
identity = Identity.find_by(email: email)
next if identity.nil?
# email_list.delete(email) unless identity.try(:preferred_user).active?
email_list.select(email) if identity.try(:preferred_user).active?
message.to = email_list
message.perform_deliveries = !email_list.empty?
end
“# email_list.delete(email) 除非 identity.try(:preferred_user).active?”我注释掉是因为 QA 提到只有一封非活动电子邮件会过滤掉,并且不会完全过滤阵列中的其他非活动电子邮件。我假设我必须使用 .select 而不是 .delete,但不知道它是否有效,因为我没有任何方法来测试和重现错误,或者如何以正确的方式实现它。
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:您在迭代数组时尝试修改数组,这可能会导致奇怪的行为。一种选择是只使用一个单独的数组。
由于您已经在使用email_list.each
进行迭代,因此如果当前的email
不满足您的要求,您可以调用next
,就像您已经为identity.nil?
所做的那样。
所以看起来有点像
valid_emails = []
email_list.each |email|
identity = Identity.find_by(email: email)
next if identity.nil? || !identity.try(:preferred_user).active?
valid_emails << email
end
message.to = valid_emails
【讨论】:
以上是关于如何从 Rails 应用程序中的一系列电子邮件中过滤掉不活动的电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章
将外部 CSS 转换为内联 CSS 用于 Rails 中的邮件
Rails 4:EOFError:仅在开发中的任何电子邮件后到达文件结尾