Вопрос

Настроил свой БП на обращения. В нем есть отправка письма.

Для отправки письма используется мультиязычный шаблон. Для формирования письча делаю читать данные схемы Case, потом Действие процесса Обработать шаблон письма с макросами (где указан мой шаблон), затем добавляю данные в раздел Активности и далее отправляю письмо скриптом:

var activityId = Get<Guid>("AddDataID");
if (UserConnection.GetIsFeatureEnabled("UseAsyncEmailSender")) {
	AsyncEmailSender emailSender = new AsyncEmailSender(UserConnection);
	emailSender.SendAsync(activityId);
} else {
	var emailClientFactory = ClassFactory.Get<EmailClientFactory>(new ConstructorArgument("userConnection", UserConnection));
	var activityEmailSender = new ActivityEmailSender(emailClientFactory, UserConnection);
	activityEmailSender.Send(activityId);
}
return true;

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

Пример такой настройки взят и стандартного БП Отправка письма при смене статуса обращения.

Вопрос как мне заставить отправлять письмо по настройкам языка получателя?

У меня такой же вопрос

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

EmailSender скорее всего берет тело сообщения из активности, а там уже лежит текст сообщения на каком то языке.

Почему бы не воспользоваться стандартным блоком "Отправить Email"?

Письмо должно быть привязано в хронологию обращения. К тому делал через отправку стандартным блоком Отправить Email и постоянно какие то ошибки. Не дружу я с ним )

К тому же все стандартные процессы по отправке писем не используют блок Отправить Email, а отправляют скриптами

Попробуй поигратся со сменой языковой культуры перед отправкой

Как то так

cultureId = UserConnection.CurrentUser.SysCultureId;

//cultureId бери из настроек пользователя те тот язык на котором хочешь чтобы было письмо пользователя

esq.SetLocalizationCultureId(cultureId);

Ну или более глобально как то так

userConnection.CurrentUser.SysCultureName = "en-US";

 

В итоге выяснилось путем тестов. Элемент БП Выполнить действие -  - Обработать шаблон письма с макросами не учитывает мультиязычные шаблоны.  Делал подмену шаблона из таблицы EmailTemplate на EmailTemplateLang. 

var mailTemplateID = Get<Guid>("MailTemplateID");
var usrLangId = Get<Guid>("UserLanguageID")==Guid.Empty
    ? new Guid("6EBC31FA-EE6C-48E9-81BF-8003AC03B019")
    : Get<Guid>("UserLanguageID");
var newMailTemplate = new EmailTemplateStore(UserConnection);
Set<Guid>("MailTemplateID", newMailTemplate.GetTemplate(mailTemplateID, usrLangId).PrimaryColumnValue);
return true;

И подавал на вход Элементу Обработать шаблон письма с макросами - результате пустое письмо. Поэтому перешел на другую отправку писем:

var contactEmail = Get<string>("ContactEmail");
var senderEmail = Get<string>("SenderEmail");
var caseId = Get<Guid>("RecordId");
var templateId = Get<Guid>("MailTemplateID");
var emailTemplateMacrosManager = new EmailWithMacrosManager(UserConnection);
emailTemplateMacrosManager.SendEmailFromTo(caseId, templateId, senderEmail, contactEmail);
return true;

