Как сделать механизм отправки различных писем по шаблону с возможностью редактирования перед отправкой
В системе часто возникает необходимость отправки типовых писем различным контрагентам, например, согласование договора, отправка акта по этапу и т.д.
При этом желательно иметь возможность подцепить сразу нужные файлы, а также отредактировать текст письма, сформированного по шаблону.
Так выглядит базовая форма отправки сообщения:
Одна и та же форма используется из разных мест для отправки писем с различной целью и шаблоном.
На входе мы имеем шаблон письма и идентификатор (кнопка вызова модальной формы):
<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
Это снижение стоимости владения
за счет меньшего количества людей для поддержки и узкого стека разработки. Про снижение стоимости владения продуктом
Это быстрое внесение изменений
по ходу эксплуатации программы. Как создается функционал на платформе
Это простой удобный интерфейс
адаптация под мобильные устройства. Про юзабилити платформы