1С 8.3 Электронная почта (E-mail)
Данные > Примеры кода 1С > 1С 8.3 Электронная почта (E-mail)
Электронная почта (E-mail) в 1С 8.3 используется во многих конфигурациях для различных задач электронного документооборота (печатные формы документов), спам-рекламы, отправки уведомлений сотрудникам, рассылки прайс-листов, коммерческих предложений и т.п. Платформа 1С 8.3 поддерживает почтовые протоколы IMAP, POP3 и SMTP, а также с разные виды аутентификации и SSL шифрование. Для работы с электронной почтой в типовых есть общий модуль: РаботаСПочтовымиСообщениямиСлужебный, поэтому для реализации решений с входящей и/или исходящей почтой, рекомендуется использовать соответствующие функции данного модуля. При программировании модулей собственной разработки или авторской конфигурации можно использовать нижеприведенные примеры. Для примера, к скачиванию доступна обработка "Загрузка заказов с почтового сервера".
Оглавление:
Создание интернет профиля в 1С 8.3:
&НаСервере
Функция СозданиеИнтернетПрофиля()
ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
ПочтовыйПрофиль.ВремяОжидания = 300;// Google рекомендует 5 минут
// Исходящая почта
//Если ФормироватьIMAPПрофиль Тогда
ПочтовыйПрофиль.АдресСервераIMAP = "imap.yandex.ru"; // imap.mail.ru
ПочтовыйПрофиль.ПользовательIMAP = "from1C@yandex.ru"; // from1C@mail.ru
ПочтовыйПрофиль.ПортIMAP = 993; // 993
Попытка
ПочтовыйПрофиль.ИспользоватьSSLIMAP = Истина;
Исключение
Сообщить("Не работает служба SSL IMAP! Для корректной работы необходима платформа 1С версии не менее 8.3!");
КонецПопытки;
ПочтовыйПрофиль.ПарольIMAP = "Ro1Cte921hAb8sKf4";
//КонецЕсли;
//Если ФормироватьSMTPПрофиль Тогда
ПочтовыйПрофиль.АдресСервераSMTP = "smtp.yandex.ru"; // smtp.mail.ru
ПочтовыйПрофиль.ПользовательSMTP = "from1C@yandex.ru"; // from1C@mail.ru
ПочтовыйПрофиль.ПортSMTP = 465; // 465
Попытка
ПочтовыйПрофиль.ИспользоватьSSLSMTP = Истина;
Исключение
Сообщить("Не работает служба SSL SMTP! Для корректной работы необходима платформа 1С версии не менее 8.3!");
КонецПопытки;
ПочтовыйПрофиль.ПарольSMTP = "Ro1Cte921hAb8sKf4";
ПочтовыйПрофиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
//КонецЕсли;
// Входящая почта
//Если ФормироватьPOP3Профиль Тогда
ПочтовыйПрофиль.АдресСервераPOP3 = "pop.yandex.ru"; // pop.mail.ru
ПочтовыйПрофиль.Пользователь = "from1C@yandex.ru"; // from1C@mail.ru
ПочтовыйПрофиль.ПортPOP3 = 993; // 995
Попытка
ПочтовыйПрофиль.ИспользоватьSSLPOP3 = Истина;
Исключение
Сообщить("Не работает служба SSL POP3! Для корректной работы необходима платформа 1С версии не менее 8.3!");
КонецПопытки;
ПочтовыйПрофиль.Пароль = "Ro1Cte921hAb8sKf4";
//Если НастройкиСоединения.СпособPOP3Аутентификации = Перечисления.СпособыPOP3Аутентификации.APOP Тогда
// ПочтовыйПрофиль.АутентификацияPOP3 = СпособPOP3Аутентификации.APOP;
//ИначеЕсли НастройкиСоединения.СпособPOP3Аутентификации = Перечисления.СпособыPOP3Аутентификации.CramMD5 Тогда
// ПочтовыйПрофиль.АутентификацияPOP3 = СпособPOP3Аутентификации.CramMD5;
//Иначе
// ПочтовыйПрофиль.АутентификацияPOP3 = СпособPOP3Аутентификации.Обычная;
//КонецЕсли;
//КонецЕсли;
Возврат ПочтовыйПрофиль;
КонецФункции
Функция СозданиеИнтернетПрофиля()
ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
ПочтовыйПрофиль.ВремяОжидания = 300;// Google рекомендует 5 минут
// Исходящая почта
//Если ФормироватьIMAPПрофиль Тогда
ПочтовыйПрофиль.АдресСервераIMAP = "imap.yandex.ru"; // imap.mail.ru
ПочтовыйПрофиль.ПользовательIMAP = "from1C@yandex.ru"; // from1C@mail.ru
ПочтовыйПрофиль.ПортIMAP = 993; // 993
Попытка
ПочтовыйПрофиль.ИспользоватьSSLIMAP = Истина;
Исключение
Сообщить("Не работает служба SSL IMAP! Для корректной работы необходима платформа 1С версии не менее 8.3!");
КонецПопытки;
ПочтовыйПрофиль.ПарольIMAP = "Ro1Cte921hAb8sKf4";
//КонецЕсли;
//Если ФормироватьSMTPПрофиль Тогда
ПочтовыйПрофиль.АдресСервераSMTP = "smtp.yandex.ru"; // smtp.mail.ru
ПочтовыйПрофиль.ПользовательSMTP = "from1C@yandex.ru"; // from1C@mail.ru
ПочтовыйПрофиль.ПортSMTP = 465; // 465
Попытка
ПочтовыйПрофиль.ИспользоватьSSLSMTP = Истина;
Исключение
Сообщить("Не работает служба SSL SMTP! Для корректной работы необходима платформа 1С версии не менее 8.3!");
КонецПопытки;
ПочтовыйПрофиль.ПарольSMTP = "Ro1Cte921hAb8sKf4";
ПочтовыйПрофиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
//КонецЕсли;
// Входящая почта
//Если ФормироватьPOP3Профиль Тогда
ПочтовыйПрофиль.АдресСервераPOP3 = "pop.yandex.ru"; // pop.mail.ru
ПочтовыйПрофиль.Пользователь = "from1C@yandex.ru"; // from1C@mail.ru
ПочтовыйПрофиль.ПортPOP3 = 993; // 995
Попытка
ПочтовыйПрофиль.ИспользоватьSSLPOP3 = Истина;
Исключение
Сообщить("Не работает служба SSL POP3! Для корректной работы необходима платформа 1С версии не менее 8.3!");
КонецПопытки;
ПочтовыйПрофиль.Пароль = "Ro1Cte921hAb8sKf4";
//Если НастройкиСоединения.СпособPOP3Аутентификации = Перечисления.СпособыPOP3Аутентификации.APOP Тогда
// ПочтовыйПрофиль.АутентификацияPOP3 = СпособPOP3Аутентификации.APOP;
//ИначеЕсли НастройкиСоединения.СпособPOP3Аутентификации = Перечисления.СпособыPOP3Аутентификации.CramMD5 Тогда
// ПочтовыйПрофиль.АутентификацияPOP3 = СпособPOP3Аутентификации.CramMD5;
//Иначе
// ПочтовыйПрофиль.АутентификацияPOP3 = СпособPOP3Аутентификации.Обычная;
//КонецЕсли;
//КонецЕсли;
Возврат ПочтовыйПрофиль;
КонецФункции
Справочно: Параметры популярных почтовых протоколов в 1С 8.3:
- Входящая почта протокол IMAP: сервер imap.yandex.ru (SSL; порт 993)
- Входящая почта протокол POP3: сервер pop.yandex.ru (SSL; порт 993)
- Исходящая почта протокол SMTP: сервера smtp.yandex.ru (SSL; порт 465)
- Примечание: почта вида login@yandex.ru: логин до знака @. Для доменной почты - логин это полный адрес почтового ящика.
Mail.ru (https://help.mail.ru/mail/mailer/popsmtp)
- Входящая почта протокол IMAP: сервер imap.mail.ru (SSL; порт 993)
- Входящая почта протокол POP3: сервер pop.mail.ru (SSL; порт 995)
- Исходящая почта протокол SMTP: сервера smtp.mail.ru (SSL; порт 465)
- Примечание: эл.адрес - полное имя почтового ящика, включая логин, @ и домен; имя пользователя - полное имя почтового ящика, включая логин, @ и домен; обычный пароль (без шифрования); сервер исходящей почты требует авторизации.
Gmail.com (https://support.google.com/mail/answer/7126229?hl=ru, https://support.google.com/mail/answer/7104828?hl=ru)
- Входящая почта протокол IMAP: сервер imap.gmail.com (SSL; порт 993)
- Входящая почта протокол POP3: сервер pop.gmail.com (SSL; порт 995)
- Исходящая почта протокол SMTP: сервера smtp.gmail.com (SSL; порт 465, TLS, TLS/STARTTLS: 587)
- Примечание: Время ожидания сервера более 1 минуты (рекомендуется 5 минут)
Отправить письмо по электронной почте в 1С 8.3:
&НаСервере
Процедура ОтправитьПисьмоПоЭлектроннойПочте()
ТекПолучатель="info@1cnik.by";
ТекТема="Заказ доработки 1С 8.3";
ТекТекст="Требуется доработка складской программы для автоматической рассылки электронных документов (ТТН/ТН2) покупателям.";
ЭлПочтаДляОтправки = "from1C@yandex.ru" ; //Константы.ЭлПочтаДляОтправки.Получить()
ПочтовыйПрофиль = СозданиеИнтернетПрофиля();
Сообщить(" ...Пожалуйста подождите... Идет отправка письма на "+ТекПолучатель);
Email = Новый ИнтернетПочта;
Попытка
Email.Подключиться(ПочтовыйПрофиль);
Исключение
ВызватьИсключение "Письмо НЕ отправлено! "+ОписаниеОшибки()+"!";
КонецПопытки;
ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
ПочтовоеСообщение.Отправитель.Адрес = ЭлПочтаДляОтправки; // ЭлПочтаДляОтправки.АдресЭлектроннойПочты - если константа
ПочтовоеСообщение.Отправитель.ОтображаемоеИмя = "из 1С";
ПочтовоеСообщение.ИмяОтправителя = "ООО ТехноСервисПлюс"; // ЭлПочтаДляОтправки.АдресЭлектроннойПочты - если константа
ПочтовоеСообщение.Тема = ТекТема;
//ПочтовоеСообщение.Вложения.Добавить(Новый ДвоичныеДанные(ФайлПДФ),"ТТН.pdf");
Получатели = ПочтовоеСообщение.Получатели;
Получатель = Получатели.Добавить();
Получатель.Адрес = ТекПолучатель;
ИнтернетТекстПочтовогоСообщения = ПочтовоеСообщение.Тексты.Добавить();
ИнтернетТекстПочтовогоСообщения.Текст = ""+ТекТекст + Символы.ПС;
ИнтернетТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст; // Если отправляем только текст
Попытка
Email.Послать(ПочтовоеСообщение);
Сообщить("Отправлено письмо на e-mail:"+СокрЛП(ТекПолучатель));
Исключение
Email.Отключиться();
ВызватьИсключение "Письмо НЕ отправлено! "+ОписаниеОшибки()+"!";
КонецПопытки;
Email.Отключиться(); // Если не отключиться - будет "висеть" в процессах
КонецПроцедуры
Процедура ОтправитьПисьмоПоЭлектроннойПочте()
ТекПолучатель="info@1cnik.by";
ТекТема="Заказ доработки 1С 8.3";
ТекТекст="Требуется доработка складской программы для автоматической рассылки электронных документов (ТТН/ТН2) покупателям.";
ЭлПочтаДляОтправки = "from1C@yandex.ru" ; //Константы.ЭлПочтаДляОтправки.Получить()
ПочтовыйПрофиль = СозданиеИнтернетПрофиля();
Сообщить(" ...Пожалуйста подождите... Идет отправка письма на "+ТекПолучатель);
Email = Новый ИнтернетПочта;
Попытка
Email.Подключиться(ПочтовыйПрофиль);
Исключение
ВызватьИсключение "Письмо НЕ отправлено! "+ОписаниеОшибки()+"!";
КонецПопытки;
ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
ПочтовоеСообщение.Отправитель.Адрес = ЭлПочтаДляОтправки; // ЭлПочтаДляОтправки.АдресЭлектроннойПочты - если константа
ПочтовоеСообщение.Отправитель.ОтображаемоеИмя = "из 1С";
ПочтовоеСообщение.ИмяОтправителя = "ООО ТехноСервисПлюс"; // ЭлПочтаДляОтправки.АдресЭлектроннойПочты - если константа
ПочтовоеСообщение.Тема = ТекТема;
//ПочтовоеСообщение.Вложения.Добавить(Новый ДвоичныеДанные(ФайлПДФ),"ТТН.pdf");
Получатели = ПочтовоеСообщение.Получатели;
Получатель = Получатели.Добавить();
Получатель.Адрес = ТекПолучатель;
ИнтернетТекстПочтовогоСообщения = ПочтовоеСообщение.Тексты.Добавить();
ИнтернетТекстПочтовогоСообщения.Текст = ""+ТекТекст + Символы.ПС;
ИнтернетТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст; // Если отправляем только текст
Попытка
Email.Послать(ПочтовоеСообщение);
Сообщить("Отправлено письмо на e-mail:"+СокрЛП(ТекПолучатель));
Исключение
Email.Отключиться();
ВызватьИсключение "Письмо НЕ отправлено! "+ОписаниеОшибки()+"!";
КонецПопытки;
Email.Отключиться(); // Если не отключиться - будет "висеть" в процессах
КонецПроцедуры
Отправить письмо с вложенной таблицей (html) в 1С 8.3:
Наименование ПО | Ставка НДС, % | Цена |
1С:Зарплата и управление персоналом 8 для Беларуси | 20 | 1050,60 |
ИТС 1С Международный | 20 | 232,80 |
1С:8 Клиентская лицензия на 5 рабочих мест | 20 | 581,40 |
&НаСервере
Процедура ОтправитьПисьмоСВложеннойТаблицей() // html
ТекПолучатель="info@1cnik.by";
ТекТема="Заказ установки 1С 8.3";
ЭлПочтаДляОтправки = "from1C@yandex.ru" ; //Константы.ЭлПочтаДляОтправки.Получить()
ПочтовыйПрофиль = СозданиеИнтернетПрофиля();
Сообщить(" ...Пожалуйста подождите... Идет отправка письма на "+ТекПолучатель);
Email = Новый ИнтернетПочта;
Попытка
Email.Подключиться(ПочтовыйПрофиль);
Исключение
ВызватьИсключение "Письмо НЕ отправлено! "+ОписаниеОшибки()+"!";
КонецПопытки;
ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
ПочтовоеСообщение.Отправитель.Адрес = ЭлПочтаДляОтправки; // ЭлПочтаДляОтправки.АдресЭлектроннойПочты - если константа
ПочтовоеСообщение.Отправитель.ОтображаемоеИмя = "из 1С";
ПочтовоеСообщение.ИмяОтправителя = "ООО ТехноСервисПлюс"; // ЭлПочтаДляОтправки.АдресЭлектроннойПочты - если константа
ПочтовоеСообщение.Тема = ТекТема;
//ПочтовоеСообщение.Вложения.Добавить(Новый ДвоичныеДанные(ФайлПДФ),"ТТН.pdf");
Получатели = ПочтовоеСообщение.Получатели;
Получатель = Получатели.Добавить();
Получатель.Адрес = ТекПолучатель;
ИнтернетТекстПочтовогоСообщения = ПочтовоеСообщение.Тексты.Добавить();
ИнтернетТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.HTML; // Если отправляем таблицу
ИнтернетТекстПочтовогоСообщения.Текст =
Процедура ОтправитьПисьмоСВложеннойТаблицей() // html
ТекПолучатель="info@1cnik.by";
ТекТема="Заказ установки 1С 8.3";
ЭлПочтаДляОтправки = "from1C@yandex.ru" ; //Константы.ЭлПочтаДляОтправки.Получить()
ПочтовыйПрофиль = СозданиеИнтернетПрофиля();
Сообщить(" ...Пожалуйста подождите... Идет отправка письма на "+ТекПолучатель);
Email = Новый ИнтернетПочта;
Попытка
Email.Подключиться(ПочтовыйПрофиль);
Исключение
ВызватьИсключение "Письмо НЕ отправлено! "+ОписаниеОшибки()+"!";
КонецПопытки;
ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
ПочтовоеСообщение.Отправитель.Адрес = ЭлПочтаДляОтправки; // ЭлПочтаДляОтправки.АдресЭлектроннойПочты - если константа
ПочтовоеСообщение.Отправитель.ОтображаемоеИмя = "из 1С";
ПочтовоеСообщение.ИмяОтправителя = "ООО ТехноСервисПлюс"; // ЭлПочтаДляОтправки.АдресЭлектроннойПочты - если константа
ПочтовоеСообщение.Тема = ТекТема;
//ПочтовоеСообщение.Вложения.Добавить(Новый ДвоичныеДанные(ФайлПДФ),"ТТН.pdf");
Получатели = ПочтовоеСообщение.Получатели;
Получатель = Получатели.Добавить();
Получатель.Адрес = ТекПолучатель;
ИнтернетТекстПочтовогоСообщения = ПочтовоеСообщение.Тексты.Добавить();
ИнтернетТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.HTML; // Если отправляем таблицу
ИнтернетТекстПочтовогоСообщения.Текст =
"<table border=""1"">
|<tbody>
|<tr>
|<td><strong>Наименование ПО</strong></td>
|<td><strong>Ставка НДС, %</strong></td>
|<td><strong>Цена</strong></td>
|</tr>
|<tr>
|<td>1С:Зарплата и управление персоналом 8 для Беларуси</td>
|<td>20</td>
|<td>1050,60</td>
|</tr>
|<tr>
|<td>ИТС 1С Международный</td>
|<td>20</td>
|<td>232,80</td>
|</tr>
|<tr>
|<td>1С:8 Клиентская лицензия на 5 рабочих мест</td>
|<td>20</td>
|<td>581,40</td>
|</tr>
|</tbody>
|</table>";
Попытка
Email.Послать(ПочтовоеСообщение);
Сообщить("Отправлено письмо на e-mail:"+СокрЛП(ТекПолучатель));
Исключение
Email.Отключиться();
ВызватьИсключение "Письмо НЕ отправлено! "+ОписаниеОшибки()+"!";
КонецПопытки;
Email.Отключиться(); // Если не отключиться - будет "висеть" в процессах
КонецПроцедуры
Email.Послать(ПочтовоеСообщение);
Сообщить("Отправлено письмо на e-mail:"+СокрЛП(ТекПолучатель));
Исключение
Email.Отключиться();
ВызватьИсключение "Письмо НЕ отправлено! "+ОписаниеОшибки()+"!";
КонецПопытки;
Email.Отключиться(); // Если не отключиться - будет "висеть" в процессах
КонецПроцедуры
Получить письма с почтового сервера в 1С 8.3:
&НаСервере
Процедура ПолучитьПисьмаСПочтовогоСервера()
ПочтовыйПрофиль = СозданиеИнтернетПрофиля();
Попытка
Сообщить("Подключение к почтовому серверу..."+ПочтовыйПрофиль.АдресСервераPOP3);
Email = Новый ИнтернетПочта;
Email.Подключиться(ПочтовыйПрофиль);
МассивСообщений = Новый Массив;
Сообщить("Чтение писем...");
МассивСообщений = Email.Выбрать(Ложь); // Ложь - письма с сервера не удаляются
Исключение
Сообщить("Ошибка подключения к серверу: "+ОписаниеОшибки());
КонецПопытки;
Если МассивСообщений.Количество() = 0 Тогда
Сообщить("Почтовый ящик пуст!");
КонецЕсли;
КонецПроцедуры
Процедура ПолучитьПисьмаСПочтовогоСервера()
ПочтовыйПрофиль = СозданиеИнтернетПрофиля();
Попытка
Сообщить("Подключение к почтовому серверу..."+ПочтовыйПрофиль.АдресСервераPOP3);
Email = Новый ИнтернетПочта;
Email.Подключиться(ПочтовыйПрофиль);
МассивСообщений = Новый Массив;
Сообщить("Чтение писем...");
МассивСообщений = Email.Выбрать(Ложь); // Ложь - письма с сервера не удаляются
Исключение
Сообщить("Ошибка подключения к серверу: "+ОписаниеОшибки());
КонецПопытки;
Если МассивСообщений.Количество() = 0 Тогда
Сообщить("Почтовый ящик пуст!");
КонецЕсли;
КонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом "Электронная почта (E-mail)" 1С:
📰 Актуальные новости с тегом #E-mail:
- В версии 8.3.28 добавлена поддержка работы с кириллическими доменами в электронной почте и улучшены диагностики проблем при работе с почтовым сообщением.
- В версии 8.3.27 добавлена возможность аутентификации с помощью электронной почты.
1
комментарий
Талин
30 мар 2021
Очень подробно и понятно! Спасибо.
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник