Как я могу запретить пользователям использовать поддельные электронные письма, что приводит к сбою моего почтового сервера?
Я использую SendGrid для отправки регистрационных писем пользователям, наши пользователи используют поддельные письма для регистрации. Пользователи не могут получить доступ к веб-сайту, который защищает наш сайт. Но когда SendGrid пытается отправить им электронное письмо, оно возвращается.
К сожалению, мы ежедневно сталкиваемся с более чем 20-30% поддельных писем, что может привести к тому, что SendGrid полностью заблокирует нас. Какое решение программно или с точки зрения Интернета?
Отказ от ответственности: я знаю, что это не вопрос программирования, но не знаю, где его задать.
4 ответа
Измените подход, если это возможно. Попросите своих пользователей отправить вам электронное письмо для регистрации (то есть пустое электронное письмо) и ответьте на это электронное письмо с информацией об аутентификации. На данный момент вы уверены, что они являются владельцами почтового адреса (в противном случае они не получат учетные данные) и что электронное письмо не является поддельным.
Просто отбросьте входящие отскоки, они вам не нужны. Кроме того, вы можете захотеть взглянуть на Simple Email Service от Amazon вместо того, чтобы избавиться от проблем с вашей собственной настройкой почты.
В конце дня, если вы хотите отправлять электронные письма, вы должны жить с возвратами, следовательно, вы должны масштабировать свой сервер / службу, чтобы справиться с этим.
Вы хотите сделать все возможное, чтобы убедиться, что пользователи регистрируются с действительными адресами электронной почты. Вот несколько способов сделать это:
Заставьте новых пользователей проверять свой адрес электронной почты, прежде чем предоставить им доступ к сайту. Адреса электронной почты можно проверить, отправив им письмо, содержащее ссылку, по которой нужно щелкнуть, чтобы подтвердить учетную запись.
Используйте type="email" в поле ввода, используемом для ввода адресов электронной почты. Хорошие браузеры (например, Chrome) будут принудительно выполнять регулярное сопоставление, прежде чем разрешить отправку формы.
Используйте регулярные выражения, чтобы отфильтровать явно плохие электронные письма. Существует множество регулярных выражений адресов электронной почты, предлагающих взглянуть на те, которые используются в более крупных веб-инфраструктурах с открытым исходным кодом, таких как 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/
Но если вы используете API SendGrid, вы можете попытаться интегрировать бесплатный API MailboxValidator (300 бесплатных проверок каждые 30 дней) в свои коды, прежде чем вызывать API SendGrid.
https://www.mailboxvalidator.com/api-single-validation
Пример кода Java для вызова API
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();
}
}
}