Добрый вечер,
при создании новой рассылки возникла такая проблема:
я создаю шаблон сообщения , из файла msg или oft. В этом шаблоне - название письма на английском и картинка в самом тексте письма.
При этом по идее в шаблоне должны заполнится автоматически поля, которые там есть. Но этого не происходит.
Я все равно отправляю тестовое сообщение самой себе.
Отправка происходит, и получение тоже. Но отправленное сообщение - в правильной кодировке, а полученное с вопросиками. Как победить проблему?

Нравится

1 комментарий

вопрос снимается, видимо дело было не в рассылке, а в каких-то моих настройках почты, потому что своей коллеге я отправила так, и все пришло в нормальном виде!

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

В Terrasoft CRM 3.0 рассылку можно делать только по клиентам. А как быть если все основные контакты записаны в контрагентах, а личных контактов с предприятий нет?

Нравится

1 комментарий

Добрый день!

По Вашему обращению был создан инцидент - 0122088, по которому будет предоставлено решение.

С уважением,
Белецкий Арсений
Группа компаний Terrasoft

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

Всем привет!

Сегодня хочу поделить настройки Terrasoft для использования нескольких учетных записей в Outlook.
Для чего это нужно?

Например, Вы работаете с личной почтой, но рассылку от компании Вам необходимо выполнить от корпоративной учетной записи.

Таким образом, перед рассылкой, стоит лишь изменить учетную запись по умолчанию и рассылка пойдет как надо.

Но бывает, что данные действия всё равно не приводят к желаемому результату, тогда открываем TS Admin и находим сервис scr_OutlookUtils.

В нем находим функцию CreateNewOutlookMessageByCopy и меняем ее на следующую:

function CreateNewOutlookMessageByCopy(FileName) {
         var Message;
         if (FileName) {
                   if ((GetOutlookVersion() == '11.0') || (GetOutlookVersion() == '12.0')) {
                            Message = Outlook.Application.CreateItemFromTemplate(FileName);
                            RemoveOutlookMessageProperties(Message);
                   } else {
                            TemplateMessage = Outlook.Application.CreateItemFromTemplate(FileName);
                            RemoveOutlookMessageProperties(TemplateMessage);
                            Message = Outlook.Application.CreateItem(0);
                            if (TemplateMessage.SendUsingAccount != null) {
                                      Message.SendUsingAccount = TemplateMessage.SendUsingAccount;
                            }
                           
                            RemoveOutlookMessageProperties(Message);
                            Message.InternetCodepage = TemplateMessage.InternetCodepage;
                            Message.Subject = TemplateMessage.Subject;
                            Message.BodyFormat = TemplateMessage.BodyFormat;
                       var NewMailItemBodyFormat = GetMailItemBodyFormat(Message);
                       var MessageText;
         
                            if ((NewMailItemBodyFormat  == olFormatHTML) ||
                                      (NewMailItemBodyFormat  == olFormatRichText)) {
                                      MessageText = GetMailItemBody(TemplateMessage);
                                      if (GetMailItemBodyFormat(TemplateMessage) == olFormatPlain) {
                                        MessageText = PreparePlainTextForHTML(MessageText, true);
                                      }
                            } else {
                                      MessageText = TemplateMessage.Body;
                            }
         
                            CopyAttachments(TemplateMessage, Message, false, Log);
                            SetMailItemBody(Message, MessageText);
                           
                            var Recipient;
                            var SourceRecipient;
                            for (var i = 1; i = TemplateMessage.Recipients.Count; i++) {
                                      SourceRecipient = TemplateMessage.Recipients.Item(i);
                                      Recipient = null;
                                      if ((!IsEmptyValue(SourceRecipient.EntryID)) &&
                                               (SourceRecipient.AddressEntry.Type != 'EX')) {
                         Recipient = Message.Recipients.Add(SourceRecipient.Address +
                                                        ' ' + SourceRecipient.Name + '>');
                                      } else {
                         Recipient = Message.Recipients.Add(SourceRecipient.Name);
                         if ((!Recipient.Resolve()) && (!IsEmptyValue(SourceRecipient.EntryID))) {
                            Recipient.AddressEntry = SourceRecipient.AddressEntry;
                         }
                                      }
                                      Recipient.Type = TemplateMessage.Recipients.Item(i).Type;
                            }
         
                            TemplateMessage.Delete();
                   }
         } else {
                   GetOutlookCodePageOut();
                   Message = Outlook.Application.CreateItem(0);
                   if (Outlook.CodePageOut) {
                            Message.InternetCodepage = Outlook.CodePageOut;
                   } else {
                            Message.InternetCodepage = 20866;
                   }
         }
         return Message;
}

