- Remove From My Forums
-
Question
-
I am facing interim issue with my oracle DB. where smtp relay is working for 99% of emails sent but only 1% being sending failed with error «SMTP transient error:
421 Service not available«. I am unable to trace any log entry for missed emails at exchange end in smtp receive logs.please guide how to trace and resolve the issue. both my server are available not network connectivity issue. ping telnet trace won’t show any outage or disconnect.
Br,
AA
All replies
-
Hi,
Request to verify all exchange server’s exchange transport service running properly. if any one of server transport service issue will face issue like this.
Also check DNS connectivity from application server to Exchange server.
Thanks & Regards, Kumar N
-
Hi Ajnabi,
Have you found any pattern on this issue? Anything in common among these missed emails? Does it happen during a specific time?
>>I am unable to trace any log entry for missed emails at exchange end in smtp receive logs.
I’m not quite sure how your environment was configured, but if no tracking logs can be found for the missing emails at Exchange end, it’s most likely that the messages had not reached your Exchange server. Have you consulted the Oracle support and confirm
whether all settings are correctly configured?Regards,
Steve Fan
Please remember to mark the replies as answers if they helped. If you have feedback for TechNet Subscriber Support, contact
tnsf@microsoft.com.
Click
here to learn more. Visit the dedicated
forum to share, explore and talk to experts about Microsoft Teams.-
Proposed as answer by
Wednesday, April 10, 2019 2:29 AM
-
Proposed as answer by
-
Dear Ajnabi,
Just wanted to say hi and check if there is anything that we can do for you on this problem. If so, please do not hesitate to let us know and we will be happy to help.
Best regards,
Steve Fan
Please remember to mark the replies as answers if they helped. If you have feedback for TechNet Subscriber Support, contact
tnsf@microsoft.com.
Click
here to learn more. Visit the dedicated
forum to share, explore and talk to experts about Microsoft Teams. -
Still can’t find any thing in exchange SMTP logs. Oracle application log show SMTP 421 error for one email & in the next sec with same setting email delivered successfully. we have tried a work around to resend email when failed with 421 error.
-
Still can’t find any thing in exchange SMTP logs. Oracle application log show SMTP 421 error for one email & in the next sec with same setting email delivered successfully. we have tried a work around to resend email when failed with 421 error.
421 is not a failure, its the server backing off the sending connection. Service not available could mean you have a resource/backpressure issue or too many sessions etc… on that receiving server. Your app will need to simply retry and send the message
again — That’s a requirement for any mail server following the RFCs.-
Edited by
Andy DavidMVP
Thursday, October 17, 2019 12:16 PM
-
Edited by

