Как я могу предотвратить использование пользователями поддельных электронных писем, что приводит к сбою моего почтового сервера?

Я использую SendGrid для отправки регистрационных писем пользователям, наши пользователи используют поддельные электронные письма для регистрации. Пользователи не могут получить доступ к веб-сайту, который является плохой защитой для нашего сайта. Но когда SendGrid пытается отправить им электронное письмо, оно отскакивает.

К сожалению, мы ежедневно сталкиваемся с более чем 20-30% поддельных электронных писем, что может привести к полной блокировке SendGrid. Какое решение программно или с точки зрения Интернета?

Отказ от ответственности: я знаю, что это не вопрос программирования, но не знаю, где его задать.


person medopal    schedule 02.03.2015    source источник
comment
Если вы не знаете, где задать вопрос, вы можете запросить рекомендацию сайта на Meta.SE для руководства.   -  person Chris Hayes    schedule 02.03.2015
comment
Так что блокировка — это все, чего вы боитесь, а затем спросите sendgrid об их политике в этом отношении.   -  person weston    schedule 02.03.2015
comment
ServerFault может быть подходящим сайтом для этого.   -  person ReneS    schedule 02.03.2015
comment
В основном Шаг 1 заключается в проверке синтаксической/технической правильности адреса электронной почты, например. ваше приложение не будет пытаться отправлять письма на foo@bar, но обязательно на [email protected]. Существуют также решения для проверки электронной почты для доменов, занесенных в черный список, чтобы предотвратить попытку отправки электронной почты, например. на *@trash-mail.com, которые синтаксически/технически правильны, но считаются фальшивыми с точки зрения бизнеса.   -  person JBA    schedule 02.03.2015
comment
Политика @weston SendGrid: отказы до 5% — это нормально, но мы достигаем более 20% каждый день. То же самое для большинства SMTP-серверов.   -  person medopal    schedule 02.03.2015
comment
@ReneS спасибо, но я также спрашиваю, может ли нам понадобиться изменить пользовательский интерфейс или код, а не только интеграцию с почтовым сервером.   -  person medopal    schedule 02.03.2015
comment
@medopal Я не вижу другого процесса, кроме ввода данных на веб-странице и последующего получения электронного письма с подтверждением. Вы можете поднять его на ступеньку выше, введя адрес электронной почты во второй раз для подтверждения и добавив капчу, чтобы убить автоматические сценарии. Кроме того, заранее выделенными жирным шрифтом словами укажите, что поддельное электронное письмо не будет отправлено, и вы не сможете войти, пока не будет подтверждено по электронной почте. Может уменьшить сумму.   -  person ReneS    schedule 02.03.2015


Ответы (4)


Измените подход, если это возможно. Попросите своих пользователей отправить вам электронное письмо для регистрации (т. е. пустое электронное письмо) и ответьте на это электронное письмо с информацией для аутентификации. На этом этапе вы уверены, что они являются владельцами почтового адреса (иначе они не получат учетные данные) и что электронное письмо не является поддельным.

person Giovanni    schedule 02.03.2015

Просто сбросьте входящие отказы, они вам не нужны. Кроме того, вместо этого вы можете воспользоваться Simple Email Service от Amazon, чтобы избавиться от проблем с настройкой собственной почты.

В конце концов, если вы хотите отправлять электронные письма, вы должны жить с возвратами, поэтому вам нужно масштабировать свой сервер / службу, чтобы справиться с этим.

person ReneS    schedule 02.03.2015
comment
Отказы отбрасываются автоматически, потому что пользователь не сможет получить доступ к контенту без подтвержденной электронной почты. Но как насчет почтового сервера, который получает много недоставленных писем? - person medopal; 02.03.2015
comment
Возвраты, потому что электронная почта не существует, неизбежны. Почтовый провайдер должен справиться с этим, иначе вам придется сменить провайдера. Он не знает, есть ли у SendGrid возможность отбрасывать возвраты на адрес электронной почты, такой как [email protected]. - person ReneS; 02.03.2015

Вы захотите сделать все возможное, чтобы убедиться, что пользователи регистрируются с действительными адресами электронной почты. Вот несколько способов сделать это:

  • Заставьте новых пользователей подтверждать свой адрес электронной почты, прежде чем предоставить им доступ к сайту. Адреса электронной почты можно подтвердить, отправив им электронное письмо, содержащее ссылку, по которой необходимо щелкнуть, чтобы подтвердить учетную запись.

  • Используйте type="email" в поле ввода, используемом для ввода адресов электронной почты. Хорошие браузеры (например, хром) заставят выполнить простое совпадение с регулярным выражением, прежде чем разрешить отправку формы.

  • Используйте регулярное выражение, чтобы отфильтровать явно плохие электронные письма. Существует множество регулярных выражений адресов электронной почты, предлагающих взглянуть на те, которые используются в более крупных веб-фреймворках с открытым исходным кодом, таких как Django.

  • Mailgun предоставляет API для проверки адресов электронной почты. Его следует использовать с умом (то есть: не спамить его при каждой регистрации), он может обнаруживать распространенные орфографические ошибки и даже предлагать исправления опечаток. https://documentation.mailgun.com/api-email-validation.html

person bvanvugt    schedule 03.03.2015
comment
Вы говорите OP, чтобы новые пользователи проверяли свою электронную почту, прежде чем отправлять свою электронную почту, чтобы заставить их подтвердить свою электронную почту? - person Xarus; 27.03.2017

Если вы используете список рассылки 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();
        }
    }
}
person Vlam    schedule 07.06.2018