Сохраняем сервис, перезапускаем Terrasoft и проверяем отправку писем.

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

С уважением,
Белецкий Арсений
Группа компаний Terrasoft

Нравится

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

Арсений,
возможно ли использование нескольких учетных записей для отправки e-mail из BPMOnline CRM?
Как они настраиваются?

Анна, приветствую!

На текущий момент, такой возможности нет, поскольку отправка писем настраивается в системных настройках через один сервере, но данная реализация уже запланирована на будущие версии.

Возможно, в версии продукта 5.5 данная возможность уже будет.

С уважением,
Белецкий Арсений
Группа компаний Terrasoft

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

Добрый день!

Подскажите, есть ли подробное пошаговое руководство по созданию рассылки, начиная от создания запроса и до непосредственно процесса отправки?

В частности, интересуют следующие вопросы:

1. Действительно ли в качестве основной таблицы можно использовать только "Средства связи контакта" или "Средства связи контрагента"?
2. Нужно ли делать фильтр по полю Код ("Код" содержит "EMAIL")?
3. Обязательно ли создавать дополнительные детали? Или можно вынести поле "ФИО" из обратной связи в основную деталь?
4. Нужно ли в свойствах запроса выбирать поле фильтрации?
5. Нужно ли в шаблоне сообщения для рассылки заполнять деталь "Получатели"?

Дело в том, что по всем пунктам у меня "Да", но рассылка не уходит (Состояние = Ошибка). При этом не рассылочная почта из Terrasoft'a уходит нормально.

Нравится

1 комментарий

Всем привет!

У меня возник вопрос касательно создания красивых шаблонов писем для рассылок.

Для этого я воспользовался приложением MS Word.
Вот как это выглядело.

Я открыл word документ и создал обычную таблицу с красивым оформлением и текстом. Вставил несколько картинок. Одним словом, поигрался возможностями редактора:

После этого, я открыл Terrasoft и в разделе [Шаблоны сообщений] создал новый шаблон:

Нажав кнопку [Изменить шаблон] я скопировал свою таблицу из Word в Outlook:

Хочу заметить, что значки, отмечены на скриншоте стрелками пропадут при рассылке. так что можно не переживать :wink:

Сохраняем шаблон и запускаем рассылку. Надеюсь, что получатели будут приятно удивлены!

С уважением,
Белецкий Арсений
Группа компаний Terrasoft

Нравится

1 комментарий

В версиях 3.3.1 и 3.3.2 может возникнуть ситуация, когда при отправке рассылки, все вложения приходят в неправильном формате.

Например, в шаблоне письма должен находится документ word.doc, а после получения письма, данное влежение будет в формате TSTmpword.docTSTmp или word.docTSTmp.

Для исправлениея данной ошибки, необходимо в TSAdmin.exe открыть сервис scr_OutlookUtils.
В этом сервисе необходимо обновить методы CopyAttachment и CopyAttachments:

function CopyAttachment(DestinationMailItem, Attachment, TempFolder) {
         var PR_ATTACH_MIME_TAG = 'http://schemas.microsoft.com/mapi/proptag/0x370E001F';
         var PR_ATTACH_CONTENT_ID = 'http://schemas.microsoft.com/mapi/proptag/0x3712001F';
         var OutlookVersion = new String(Attachment.Application.Version).substr(0, 2);

         var AttachmentType = Attachment.Type;
         var FileName = TempFolder + '\\' + Attachment.DisplayName;
         try {
                   Attachment.SaveAsFile(FileName);
         } catch(e) {
                   Log.Write(lmtWarning, e.message);
                   return
         }
         NewAttachment = DestinationMailItem.Attachments.Add(FileName, AttachmentType);
         if (OutlookVersion >= 12) {
                   var sPA = Attachment.PropertyAccessor;
                   var dPA = NewAttachment.PropertyAccessor;
                   var sMIME_TAG = sPA.GetProperty(PR_ATTACH_MIME_TAG);
                   var sCONTENT_ID = sPA.GetProperty(PR_ATTACH_CONTENT_ID);
                   if (!IsEmptyValue(sCONTENT_ID)) {
                            dPA.SetProperty(PR_ATTACH_MIME_TAG, sMIME_TAG);
                            dPA.SetProperty(PR_ATTACH_CONTENT_ID, sCONTENT_ID);
                   }
         } else {
                   Outlook.Plugin.SetAttachmentAsEmbedded(Attachment, NewAttachment);
         }
         NewAttachment = null;
}                            

