【问题标题】:How to protect visible email address from spam with gem for Ruby 4?如何使用 Ruby 4 的 gem 保护可见的电子邮件地址免受垃圾邮件的侵害?
【发布时间】:2017-01-23 15:02:38
【问题描述】:

我想在我的网页上混淆一个电子邮件地址。我希望避免使用 JS,以防我的用户停用它。

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

我尝试了 3 个示例,结果相同。 gem 出现在我的 Gemfile 中,因此应该正确安装。

【问题讨论】:

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


    【解决方案1】:

    您始终可以自己滚动,但首先,该宝石绝对有效。这就是我所做的......

    使用宝石

    我将 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>"
    

    希望有帮助!

    【讨论】:

    • (这是指 gem,而不是您的答案) mail_to 没有被混淆,当使用那个 gem 时,这对我来说基本上没用?我的意思是你试图阻止自动抓取,所以除非你不包含 mail_to 或更改它,否则即使是一个简单的机器人也可以拉页面,拉出所有 mail_to 并访问电子邮件地址。它似乎所做的只是让最终用户更难剪切/粘贴它。现在,如果它没有 mailto: 链接,它会更加模糊......
    • 没错,链接标签的href 没有被混淆,因为那样它就不起作用了。它会打开您的邮件客户端并将经过混淆的电子邮件添加到电子邮件的to: 字段,因此您必须在发送电子邮件之前对其进行去混淆处理。你必须做出决定,你想要一个正常工作的mail_to 还是你想要完全混淆电子邮件并剥夺它的默认功能?在后一种情况下,只需将混淆后的电子邮件作为纯字符串放在您的页面上:My email: &lt;%= obfuscate_email user.email %&gt;
    • 好的,你的两个答案都有道理。我确实希望 href 电子邮件会被混淆,因为这似乎是抓取工具无法获得它的唯一方式,而且我确实想知道它会如何混淆发送电子邮件。发送!
    猜你喜欢
    • 2012-02-21
    • 2011-04-09
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2012-02-15
    相关资源
    最近更新 更多