Ошибка 421 возникает по нескольким причинам. Каждая из ошибок не является фатальной и её легко исправить. В этой статье мы отметим 2 самые распространенные причины, по которым возникает error 421 и решение проблемы.
Чаще всего причины этой ошибки заключаются в следующем:
- Нет соединения с smtp сервером почтового хостинга. В комментариях к ошибке может писать прервано или отсутствует по неизвестной причине;
- FTP сервер занят или перегружен – причина в превышении количества разрешенных подключений;
- Грейлистинг – отсутствие ip-адреса в списке (белом) RCPT, почта с ip-адреса временно не принимается по причине подозрения в рассылке спама.
Причина номер 1: отсутствует соединение с SMPT-сервером
Ошибка 421 (SMTP-сервер) возникает, когда нет подключения к SMPT-серверу. В результате сбоя вы не можете обновлять списки писем или отправить новое письмо. Сбой часто возникает при работе с почтовыми клиентами, например, Outlook.
Причины ошибки и решения:
- Блокировка соединения антивирусом. Решается просто: отключаем на 5 минут антивирус и пробуем перезайти в программу. Обращаем внимание, что почтовый клиент нужно закрыть вообще, а затем снова открыть.
- VPN сервис. Особенно, если вы используете бесплатные варианты. Часто IP адреса таких сервисом занесены в бан. Поэтому, как бы вы ни старались, подключиться с их помощью не выйдет.
- Сбой работы почтового клиента. Нужно снова настроить клиент с нуля. К примеру, можно удалить и заново установить программу.
Причина номер 2: множественные подключения
Ошибка 421 (Too Many Connections) – это ошибка FTP соединения, которая не беспокоит обычных пользователей и чаще всего является информационным сигналом для вебмастера. Ошибка появляется при работе с программой FileZilla и для ее исправления нужно внести некоторые изменения в настройки. Также, иногда может потребоваться доступ к панели управления хостингом.
Возникает в случае, если у вас открыто активное соединение с сервером и вы параллельно пытаетесь создать еще одно подключение по тому же адресу. По сути ничего страшного в этом нет. Если с вашего IP уже есть соединение вы просто получите ошибку 421. На сам сайт это никак не влияет.
Как исправить ошибку 421?
- Нужно ограничить количество одновременных подключение к серверу, чтобы избежать появление ошибки 421. Для этого заходим в программу-клиент FileZilla и нажимаем «Файл», затем открываем «Менеджер сайтов».
- Если у вас несколько сайтов, нужно выбрать тот, который выдаёт ошибку 421. Вы увидите вкладку «Настройки передачи», в которой нужно установить Макс. Число подключений максимально до 8-ми. Более точную информацию можно узнать у хостинг-партнера. Однако, изменяя данный параметр с единицы до большего числа есть риск, что к серверу будут подключаться взломщики и вы об этом не узнаете.
- Далее сохраняем и перезапускаем программу.
ВАЖНО: Если это не помогло – срочно смените пароль для FTP и имя пользователя. Вполне возможно, что доступ к FTP аккаунту получен посторонними людьми.
Альтернативный способ исправить ошибку 421
Заходим в административную панель хостинг-аккаунта. Переходим в раздел управления FTP и отключаем активные подключения. Затем можем снова устанавливать соединение через FTP-клиент.
Если нет функции снять все активные соединения, просто смените логин и пароль для FTP аккаунта. Активные соединения будут сброшены автоматически.
Другой способ, который срабатывает, если у вас открыты программы, но нет возможности найти то самое соединение. Просто перезагрузите свой компьютер. При повторном запуске будет сделано соединение заново. Однако, этот способ не сработает, если неправильно настроен FTP-клиент.
Причина номер 3: Грейлистинг
Как правило, MS Outlook используется корпоративными клиентами в офисах для упорядочивания переписки и ускорения отправки коммерческой корреспонденции. Поэтому исходящий трафик может быть довольно высок. Именно по этой причине многие программы могут ввести ip-адрес, с которого ведется рассылка в серые списки (грейлистинг).
Причиной внесения ip-адреса пользователя в серый список может стать слишком активная переписка через один из бесплатных smtp серверов: Mail.ru, Яндекс или Gmail. Которые лимитируют количество отправленных писем в сутки. При необходимости сохранения прежней интенсивности переписки данная проблема решается переходом на специализированные почтовые сервисы. К примеру, SendPulse SMTP Server.
Дальше по теме…
На чтение 6 мин. Просмотров 296 Опубликовано 16.04.2021
Некоторые пользователи сообщали об ошибке «сервер ответил: 421 не может подключиться к SMT/SMTP-серверу» при попытке отправить электронное письмо в Outlook. Часто ошибка возникает из-за неправильных настроек для SMTP//SMT-сервера, но есть несколько других причин, которые вызывают такое поведение Outlook.
Ошибка довольно часто встречается в учетных записях Gmail. настроен в Outlook.

