Подскажите как в Террасофт можно выполнить такое действие как отсылка e-mail письма с прикрепленным к нему файлом в обход Outlook?
Нужно высылать уведомления в виде простого текста и прикреплять файл.

Нравится

11 комментариев

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. Если кому-то нужно будет - изменит немного функцию.

Показать все комментарии