Все, кому доводилось отправлять почту из 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 на задачу, из которой письмо отправлено.
SMTPMail.zip (23,68 Кб)
P.S. Я не знаю почему так "перекосило" пример кода, но если его вставлять прямо в текст, картина получается еще хуже.