Настройка отправки электронной почты напрямую из платформ 1С — частая задача при автоматизации рассылок печатных форм, счетов, актов и уведомлений. Однако при использовании встроенных объектов ИнтернетПочта и ИнтернетПочтовыйПрофиль разработчики часто сталкиваются с ошибками подключения к почтовым серверам (в частности Mail.ru, Yandex или Gmail).
В этой статье мы подробно разберем, почему возникают ошибки «POP3 connection broken in response» и «SMTP error code 503 sender not yet given», проанализируем причины их появления и рассмотрим правильный, 100% рабочий код для отправки писем из 1С.
Проанализируем первую проблему, с которой сталкивается разработчик при попытке установить соединение с сервером:
Ошибка при вызове метода контекста (Подключиться): POP3 connection broken in response
Разберем причину ее возникновения. Данное сообщение означает, что почтовый сервер разорвал соединение в ответ на попытку подключения. Это происходит, когда в настройках профиля указан порт с поддержкой шифрования (например, для POP3 сервера Mail.ru указан порт 995), но в самом объекте ИнтернетПочтовыйПрофиль не включено использование SSL-соединения для POP3.
Если в профиле установлено Профиль.ИспользоватьSSLSMTP = Истина;, но забыто аналогичное свойство для POP3, сервер сбрасывает подключение. Чтобы решить проблему, необходимо добавить в код настройку шифрования POP3:
ПрофильОтправки.ИспользоватьSSLPOP3 = Истина;
В современных релизах платформы 1С:Предприятие 8.3 вместо отдельных флагов шифрования рекомендуется явно инициализировать объект защищенного соединения ЗащищенноеСоединениеOpenSSL:
ПрофильОтправки.ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
После успешного исправления настроек SSL и подключения к серверу разработчик может столкнуться со следующей ошибкой на этапе выполнения метода Послать():
Ошибка при вызове метода контекста (Послать): Неизвестная ошибка (SMTP error code 503 503 sender not yet given)
Выясним причину этой ошибки. Код состояния SMTP 503 указывает на нарушение последовательности команд протокола передачи почты. Сервер сообщает, что команда отправки содержимого письма вызвана до того, как был передан адрес отправителя (команда MAIL FROM).
В 1С это происходит в двух случаях:
ИнтернетПочтовоеСообщение не заполнено свойство Отправитель. Заполнения одного лишь свойства ИмяОтправителя недостаточно!Отправитель адрес электронной почты не совпадает с логином авторизации (ПользовательSMTP или Пользователь), под которым выполнено подключение к почтовому серверу. Публичные почтовые сервисы из соображений безопасности строго запрещают отправку писем от имени чужих ящиков.Чтобы исправить ошибку 503, обязательно задайте адрес отправителя в объекте сообщения, строго совпадающий с логином учетной записи:
Письмо.Отправитель = "ваш_логин@mail.ru";
Посмотрим на ещё один критически важный нюанс. Публичные почтовые сервисы (Mail.ru, Yandex, Gmail) запрещают авторизацию сторонних программ по обычному паролю от личного кабинета.
Для успешного подключения в коде 1С в свойствах Пароль и ПарольSMTP необходимо указывать не основной пароль от ящика, а специально сгенерированный пароль для внешних приложений.
Сгенерировать его можно в веб-интерфейсе вашей почты (раздел настройки безопасности -> «Пароли для внешних приложений»). Именно этот код следует вставить в настройки профиля 1С.
Рассмотрим по шагам готовый рабочий пример отправки письма с вложением через почтовый сервис Mail.ru:
&НаСервере
Процедура ОтправитьПисьмоНаСервере()
// 1. Создаем и настраиваем профиль подключения
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.АдресСервераPOP3 = "pop.mail.ru";
Профиль.ПортPOP3 = 995;
// Авторизация на сервере
Профиль.Пользователь = "vash_yashchik@mail.ru";
Профиль.Пароль = "пароль_приложения"; // Специальный пароль внешнего приложения
Профиль.ПользовательSMTP = "vash_yashchik@mail.ru";
Профиль.ПарольSMTP = "пароль_приложения";
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
// Включаем использование SSL
Профиль.ИспользоватьSSLPOP3 = Истина;
Профиль.ИспользоватьSSLSMTP = Истина;
// Для новых версий платформы 8.3 рекомендуем задавать ЗащищенноеСоединение:
// Профиль.ЗащищенноеСоединениеЗапроса = Новый ЗащищенноеСоединениеOpenSSL();
// 2. Формируем почтовое сообщение
Письмо = Новый ИнтернетПочтовоеСообщение;
// Обязательное поле: адрес отправителя должен совпадать с логином авторизации!
Письмо.Отправитель = "vash_yashchik@mail.ru";
Письмо.ИмяОтправителя = "ООО Название Организации";
// Добавляем получателя
Письмо.Получатели.Добавить("client@yandex.ru");
Письмо.Тема = "Счет на оплату";
Письмо.Тексты.Добавить("Добрый день! Во вложении высылаем счет на оплату.");
// При необходимости добавляем вложение
// Письмо.Вложения.Добавить("C:\Temp\Bill.pdf");
// 3. Подключение и отправка
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль);
Сообщить("Успешное подключение к почтовому серверу.");
Исключение
Сообщить("Не удалось подключиться к серверу: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Попытка
Почта.Послать(Письмо);
Сообщить("Электронное письмо успешно отправлено!");
Исключение
Сообщить("Не удалось отправить письмо: " + ОписаниеОшибки());
КонецПопытки;
// Обязательно отключаемся от сервера
Почта.Отключиться();
КонецПроцедуры
Если при выполнении приведенного кода все равно возникают ошибки, рекомендуем проверить следующие пункты:
Письмо.Отправитель должно строго совпадать с Профиль.ПользовательSMTP.465 (с SSL) или 587 (с TLS). Для POP3 порт 995 (с SSL), для IMAP — 993.