ГлавнаяПлагиныКонфигурация SMTP в WordPress

Конфигурация SMTP в WordPress

Если на вашем сайте открытая регистрация или есть форум с оповещениями, то сайт наверняка отправляет немало писем по электронной почте. Все они, по умолчанию, отправляются через стандартный системный транспорт. Такой простой подход не требует дополнительных настроек, а письма отправляются весьма быстро. Однако, это накладывает и серьезные недостатки.

С ростом количества писем и их важности такой подход уже с натяжкой можно назвать допустимым и нередки случаи возникновения проблем. Например, ваши письма, отправленные сайтом, могут попадать в спам или не доходить до получателя вообще.

В большинстве случаев решением может стать отправка писем через сторонние сервисы, например Gmail или Яндекс почта для домена (ПДД). Также можно настроить отправку писем через ваш собственный почтовый сервер, который, как правило, есть даже на самом простом веб-хостинге.

Минусы отправки писем через системный транспорт

Как было отмечено выше, отправка писем в WordPress, по умолчанию, работает без дополнительных настроек, но цена этому весьма высока.

Письма могут попадать в спам

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

Письмо, отправленное через системный транспорт, не содержит дополнительных электронных подписей, которые могут свидетельствовать о надежности и легитимности отправителя. Пожалуй, многие знают, что любой человек может отправить письмо с чужого адреса, например, с admin@wpmag.ru не имея какого-либо доступа к самому домену и сайту.

Отправка писем через почтовый сервис позволит автоматически добавлять DKIM-подписи, свидетельствующие о надежности и легитимности отправителя. Отправляющие сервера (SMTP-серверы) Яндекс Почты и Gmail автоматически добавляют DKIM-подписи к каждому письму. С ними лишь владелец домена (и закрытого ключа DKIM) может отправлять письма с верными DKIM-подписями.

DKIM-подписи не отменяют того, что кто-то другой сможет отправить письмо используя ваш адрес (admin@wpmag.ru), но принимающий почтовый сервер будет видеть, что письмо отправил кто-то другой, а не владелец домена.

SPF-записи устанавливаются в настройках домена (DNS) и позволяют владельцу домена показать почтовым сервисам с каких серверов могут отправляться письма этого домена. Каждый почтовый сервис предлагает свою собственную SPF-запись со своим списком серверов. Если вы отправляете письма через Яндекс почту и делаете рассылки через Mailchimp, то необходимо совместить их SPF-записи в одну.

Письма могут пропадать

Еще один прием, который используется почтовиками для отсеивания плохих писем — это Greylisting. Здесь, в момент отправки письма, получающий сервер может ответить вашему сайту что-то вроде «я сейчас занят, зайди с этим письмом минут через десять». Сайт не знает что делать в таком случае — письмо было передано для отправки, на этом все, поэтому отправляемое письмо просто пропадет и не будет доставлено адресату.

Если ваше письмо отправляется почтовым сервисом, то ваш отправляющий сервер скажет «окей, гугл», отложит письмо в очередь неотправленной почты и будет пытаться доставить его еще несколько раз. Расчет прост — при отправке огромного количества почты за короткий промежуток времени, как это обычно делают спамеры, нет времени пытаться доставить письмо несколько раз.

Не дойти письмо может и в случае, если получающий сервер просто на время выключен или потерял доступ к сети. Поэтому отправка писем через SMTP более надежная.

Отправка писем через SMTP

Принципиальной разницы между отправкой через внешний почтовый сервис (Яндекс Почта, Gmail) или свой собственный SMTP-сервер нет. Это одно и тоже. Но если вы решили использовать свой собственный или выделенный хостингом SMTP-сервер, следует внимательно отнестись к его настройкам. Не забудьте установить правильные DKIM- и SPF-записи в настройках домена.

Google и Яндекс не запрещают отправку писем через свои сервера подобным образом, но имеют некоторые ограничения на количество отправляемых сообщений в день. Например, Gmail имеет явно указанное ограничение в 2000 писем в день. Яндекс не сообщает конкретных цифр, а служба поддержки намекнула, что этот показатель динамический.

