Подскажите как в Террасофт можно выполнить такое действие как отсылка e-mail письма с прикрепленным к нему файлом в обход Outlook? Нужно высылать уведомления в виде простого текста и прикреплять файл.
Terrasoft 3.x не имеет собственного почтового клиента, поэтому ответ либо никак, либо использовать интеграцию/взаимодействие с другим почтовым клиентом (здесь могла быть ссылка на материал по встроенному почтовому клиенту:wink:)
В обход Outlook не пошел.
Решил использовать отправку письма с вложением с помощью библиотеки CDO (библиотека входит в поставку MS Outlook и устанавливается из дистрибутива MS Outlook - компонент "Collaboration Data Objects" или "Объекты для совместной работы").
Вот функция:
// SMTPServer - адрес SMTP сервера, через который будет происходить отправка писем// SendTo - список e-mail адресов через запятую кому отсылать// SendFrom - e-mail от кого отсылается// Subject - тема письма// Body - тело письма в текстовом формате// Attachments - массив прикрепляемых файлов, содержащий пути к этим файлам на компьютере пользователя
function SendEmailUsingCDO(SMTPServer, SendTo, SendCC, SendFrom, Subject, Body, Attachments, UserName, UserPassword, UseSSL){
var Result =true;try{
var cdoMessage =new ActiveXObject("CDO.Message");
var cdoConfig =new ActiveXObject("CDO.Configuration");
var cdoFields = cdoConfig.Fields;
cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")=2;
cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")= SMTPServer;
cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout")=10;
var cdoAnonymous =0;// Do not authenticate
var cdoBasic =1;// basic (clear-text) authentication
var cdoNTLM =2;// NTLM// Если указан логин и пароль, то нужна авторизация на SMTP-сервере if(!IsEmptyValue(UserName)&&!IsUndefined(UserName)&&!IsEmptyValue(UserPassword)&&!IsUndefined(UserName)){
UseSSL =(UseSSL? UseSSL :false);// Type of authentication, NONE, Basic (Base64 encoded), NTLM
cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")= cdoBasic;// Your UserID on the SMTP server
cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername")= UserName;// Your password on the SMTP server
cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword")= UserPassword;// Server port (typically 25)
cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=25;// Use SSL for the connection (False or True)
cdoFields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl")= UseSSL;}
cdoFields.Update();
cdoMessage.Configuration= cdoConfig;
var cdoBodyPart = cdoMessage.BodyPart;
cdoBodyPart.ContentTransferEncoding="8bit";
cdoMessage.To= SendTo;
cdoMessage.From= SendFrom;
cdoMessage.Subject= Subject;
cdoMessage.TextBody= Body;if(Assigned(Attachments)){for(var i =0; i < Attachments.length; i++){
cdoMessage.AddAttachment(Attachments[i]);}}
cdoMessage.send();}catch(e){
var Message = FormatStr("Возникла ошибка при формировании и отсылке письма через Outlook:\r%1"+"\rВозможно, на компьютере не установлен MS Outlook. Обратитесь за помощью к администратору.",
e.message);
ShowWarningDialog(Message);
Result =false;} finally {return Result;}}
Пример вызова функции:
function Main(){
var FilePath ="C:\DOCUME~1\Admin\LOCALS~1\Temp\TSTmpПриложение к приказу3.doc";
var Attachments =new Array(FilePath);
SendEmailUsingCDO('email.com.ua', 'test@gmail.com,test@gmail.com',
'test@test.ua', 'Test CDO Message send', 'Hello. I"m here', Attachments);}
Насколько я понимаю, использование CDO.Message не требует установки Advanced Outlook Security на компьютер пользователя, что для меня было важным.
Да, это вариант, только в скрипт SendEmailUsingCDO надо бы добавить такие параметры SMTP сервера:
пользователь
пароь
порт
поддержка SSL
И надо помнить что всё хорошо пока используются латинские буквы :wink:. Когда в игру вступает кириллица то тогда начинает веселье.
В принципе можно попытаться обойтись юникодом.
Вопрос в другом, если на компьютере все равно должен быть оулук, то зачем всё это делать? Используя стандартные скрипты Terrasoft можно нормально отправлять письма через оутлук.
Если Вы не хотите использовать оутлук - то смотрите третий пост :wink:
"Кошкаров Андрей" написал:И надо помнить что всё хорошо пока используются латинские буквы :wink:. Когда в игру вступает кириллица то тогда начинает веселье.
В принципе можно попытаться обойтись юникодом.
Не совсем понял где именно могут возникнуть проблемы с буквами.
"Евгений Либин" написал:Вопрос в другом, если на компьютере все равно должен быть оулук, то зачем всё это делать? Используя стандартные скрипты Terrasoft можно нормально отправлять письма через оутлук.
А хотя бы потому, чтобы не ставить на всех машинах Advanced Outlook Security, который приходиться ставить под каждым пользователем.
Попробуйте отправить письмо адресату с русскими буквами, например кому :"Евгений Либин" , от : Кошкаров Андрей <.....>, тема:Проверка почты, тело: 'Тело письма'.
Если письмо будет нормально читаться - тогда всё ок.
"Евгений Либин" написал:Да, это вариант, только в скрипт SendEmailUsingCDO надо бы добавить такие параметры SMTP сервера
Добавил передачу параметров SMTP-сервера для авторизации под пользователем:
- Имя пользователя
- Пароль
- Поддержка SSL
Порт поставил по умолчанию 25. Если кому-то нужно будет - изменит немного функцию.