-- Service broker - -- , DBMail IF (SELECT is_broker_enabled FROM sys.databases WHERE [name] = 'msdb') = 0 ALTER DATABASE msdb SET ENABLE_BROKER WITH ROLLBACK AFTER 10 SECONDS GO -- DBMail sp_configure 'Database Mail XPs', 1 GO RECONFIGURE GO
EXECUTE msdb.dbo.sysmail_help_status_sp
EXECUTE msdb.dbo.sysmail_start_sp
-- SMTP- EXECUTE msdb.dbo.sysmail_add_account_sp -- @account_name = 'admin@mysite.ru', -- @description = N' admin@mysite.ru', -- @email_address = 'admin@mysite.ru', -- , ":" @display_name = N' MySite.ru', -- , -- , "no-reply" @replyto_address = 'no-reply@please.no-reply', -- IP- SMTP- @mailserver_name = 'smtp.mysite.ru', -- SMTP-, 25 @port = 25, -- . -- @username = 'admin', -- @password = 'MyPassword', -- SSL , SMTP- SSL @enable_ssl = 1; -- EXECUTE msdb.dbo.sysmail_add_profile_sp @profile_name = 'MySite Admin Mailer'; -- SMTP- EXECUTE msdb.dbo.sysmail_add_profileaccount_sp @profile_name = 'MySite Admin Mailer', @account_name = 'admin@mysite.ru', -- SMTP- @sequence_number = 1; -- DatabaseMailUserRole MSDB EXECUTE msdb.dbo.sysmail_add_principalprofile_sp @profile_name = 'MySite Admin Mailer', @principal_id = 0, @is_default = 1;
sp_addrolemember @rolename = 'DatabaseMailUserRole', @membername = '<_>';
EXEC msdb.dbo.sp_send_dbmail -- @profile_name = 'MySite Admin Mailer', -- @recipients = 'friend@mysite.ru', -- @body = N' SQL Server Database Mail', -- @subject = N' ', -- SQL- @query = 'SELECT TOP 10 name FROM sys.objects';
SELECT * FROM msdb.dbo.sysmail_allitems
SELECT * FROM msdb.dbo.sysmail_event_log
SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems
-- mysite USE mysite GO -- : , , -- , DECLARE @user_id int, @user_name nvarchar(255), @last_login_date smalldatetime, @email_address varchar(255); -- @body HTML DECLARE @body nvarchar(MAX); -- @no_mail , DECLARE @no_mail int; -- , -- FAST_FORWARD DECLARE users CURSOR LOCAL FAST_FORWARD FOR SELECT id, name, last_login_date, email_address FROM users WHERE user_role IN (3,4,5) AND account_state = 2 AND email_address IS NOT NULL AND DATEDIFF(day, last_login_date, GETDATE()) > 365 ORDER BY id -- , 3 WAITFOR TIME '03:00:00' -- users OPEN users -- FETCH NEXT FROM users INTO @user_id, @user_name, @last_login_date, @email_address -- WHILE @@FETCH_STATUS = 0 BEGIN -- , SET @no_mail = (SELECT id FROM users WHERE id = @user_id AND allow_mail = 0) -- , IF @no_mail IS NOT NULL BEGIN PRINT N' ' + @user_name + N' .' FETCH NEXT FROM users INTO @user_id, @user_name, @last_login_date, @email_address CONTINUE END PRINT N' ' + @email_address + N' ...' -- SET @body = N' <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <p><img style="float:right;" src="http://mysite.ru/images/logo.png"/></p> <p>, ' + @user_name + N'!</p> <p> MySite.ru. , , .</p> <p> !</p> <p> , MySite.ru</p> </body> </html>'; -- EXEC msdb.dbo.sp_send_dbmail @recipients = @email_address, @subject = N' MySite.ru', @body = @body, -- 'HTML', 'TEXT' @body_format = 'HTML', -- --@file_attachments ='C:\attachment.jpg', -- --@copy_recipients ='me@gmail.com', -- "Blind copy" "carbon copy" - , -- --@blind_copy_recipients ='me2@gmail.com', -- @profile_name = 'MySite Admin Mailer'; -- 3 , SMTP- WAITFOR DELAY '00:00:03'; -- FETCH NEXT FROM users INTO @user_id, @user_name, @last_login_date, @email_address END -- CLOSE users GO
Source: https://habr.com/ru/post/179819/
All Articles