Отсылка письма с прикрепленными файлами без использоания Outlook
Подскажите как в Террасофт можно выполнить такое действие как отсылка e-mail письма с прикрепленным к нему файлом в обход Outlook?
Нужно высылать уведомления в виде простого текста и прикреплять файл.
Нравится
Terrasoft 3.x не имеет собственного почтового клиента, поэтому ответ либо никак, либо использовать интеграцию/взаимодействие с другим почтовым клиентом (здесь могла быть ссылка на материал по встроенному почтовому клиенту:wink:)
Спасибо Александр за поддержку.
А теперь ссылка: http://community.terrasoft.ua/blogs/5406
Если у вас используется MS SQL Server то можно попробовать воспользоваться средствами сервера.
"Евгений Либин" написал:Если у вас используется MS SQL Server то можно попробовать воспользоваться средствами сервера.
Вот кстати об этом я забыл:smile: тоже вариант
А как можно отправить письмо именно с файлом средствами MSSSQL ?
В обход 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. Если кому-то нужно будет - изменит немного функцию.