Ошибки SMTP/SMT, обнаруженные в Outlook, можно в целом разделить на следующие четыре категории:
- Ошибки конфигурации Outlook . Наиболее частой причиной ошибки Outlook не удается подключиться к SMTP/SMT-серверу является ошибка конфигурации в настройках Outlook. Но это применимо только в том случае, если проблема возникла с недавно настроенной учетной записью электронной почты.
- Проблемы, связанные с брандмауэром . Такое поведение неизвестно со встроенным в брандмауэре Windows. Однако некоторые сторонние брандмауэры и антивирусные пакеты настроены на блокировку подключения к некоторым диапазонам IP-адресов, в том числе к почтовому серверу. Это могло быть основной причиной получения ошибки при отправке электронного письма в Outlook.
- Фильтрованный трафик на порту 25 – одна из наиболее распространенных практик, применяемых интернет-провайдерами. Чтобы свести к минимуму автоматический спам, необходимо заблокировать трафик через порт 25 . Хотя это эффективно предотвращает использование зараженных компьютеров в качестве сетей для спама, это также создает множество проблем для конечного пользователя, включая ошибку 421 Не удается подключиться к SMTP-серверу .
- Помехи, вызванные подключением VPN . У некоторых поставщиков VPN (особенно новых продуктов) может не быть почтового сервера, который вы использовали, в белом списке. Известно, что это вызывает ошибку «сервер ответил, что 421 не может подключиться к серверу SMT» .
В зависимости от причины сообщения об ошибке пользователи следует использовать соответствующее решение. Ниже представлен набор методов, которые были успешно развернуты пользователями для решения проблемы « сервер ответил: 421 не может подключиться к SMT/SMTP-серверу» и нормально отправлять электронные письма в Outlook.
Примечание. Прежде чем приступить к устранению неполадок с помощью описанных ниже методов, убедитесь, что установка Outlook не повреждена. Чтобы убедиться, что проблема не вызвана неправильной установкой Outlook, переустановите версию Outlook и посмотрите, появляется ли сообщение об ошибке по-прежнему.
Если вы настроили только учетную запись Outlook, начните с Метод 1 и устранение ошибок конфигурации. Если раньше вы могли отправлять электронные письма в Outlook, начните с метода 2 и продолжайте дальше..
Если вы не уверены в причине проблемы, следуйте каждому методу по порядку, пока не найдете решение, которое успешно решает вашу проблему.
Содержание
- Метод 1. Устранение проблем с конфигурацией Outlook
- Метод 2: изменение порта SMTP номер
- Метод 3: Проверка на наличие помех брандмауэра
- Метод 4. Проверка помех от VPN
Метод 1. Устранение проблем с конфигурацией Outlook
Если вы недавно настроили свою учетную запись электронной почты в Outlook, скорее всего, ошибка вызвана ошибкой конфигурации. Имейте в виду, что из-за неправильного написания имени почтового сервера или неправильной настройки порта Outlook будет отображать ошибку « 421 не может подключиться к SMT/SMTP-серверу» при отправке или получении электронной почты.
Если вы вручную настроили параметры учетной записи электронной почты в первый раз, давайте попробуем повторно добавить вашу учетную запись и позволить Outlook автоматически добавить правильные параметры. В большинстве случаев Outlook хорошо выбирает правильные порты. Вот краткое руководство по автоматическому добавлению правильной конфигурации:
- Давайте начнем с удаления учетной записи, прежде чем позволить Outlook автоматически перенастроить настройки. Для этого откройте Outlook и перейдите в Файл> Настройки учетной записи , выберите нужную учетную запись и нажмите кнопку Удалить .
- После удаления учетной записи нажмите кнопку Создать , выберите Учетная запись электронной почты и снова введите свои учетные данные. Нажмите Далее и дождитесь настройки параметров и отправки тестового сообщения электронной почты.
- Если тестовое электронное письмо успешно отправлено, ваша учетная запись электронной почты должна быть успешно настроена.
Если вы получаете такое же сообщение об ошибке при отправке тестового электронного письма, перейдите к методу 2.
Метод 2: изменение порта SMTP номер
Если вы получаете такое же сообщение об ошибке, когда тестовое электронное письмо отправляется в Outlook, весьма вероятно, что проблема возникает из-за того, что порт SMTP (25) фильтруется вашим Интернет-провайдер. Известно, что некоторые интернет-провайдеры блокируют трафик через порт 25 , пытаясь свести к минимуму распространение автоматического спама.
Примечание: Этот сценарий применим только в том случае, если ваше соединение с сервером исходящей почты (SMTP) настроено через SSL .
Вы можете проверить если это причина ошибки, измените номер порта SMTP с 25 на 465 и посмотрите, возобновится ли нормальная работа. Для этого перейдите в Файл> Настройки учетной записи , выберите учетную запись электронной почты, в которой возникла проблема, и нажмите кнопку Изменить .

В мастере Изменить учетную запись перейдите в Дополнительные настройки и выберите Дополнительно . Затем введите 465 в поле рядом с Сервер исходящей почты (SMTP) и убедитесь, что тип зашифрованного соединения установлен на SSL .