function CopyAttachments(SourceMailItem, DestinationMailItem, OnlyEmbedded) {
         if (!HasItemAttachments(SourceMailItem)) {
                   return;
         }
         var TempFolder = System.GetTempDirName(TemporaryFilePrefixName + 'Attachments');
         CreateFolder(TempFolder);
         var Attachment;
         for (var i = 1; i = SourceMailItem.Attachments.Count; i++) {
                   Attachment = SourceMailItem.Attachments.Item(i);
                   if (OnlyEmbedded && !IsEmbeddedAttachment(Attachment)) {
                            continue;
                   }
                   CopyAttachment(DestinationMailItem, Attachment, TempFolder);
         }
         Attachment = null;
}

Сохраняем сервис и проверяем рассылку.

С уважением
Белецкий Арсений
Группа компаний Terrasoft

Нравится

Поделиться

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

Иногда возникает ситуация, что при выполнении рассылки (шаблон в формате html) - конечный пользователь получает письмо с сплошным текстом, без единого форматирования (которое было выполнено в шаблоне сообщения).

Такая ситуация может происходить в версиях 3.3.1 и 3.3.2.

Для начала, необходимо обновить исполняемы файлы до самых поздних (сделав запрос в службу технической поддержки).

Далее, запускаем TSAdmin.exe и находим сервис scr_OutlookUtils.

В данном сервисе нам необходимо добавить метод CreateNewOutlookMessageByCopy:

function CreateNewOutlookMessageByCopy(FileName) {
      var Message;
      if (FileName) {
            TemplateMessage = Outlook.Application.CreateItemFromTemplate(FileName);
            RemoveOutlookMessageProperties(TemplateMessage);
            Message = Outlook.Application.CreateItem(0);
            RemoveOutlookMessageProperties(Message);
            Message.Subject = TemplateMessage.Subject;
          var NewMailItemBodyFormat = GetMailItemBodyFormat(Message);
          var MessageText;

            if ((NewMailItemBodyFormat  == olFormatHTML) ||
                  (NewMailItemBodyFormat  == olFormatRichText)) {
                  MessageText = GetDecodedMessageText(TemplateMessage);
                  if (GetMailItemBodyFormat(TemplateMessage) == olFormatPlain) {
                    MessageText = PreparePlainTextForHTML(MessageText, true);
                  }
                  if (GetOutlookCodePageOut() != -1) {
                    var CodePage = GetMailItemCharsetName(Message);
                    MessageText = System.EncodeText(MessageText, CodePage);
                  }
            } else {
                  MessageText = TemplateMessage.Body;
            }

            CopyAttachments(TemplateMessage, Message, false, Log);
            SetMailItemBody(Message, MessageText);
           
            var Recipient;
            var SourceRecipient;
            for (var i = 1; i = TemplateMessage.Recipients.Count; i++) {
                  SourceRecipient = TemplateMessage.Recipients.Item(i);
                  Recipient = null;
                  if (SourceRecipient.AddressEntry.Type != 'EX') {
                Recipient = Message.Recipients.Add(SourceRecipient.Address +
                             ' ' + SourceRecipient.Name + '>');
                  } else {
                Recipient = Message.Recipients.Add(SourceRecipient.Name);
                Recipient.Resolve();
                  }
                  Recipient.Type = TemplateMessage.Recipients.Item(i).Type;
            }

            TemplateMessage.Close(0);
      } else {
            Message = Outlook.Application.CreateItem(0);
            if (Outlook.CodePageOut) {
                  Message.InternetCodepage = Outlook.CodePageOut;
            } else {
                  Message.InternetCodepage = 20866;
            }
      }
      return Message;
}

В этом же сервисе модифицировать функцию GetOutlookCodePageOut (добавить return Outlook.CodePageOut;):