Хорошо что раздел обращения. Полагаю в другом разделе такая отправка не заработает (

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

Добрый день!

Подскажите пожалуйста, каким образом можно настроить автоматический ответ на письмо, как в Outlook? Например: на любое входящее сообщение CRM должна отсылать шаблонный ответ "Письмо получено. Спасибо за обращение."

У меня такой же вопрос

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

Письмо єто активность с типом Emailте как вариант создать БП со стартовым сигналом слушающим добавление входящего Email и использовать элемент БП Отправить письмо для формирования ответа

Письмо єто активность с типом Emailте как вариант создать БП со стартовым сигналом слушающим добавление входящего Email и использовать элемент БП Отправить письмо для формирования ответа

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

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

Возникла задача отправлять пользователям е-мейлы, содержащие html  с картинками, которые не хранятся на внешних ресурсах (то есть url нельзя указать как источник). Пробовал сделать через base64, но outlook не отображает такие картинки. Вопрос: как отправляются, например, письма с оценками (как на скриншоте)?

Судя по исходникам письма, для картинок создаются cid. Нашел файл EstimateLinksGenerator, но он, во-первых, генерирует именно base64, во-вторых, не могу найти, где он вызывается. Буду очень благодарен за пример кода, создающего html со встроеннными картинками для отображения в outlook.

 

PS используем версию 7.6, но есть возможность смотреть в код 7.11

Прикрепленные файлы

У меня такой же вопрос

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

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

Для отображения оценок исполузуется макрос EstimateLinksGenerator.
Каким образом это реализовано можно посмотреть в статье

Но такие макросы работают толькло в разделе Обращения при отправке письма по шаблону. Это связано с тем что в обращениях для обработки тела письма используется InvokableMacrosHelperService, который знает как работать с такими макросами (которые реализуют IMacrosInvokable).

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

Здравствуйте.
Появилась проблема при отправке e-mail по шаблону.
При создании шаблона указываем раздел "Контакты" и запрос для макросов "Контакты".
Нажимаем правой кнопкой мыши на физ.лицо. В контекстном меню выбираем: Действия -> Отправить e-mail по шаблону -> "Шаблон". В outlook 2010 открывается два (иногда четыре) одинаковых шаблона для отправки.
Если убрать запрос для макросов открывается один шаблон. Но макросы, по понятным причинам, не работают.
Никто не сталкивался?

У меня такой же вопрос

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

У Вас некорректный запрос для макросов - возвращает не одну, а две (иногда четыре) записи.

Дмитрий, спасибо. Удалил лишние колонки в запросе - все ок.

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

Добрый день.
Странная история.
Есть шаблон основанный на запросе. При позиционировании на контакте - формируется письмо с автоматической подстановкой адреса контакта и отработкой макросов в теле письма (подстановка ФИО и т.д.). Создаю новый шаблон. Тот же самый запрос. в том же самом разделе. на том же самом контакте - макросы в теле письма отрабатывают, но адрес контакта не подставляется.
В чем мой косяк? может кто сталкивался.

У меня такой же вопрос

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

Скорее всего не заполнили деталь [Получатели] для нового шаблона сообщения.

Точно, протупил:) Почему-то посчитал, что деталь скопируется вместе с шаблоном. Огромное спасибо.

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

Доброго времени суток, уважаемые пользователи интернет сообщества Terrasoft!

Допустим, у Вас в разделе «Контакты» существует некая статическая группа, которая включает в себя определенное количество контактов. Если Вам необходимо отправлять уведомления по шаблону всем контактам, которые входят в эту группу, то этот топик для Вас! ;)
Главной задачей при реализации, есть получить список контактов входящих в выбранную группу, далее получить список их email адресов, и отправить сообщение по нужному шаблону.
Пример функции, реализующей отправку писем по шаблону всем контактам определенной группы:

function SendMailToGroup()
{
var AddressList = [];
var Dataset = Services.GetNewItemByUSI('ds_ContactInGroup');
var GroupID = '{83696FAF-128C-4A45-B41D-56A03B50BB7C}';
ApplyDatasetFilter(Dataset, 'GroupID', GroupID, true);
Dataset.Open();
while(!Dataset.IsEOF)
{
         var ContactID = Dataset.Values('ContactID');
         GetMailAddressesByContactID(ContactID, AddressList, true);
         Dataset.GotoNext();
}
var TemplateID = '{ ABCFB655-A0AD-4BAB-BF83-417DE9357C34}';
var ID = Dataset.Values('ID');
Dataset.Close();
SendEmailByTemplate(TemplateID, {RecordID: ID, Address: AddressList,
                   AutoSend: true, Silent: true});
}

Вместо GroupID = '{83696FAF-128C-4A45-B41D-56A03B50BB7C}'; подставьте ID нужной Вам группы. Для того чтобы узнать ID, выполните запрос к БД:
1
Вместо var TemplateID = '{ABCFB655-A0AD-4BAB-BF83-417DE9357C34}' подставьте ID нужного Вам шаблона рассылки. Для того чтобы узнать ID нужного Вам шаблона рассылки выполните запрос к БД и скопируйте поле ID:
2

Далее, Вам просто необходимо вызвать созданную функцию в нужном Вам месте кода:

SendMailToGroup();

К примеру, её можно вызвать при нажатии на кнопку «Ок» карточки редактирования задачи. Также удостоверьтесь, что созданная функция находится в том же скрипте, с которого Вы её вызываете, а также что в этом скрипте подключен скрипт scr_MailUtils.

Приятной работы с Террасофт!

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать