ИнтернетПочтовоеСообщение.УстановитьИсходныеДанные

Методы · SetSourceData

Устанавливает исходные данные сообщения и инициализирует на основе них объект типа ИнтернетПочтовоеСообщение. В случае ошибки разбора указанных данных генерируетcя исключение.

Синтаксис

УстановитьИсходныеДанные(<ИсходныеДанные>)
Полное описание, параметры и ограничения

ИнтернетПочтовоеСообщение.УстановитьИсходныеДанные (InternetMailMessage.SetSourceData)

ИнтернетПочтовоеСообщение (InternetMailMessage)

УстановитьИсходныеДанные (SetSourceData)

Доступен, начиная с версии 8.3.5.

Синтаксис:
УстановитьИсходныеДанные(<ИсходныеДанные>)
Параметры:

<ИсходныеДанные> (обязательный)
Тип: ДвоичныеДанные.
Исходные данные почтового сообщения.
Описание:

Устанавливает исходные данные сообщения и инициализирует на основе них объект типа ИнтернетПочтовоеСообщение. В случае ошибки разбора указанных данных генерируетcя исключение.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.3.5.

Методическая информация

Практические примеры

Увидеть, почему MIME-байты не являются полной копией объекта

ПолучитьИсходныеДанные формирует представление для передачи по почте. По локальной справке слепые копии в это представление не входят.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. В учебной базе выполните код на сервере. Письмо создаётся и разбирается в памяти; профиль почты, пароль, SMTP/IMAP и вызов Послать не нужны.

  2. Все адреса заданы на учебном домене example.invalid. Не заменяйте их реальными адресами и не добавляйте отправку при первой проверке.

  3. Письмо о двух учебных товарах не содержит персональных данных, реальных заказов и внешних HTML-ресурсов. Его текст не является счётом или подтверждением доставки.

Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Кодировка = "UTF-8";
Письмо.Отправитель = "guide@example.invalid";
Письмо.ИмяОтправителя = "Учебный магазин";
Письмо.Получатели.Добавить("student@example.invalid");
Письмо.Тема = "Учебные товары";
Письмо.Тексты.Добавить("Книга: 3; Ручка: 1", ТипТекстаПочтовогоСообщения.ПростойТекст);
Письмо.СлепыеКопии.Добавить("archive@example.invalid");
Сообщить(Письмо.СлепыеКопии.Количество() = 1);
БайтыMIME = Письмо.ПолучитьИсходныеДанные();
Копия = Новый ИнтернетПочтовоеСообщение;
Копия.УстановитьИсходныеДанные(БайтыMIME);
Если Копия.СтатусРазбора <> СтатусРазбораИнтернетПочтовогоСообщения.ОшибокНеОбнаружено Тогда
    ВызватьИсключение "Собственная MIME-копия разобрана с ошибками";
КонецЕсли;
Сообщить(БайтыMIME.Размер() > 0);
Сообщить(Копия.Тема = "Учебные товары");
Сообщить(Копия.СлепыеКопии.Количество() = 0);
Сообщить(Письмо.СлепыеКопии.Количество() = 1);

Разбор по шагам

  1. У исходного объекта есть одна собственная слепая копия.

  2. Получаем MIME-байты и разбираем их в новом объекте; проверки статуса обязательны.

  3. Основная тема восстановлена, но слепой адрес в копии отсутствует. Исходный объект всё ещё содержит его.

Как проверить результат

  1. Пять сообщений Истина: источник с одной BCC, MIME непустой, тема сохранена, копия без BCC, источник не изменён.

  2. Ни отправки, ни раскрытия слепого адреса обычным адресатам здесь нет.

Ожидаемый результат

На конкретном различии показано, что MIME-roundtrip не гарантирует эквивалентность объектов.

На что обратить внимание

  1. Объект письма и успешный разбор MIME не доказывают отправку, доставку, подлинность отправителя или прочтение.

  2. Не используйте MIME как единственный архив внутренней маршрутизации, статусов сервера и всех свойств объекта.

  3. Прочие особенности MIME-разбора могут тоже изменить представление; это не универсальный сериализатор 1С.

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

Разобрать собственное исходное MIME-письмо

Между заголовками и телом одна пустая строка, переносы CRLF, тело ASCII. УстановитьИсходныеДанные принимает байты, не строку и не путь к EML.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. В учебной базе выполните код на сервере. Письмо создаётся и разбирается в памяти; профиль почты, пароль, SMTP/IMAP и вызов Послать не нужны.

  2. Все адреса заданы на учебном домене example.invalid. Не заменяйте их реальными адресами и не добавляйте отправку при первой проверке.

  3. Письмо о двух учебных товарах не содержит персональных данных, реальных заказов и внешних HTML-ресурсов. Его текст не является счётом или подтверждением доставки.

СтрокиПисьма = Новый Массив;
СтрокиПисьма.Добавить("From: Guide <guide@example.invalid>");
СтрокиПисьма.Добавить("To: Student <student@example.invalid>");
СтрокиПисьма.Добавить("Subject: Guide fixture");
СтрокиПисьма.Добавить("Date: Sat, 03 Oct 2026 12:00:00 +0300");
СтрокиПисьма.Добавить("Message-ID: <guide-001@example.invalid>");
СтрокиПисьма.Добавить("Organization: Training");
СтрокиПисьма.Добавить("Keywords: learning, fixture");
СтрокиПисьма.Добавить("X-Guide-Code: A-01");
СтрокиПисьма.Добавить("MIME-Version: 1.0");
СтрокиПисьма.Добавить("Content-Type: text/plain; charset=us-ascii");
СтрокиПисьма.Добавить("Content-Transfer-Encoding: 7bit");
СтрокиПисьма.Добавить("");
СтрокиПисьма.Добавить("Book: 3; Pen: 1");
СтрокиПисьма.Добавить("");
ИсходныйТекст = СтрСоединить(СтрокиПисьма, Символы.ВК + Символы.ПС);
ИсходныеДанные = ПолучитьДвоичныеДанныеИзСтроки(ИсходныйТекст, КодировкаТекста.UTF8, Ложь);
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.УстановитьИсходныеДанные(ИсходныеДанные);
Если Письмо.СтатусРазбора <> СтатусРазбораИнтернетПочтовогоСообщения.ОшибокНеОбнаружено Тогда
    ВызватьИсключение "Собственное учебное письмо разобрано с ошибками";
КонецЕсли;
Сообщить(Письмо.Тема = "Guide fixture");
Сообщить(Письмо.Тексты.Количество() = 1);
Письмо.ОбработатьТексты();
ТекстоваяЧасть = Письмо.Тексты.Получить(0);
Сообщить(СтрНайти(ТекстоваяЧасть.Текст, "Book: 3; Pen: 1") > 0);
Сообщить(ТекстоваяЧасть.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст);
СырыеБайтыТекста = ТекстоваяЧасть.Данные;
Сообщить(СтрНайти(ПолучитьСтрокуИзДвоичныхДанных(СырыеБайтыТекста, "US-ASCII"), "Book: 3; Pen: 1") > 0);
ИсходныйТекстОбъекта = Письмо.ПолучитьИсходныйТекст(КодировкаТекста.UTF8);
Сообщить(СтрНайти(ИсходныйТекстОбъекта, "X-Guide-Code: A-01") > 0);

Разбор по шагам

  1. Соединяем явно приведённые строки CRLF, включая пустую границу заголовков и тела.

  2. Конвертируем строку в байты без BOM, разбираем и проверяем СтатусРазбора до обработки текста.

  3. ОбработатьТексты выполняет обработку частей; Данные остаются двоичными, не присваиваем readonly-свойство.

  4. ПолучитьИсходныйТекст даёт MIME-источник, а не только красивый текст для пользователя.

Как проверить результат

  1. Шесть сообщений Истина; тело содержит Book: 3; Pen: 1.

  2. Статус собственного корректного источника ОшибокНеОбнаружено; при ошибке предусмотрено исключение до чтения части.

Ожидаемый результат

Разобраны MIME-заголовки, текстовая часть и исходные байты собственного письма.

На что обратить внимание

  1. Объект письма и успешный разбор MIME не доказывают отправку, доставку, подлинность отправителя или прочтение.

  2. На реальном повреждённом источнике возможны исключение либо статус частичного разбора: нельзя игнорировать оба пути.

  3. Собственный ASCII-пример не доказывает корректность всех кодировок, вложений и вложенных multipart.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.