function GetOutlookCodePageOut() {
      if (!Outlook.OutlookCodePageOutInitialize) {
            var MSOfficeRootKey = 'Software\\Microsoft\\Office\\';
            var OutlookCodePageOptionsKey = '\\Outlook\\Options\\MSHTML\\International';
            var Version = GetOutlookVersion();
            var OutlookSettingKey = MSOfficeRootKey + Version +
                  OutlookCodePageOptionsKey;
            Outlook.AutoDetectCodePageOut = GetRegParamValue(REG_DWORD,
                  HKEY_CURRENT_USER, OutlookSettingKey, 'Autodetect_CodePageOut');
            Outlook.CodePageOut = GetRegParamValue(REG_DWORD,
                  HKEY_CURRENT_USER, OutlookSettingKey, 'Default_CodePageOut')
                  || 20866;
            Outlook.OutlookCodePageOutInitialize = true;
      }
      return Outlook.CodePageOut;
}

А также, модифицировать метод CreateOutlookMessage
(добавить var Message = CreateNewOutlookMessageByCopy(Params.Template ?
Params.Template.FileName : null
):

function CreateOutlookMessage(Params) {
      var Message = CreateNewOutlookMessageByCopy(Params.Template ?
            Params.Template.FileName : null);

      if (Params.Address) {
            if (typeof(Params.Address) == 'string') {
                  Params.Address = [Params.Address];
            } else {
                  Params.Address = RemoveDublicates(Params.Address);
            }
            for (var i = 0; i Params.Address.length; i++) {
                  AddRecipient(Message, Params.Address[i], olTo);
            }
      }
      if (Params.CopyAddress) {
            if (typeof(Params.CopyAddress) == 'string') {
                  Params.CopyAddress = [Params.CopyAddress];
            }
            for (var i = 0; i Params.CopyAddress.length; i++) {
                  AddRecipient(Message, Params.CopyAddress[i], olCC);
            }
      }
}

Для версии 3.3.1, необходимо выполнить еще одно изменение.
В сервисе scr_MailUtils найтифукцию CreateNewMessage(Params) и добавить ByCopy в строчке var Message = CreateNewOutlookMessage(Params.Template ? Params.Template.FileName : null);
:

function CreateNewMessage(Params) {
         if (!GetCanCreateMessage(true)) {
                   return;
         }
         
         if (!InitMailUtils()) {
                   return;
         }
         
         if (!Params) {
                   Params = new Object();
         }
         
         var Message = CreateNewOutlookMessageByCopy(Params.Template ?
                   Params.Template.FileName : null);

Сохраняем сервис и проверяем рассылку!

С уважением
Белецкий Арсений
Группа компаний Terrasoft

Нравится

Поделиться

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

Добрый день.
Такая ситуация так же может происходить и в версии 3.3.0 :) Но в ней я не нашел ни скрипта scr_OutlookUtils ни функций GetOutlookCodePageOut, CreateOutlookMessage.
Не подскажите, что можно сделать в данном случае?

Павел, дело в том, что данный функционал был реализован в ядре, а не в сервисах, именно поэтому Вы и не смогли найти данных скриптов :wink:

Если шаблон письма формируется некорректно, прошу обновить исполняемые файлы до более поздних.
На данный момент, это 3.3.0.83.
Данные файлы Вы можете запросить у Службы технической поддержки support@terrasoft.ru

С уважением
Белецкий Арсений
Группа компаний Terrasoft

Дело в том, что мы уже используем версию 3.3.0.83 :sad:

Добрый день!

Прошу предоставить скриншот шаблона, который Вы формируете и скриншот уже полученного письма.

С уважением
Белецкий Арсений
Группа компаний Terrasoft

Скриншот и полученное письмо во вложении

Причем было замечено, что письма из TS уходят без форматирования только на одной машине, на других все ок. Windows 7 x32, MS Outlook 2010 x32

Павел, а Вы проверяли настройки самого Outlook?
Возможно формат принимаемых и отправляемых писем стоит - текст, а не в html?

Если данная проблема только на одной рабочей машине, то логично предположит, что проблема именно в настройках Office.

mail

Формат отправляемых писем уже установлен в html. Возможно, есть еще какие-нибудь настройки?

Нужно проверить, что бы и шаблон был создан в формате html.

сделал данные настройки но при этом картинки приходят вложениями(( не подскажите что можно сделать? и какую информацию нужно показать?

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

Вопрос, возможно, покажется глупым. Но, заметил проблему с рассылкой в Terrasoft. Если создать запрос, шаблон сообщений, указать контакты получателя. Потом этот шаблон подключить в рассылку - она не происходит (проверял на 5 конфигурациях у разных клиентов) - вылетает ошибка.

А вот если в скрипте scr_MailUtils прописать try - catch, вот здесь:

for (var Key in Recipients) {
                Recipient = Recipients[Key];
                switch (Recipient.Type) {
                        case rtTo:
                                try {
                                        MailParams.Address.push(Recipient.Address);
                                } catch (e) { }
                                break;
                        case rtCopy:
                                try {
                                        MailParams.CopyAddress.push(Recipient.Address);
                                } catch (e) { }
                                break;
                        case rtBlindCopy:
                                try {
                                        MailParams.BlindCopyAddress.push(Recipient.Address);
                                } catch (e) { }
                                break;
                }

Ошибка исчезает и рассылка начинает работать нормально. С чем это связанно? Кто-то еще сталкивался с подобной проблемой?

Нравится

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

Скорее всего передается пустой адрес.
Можно в catch добавить Connector.Log.Write(2,e.message);
И тогда станет понятно в чем проблема

ЗЫ.
Интересно узнать результат.

Виталий, а какую таблицу использовали в запросе для макросов?
Необходимо, чтобы в запросе для макросов шаблона сообщения была главная таблица "Средство связи контакта\Контрагента" (tbl_ContactInMassMail или tbl_AccountInMassMail). Иначе сообщения отправлены не будут.

tbl_ContactInMassMail или tbl_AccountInMassMail - вот их и использую

Мммм...было бы не плохо посмотреть на сам запрос для рассылки и как Вы получаете адрес получателя.
Во вложении пример - на всех базах (на которых лично пробовала выполнять рассылку) работает корректно.

Здравствуйте Виталий,
Прошу вас уточнить следующие вопросы:
1)На каких версиях бинарных файлов эта ошибка воспроизводиться
2)Название, версия, локализация, СУБД продукта (Например “Terrasoft XRM+SD”, 3.3.1.15, Rus, MSSQL)
3)Вносились ли какие-то изменения в модули работы с почтой

Вышлите пожалуйста сервисы скриптов: scr_MailUtils, scr_OutlookUtils, scr_MSOutlookLibrary,, wnd_MassMailGridAreaScript

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

Добрый день!
Затянули из Екселя 200К контрагентов.
Теперь обнаружили что рассылка по ним не проходит - "У контрагента отсутствует емеил". Хотя при импорте тип связи и адрес емеил затянулись корректно.
Как оказалось сущ. еще доп. таблица AccountCommunication в которую добавляется тип ср-ва связи при изменении контрола "тип ср-ва связи", чего естественно не произошло при импорте ((
Подскажите пожалуйста как быть?
Заранее спасибо!
Версия 3.2 MS SQL 2005

Нравится

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

Пишем запрос для актуализации данных в tbl_AccountCommunication:smile:
Другого пути, похоже, нет

в аттаче курсор писался когда-то под эти цели (для Контактов). под контрагентов поправите соотвественно

"Александр Кудряшов" написал:Пишем запрос для актуализации данных в tbl_AccountCommunication:smile:
Другого пути, похоже, нет

в аттаче курсор писался когда-то под эти цели (для Контактов). под контрагентов поправите соотвественно

Огромное человеческое спасибо! Вы очень выручили ) :twisted:

Запрос для актуализации данных по Контрагентам

Проблема заключается в том, что при импорте средства связи не подтягиваются из карточки на деталь "Средства связи". Прилагаю два скрипта для контрагентов и контактов. Перед выполнением скриптов рекомендуется сделать бэкап базы.

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

Добрый день!
Внезапно перестала работать рассылка по группам(раньше работала).
В разделе рассылка для контактов\контрагентов выбирается "добавить группу" в появившемся окне выбирается группа и выдается сообщение "Добавлено 0 из ХХХ записей, т.к. не указан емеил или установлена галочка не включать в рассылку". На самом деле связь с типом емеил существует и галочки не проставлены.
Что могло привести к такому результату?
Версия 3.1.0.16 MSSQL 2005 Windows XP SP3
Заранее спасибо!

Нравится

1 комментарий

1. Проверьте наличие для типа средства связи "Email" (см. справочник Типы средств связи) значение поля "Code" - в нем должно быть значение "EMAIL".
2. Убедитесь, что в данной группе есть хотя бы один контакт, у которого в детали "Средства связи" (менеджер деталей раздела Контакты) есть запись с нужным типом и непустым значением.

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