我使用SendGrid向用户发送注册电子邮件,我们的用户使用虚假电子邮件进行注册。用户无法访问该网站,这对我们的网站来说是一种愚蠢的保护。但是,当SendGrid尝试向他们发送电子邮件时,它会弹出。
不幸的是,我们每天都面临着超过20-30%的虚假电子邮件,这可能会导致SendGrid完全屏蔽我们。什么是编程解决方案或web视角?
免责声明:我知道这不是一个编程问题,但不确定我应该问哪里。
如果可能,请更改方法。要求您的用户向您发送一封注册电子邮件(即一封空电子邮件),并用他们的身份验证信息回复此电子邮件。在这一点上,你要确保他们是邮件地址的所有者(否则他们将不会收到凭据),并且电子邮件不是假的。
只需放下传入反弹,就不需要它们。此外,你可能想看看亚马逊的简单电子邮件服务,以解决你自己的邮件设置问题。
在一天结束时,如果你想发送电子邮件,你必须接受回报,因此你必须扩展你的服务器/服务来处理它。
您需要尽一切努力确保用户使用有效的电子邮件地址注册。以下是几种方法:
-
强制新用户在授予其访问该网站的权限之前验证其电子邮件地址。可以通过向电子邮件地址发送包含链接的电子邮件来验证电子邮件地址,必须单击该链接才能验证帐户。
-
在用于输入电子邮件地址的输入字段上使用type="email"。好的浏览器(如chrome)会在允许表单提交之前强制执行一个简单的regex匹配。
-
使用正则表达式过滤掉明显不好的电子邮件。有大量的电子邮件地址正则表达式漂浮在周围,这表明我们可以看看在更大的开源web框架中使用的正则表达式,比如Django。
-
Mailgun提供了一个API来验证电子邮件地址。它应该聪明地使用(即:不要每次注册都发垃圾邮件),并且可以发现常见的拼写错误,甚至建议纠正拼写错误。https://documentation.mailgun.com/api-email-validation.html
如果您使用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();
}
}
}