Пытаюсь обратиться к сервису http://.../0/rest/ITdsBSC/CaseBSC методом POST, предварительно получил в GET cookies и явно передавал params, в т.ч. utf-8, но возвращается в неизвестной кодировке 403 ошибка, как через postman правильно посылать POST запросы? Делал по гайду с академии, какие могут быть идеи в чем проблема? P.S. url очистил т.к. NDA

Изображение удалено.

Нравится

1 комментарий
Лучший ответ

Если сервис не анонимный, то не прошли аутентификацию. Надо сначала вызвать авторизоваться через метод http://.../ServiceModel/AuthService.svc/Login получить куки и в заголовке своего запроса передать значение BPMCSRF

Если сервис не анонимный, то не прошли аутентификацию. Надо сначала вызвать авторизоваться через метод http://.../ServiceModel/AuthService.svc/Login получить куки и в заголовке своего запроса передать значение BPMCSRF

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

Подскажите как в Террасофт можно выполнить такое действие как отсылка 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. Если кому-то нужно будет - изменит немного функцию.

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

Здравствуйте!

 

Если Вам необходимо реализовать возможность отправки E-mail контрагенту через действие "Отправить E-mail", то Вы можете воспользоваться следующим алгоритмом (пример реализации для версии Terrasoft CRM 3.3):

 

1. В скрипте scr_MailUtils реализовать функцию получения e-mail адреса текущего контрагента:

 

 

function GetCurrentAccountEmailAddress(AccountDataset) {

 

         var AccountEMailAddress = '';

 

         var Email = GetEmailCommunicationTypeID();

 

         for (var i = 1; i = 4; i++) {

 

                   var CommunicationTypeName = FormatStr('Communication%1TypeID', i);

 

                   var CommunicationType = GetFieldValueFromDisabledField(AccountDataset,

 

                            CommunicationTypeName);

 

                   if (CommunicationType == Email) {

 

                            var CommunicationName = FormatStr('Communication%1', i)

 

                            AccountEMailAddress = GetFieldValueFromDisabledField(AccountDataset,

 

                                      CommunicationName);

 

                            continue;

 

                   }

 

         }

 

         var AccountName = GetFieldValueFromDisabledField(AccountDataset, 'Name');

 

         if (IsEmptyStr(AccountEMailAddress)) {

 

                   Dataset = GetAccountCommunicationDataset(Email);

 

                   ApplyDatasetFilter(Dataset, 'AccountID',

 

                            AccountDataset.Values('ID'), true);

 

                   Dataset.Open();

 

                   try {

 

                            AccountEMailAddress = Dataset.ValAsStr('Number');

 

                   } finally {

 

                            Dataset.Close();

 

                   }

 

         }

 

         if (!IsEmptyStr(AccountEMailAddress)) {

 

                   if (!IsEmptyStr(AccountName)) {

 

                            AccountEMailAddress = AccountName + '' + AccountEMailAddress + '>';

 

                   }

 

         } else {

 

                   AccountEMailAddress = '';

 

         }

 

         return AccountEMailAddress;

 

}

 

 

 

function GetAccountCommunicationDataset(EmailTypeID) {

 

         if (!Assigned(MailUtilsScript.AccountCommunicationDataset)) {

 

                   var Dataset = Services.GetNewItemByUSI('ds_AccountCommunication');

 

                   MailUtilsScript.AccountCommunicationDataset = Dataset;

 

                   ApplyDatasetFilter(Dataset, 'CommunicationTypeID', EmailTypeID, true);

 

         }

 

         return MailUtilsScript.AccountCommunicationDataset;

 

}

 

2. Далее в скрипте scr_AccountsWorkspace реализовать функцию отправки сообщения :

 

 

 

function SendMailWithoutTemplate() {

 

    var Dataset = Services.GetNewItemByUSI('ds_Account');

 

         EnableDatasetFilters(Dataset, false);

 

         Dataset.FetchRecordsCount = -1;

 

         var IDs = GetArrayByCollection(BaseWorkspace.Grid.SelectedIDs);

 

    var KeyDataFieldName = Dataset.KeyDataField.Name;

 

         var AccountEMailAddress = '';

 

         for (var i = 0; i IDs.length; i++){

 

                   Dataset.Close();

 

                   ApplyDatasetFilter(Dataset, 'ID', IDs[i], true);

 

                   Dataset.Open();

 

                   var SingleAccountEMailAddress = GetCurrentAccountEmailAddress(Dataset);

 

                   AccountEMailAddress += IsEmptyValue(SingleAccountEMailAddress) ? '' :

 

                       (IsEmptyValue(AccountEMailAddress) ? '' : ';') +

 

                            SingleAccountEMailAddress;

 

         }

 

         CreateEmptyMessage(AccountEMailAddress);

 

         Dataset.Close();

 

}

 

 

3. В окне wnd_AccountsWorkspace добавить на закладке невизуальных компонентов одно действие, например, amiSendEmail и на событие OnExecute прописать вызов функции:

 

SendMailWithoutTemplate();

 

 

В результате с помощью действия будет создано письмо с e-mail адресом контрагента, действие в гриде продублируется автоматически.

 

Полная инструкция со скриншотами прикреплена.

Приятной работы! 

Нравится

Поделиться

2 комментария

Значительно ли будет отличатся реализация данного функционала в Terrasoft CRM 3.2?

Олег, данные функции работают и в Terrasoft CRM 3.2, т.е. реализация отправки e-mail в данной версии аналогична.

P.S. Не забудьте присоединять скрипт scr_MailUtils в scr_AccountsWorkspace.

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