如何使用gem for Ruby 4保护可见的电子邮件地址免受垃圾邮件侵害?

时间:2016-09-15 14:23:49

标签: ruby-on-rails ruby email-spam

我想在我的网页上混淆电子邮件地址。我希望在用户停用JS的情况下避免使用JS。

我找到了这个宝石:actionview-encoded_mail_to但它似乎并不适合我。它显示页面上的完整电子邮件地址(这很好),但它也在控制台中显示。

我尝试了3个相同结果的例子。宝石出现在我的Gemfile中,所以应该正确安装。

1 个答案:

答案 0 :(得分:1)

你总是可以自己动手,但首先,那个宝石绝对有效。这就是我做的......

使用Gem

我将gem添加到Rails 4.2应用程序中:

# Gemfile
gem 'actionview-encoded_mail_to'

我安装了它:

$ bundle install

我进入了控制台:

$ rails console

我在控制台中提供了辅助方法:

include ActionView::Helpers::UrlHelper

使用与示例相同的参数调用mail_to助手:

mail_to "me@domain.com", nil, replace_at: "_at_", replace_dot: "_dot_", class: "email"

......得到了这个结果:

"<a class=\"email\" href=\"mailto:me@domain.com\">me_at_domain_dot_com</a>"

"me_at_domain_dot_com"看起来正确混淆了。你采取了什么措施?

滚动你自己的混淆

混淆电子邮件字符串将是一个简单的字符串替换,我们可以使用sub

def obfuscate_email(email, replace_at: '_at_', replace_dot: '_dot_')
  email.sub("@", replace_at).sub ".", replace_dot
end

我在控制台中对此进行了测试:

obfuscate_email "me@example.com"
# => "me_at_example_dot_com"

您可以将该方法放在application_helper.rb中,并在任何视图中使用它:

link_to obfuscate_email(user.email), "mailto:#{user.email}"
# => "<a href=\"mailto:me@example.com\">me_at_example_dot_com</a>"

请注意,href必须是未经模糊处理的电子邮件才能正常工作。

迈向更完整的mail_to助手

def obfuscated_mail_to(email, options = {})
  link_to obfuscate_email(email), "mail_to:#{email}", options
end

在控制台中测试:

obfuscated_mail_to "me@example.com", class: "email"
=> "<a class=\"email\" href=\"mail_to:me@example.com\">me_at_example_dot_com</a>"

希望有所帮助!