【问题标题】:How can I prevent users from using fake emails, which is causing my mail server to fail?如何防止用户使用导致我的邮件服务器出现故障的虚假电子邮件?
【发布时间】:2015-05-02 13:16:00
【问题描述】:

我正在使用 SendGrid 向用户发送注册电子邮件,我们的用户正在使用虚假电子邮件进行注册。用户无法访问该网站,这是对我们网站的错误保护。但是,当 SendGrid 尝试向他们发送电子邮件时,它会退回。

不幸的是,我们每天面临超过 20-30% 的虚假电子邮件,这可能会导致 SendGrid 完全阻止我们。以编程方式或网络视角的解决方案是什么?

免责声明:我知道这不是一个编程问题,但不确定我应该在哪里问。

【问题讨论】:

  • 如果您不确定在哪里提问,您可以在 Meta.SE 上寻求网站推荐以获得指导。
  • 所以你只怕被屏蔽,然后向 sendgrid 询问他们在这方面的政策。
  • ServerFault 可能是合适的站点。
  • 基本上第 1 步是验证电子邮件地址的语法/技术正确性,例如您的应用程序不会尝试将邮件发送到“foo@bar”,但肯定会发送到“foo@bar.com”。还有一些解决方案可用于验证列入黑名单的域的电子邮件,以防止尝试发送电子邮件,例如到“*@trash-mail.com”,在句法/技术上是正确的,但从商业角度来看被认为是“假的”。
  • @weston SendGrid 政策最多 5% 的退回是可以的,但我们每天都达到 20% 以上。大多数 SMTP 服务器也是如此。

标签: java email sendgrid email-bounces


【解决方案1】:

如果可能的话,改变方法。要求您的用户向您发送一封电子邮件以进行注册(即空电子邮件)并使用他们的身份验证信息回复此电子邮件。此时,您可以确定他们是邮件地址的所有者(否则他们将不会收到凭据)并且该电子邮件不是伪造的。

【讨论】:

    【解决方案2】:

    只需丢弃传入的反弹,您不需要它们。此外,您可能希望查看来自 Amazon 的 Simple Email Service,以摆脱您自己的邮件设置的问题。

    归根结底,如果你想发送电子邮件,你必须忍受回报,因此你必须扩展你的服务器/服务来处理它。

    【讨论】:

    • 自动删除退回邮件,因为用户将无法访问没有经过验证的电子邮件的内容。但是收到大量退回邮件的邮件服务器呢?
    • 因为邮件不存在而返回是不可避免的。邮件提供商必须处理该问题,或者您已更改提供商。它不知道 SendGrid 是否可以选择将退货退回到诸如nobody@foobar.com 之类的电子邮件地址。
    【解决方案3】:

    您需要尽一切可能确保用户使用有效的电子邮件地址进行注册。这里有一些方法可以做到这一点:

    • 强制新用户在授予他们访问网站的权限之前验证他们的电子邮件地址。可以通过向电子邮件地址发送包含必须单击以验证帐户的链接的电子邮件来验证电子邮件地址。

    • 在用于输入电子邮件地址的输入字段中使用 type="email"。好的浏览器(如 chrome)会在允许表单提交之前强制进行简单的正则表达式匹配。

    • 使用正则表达式过滤明显不良的电子邮件。有大量的电子邮件地址正则表达式四处飘荡,建议查看在更大的开源 Web 框架(例如 Django)中使用的正则表达式。

    • Mailgun 提供了一个 API 来验证电子邮件地址。应该明智地使用它(即:不要在每次注册时都发送垃圾邮件),并且可以捕捉常见的拼写错误,甚至建议拼写错误。 https://documentation.mailgun.com/api-email-validation.html

    【讨论】:

    • 您是在告诉 OP 让新用户验证他们的电子邮件,然后再发送他的电子邮件让他们验证他们的电子邮件?
    【解决方案4】:

    如果您使用的是 SendGrid 邮件列表,您可以选择使用 MailboxValidator 导入您的列表,筛选无效电子邮件,然后在 SendGrid 自动更新您的列表。

    https://www.mailboxvalidator.com/resources/articles/how-to-import-email-list-from-sendgrid/

    但如果您使用的是 SendGrid API,您可以在调用 SendGrid API 之前尝试将 MailboxValidator 免费 API(每 30 天 300 次免费验证)集成到您的代码中。

    https://www.mailboxvalidator.com/api-single-validation

    调用 API 的 Java 代码示例

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.Hashtable;
    import java.util.Map;
    
    public class test {
        public static void main(String[] args) {
            try {
                String key = "Enter_License_Key";
                Hashtable<String, String> data = new Hashtable<String, String>();
                data.put("format", "json");
                data.put("email", "Enter_Email");
    
                String datastr = "";
                for (Map.Entry<String,String> entry : data.entrySet()) {
                    datastr += "&" + entry.getKey() + "=" + URLEncoder.encode(entry.getValue(), "UTF-8");
                }
                URL url = new URL("https://api.mailboxvalidator.com/v1/validation/single?key=" + key + datastr);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setRequestProperty("Accept", "application/json");
    
                if (conn.getResponseCode() != 200) {
                    throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
                }
    
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
    
                String output;
    
                while ((output = br.readLine()) != null) {
                    System.out.println(output);
                }
                conn.disconnect();
            }
            catch (MalformedURLException e) {
                e.printStackTrace();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 2013-06-16
      • 2011-04-06
      相关资源
      最近更新 更多