Отправка почты с использованием SQL Server редко используется специалистами, т.к. существует много способов отправить почту используя языки высокого уровня, например, C#. Они позволяют проверить текст письма на ошибки, отобразить их на экране и только потом отправить письмо. SQL Server не обладает WInForm интерфейсом. Но иногда бывает нужно отправить такое письмо администратору, например, из триггера таблицы, после того, какие-то данные изменили базу данных (ордера, ошибки, заказы и т.п.). Рассмотри как это можно сделать
Для начала нужно создать Аккаунт для отправки письма. Вот пример.
ALTER PROCEDURE [dbo].[SSD_SendAuto_AddAccount]
@UsEmail AS NVARCHAR(128)
AS
BEGIN
SET NOCOUNT ON;
IF ISNULL(@UsEmail,'') = '' RETURN -1
-- Управление профилем
DECLARE @UsAccount NVARCHAR(255),
@UsProfile NVARCHAR(255)
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',
@username=@UsEmail,
@password='***',
@enable_ssl=0;
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
END
Но даже для того, чтобы создать Аккаунт нужно провести предварительную настройку SQL Server. Привожу пример как это сделать. Раскомментируйте нужный блок и запустите скрипт. Рядом находится также команда SELECT для проверки данных.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Конюков Виктор
-- Create date: 18.01.2019
-- Description: Создание аккаунта для Email SQL Server
-- =============================================
/*
-- 1. Активация Email SQL Server
sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
-- 2. Создание аккаунта
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = 'OOO Firm Public Account',
@description = 'Специальный аккаунт для использования всеми пользователями Email',
@email_address = 'ivanov@test.ru',
@replyto_address = 'ivanov@test.ru',
@display_name = 'OOO Firm Automated Mailer',
@mailserver_name = '111.11.0.11',
@port='25',
@password='***',
@enable_ssl=0,
@username='ivanov@test.ru' ;
-- 2а. Меняем акаунт
EXECUTE msdb.dbo.sysmail_update_account_sp
@account_id = 1
,@account_name = 'Аакаунт. Рассылка счетов'
,@description = 'Автоматическая рассылка счетов клиентам'
,@email_address = 'mail@mail.ru'
,@display_name = 'Авторассылка счетов'
,@replyto_address = NULL
,@mailserver_name = '111.11.0.11'
,@mailserver_type = 'SMTP'
,@port = 25
,@timeout = 60
,@username = 'ivanov@test.ru'
,@password = '***'
,@use_default_credentials = 0
,@enable_ssl = 0;
SELECT * from msdb.dbo.sysmail_account
--UPDATE msdb.dbo.sysmail_account SET display_name = 'ООО Компания. Авторассылка счетов'
-- 3. Создание профиля
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = 'OOO Firm Public Profile',
@description = 'Профиль используется для тестирования Email' ;
-- 3а. Изменение профиля
EXECUTE msdb.dbo.sysmail_update_profile_sp
@profile_id = 1
,@profile_name = 'Профиль. Рассылка счетов'
,@description = 'Профиль для автоматической рассылки счетов клиентам';
SELECT * from msdb.dbo.sysmail_profile
-- 4. Добавление аккаунта в профиль. Меняется только ID
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'OOO Firm Public Profile',
@account_name = 'OOO Firm Public Account',
@sequence_number =1 ;
SELECT * from msdb.dbo.sysmail_profileaccount
-- 5. Разрешение доступа всем пользователям msdb
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
@profile_name = 'OOO Firm Public Profile',
@principal_name = 'public',
@is_default = 1 ;
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
@profile_name = 'OOO Firm Public Profile',
@principal_name = 'FirmService',
@is_default = 1 ;
--SELECT * FROM msdb.dbo.sysmail_principalprofile
-- =========================================== ----
SELECT * from msdb.dbo.sysmail_mailitems
-- 5a. Удаление сообщений
DELETE FROM msdb.dbo.sysmail_allitems WHERE profile_id=1
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
*/
В следующем сообщении будет приведен пример как отправить письмо через SQL Server в формате html.