Если проблема все еще не решена перейдите к Методу 3 .
Метод 3: Проверка на наличие помех брандмауэра
Брандмауэры – это дополнительные барьеры безопасности, которые защищают нас от злонамеренных атак и взломов. Но некоторые решения сторонних брандмауэров ошибочно блокируют определенные диапазоны IP-адресов на основе ряда шаблонов активности. Если немного не повезет, IP-адрес почтового сервера может оказаться в этом списке. , что приведет к ошибке «сервер ответил, что 421 не может подключиться к серверу SMT» . Известно, что антивирус Avast вызывает конфликты с Outlook.
Вы Вы можете проверить этот сценарий, отключив сторонний брандмауэр/антивирус и отправив тестовое электронное письмо через Outlook. Если электронное письмо отправлено успешно, начните просматривать настройки антивируса и посмотрите, можете ли вы добавить почтовый сервер в список исключений . Расположение списка исключений во многом зависит от вашего стороннего антивируса.
Примечание . Если вы используете надстройки Outlook, вы также можете воспользоваться посмотрите, какие надстройки у вас активны. Перейдите в Файл> Параметры> Надстройки и посмотрите, есть ли у вас какой-либо антивирусный плагин, который может помешать подключению к серверу. Если вы видите антивирусный плагин (например, Avast! Add-in ), нажмите кнопку Go рядом с Управление надстройкой COM- ins и снимите флажок рядом с плагином. Это должно предотвратить вмешательство антивирусного модуля в соединение с сервером.

Метод 4. Проверка помех от VPN
Если вы используете решение VPN для защиты своего веб-трафика и сохранения анонимности при просмотре веб-страниц в Интернете, вам может потребоваться чтобы проверить, не в этом ли причина проблемы. Некоторые пользователи сообщают, что обнаруживают, что их VPN-соединение препятствует обмену данными Outlook с почтовым сервером.
Вы можете легко проверить, так ли это, отключив сетевое соединение VPN и отправив электронное письмо через Outlook. Если электронное письмо было успешно отправлено, когда сеть VPN отключена, у вас есть два возможных пути вперед. Вы можете либо обратиться в службу поддержки сети VPN и попросить внести почтовый сервер в белый список, либо вообще искать другого поставщика VPN.
На чтение 4 мин. Просмотров 2.5k. Опубликовано 03.09.2019
Сервер ответил: 421 не может подключиться к SMTP-серверу. Ошибка в основном связана с учетными записями Microsoft Outlook и часто встречается при попытке отправить электронное письмо через платформу. Хотя существует множество факторов, которые могут вызвать эту ошибку, мы рассмотрим некоторые из наиболее известных из них, с акцентом на то, как решить проблему.
Что делать, если Outlook не подключается к SMTP-серверу? Во-первых, заново настройте параметры SMTP, чтобы устранить проблему. Распространенной причиной является неправильная настройка SMTP (Simple Mail Transfer Protocol). Кроме того, проверьте настройки VPN и антивируса. При необходимости внесите в белый список Outlook, чтобы избежать блокировки антивирусным брандмауэром.
Подробнее о наших решениях читайте ниже.
Содержание
- Как исправить ошибку 421 не удается подключиться к SMTP-серверу в Outlook
- 1. Переконфигурируйте настройки SMTP
- 2. Проверьте виртуальную частную сеть (VPN) помехи в Outlook
- 3. Проверьте наличие антивирусных помех в Outlook
Как исправить ошибку 421 не удается подключиться к SMTP-серверу в Outlook
- Изменить настройки SMTP
- Проверьте наличие помех в виртуальной частной сети (VPN) в Outlook
- Проверить наличие антивирусных помех в Outlook
1. Переконфигурируйте настройки SMTP
Когда эта ошибка встречается в MS Outlook, наиболее вероятная причина, как было указано ранее, это неправильная настройка параметров SMTP (сервера передачи электронной почты). Следовательно, это первый метод устранения неполадок, который мы будем рекомендовать в этом руководстве.
Чтобы перенастроить настройки SMTP в MS Outlook, выполните следующие действия:
- Запустите MS Outlook .
-
Найдите и нажмите Файл .
-
Выберите Настройки аккаунта .
-
Нажмите на свою учетную запись, а затем нажмите Изменить .
-
Найдите « Сервер исходящей почты (SMTP) » и введите адрес (предоставленный вашим веб-хостингом).
- Найдите и нажмите Дополнительные настройки .
-
Перейдите на вкладку Исходящий сервер
. - Убедитесь, что Мой исходящий сервер (SMTP) требует проверки подлинности .
-
Выберите Использовать те же настройки, что и для сервера входящей почты.
-
Вернитесь в окно Дополнительные настройки и перейдите на вкладку Дополнительно
. -
На вкладке «Дополнительно» найдите и измените свой номер порта , предоставленный поставщиком услуг Интернета.
- Сохранить настройки и закройте программу.
- Проверьте, исправлена ли ошибка: откройте Outlook и попробуйте отправить электронное письмо.
Если проблема не устранена, вы можете попробовать следующее исправление.
Примечание. Вышеуказанные шаги можно применить к Microsoft Outlook 2016 (и выше).
2. Проверьте виртуальную частную сеть (VPN) помехи в Outlook
VPN в основном используется для маскировки местоположений и получения доступа к геоблокированным/географически ограниченным сайтам и контенту, особенно в зонах с ограниченным доступом. В некоторой степени это влияет на ваше поведение в Интернете, в том числе на доступ и передачу электронной почты в Outlook.
Несмотря на то, что VPN практически не влияют на передачу электронной почты напрямую или нет, были зарегистрированы случаи, когда службы VPN вмешивались в программы на базе Интернета, такие как Outlook. Следовательно, вы можете проверить, не вызвана ли ошибка из-за помех от вашего VPN.
Чтобы проверить, является ли VPN причиной ошибки, просто отключите службу VPN; Затем вы можете попробовать отправить электронное письмо. Если электронная почта проходит без проблем, VPN, вероятно, является причиной ошибки. В противном случае вы можете попытаться проверить, есть ли другие мешающие стороны.
3. Проверьте наличие антивирусных помех в Outlook
Самые продвинутые антивирусные и другие программы безопасности оборудованы для выполнения проверок действий в браузере и, где необходимо, накладывают ограничения. В редких случаях это может быть проблемой, когда сервер ответил: 421 не может подключиться к SMTP сервер , возникает ошибка.
Вы можете проверить, чтобы убедиться в виновности программы безопасности в вашей системе, отключив ее, а затем попытаться отправить электронное письмо. Если электронная почта проходит без проблем, программа безопасности, очевидно, виновна.
Чтобы решить эту проблему, вы можете перенастроить вашу AV или программу безопасности для предоставления разрешений или исключить почтовый SMTP-сервер из всех расширенных проверок и ограничений безопасности. Если вы не знаете, как это сделать, вы можете легко отключить брандмауэр или AV в любое время, когда захотите отправить электронное письмо.
- Remove From My Forums
-
Question
-
I am facing interim issue with my oracle DB. where smtp relay is working for 99% of emails sent but only 1% being sending failed with error «SMTP transient error:
421 Service not available«. I am unable to trace any log entry for missed emails at exchange end in smtp receive logs.please guide how to trace and resolve the issue. both my server are available not network connectivity issue. ping telnet trace won’t show any outage or disconnect.
Br,
AA
All replies
-
Hi,
Request to verify all exchange server’s exchange transport service running properly. if any one of server transport service issue will face issue like this.
Also check DNS connectivity from application server to Exchange server.
Thanks & Regards, Kumar N
-
Hi Ajnabi,
Have you found any pattern on this issue? Anything in common among these missed emails? Does it happen during a specific time?
>>I am unable to trace any log entry for missed emails at exchange end in smtp receive logs.
I’m not quite sure how your environment was configured, but if no tracking logs can be found for the missing emails at Exchange end, it’s most likely that the messages had not reached your Exchange server. Have you consulted the Oracle support and confirm
whether all settings are correctly configured?Regards,
Steve Fan
Please remember to mark the replies as answers if they helped. If you have feedback for TechNet Subscriber Support, contact
tnsf@microsoft.com.
Click
here to learn more. Visit the dedicated
forum to share, explore and talk to experts about Microsoft Teams.-
Proposed as answer by
Wednesday, April 10, 2019 2:29 AM
-
Proposed as answer by
-
Dear Ajnabi,
Just wanted to say hi and check if there is anything that we can do for you on this problem. If so, please do not hesitate to let us know and we will be happy to help.
Best regards,
Steve Fan
Please remember to mark the replies as answers if they helped. If you have feedback for TechNet Subscriber Support, contact
tnsf@microsoft.com.
Click
here to learn more. Visit the dedicated
forum to share, explore and talk to experts about Microsoft Teams. -
Still can’t find any thing in exchange SMTP logs. Oracle application log show SMTP 421 error for one email & in the next sec with same setting email delivered successfully. we have tried a work around to resend email when failed with 421 error.
-
Still can’t find any thing in exchange SMTP logs. Oracle application log show SMTP 421 error for one email & in the next sec with same setting email delivered successfully. we have tried a work around to resend email when failed with 421 error.
421 is not a failure, its the server backing off the sending connection. Service not available could mean you have a resource/backpressure issue or too many sessions etc… on that receiving server. Your app will need to simply retry and send the message
again — That’s a requirement for any mail server following the RFCs.-
Edited by
Andy DavidMVP
Thursday, October 17, 2019 12:16 PM
-
Edited by
Exchange 2013 ошибка smtp 421 4.3.2 Service Not Available
В процессе настройки вылезла интересная проблема, время от времени smtp сервис перестает отвечать на запросы и вместо этого начинает выдавать ошибку
421 4.3.2 Service Not Available
Если перезапустить сервис транспорта (Micorosoft Exchange Transport), то на какое-то время проблема исчезает, но, затем, снова появляется. Метод лежащий на поверхности – поставить в шедуллер маленький скриптик, который будет раз в несколько часов передергивать сервис конечно рабочий, но это классический “костыль” 
Оказалось, что дело в созданных Receive Connector, точнее в их конфликте с базовыми. Для устранения проблемы нужно переписать или запомнить параметры созданных вами соединителей, затем удалить их и создать новые. При создании нужно в переключателе “Role” выбирать “Frontend Transport”, а не “HUB Transport”, который выбран по умолчанию.
Это то решение, которое помогло мне и даже в процессе поиска показалось самым логичным. Кроме того, встречались советы, которые якобы помогли людям:
- Отключить MailWare filter: Set-MalwareFilteringServer -BypassFiltering $true
- Прописать в файл hosts ipv4 адреса серверов Exchange как в FQDN так и просто имя сервера
Эти советы я даже и не проверял, но если вам не поможет способ с изменением роли соединителя, то можете попробовать.
Возможные значения
- Сервер занят или перегружен;
- Грейлистинг;
- Соединение прервано, так как IP отсутствует в белом списке домена RCPT;
- С вашего IP-адреса часто поступает спам. Почта, отправляемая с вашего IP-адреса, временно не принимается;
- Временные неполадки в системе;
- Соединение прервано по неизвестной причине.
Способ решения
Решение данной ошибки может быть разным, исходя из дополнительного сообщения сервера, которые можно увидеть в логе. Может помочь следующее:
- Попробуйте установить соединение позднее. Это поможет, если причина — грейлистинг;
- Проверьте ваш IP-адрес на наличие его в RBL-базах и других чёрных и серых списках. Если он там — найдите метод по удалению;
- Очень возможно, что ошибка возникает наряду с грейлистингом при слишком интенсивном использовании SMTP-сервера. Такое часто возникает при использовании бесплатных SMTP-серверов, которые лимитирует число отправляемых через них сообщений в сутки. Это правильнее всего решить путём использования профессиональных высоко-нагруженных SMTP-серверов (например, SendPulse SMTP Server).
Как я спам слал
Время на прочтение
6 мин
Количество просмотров 28K
Введение
В этой небольшой статье я хочу рассказать о том, как я настраивал отправку почты из Oracle и чем это закончилось. Хочу сразу уточнить две вещи: во-первых, делал я это не для рассылки спама, во-вторых, ранее я не имел дела с настройкой почтовых серверов, поскольку это лежит вне области моей профессиональной деятельности.

