С чего всё началось
Всё началось с того, что я решил в очередной раз немного переделать главную страницу сайта. Я уже почти всё сделал, осталось только вставить форму обратной связи в низ страницы, что я успешно и сделал. Проблема обнаружилась тогда, когда я попытался отправить тестовое письмо. У меня ничего не получилось. Выскочила такая ошибка:

Проблема была в том, что не удавалось получить локальный файл сертификата SSL: CERTIFICATE_VERIFY_FAILED certificate verify failed: unable to get local issuer certificate (_ssl.c:1002).
Это было примерно месяца 4 назад. Тогда моим решением было просто выпилить форму обратной связи, ибо это единственный элемент на сайте, который требовал почтовый сервер.
Но вот сейчас это не проблема, которую можно игнорировать. Учитывая тот факт, что отправка/получение писем является обязательной частью для:
- Регистрации новых пользователей
- Подтверждение совершенных покупок
- Отправка почтовой рассылки всем подписавшимся на неё
- И конечно же, отправки форм обратной связи.
Это всё теперь у меня есть на сайте, и соответственно, почта должна быть и должна быть в первую очередь рабочей, а во вторую профессиональной.
Решение проблемы
Поэтому, проблему потребовалось решить. И как оно всегда бывает, я зашёл не с того конца, а именно, решил поменять провайдера почты с beget.ru на hoster.by. Тогда моя логика была проста, раз с локального компьютера я могу отправлять письма, а с сервера нет, кодовая база сайта одна и та же, что там, что тут. Значит, виноват сам провайдер и нужно его поменять.
Но это в корне не верно - провайдер не причём. Причём как раз список установленных пакетов в виртуальном окружении моего сайта, вернее отсутствие одного из них - pip-system-certs. И чтобы решить данную проблему, нужно только его установить:
Ответ лежал на поверхности, и кстати, ни один ИИ не указал правильное решение, которое бы мне помогло. Помог вот этот человек, со своим ответом, за что ему и шлю благодарность.
Про что будет статья
Но так как перенос почты был уже сделан, я подумал, а почему бы не копнуть глубже и разобраться в теме полностью. Дальше, я опишу процесс переноса почты с одного провайдера к другому. Единственное, что у тебя должно быть, так это сам домен, иметь почту на нём и он должен быть твоим - очевидно.
Делать я это буду на примере регистратора доменов и хостинг провайдера beget.ru. На нем находится мой домен, сайт, база данных и почта. И будем переносить почту на уже на хостинг hoster.by.
Процесс переноса корпоративной почты
Есть много разных специализированных поставщиков такой услуги. Например, Google Workspace или Mail.com. Которые заточены именно для создания корпоративного почтового ящика, управлением списками рассылок и многое другого.
Также, есть так называемые ESP-провайдеры. Которые специализируются на массовой рассылке писем. Данную деятельность ещё называют Email-маркетинг. И если корпоративная почта создаётся в большей степени для бренда, то ESP-провайдеры для массовой рассылки. В моём случае я создаю именно что корпоративную почту с привязкой к домену.
Настройка DNS-записей
Но и у каждого хостинг провайдера имеется такая услуга, которая обычно либо предоставляется бесплатно, либо дешевле чем у специализированных сервисов.
Допустим у тебя уже есть домен, открой DNS редактор для этого домена. Так, мой домен зарегистрирован на beget и будет выглядеть вот так:

И ты хочешь перенести ( или создать ) почту на другом хостинге, например на hoster.by, тебе нужно будет найти вкладку настроек записей домена в разделе почты. Так, на примере hoster.by, она будет выглядеть вот так:

Она, эта страница, будет содержать соответствующие записи MX, DKIM, SPF и CNAME.
| CNAME | Позволяет привязать поддомен к другому домену. То есть, если запрос будет отправлен на autodiscover.timthewebmaster.com, то он будет перенаправлен на autodiscover.hoster.by |
| MX | Указывается адрес почтового сервера, на который будут приходить, или с которого будут отправлять письма. |
| DKIM | Хранит специальный ключ для подтверждения авторства письма, то есть отправил ли ты его или это письмо подделал и отправил кто-то другой. |
| SPF | Это "Белый лист", с которого ты, как владелец домена, разрешаешь отправлять письма. Одна из мер безопасности. |
| TXT | Общая запись, которая используется в основном для подтверждения прав собственности |
| Тип рессурсной записи | Описание |
|---|
Теперь нужно перенести все сгенерированные записи с hoster.by на beget.ru.
У тебя может возникнуть вопрос, но я не могу создавать записи SPF и DKIM на beget, или на другом хостинге. Что в таком случае делать? Можно использовать универсальную запись TXT, которую нужно будет создать на отдельном поддомене своего сайта.
То есть, если смотреть на мой пример, просто создай поддомен mail._domainkey.timthewebmaster.com и добавь туда запись TXT в формате, который тебе предоставил твой провайдер.
Для того чтобы записи вступили в силу, потребуется от 1 до 15 минут. Наберись терпения мой друг.
Настройка Django-приложения
Если твой сайт работает на какой-нибудь популярной CMS, например WordPress, то предыдущей главы должно хватить для работы твоего почтового клиента. Но если у тебя самописный сайт, и он на Django, то придётся ещё настроить settings.py для корректной отправки писем через встроенные утилиты фреймворка.
В settings.py, нам потребуется настроить следующие глобальные переменные:
- EMAIL_USE_SSL и EMAIL_USE_TLS одно из них должно быть либо True, либо False
- EMAIL_HOST - адрес почтового сервера
- EMAIL_PORT - обычно для SMTP протокола это 465 порт
- EMAIL_HOST_USER - полное имя твоего почтового ящика
- EMAIL_HOST_PASSWORD - пароль от почтового ящика
Вот так может выглядеть настройки почты подключённой через SMTP, для hoster.by:
После этого, перезапусти сервер и отправляй свои письма кому захочешь. Опять, пример для Django сайтов используя встроенную утилиту в Django для отправки почты:
Выводы или то чем всё закончилось
На этом, весь переход закончен. Это не слишком сложно, купить домен, настроить почту на одном провайдере и скопировать ресурсные записи с одного DNS-сервера на другой.
Есть ресурсные записи типа MX, CNAME, DKIM, SPF и TXT, и все они настраиваются обычным копированием между серверами. Плюс, даже если какую то запись и нельзя создать, её всегда можно заменить на универсальную TXT запись.
Вопрос в том, нужно ли это тебе всё делать. Как показала моя практика, не нужно от слова совсем. Я поспешил с выводами и заплатил за это, буквально.
Возвращаясь к тому, чем мой переход закончился. Он закончился ровно тем, чем и началась данная статья с ошибки SSL: CERTIFICATE_VERIFY_FAILED. Когда я отправил во-второй раз тестовое письмо, оно выдало ту же ошибку, что и до этого, но на почте beget. И тут до меня дошло, что что-то не так с моим приложением.
И как это было уже описано в решении проблемы с верификацией сертификата, я просто установил дополнительную библиотеку в виртуальное окружение сайта. ╯︿╰