Все, кому доводилось отправлять почту из DIRECTUM с использованием стандартных функций и блоков типовых маршрутов, скорее всего обратили внимание, что все они работают с почтовой фабрикой IMailFactory "SBUM.MailFactory". К сожалению, данный объект не всегда подходит для реализации задач отправки почты при определенных условиях (не умеет отправлять почту с использованием SSL, кодировку можно менять только у письма в формате HTML и т.п.). По этому поводу даже уже появилась соответствующая идея: Добавление возможности работы с SSL/TLS и 64-битным Outlook в библиотеки SBUM.
Ниже предлагается альтернативный вариант отправки почты из DIRECTUM, без использования "SBUM.MailFactory", с помощью объектной модели CDO (Collaboration Data Objects):
SmtpServer = "msg-01"
SmtpPort = 25
SmtpUser = "directum"
SmtpPass = "password"
Attachment = "c:\temp\test.doc"
objMessage = CreateObject("CDO.Message")
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SmtpServer
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SmtpPort
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objMessage.BodyPart.CharSet = "windows-1251"
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 // 0=None; 1=Basic; 2=NTLM
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = SmtpUser
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = SmtpPass
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
objMessage.Configuration.Fields.Update
objMessage.Subject = "Тема письма"
objMessage.From = Format('"%s" <%s>'; ArrayOf("User"; User@company.ru))
objMessage.To = "User1@company.ru"
objMessage.CC = "User2@company.ru"
objMessage.BCC = "User3@company.ru"
objMessage.TextBody = "Текст письма"
objMessage.AddAttachment(Attachment)
objMessage.Send
objMessage = nil
Подробную справку по объектной модели CDO можно найти в MSDN.
К сожалению, эта библиотека работает только с протоколом SMTP и каталогом Pickup на диске. Она не умеет работать ни с протоколом POP3, ни с IMAP4, ни с MAPI, а, значит, подключиться к почтовому серверу и проверить на нем появление новых сообщений мы не сможем. Придется использовать другую библиотеку из набора CDO — Microsoft CDO 1.21 Library. Она умеет работать только с MAPI, зато она умеет выполнять различные операции в почтовом ящике на Exchange Server без всяких предупреждающих сообщений. Справку по этой библиотеке также можно найти в MSDN.
В качестве еще одной альтернативы "SBUM.MailFactory", можно воспользоваться утилитами командной строки - например, sendmail и mapisend от Microsoft или bmail.
Ниже приложен набор функций и блоков типовых маршрутов для отправки почты из DIRECTUM с использованием объектной модели CDO. Разработка велась в DIRECTUM 4.7. Пример использования одной из этих функций:
SendingResult = RITSMTPMailSendDialog("user1"; "user1@company.ru"; "user2@company.ru, user3@company.ru";
"medved@mail.ru"; ; "Тема письма"; "Текст письма"; "c:\temp\test.doc"; ; "koi8-r"; "Да"; "Basic"; "Нет")
// Определить результаты отправки письма
if SendingResult == ''
ShowMessage('Письмо успешно отправлено')
else
ShowMessage(SendingResult)
endif
Пример с использованием блоков типового маршрута приводить не буду, там и так все понятно. Добавлю только, что один из двух блоков отправляет письмо с вложениями из типового маршрута (свойства блока задаются по аналогии со стандартными блоками отправки письма), а второй блок добавляет к вложениям ярлык IS-Bulder на задачу, из которой письмо отправлено.
P.S. Я не знаю почему так "перекосило" пример кода, но если его вставлять прямо в текст, картина получается еще хуже.
Дмитрий, во-первых, спасибо за решение, используем его во всех наших разработках.
А не подскажите - знаете ли альтернативные способы получения почты из Directum, помимо DCTS?
Проблема в том, что DCTS не получает информацию о "квитках", в формате iCalendar, которые нам нужно парсить.
Алексей, может через ОМ Outlook?
Михаил, нет Аутлука... В качестве почтовой системы используется IBM Lotus Notes...SBUM.MailFactory использовать не удается.. Или вы советуете установить и настроить Outlook в качестве почтового клиента и через его объектную модель работать?
Или еще в самом материале я указал:
Полную справку по объектной модели можно прочитать в MSDN.
В качестве почтовой системы нужно использовать SQL Database Mail и не ставить MS Office на ПК
Всем привет, тема еще актуальна?
Хочу использовать SMTP Send pulse. Подскажите пожалуйста, можно как нибудь посмотреть логирование функции подключения objMessage.Configuration.Fields.Update. Данные ввел с сайта который предоставил мне сервис, проблема в том, что возвращает пустое значение при коннекте, обратился в тех поддержку сервиса, просят предоставить логи ( по коду ошибок нету, хотелось бы посмотреть, что происходит, трассировщиком не поймал, не могу провалиться в функцию Update)
Отличное решение. Благодарю за подробное описание.
Авторизуйтесь, чтобы написать комментарий