Настройка Oracle
Решая одну из своих задач, я столкнулся с необходимостью рассылать пользователям данные для аутентификации, т.е. логины и пароли, которые лежат в таблице. Скажем откровенно, в данный момент пользователей не сотни и не тысячи, так что можно было бы каждому отослать письмо руками, но это пару часов ручного труда – интересней ведь потратить в два-три раза больше времени, но все автоматизировать, не так ли?
На прошлом месте работы мне уже приходилось слать джобом ежемесячные отчеты на почту пользователям, так что задача не выглядела для меня чем-то экзотичным, более того, я рассчитывал, что справлюсь за соизмеримое с ручным трудом время. С другой стороны там была вся необходимая инфраструктура под рукой + специалисты нужных тематик, с которыми можно было поговорить. Здесь же не было ничего — нужно разбираться самому.
Oracle имеет множество методов отсылки почты из БД, вот некоторые из пакетов, имеющие нужную функциональность:
- UTL_MAIL
- UTL_SMTP
- UTL_TCP
- UTL_HTTP
Любой из перечисленных пакетов полностью содержит необходимую логику. Самый свежий – это пакет UTL_MAIL, его я и решил использовать. Скажу сразу, этот пакет не входит в сборку Oracle по умолчанию, его нужно устанавливать руками. Части пакета лежат в двух файлах:
1. спецификация пакета находится в файле @$ORACLE_HOMErdbmsadminutlmail.sql
2. тело пакета зашифровано и лежит в файле @$ORACLE_HOMErdbmsadminprvtmail.sql
Накатывать это нужно из-под пользователя SYS, нормально установить пакет из Command Window PL/SQL Developer’a мне не удалось, т.е. он установился, но выдавал ошибки компиляции. Из sqlplus все установилось отлично.
После наката нужно выдать гранты на использование пакета. Некоторые авторы предлагают давать гранты на Public, но это не есть хорошая идея по причинам безопасности. После выдачи грантов нужному пользователю наша работа под пользователем SYS закончена (однако он нам еще понадобиться ситуации, когда нужно делать alter system).
Почтовый сервер
Как оказалось, для отправки почты все же нужна инфраструктура, т.е. кроме Oracle нужен почтовый сервер, которого у меня не было, а уж устанавливать и настраивать я его вообще не представлял как, да и нужно ли?
После недолгих поисков я нашел следующую статью http://jiri.wordpress.com/2010/03/24/send-emails-using-utl_mail-and-google-gmail-smtp-server/, описывающую как слать почту через GMAIL. Автор статьи попал в аналогичную моей ситуацию и предлагал простое решение, которым я решил воспользоваться. Завел новый ящик на GMAIL, который будет использоваться для автоматической отсылки писем, скачал и установил E-MailRelay. Сразу у меня все не заработало, пришлось немного почитать документацию и поискать еще статей, описывающих взаимодействие с данным сервером. В итоге все нужное параметры были внесены в bat-файл, данные почтового ящика в файл emailrelay.auth и сервер успешно запущен.
Отправка писем
После установки почтового сервера (или SMTP-прокси, как в нашем случае) нужно указать Oracle его адрес:
alter system set smtp_out_server = 'ip-address:port' scope=Both;
В моем случае, Oracle и SMTP-прокси стоят на одной машине, поэтому адрес 127.0.0.1, порт 25.
Попытаемся теперь отправить письмо с помощью utl_mail.send, для этого пришлось еще немного поиграться с настройками, например, оказалось, что в поле sender обязательно нужен адрес в следующем формате:
«<any_mail@any_mail_server.com>», там же можно указать имя отправителя:
» Sender Name <my_mail@any_mail_server.com>», но письмо придет все равно с вашего реального gmail-ящика, и выглядеть это будет так:
» Sender Name <my_mail@any_mail_server.com>» <real_mailbox@gmail.com>
Немного экспериментов с mime_type и отсылкой на разные почтовые серверы показало, что для русского текста желательно использовать ‘text/html; charset=«UTF-8»’.
После контрольной отсылки писем себе была написана процедура, которая выбирала нужные данные и слала каждому пользователю его логин/пароль. Запустив эту процедуру для отсылки данных первым двадцати пользователям, я ушел обедать.
Минут через 40 оказалось, что ушло только первых 4 письма, остальные где-то застряли. Готовясь к дебагу, я отправил той же процедурой 10 писем себе на ящик. Новый пакет «протолкнул» потерянные письма и все они успешно ушли. В общем SMTP-прокси работал, хотя и с некоторым непостоянством.
Продолжение истории
Через день, занимаясь своими делами на сервере, я увидел, что SMTP-прокси отослал около 80 писем, хотя я после первой рассылки больше через него ничего не отправлял. Решил проверить ящик на gmail’e. Во входящих красовалось три пачки писем:
Все три цепочки содержали ответы почтовых серверов об отправке сообщения на несуществующие ящики. В отправленных сообщениях наблюдалась следующая картина:
Получалось, что с моего ящика ушло по два письма на ящики vbibiorm@gmail.com и w852@ymail.com, причем каждое письмо в теме содержало IP-адрес машины, на которой стоял мой SMTP-прокси, тело писем было пустым, но письма имели по одному аттачу с именем noname и размером ноль байт.
Очевидно, что SMTP-прокси имел уязвимость, и мне неизвестно, проявлялась ли она только при отправке писем с аттачем, или аттач должен был содержать какую-то дополнительную информацию относительно уязвимостей/характеристик машины. Поскольку время отправки сообщений на оба ящика совпадает, я делаю вывод, что они принадлежат одному и тому же человеку. В результате найденной уязвимости через SMTP-прокси были посланы письма такого вида:
Гугл-транслейт определяет язык писем как китайский. Поиск в гугле информации по данным е-мейлам показал, что пользователи часто жалуются на непонятную активность почтовых серверов, связанную с отсылкой писем на эти ящики. В общем, так у меня в словаре появилось словосочетание «open relay». SMTP-прокси я выключил, но остался вопрос, что с этим делать дальше? Я видел три варианта:
- Поскольку почту отправлять планировалось не часто и целыми пакетами, то можно оставить все как есть, т.е. включать почтовый прокси только на время отправки писем – наиболее дешевое по времени решение.
- Можно досконально разобраться с темой почтовых серверов и либо корректно настроить данный, либо сменить его на более надежный – довольно дорогой по времени вариант, к тому же в дальнейшем мне эти знания будут абсолютно бесполезны.
- Найти воркэраунд, с использованием имеющихся знаний – затраты по времени не известны.
- Найти разбирающегося в почтовых серверах знакомого.
Учитывая исходную задачу, наиболее перспективно выглядел 3-ий вариант, при условии получения «fun’a» от процесса решения. Далее, примерно равнозначны варианты 1 и 4.
Варианты
Самым простым и идеальным вариантом является отправка почты сразу через Gmail, без дополнительных серверов. Попробуем:
alter system set smtp_out_server = 'smtp.gmail.com:587' scope=Both;
Теперь попытка отсылки письма возвращает следующую ошибку: «ORA-29279: SMTP permanent error: 530 5.7.0 Must issue a STARTTLS command first. m29sm5336584poh.20». Я сходил в документацию Gmail’a и попробовал другие порты, попробовал также установить в настройках ящика работу через http, а не https. В результате сообщение об ошибке менялось, но почта не уходила. Поиск в интернете указал на несколько моментов:
- Gmail и Yahoo требуют использования STARTTLS(другое название SSL).
- UTL_MAIL не поддерживает STARTTLS.
- Особо упорные товарищи пробовали использовать пакет utl_smtp и команду utl_smtp.command(conn,’STARTTLS’), но потерпели фиаско. Где-то в документации я нашел, что STARTTLS поддерживается Ораклом начиная с версии 11.2.
- Общее мнение сообщества сводилось к следующему:
- Используйте не Gmail и не Yahoo и не морочьте себе голову.
- Если вы хотите использовать Gmail, поставьте себе SMTP-прокси (вариант. описанный в начале статьи).
- Если вы понимаете что делаете, можете попытаться авторизоваться на почтовом сервере через пакет utl_smtp.
Я решил попробовать реализовать пункт 4.а – ищу другой почтовый сервер, нахожу там настройки для SMTP, делаю alter system. Пытаюсь послать письмо, получаю ошибку: «ORA-29278: Временная ошибка SMTP: 421 Service not available». Перечитываю настройки, пытаюсь подключить варианты с использованием авторизации через пакет utl_smtp (обсуждение этого варианта можно посмотреть, например, здесь). Ничего не работает, ни через другой почтовик ни через Gmail. Постоянно закрываю в браузере вкладки с описанием того, что я уже знаю, но количество потенциально полезных стремиться к бесконечности:
Понимаю, что пора с этим заканчивать, во время очередного поиска нахожу простую мысль: а не закрыт ли у меня порт 25? Проверяю (оказывается, я теперь умею это делать) – закрыт. Делаю alter system с указанием моего альтернативного почтового сервера и порта 587. Пробую отправить письмо с помощью UTL_MAIL и получаю ошибку «ORA-29279: Постоянная ошибка SMTP: 501 sender address must contain a domain». Почти получилось, избавляюсь в имени отправителя от необходимых Gmail’y «<>», и письмо уходит.
Заключение
В этой статье я описал свой опыт работы с отправкой почты в полевых условиях и при отсутствии необходимых знаний о работе почтовых серверов. Полученный результат не является вполне удовлетворительным, поскольку я нашел такой же «дырявый» почтовый сервер, как и ранее установленный мною SMTP-прокси. Потратив еще минуту, я выяснил, что могу отправить письмо от имени любого существующего на почтовом сервере ящика, просто указав, например
v_sender varchar2(200):='Вася Пупкин <admin@mail.******>'
где mail.****** — имя найденного почтового сервера. Однако свои задачи я решил, от дырявого прокси и необходимости разбираться с его настройками я избавился, узнал немного больше про пакеты UTL_MAIL и UTL_SMTP. Также я планировал разобраться с вариантом 4.с, но сходу у меня не вышло, и я решил не тратить больше времени, если кто-то добьет таки отправку писем из Oracle напрямую через Gmail будет интересно про это почитать. На перенастройку отправления почты (после обнаружения спама) и параллельное написание статьи я потратил где-то около 6-7 часов.








