Существующие методы отправки писем позволяют отправить письмо в виде текста или html. Гораздо приятнее получить сообщение в котором есть текст, оформленный в виде таблицы. Его читать удобнее, например, если пришел счет. С дугой стороны, отправка таких писем требует от вас знание html разметки и стилей письма. Без них создать такой сообщение достаточно сложно. Особое внимание обратите на тэги html: table,border,h2,tr,td,br Заранее изучите их назначение. Вот пример отправки письма на основе скрипта SQL Server.
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Конюков Виктор Федорович
-- Create date: 19.06.2018
-- Description: Рассылка почты через SQL Server
/*
EXEC SSD_SendAutoEmailSite_SP 'SEND_EMAIL','12345','ivn','ivanov@test.ru','ivanov@test.ru','ivanov@test.ru', @infobar output;
*/
ALTER PROCEDURE [dbo].[SSD_SendAutoEmailSite_SP]
@CommandID AS NVARCHAR(16)= 'SEND_EMAIL', -- CREATE_INVOICE and SEND_INVOICE
@num AS NVARCHAR(30), -- Номер заказа
@usr AS NVARCHAR(8), -- Отправитель из 3 букв
@EmailFrom AS NVARCHAR(256), -- От кого отправляем
@EmailTo AS NVARCHAR(256), -- Кому отправляем
@EmailCopy AS NVARCHAR(256), -- Кому отправляем
@infobar AS NVARCHAR(max) OUTPUT -- Возврат сообщения выполнения команды
AS
BEGIN
SET NOCOUNT ON;
IF @CommandID = 'SEND_EMAIL' --OR @CommandID = 'ALL'
BEGIN
-- Отправляем почту
DECLARE @bodyall AS NVARCHAR(MAX),
@mailitem_id1 INT,
@BR AS NVARCHAR(32),
@date AS datetime,
@subject1 AS NVARCHAR(255)
-- Рисуем таблицу в формате html
SET @BR = '<br>'
SELECT @bodyall =
'<style>table, th, td { border: 1px solid black; border-collapse: collapse; } th, td {padding: 5px;}</style>' +
'<h2>1. Файлы </h2>' +
'Ссылка на прикрепленный файл: ' + '<a href="' + z.OFFER_URL_DOC + '">'+ z.OFFER_URL_DOC + '</a>' +
'<h2>2. Комментарий </h2>' +
z.OFFER_Comment +@BR +
'<h2>3. Заказчик </h2>' +
'ФИО: ' + z.FIO + @BR +
'Тел.: ' + z.TEL + @BR +
'Эл.почта: ' + z.Mail + @BR
, @date = z.OFFER_Data
FROM [Offers] z WHERE z.Number = @num AND z.NumberLine=1;
-- Создаем курсор для изделий
DECLARE @item AS NVARCHAR(32), @Desc AS NVARCHAR(256), @Qty AS NVARCHAR(32)
DECLARE item_cursor CURSOR FOR
SELECT ISNULL(f.OFFER_Num_art,''),
ISNULL(i.Description,'')
--convert(nvarchar(25),f.OFFER_Data_end,104),
AS all_item
FROM Offers f
INNER JOIN item i
ON i.item = f.OFFER_Num_art
WHERE f.Number = @num ;
-- Открываем курсор
OPEN item_cursor
FETCH NEXT FROM item_cursor INTO @item,@Desc,@Qty ;
SET @bodyall = @bodyall + '<table>'
-- Заголовки таблицы
SET @bodyall = @bodyall + '<tr><th>Товар</th><th>Описание</th><th>Кол-во</th><th>Резерв</th><th>Срок отгрузки</th><th>Статус</th></tr>'
WHILE @@FETCH_STATUS = 0
BEGIN
-- Данные таблицы
SET @bodyall = @bodyall + '<tr>'
SET @bodyall = @bodyall + '<td>' + @item + '</td>' ;
SET @bodyall = @bodyall + '<td>' + @Desc + '</td>' ;
SET @bodyall = @bodyall + '<td>' + @Qty + '</td>' ;
SET @bodyall = @bodyall + '</tr>'
-- Следующая запись
FETCH NEXT FROM item_cursor INTO @item,@Desc,@Qty ;
END
SET @bodyall = @bodyall + '</table>'
CLOSE item_cursor ;
DEALLOCATE item_cursor ;
SET @subject1 = 'Выгружена заявка № [' + @num + '] от ' + CONVERT(nvarchar(10),@Date,104) ;
-- Управление профилем
DECLARE @UsEmail NVARCHAR(255),
@UsAccount NVARCHAR(255),
@UsProfile NVARCHAR(255)
SET @UsEmail = @EmailFrom --'ivanov@test.ru'
SET @UsAccount = 'Account. ' + @UsEmail
SET @UsProfile = 'Profile. ' + @UsEmail
IF NOT EXISTS( SELECT account_id from msdb.dbo.sysmail_account WHERE [NAME]=@UsAccount)
BEGIN
-- 1. Создание аккаунта
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = @UsAccount,
@description = 'Авторассылка счетов',
@email_address = @UsEmail,
@display_name = 'Компания. Авторассылка счетов',
@mailserver_name = '111.11.0.11',
@port='25',
@password='1',
@enable_ssl=0,
@username=@UsEmail ;
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = @UsProfile,
@description = 'Профиль пользователя для рассылки Email' ;
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = @UsProfile,
@account_name = @UsAccount,
@sequence_number =1 ;
WAITFOR DELAY '00:00:03';
END
-- Отправляем почту
IF (ISNULL(@num,0) <> 0) AND (@Date > CONVERT(DATETIME,'2019-01-01'))
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@profile_name = @UsProfile, -- 'Профиль. Рассылка счетов',
@recipients = @EmailTo,
@copy_recipients = '',
@subject = @subject1,
@body = @bodyall,
@file_attachments=NULL,
@body_format = 'HTML',
@mailitem_id = @mailitem_id1 OUTPUT ;
SET @infobar = 'Заявка обработана № ' + @num + ' от ' + CONVERT(nvarchar(10),@date,104) + ' успешно!'
END
END
END