Как сделать механизм отправки различных писем по шаблону с возможностью редактирования перед отправкой
В системе часто возникает необходимость отправки типовых писем различным контрагентам, например, согласование договора, отправка акта по этапу и т.д.
При этом желательно иметь возможность подцепить сразу нужные файлы, а также отредактировать текст письма, сформированного по шаблону.
Так выглядит базовая форма отправки сообщения:
Одна и та же форма используется из разных мест для отправки писем с различной целью и шаблоном.
На входе мы имеем шаблон письма и идентификатор (кнопка вызова модальной формы):
<a href="#" class="as-form-modal" data-code="sendEmail" data-itemid="sendds_3806" data-btntext="Отправить ДС" data-big="1" data-title="Отправить ДС клиенту">Отправить ДС клиенту</a>
В данном случае мы планируем отправить письмо с ДС контрагенту с ID=3806.
У формы sendEmail следующие поля: body, subject, to, cc, attach.
Разметка формы:
{form-title}
<div class="row">
<div class="col-12 col-md-6">
{collabel-to}
{colcontrol-to}
{colexample-to}
</div>
<div class="col-12 col-md-6">
{collabel-cc}
{colcontrol-cc}
{colexample-cc}
</div>
</div>
<div class="row">
<div class="col-12">{colcontrol-subject}</div>
<div class="col-12">
{collabel-attach}
{colcontrol-attach}
</div>
<div class="col-12">
{colexample-body}
{colcontrol-body}
</div>
</div>
GetItem:
CREATE PROCEDURE [dbo].[fm_sendEmail_getItem]
@itemID nvarchar(128),
@username nvarchar(256)
AS
BEGIN
declare @emailTemplate nvarchar(128) = dbo.str_splitPart(@itemID, '_', 1)
declare @elementID nvarchar(128) = dbo.str_splitPart(@itemID, '_', 2)
declare @parameters ExtendedDictionaryParameter
insert into @parameters([Key], Value2)
select 'itemid', @elementID
union
select 'templateCode', @emailTemplate
declare @t1 table ([to] nvarchar(128), cc nvarchar(128),
subject nvarchar(256), body nvarchar(max), title nvarchar(128), attach nvarchar(max))
insert into @t1
exec mailing_getEmail
@parameters = @parameters,
@username = @username
select [to], cc, subject, body,
(select email from as_users where username=@username) example_to,
'post@mail.ru' example_cc,
'' example_body,
attach
from @t1
select title Title
from @t1
END
Здесь мы обращаемся к кастомной процедуре mailing_getEmail, где получаем шаблон и заполняем реальными данными по пришедшему itemID.
Также здесь мы можем заложить вставку подсказок в сс и to, email текущего менеджера.
SaveItem:
CREATE PROCEDURE [dbo].[fm_sendEmail_saveItem]
@username nvarchar(256),
@itemID nvarchar(128),
@parameters ExtendedDictionaryParameter READONLY
AS
BEGIN
declare @pbody nvarchar(max)
select @pbody = Value2 from @parameters where [key]='body'
declare @psubject nvarchar(max)
select @psubject = Value2 from @parameters where [key]='subject'
declare @pto nvarchar(max)
select @pto = Value2 from @parameters where [key]='to'
declare @pcc nvarchar(max)
select @pcc = Value2 from @parameters where [key]='cc'
declare @pattach nvarchar(max)
select @pattach = Value2 from @parameters where [key]='attach'
declare @emailTemplate nvarchar(128) = dbo.str_splitPart(@itemID, '_', 1)
declare @elementID nvarchar(128) = dbo.str_splitPart(@itemID, '_', 2)
declare @templateID int = (select id from as_mailing_templates where lower(code)= lower(@emailTemplate))
if(@templateID is not null) begin
INSERT INTO [dbo].[as_mailing_log] ([templateID],[created],[createdBy],[to],[cc],[bcc],[body],[subject])
VALUES (@templateID, getdate(), @username, @pto, @pcc, '', @pbody + isnull('attach: '+ @pattach, ''), @psubject)
end
-- SELECT 1 (Result, Msg, SuccessUrl, HideFormAfterSubmit, RefreshContainer)
select 1 Result, 'Отправлено' Msg, '' SuccessUrl, 0 HideFormAfterSubmit, '' RefreshContainer
-- SELECT 2
select 'email' type,
@pto [to],
@pcc [cc],
@psubject subject,
@pbody body,
@pattach attach
END
Отправляем email и записываем в лог факт отправки.
Как выглядит процедура mailing_getEmail:
CREATE OR ALTER PROCEDURE [dbo].[mailing_getEmail]
@parameters ExtendedDictionaryParameter READONLY,
@username nvarchar(256)
as
begin
declare @t1 table ([to] nvarchar(128), cc nvarchar(128),
subject nvarchar(256), body nvarchar(max),
title nvarchar(128), attach nvarchar(max))
declare @templateCode nvarchar(max) = (select Value2 from @parameters where lower([Key]) = 'templatecode')
declare @itemID int = (select try_cast(Value2 as int) from @parameters where lower([Key]) = 'itemid')
declare @subject nvarchar(256), @body nvarchar(max), @to nvarchar(128)
select @subject = subject, @body=body from as_mailing_templates where lower(code) = lower(@templateCode)
declare @attach nvarchar(max) = ''
declare @num nvarchar(128), @project nvarchar(128)
if (lower(@templateCode)='sendds') begin
declare @dsID int = @itemID
select @num = num,
@to = ctr.email,
@project = (select top 1 name from projects where id = doc.projectID),
@attach = link
from docs doc
inner join contragents ctr on ctr.id = doc.contragentID
where doc.id = @dsID
set @subject = replace(replace(@subject, '{num}' , @num), '{project}', @project)
declare @invLink nvarchar(256) = (select top 1 link from docs doc
where parentID = @dsID and typeID = 4)
set @attach = isnull(@attach, '') + iif(len(@invLink)> 0, '||' + @invLink, '')
end
if (lower(@templateCode)='sendact') begin
-- по аналогии обрабатываем другой тип
end
insert into @t1
select isnull(@to , '') [to],
'my@mail.ru' cc,
isnull(@subject, 'Нет шаблона письма') subject,
isnull(@body, 'Нет шаблона письма') body ,
'Согласование дополнительного соглашения' title,
isnull(@attach, '') attach
select * from @t1
end
В данной процедуре мы извлекаем шаблон письма, затем заполняем его данными от текущему itemID.
В итоге получаем письмо по шаблону с конкретикой по данному контрагенту. Далее его можно по необходимости подправить и затем отправить нужным адресатам.
Google поиск по нашей документации
- Руководства
- Основа Falcon Space
- Основные компоненты
- Возможности
- Коммуникация с пользователем Настройка уведомлений для личного кабинета на сайте Как настроить чат помощи для пользователей Внедрение чата в личный кабинет пользователя Работа с комментариями к объектам Телеграм боты и отправка сообщений в Telegram в веб-платформе Falcon Space Как создать чат бот ВКонтакте. VK бот для обработки сообщений в группе. Как сделать push уведомление Как отправить Email, SMS или уведомление пользователю Как отправлять SMS с сайта через smsc.ru Отправка email с шаблоном письма Как сделать ежедневную отправку отчета по проекту в групповой чат Telegram? Настройки почты для отправки сообщений с сайта Видеочат. Интеграция с Vox Implant Базовая интеграция с Jitsi Meet (звонки с видео) Отправка СМС через targetsms.ru Как сделать механизм отправки различных писем по шаблону с возможностью редактирования перед отправкой Кастомизация разметки компонента чат
- Дизайн, стилизация, юзабилити
- Лендинги
- Универсальный API
- Примеры интеграций
- Каталоги
- Навигация
- Документы
- Дополнительные компоненты
- Продвижение, SEO
- Системные моменты
- Системное администрирование
- HOWTO
- Таблицы
- Формы
- Загрузка файлов, картинок
- Работа с SQL
- HOWTO JS
- HOWTO Верстка
- Решение проблем
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта