Как сохранить копии отправленных писем на сервере при использовании 1С 7.7

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При автоматизации рассылок из 1С 7.7 программисты часто сталкиваются с тем, что письма, отправленные через внешние компоненты или библиотеку CDO, не отображаются в папке "Отправленные" в почтовом интерфейсе (например, на Яндексе или Mail.ru). Это происходит потому, что протокол SMTP, используемый для отправки, отвечает только за передачу сообщения, но не за его сохранение в структуре папок сервера. В этой статье мы подробно разберем, как решить эту задачу, используя проверенные методы и современные требования безопасности почтовых сервисов.

Метод скрытой копии (BCC) как универсальное решение

Рассмотрим самый простой и эффективный способ: использование скрытой копии. Суть метода заключается в том, что при отправке письма мы добавляем наш собственный адрес в поле Bcc (Blind Carbon Copy). В результате письмо приходит не только основному получателю, но и нам самим. При этом основной получатель не видит нашего адреса в списке копий.

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

Проанализируем пример кода для работы с объектом CDO.Message:


// Создаем объекты сообщения и конфигурации
iMsg = СоздатьОбъект("CDO.Message");
iConf = СоздатьОбъект("CDO.Configuration");

// Настройка параметров сервера
Flds = iConf.Fields;
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtp.yandex.ru";
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = 465;
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = 1;
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1;
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "your-login@yandex.ru";
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = "ваш_пароль_приложения";
Flds.Update();

iMsg.Configuration = iConf;
iMsg.From = "your-login@yandex.ru";
iMsg.To = "client@domain.com";

// Вот ключевая строка для сохранения копии
iMsg.BCC = "your-login@yandex.ru"; 

iMsg.Subject = "Тестовое письмо из 1С 7.7";
iMsg.TextBody = "Текст сообщения";
iMsg.Send();

В данном примере мы используем свойство BCC объекта iMsg. Обратите внимание, что для современных почтовых сервисов крайне важно использовать правильный порт и настройки шифрования. Выясним подробнее, какие именно настройки сейчас актуальны.

Современные требования безопасности: Пароли приложений и SSL

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

Разберем по шагам, что нужно сделать:

  1. Зайдите в настройки безопасности вашего почтового ящика.
  2. Найдите раздел "Пароли приложений".
  3. Создайте новый пароль для типа "Почта". Полученный код (обычно 16 символов) используйте в коде 1С вместо основного пароля.
  4. Обязательно установите свойство smtpusessl в значение 1 (True) и используйте порт 465 для Яндекса или 465/587 для других сервисов.

Использование компоненты DialMail

Если стандартный CDO работает нестабильно или возникают проблемы с кодировками (в 1С 7.7 это частая проблема с кириллицей), рассмотрим использование внешней компоненты DialMail. Она более гибко работает с протоколами и позволяет более детально управлять процессом отправки.

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

Синхронизация через IMAP — альтернативный путь

Если вариант со скрытой копией вам не подходит, проанализируем возможность использования протокола IMAP. В отличие от SMTP, IMAP позволяет напрямую работать с папками на сервере. Однако стандартными средствами 1С 7.7 и CDO реализовать это сложно.

Для полноценной работы с IMAP в среде 7.7 обычно прибегают к следующим решениям:

Использование PowerShell для обхода ограничений старых систем

Выясним причину, по которой CDO может не работать на новых серверах (Windows Server 2019/2022). Проблема часто кроется в устаревших протоколах шифрования TLS, которые использует CDO. Современные почтовые серверы требуют TLS 1.2 или выше.

В таком случае мы рекомендуем использовать вызов скрипта PowerShell из 1С. Это позволяет использовать современные библиотеки .NET Framework, которые встроены в операционную систему. Рассмотрим пример вызова через КомандаСистемы():


ТекстСкрипта = "
$SmtpClient = New-Object Net.Mail.SmtpClient('smtp.yandex.ru', 587);
$SmtpClient.EnableSsl = $true;
$SmtpClient.Credentials = New-Object System.Net.NetworkCredential('login', 'password');
$Msg = New-Object System.Net.Mail.MailMessage;
$Msg.From = 'login@yandex.ru';
$Msg.To.Add('client@mail.com');
$Msg.Bcc.Add('login@yandex.ru');
$Msg.Subject = 'Тема';
$Msg.Body = 'Текст письма';
$SmtpClient.Send($Msg);";
// Далее сохраняем ТекстСкрипта в файл .ps1 и запускаем его через КомандаСистемы()

Работа с вложениями

Не забудем про важный нюанс: добавление файлов. При использовании CDO мы применяем метод AddAttachment. Посмотрим на примере:

iMsg.AddAttachment("C:\Reports\PriceList.xls");

Важно: Убедитесь, что путь к файлу полный и у пользователя, под которым работает 1С, есть права на чтение этого файла. Если файл заблокирован другим процессом, 1С выдаст ошибку при попытке отправки.

Ограничения и лимиты

Разберем ситуацию с массовыми рассылками. Почтовые серверы (Яндекс, Gmail) имеют жесткие лимиты на количество писем в сутки (например, около 150-500 сообщений для бесплатных аккаунтов). Если ваша 1С отправляет сотни писем клиентам ежедневно, вы быстро упретесь в лимит, и сервер начнет выдавать ошибку Transport failed to connect to the server. В этом случае стоит задуматься об использовании специализированных сервисов рассылок, имеющих свой API.

Подводя итог, можно сказать, что для 1С 7.7 связка CDO + BCC + Пароль приложения является самым быстрым и надежным способом сохранения истории переписки на сервере без привлечения сложного стороннего софта.

← На главную