Заметим, что на многих хостинг-площадках подключения к внешним серверам блокируются (информацию можно получить в поддержке хостинга или с помощью команды telnet). В этом случае можно попросить поддержку хостинга разрешить подключения. Иногда такие просьбы могут принять во внимание. Или использовать внутренний почтовый сервер предоставляемый хостинг-провайдером. Как правило, он будет работать даже быстрее, чем внешний, потому что обычно располагается на том же физическом сервере, что и ваш сайт (веб-сервер).

На личном опыте было замечено, что Яндекс Почта для домена не сохраняет письма отправленные через SMTP-сервер в папке исходящих сообщений, а Gmail сохраняет.

Плагин WP Mail SMTP

Все письма в WordPress отправляются с помощью функции wp_mail(), которая работает на популярной библиотеке PHP Mailer. Чтобы позволить WordPress и wp_mail() отправлять письма через SMTP-сервер необходимо установить и настроить плагин WP Mail SMTP из официальной директории WordPress.org.

Активировав плагин, перейдите в раздел Настройки → Email в панели управления.

Конфигурация плагина WP Mail SMTP

Конфигурация плагина WP Mail SMTP

Займемся настройкой на странице Advanced Email Options. Ниже указано описание и необходимые значения для каждого пункта.

From Email — адрес, с которого будут отправляться письма и на который получатель отправит ответ, нажав на кнопку «Ответить» в своей почте.

From Name — имя отправителя, можно указать название сайта или свое имя и фамилию.

Mailer — отправка писем через системный транспорт (функция mail()) или через SMTP-сервер. Выбираем «Send all WordPress emails via SMTP».

SMTP Host — адрес SMTP-сервера. Можно узнать у службы поддержки или в справочном разделе. Для Яндекс Почты используйте smtp.yandex.ru, для Gmail — smtp.gmail.com.

SMTP Port — порт SMTP-сервера, зависит от типа шифрования (Encryption). Для Яндекс Почты и Gmail используйте порт 465.

Encryption — тип шифрования. Для Яндекс почты и Gmail необходимо установить «Use SSL encryption».

Authentication — требуется ли выполнять авторизацию на почтовом сервере. Устанавливаем «Yes: Use SMTP authentication».

Username — логин от почты. Как правило, полный адрес почтового ящика, должен совпадать со значением, указанным в поле From Email.

Password — пароль от почтового ящика.

Сохранив настройки, можно отправить тестовое письмо. Для этого введите адрес своего ящика и нажмите кнопку «Send Test». На указанный адрес будет отправлено небольшое письмо, а на экране появится служебная информация с результатами. Проверьте, пришло ли письмо на указанный адрес? Если нет, то что-то настроено неправильно и WordPress не сможет отправлять письма.

С помощью полученного тестового письма можно проверить корректно ли настроены DKIM и SPF. Для этого откройте исходный код письма. В Gmail это называется «Show Original». В Яндекс Почте «Свойства письма».

Просмотр заголовков сообщения в Gmail

Просмотр заголовков сообщения в Gmail

В заголовках письма должна содержаться строка «Authentication-Results». Если DKIM и SPF настроены правильно, то вы увидите spf=pass и dkim=pass.

Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of mail@armyofselenagomez.com designates 2a02:6b8:0:1630::18 as permitted sender) smtp.mail=mail@armyofselenagomez.com;
       dkim=pass header.i=@armyofselenagomez.com

Яндекс почта показывает зеленую галочку рядом с письмом, если DKIM-подпись верна.

Проверка цифровой подписи

Проверка цифровой подписи

Полезные материалы и заключение

Отправление писем через SMTP-сервер более надежный и правильный способ доставлять письма. Чтобы использовать SMTP не обязательно разбираться с настройкой и администрированием почтовых серверов. Сервисы Яндекса и Google хорошо справляются с поставленной задачей и для небольшого проекта это то, что надо.

Настройка DKIM и SPF — тема для отдельной статьи. Руководства по настройке, как правило, можно найти в справочных разделах почтовых сервисов или узнать у службы поддержки хостинг-провайдера.

В популярной системе управления хостингом cPanel настройки почты вынесены в раздел «Почта». На вкладке «Проверка подлинности электронной почты» можно управлять настройками DKIM и SPF.

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

Подписаться на рассылку

Подписаться → Подпишитесь на бесплатную рассылку журнала WP Magazine и получайте новости, события, подборки тем и плагинов, уроки, советы и многое другое в мире WordPress!

  • Владимир Петрозаводский

    прикольно только хотел поднять эту тему на днях и сразу статья

    • спасибо :) если интересны еще какие-то другие темы, будет здорово озвучить их в комментариях.

  • 123

    Спасибо, полезная информация!

  • Кстати системный транспорт Postfix можно настроить на отправку и через SMTP, и даже через Mandrill.

    • Спасибо за полезную статью!

      После успешной настройки столкнулся с проблемой — перестали работать формы заявок Contact Form 7.

      Кто-нибудь сталкивался с подобной проблемой? Как её можно решить?

      • А тестовое письмо отправляется через плагин?

        • Да, тестовое отправляется через плагин

          • Александр Гурьянов

            Решили проблему? С contact form 7. Тоже самое, тестовый работаает а через плагин нет. Хотя в инете многие пишут туториал именно в кмоплекте с данным плагином. Но не пашет и причину найти пока не удалось …

          • Попробую потестировать на выходных :)

          • Игорь

            Такая же проблема, не работает Contact Form 7, что делать? Или может есть какой то аналог Contact Form чтобы через него пользователи могли отправлять сообщения?

          • Игорь

            Все нашел сам же и причину почему контактная форма не работала, взял просто отключил и подключил вновь плагин contact form 7 и все заработало.

          • Игорь

            Хотя нет, не нашел, прикол в том, что отправка идет только когда забита моя почта в форму, если другая, просто не отправляется письмо и все.

          • Если нужно отправлять почту через несколько адресов, то это уже без этого плагина прийдется самостоятельно придумывать какие-то решения, WP Mail SMTP поддерживает сохранение настроек лишь для одного ящика.

            Принцип работы можно в самом WP Mail SMTP и подсмотреть.

          • Игорь

            Не совсем понял про несколько адресов. Мне нужно чтобы приходило сообщение, а в адресате был именно кто отправлял, а не я. А то я так отвечал людям, а они мне пишут и пишут, а я не пойму, а потом смотрю что только в теле сообщения указан обратный адрес и его нужно вводи самому, а если я настраиваю чтобы в поле адресата был отправитель письма, то плагин не работает

          • Несколько адресов — адреса, с которых необходимо отправлять почту, хотя обычно все письма одного сервиса приходят с одного ящика вроде noreply@domain.com (хотя это не очень клево для клиентов).

            Если нужно отправлять письмо с адреса, который был указан в форме при этом самого доступа к ящику нет, то я не думаю, что это хорошая идея. Почтовики вроде Gmail и Яндекса вообще вряд ли разрешат с какого-то определенного аккаунта отправлять письма от имени другого ящика (аккаунта) — тут даже не знаю, можно спросить в службе поддержки, но я бы не стал такое разрешать и практиковать на своих сайтах :) Ящик не мой — значит я не буду отправлять с него почту.

            Конечно, когда письмо отправляется с адреса на который надо ответить, удобно отвечать на него и письмо сразу уйдет клиенту. Но еще раз — получается что ваш почтовый сервер будет отпарвлять почту от имени сторонних пользователей (это не клево). Вместо этого я так думаю можно ставить заголовок Reply To в письме внутри которого уже ставить адрес того, кто сабмитил форму. Разве в Contact Form 7 такого нет?

          • Игорь

            Создал в доп. поле Reply To:, но где оно должно появиться в самом сообщении?

          • У меня нет под рукой плагина :) Reply To это что-то вроде служебных данных в письме, которые в самом тексте письма не видно :) Эта опция позволяет отправить письмо с одного адреса, а когда получатель нажмет кнопку «ответить» в своей почтовой программе то начнет писать письмо на адрес указанный в Reply To. Если я все правильно понимаю)

          • Игорь

            НУ я так и делаю, вроде все добавил, но в почте от Яши ничего ен появляется вообще, точнее остается мой адрес и все.

          • А если нажать кнопку отправить в полученном письме — какой адрес будет указан в поле для адреса доставки — тот, что из reply to или тот, с которого было прислано письмо?

          • Игорь

            И при отправке и просто, ответить все равно получатель я, а не тот кто прислал письму.

          • А можно заголовки полученного письма посмотреть?

          • Игорь

            Все настроил, нужно было прописать вот так «Reply-To:[your-email]» без кавычек.

          • Замечательно!

          • Прошу прощения. Как-то потерял из виду эту задачу. В интернете пишут что:

            From: field: Enter the same e-mail address shown in the “From:” line of your WP-Mail-SMTP settings. For example, let’s pretend I am using “example@example.com” in the “From:” line of my WP-Mail-SMTP settings. I must enter the same e-mail address in Contact Form 7′s counterpart. Contact Form 7 will have [your-name] “”. This won’t work for you.

            Very Important: Contact Form 7 will have a field called “Additional headers:”. Enter (literally) “Reply-To: [your-email]“, without the quotes. The [your-email] placeholder is the same field used inthe Contact Form 7′s form. Contact Form 7 will replace it with the e-mail the user supplies in the form. This header will allow you to reply to the sender directly without copying their e-mail address manually by you.

            Другими словами как ниже и было замечено — нужно указать тот же е-мейл, что и в настройках WP Mail SMTP :)

  • Судя по тому что надо вводить API-ключ, да, это не SMTP, а просто HTTP запросы как я понимаю для взаимодействия с Mandrill. А потом уже сам Mandrill отправляет письма :)

    • Anatoly Yumashev

      Можно так и так. В одном случае ключ передается как параметр в урле, а во втором как пароль.

  • tomorrowman

    Спасибо что подняли такую важную и нужную тему.
    Действительно, со стандартным отправщиком почты в вордпрессе есть проблемы с доставкой почты. Особенно если почту отправляет не пордпрес, а к примеру сторонний плагин, такой как Contact Form 7.

    Вопрос: в настройке SMTP для корпоративной почты Яндекс (ПДД) и Гугл (Google apps for business) есть ли какие нибудь нюансы с подключением уже со стороны этих сервисов? Я слышал что яндекс просто так не позволяет отправлять письма через SMTP (яндекс почта для домена).

    • Сторонние плагины (bbPress, BuddyPress), как и сам WordPress, отправляют письма с помощью wp_mail(). Я не знаком с Contact Form 7 но поиск по коду показывает, что вызовы функции wp_mail() также встречаются, значит он отправляет письма через нее :)
      Ограничений от Яндекса или Гугла никаких нет, как было указано в статье, они не запрещают использовать почту в таких целях. Однако, есть ограничения на кол-во отправляемых писем (см. статью). Что будет в этом случае я, к сожалению, не знаю. Поддержка Яндекса не ответила на этот вопрос :)

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

      • Simon Ivasishin

        У меня не получилось проключить отправку через яндекс. Все делал правильно несколько раз… но безуспешно… поставил Configure SMTP отправка заработала через SMTP хостера сайта движок ВордПресс

        • А подключения к внешним SMTP разрешены на хостинге (можно спросить в поддержке)?
          На самом деле может работать, но не факт что правильно, потому что вариантов того, кто именно на сервере отправит письмо много. В любом случае, лично мое мнение, главное, чтобы правильные DKIM и SPF были + устраивала скорость отправки писем. А с какого именно SMTP это будет происходить не так важно. Но также следует помнить, что IP-сервера может оказаться в черном списке почтовиков и тогда почта с правильными DKIM и SPF будет попадать в спам :)

          • Simon Ivasishin

            пока полет нормальный письма приходят моментально и не в спам … что дальше посмотрим…

  • Simon Ivasishin

    Статья написана широко и понемногу обо всем, скорей всего для знающих… Сделайте статью для не знающих как настроить этот плагин с яндексом пошагово…

  • Simon Ivasishin

    Вот что интересно сегодня ставил этот плагин крутил вертел ни-чего не получилось… и вот случайно ткнул вот этот плагин Configure SMTP удивлению небыло конца :) как только установил плагин все заработало само без настроек через сервер хостера… Как это объяснить не знаю но вот фак это же сделал на другом сайте и тоже заработало… Вот так…

    • Владимир

      Спасибо за информацию, вот так комментарий помог больше чем сайт, тоже все сразу запустилось без каких-либо копаний в настройках

    • NeMo

      Информация интересная.. Но Этот плагин не обновлялся около пяти лет.. ,а это говорит о возможных уязвимостях..

      • Simon Ivasishin

        Не факт, это ваша догадка и только. У меня это плагин уже 10 месяцев и полет нормальный.

  • Dmitriy Sidorov

    Сижу ужу несколько часов с настройками, а результат нулевой, письма так и не отправляются. Все делал по инструкции, прошарил кучу статей и ничего. Похоже чего-то не догоняю и хочу помощи.

    • Нужно больше информации — как отправляются письма, что в логе отправки тестового письма, доходит ли тестовое письмо, что говорит поддержка хостинга по поводу подключения к внешним SMTP (это самое важное)?

      • Dmitriy Sidorov

        Так и думал, эти проблемы из-за хостинга

  • OooZaoRu

    Спасибо за инфу!

  • София

    Подскажите, пожалуйста, как можно узнать – сайт на CMS WordPress и интегрированный в него форум на bbpress (который предполагает регистрацию) – имеет «оповещения» или нет? И в каком месте располагается текст оповещения/формы письма?

    • Правда в новых версиях bbPress один из фильтров был изменен и код, который опубликован по ссылке в предыдущем комментарии не совсем будет работать :) Как я ниже на форуме bbPress написал:

      bbPress 2.5.6 have some changes with this. Filter bbp_notify_subscribers renamed to bbp_notify_topic_subscribers.

  • Денис

    Спасибо большое!

  • Вадим Волос

    Спасибо!

    Нужно было настроить чтоб плагин Contact Form 7 отправлял данные из формы на почту яндекса. Перепробовали кучу почт яндекса, на гугл письма приходят а на янедекс не приходят, и даже в папке спам их нет. Получается нужно создавать smtp… Но появляется вопрос, если взломают сайт, а там пароль и логин smtp от почты, то автоматически могут зайти в аккаунт почты (добраться до инфы, заменить пароль, разослать спам, удалить аккаунт, и тп)?

    • Если взломают сайт, то да, пароль действительно будет у злоумышленников и они смогут воспользоваться почтой. Удалить аккаунт они, наверное, не смогут, т. к. кроме пароля, скорее всего, еще что-нибудь понадобится или вообще эта функция может отсутствовать (в каком-нибудь Google Apps или Яндекс ПДД возможность удалять аккаунты наверняка есть лишь у администратора домена, а рядовой владелец корпоративного ящика ничем управлять, кроме писем внутри ящика, не может).

      Вероятно, можно поставить какие-то дополнительные средства защиты. Как минимум на ум приходит ограничение возможности авторизации в ящике (на сервере отправки писем) лишь с заданного IP, на котором располагается веб-сервер. Это, конечно, не исключает возможности доступа к почте, но немного усложняет задачу.

      Еще можно не сохранять отправляемые письма на сервере. Насколько я знаю, Яндекс ПДД и так их не сохраняет. Т. е. войдя в интерфейс почты в папке «Отправленные» никаких писем нет, даже если сайт отправлял с этого ящика миллион писем. Другими словами, попав в такой ящик, адреса, на которые отправлялись письма ранее (адреса клиентов), достать нельзя. Можно лишь спамить кому-то «правильными» (верифицированными) письмами. Но если пароль к почте получен через взломанный сайт, то адреса клиентов можно в Вордпрессе взять :)

      Еще одна моя мысль — организовать отправку писем с дополнительного почтового адреса, которым пользуется только сайт (робот) для рассылки. К отправляемым письмам добавлять заголовок, в котором указывать другой адрес для отправки ответов (по которому будет идти общение с живым человеком — службой поддержки) — для пользователей это не добавляет никаких неудобств, потому что в почтовом клиенте по прежнему, чтобы ответить на письмо, достаточно будет лишь тыкнуть кнопку “ответить”. Таким образом вся частная переписка с клиентами будет железобетонно на другом почтовом аккаунте (ее можно и вообще не сохранять, см. выше).

  • Олег Котоман

    From Email — адрес, с которого будут отправляться письма и на который получатель отправит ответ, нажав на кнопку «Ответить» в своей почте.

    вот эта комбинация букв на понятна

    • From Email — адрес (ящик), через который WordPress будет отправлять письма. В почтовых программах есть кнопка «Ответить», нажав на которую можно начать писать ответ на полученное письмо. Если внутри письма не указывать дополнительные заголовки, то почтовая программа, когда будет отправлять ответное письмо, отправит его на исходящий адрес (ящик) от которого было получено первоначальное письмо.

  • Владимир

    Здравствуйте. У меня следующая проблема: на сайте уже установлена одна форма обратной связи для отправки сообщений с помощью плагина contact form 7 и прекрасно работает. Добавил еще одну для обратного звонка на этот же почтовый ящик. Выдает ошибку: Ошибка при отправке сообщения: “Пожалуйста, попробуйте позже или обратитесь к администратору сайта.” Первая работает как часы. В чем причина, подскажите пожалуйста?

    • Очень технический вопрос. Нужно смотреть что происходит именно в коде. Вероятно что-то с чем-то конфликтует или перезаписывает значения (параметры).

  • Можно ли создавать почтовый ящик с username@sitename.com и присваивать его пользователю? что бы он в дальнейшем пользовался отправкой почты с этого e-mail а не того с которого регистрировался.

    • Можно, но нужно где-то раздобыть почтовый сервер, который будет обслуживать эти ящики. В принципе, Яндекс ПДД вроде дает 1000 ящиков по умолчанию. Чтобы получить больше, там, если мне не изменяет память, надо в личную переписку с поддержкой вступать и просить расширить лимит.
      Можно и на своем хостинге (сервере) ящики регистрировать.

      В обоих случаях понадобится некий «софт», который будет автоматически регистрировать ящики. В случае с Яндексом, наверное, у них есть API. В случае со своим сервером (хостингом) ситуация может решиться, если используется cPanel — у нее есть API, через которое можно что угодно делать — ящики регистрировать, домены добавлять, FTP-аккаунты и прочее. Для других систем управления хостингами наверняка тоже что-то такое есть.

  • Алексей

    Скажи Коля, в случае использования smtp.yandex.ru реализация добавления в письмо подписи DKIM вшита в плагин или подпись добавляется серверами Яндекса?

    • DKIM подпись добавляет сам SMTP-сервер (и у Гугла, и у Яндекса). В принципе, мне кажется так и должно быть, хотя теоретически есть возможность добавлять подписи и через PHP.

  • Плагин заработал с пол тычка, спасибо

  • Досбол

    Коля Коробочкин, спасибо огромное. Несколько дней настраивал разными плагинами, даже mailgun подключил. Все нахимичил и все смешалось. А потом все отключил и по твоей инструкции все сделал и сразу же заработала Contact Form 7. Большое искреннее спасибо!

  • Абросим Илларионович

    Поставил плагин для отправки писем юзерам WP Email Users. Там есть настройки SMTP:
    SMTP Host
    Type of Encription : None / SSL / TLS
    SMTP Port
    SMTP Username
    SMTP Password
    Все эти поля настроил в соответствии с хостингом. Но ничего не отправляется. Не совсем понял мне нужно дополнительно WP Mail SMTP или нет?

  • Pingback: Конфигурация SMTP в WordPress + ПДД Яндекс Почта | Роман()