Подтвердить что ты не робот

Как отправить письмо с SQL Server?

Как я могу отправить электронное письмо с использованием T-SQL, но адрес электронной почты хранится в таблице? Я хочу пройти через стол и иметь возможность отправлять электронную почту. Я не могу найти хороший пример этого до сих пор.

Спасибо за помощь

4b9b3361

Ответ 1

Шаг 1) Создание профиля и учетной записи

Вам необходимо создать профиль и учетную запись с помощью мастера настройки почтовой базы данных, доступ к которому можно получить из контекстного меню "Настройка базы данных" в почтовой службе базы данных node в Менеджменте Node. Этот мастер используется для управления учетными записями, профилями и глобальными настройками базы данных.

Шаг 2)

RUN:

sp_CONFIGURE 'show advanced', 1
GO
RECONFIGURE
GO
sp_CONFIGURE 'Database Mail XPs', 1
GO
RECONFIGURE
GO

Шаг 3)

USE msdb
GO
EXEC sp_send_dbmail @profile_name='yourprofilename',
@recipients='[email protected]',
@subject='Test message',
@body='This is the body of the test message.
Congrates Database Mail Received By you Successfully.'

Пропустить таблицу

DECLARE @email_id NVARCHAR(450), @id BIGINT, @max_id BIGINT, @query NVARCHAR(1000)

SELECT @id=MIN(id), @max_id=MAX(id) FROM [email_adresses]

WHILE @id<[email protected]_id
BEGIN
    SELECT @email_id=email_id 
    FROM [email_adresses]

    set @query='sp_send_dbmail @profile_name=''yourprofilename'',
                        @recipients='''[email protected]_id+''',
                        @subject=''Test message'',
                        @body=''This is the body of the test message.
                        Congrates Database Mail Received By you Successfully.'''

    EXEC @query
    SELECT @id=MIN(id) FROM [email_adresses] where id>@id

END

Отправлено по следующей ссылке http://ms-sql-queries.blogspot.in/2012/12/how-to-send-email-from-sql-server.html

Ответ 2

Вот пример того, как вы можете объединять адреса электронной почты из таблицы в один параметр @recipients:

CREATE TABLE #emailAddresses (email VARCHAR(25))

INSERT #emailAddresses (email) VALUES ('[email protected]')
INSERT #emailAddresses (email) VALUES ('[email protected]')
INSERT #emailAddresses (email) VALUES ('[email protected]')

DECLARE @recipients VARCHAR(MAX)
SELECT @recipients = COALESCE(@recipients + ';', '') + email 
FROM #emailAddresses

SELECT @recipients

DROP TABLE #emailAddresses

Результирующие @recipients будут:

[email protected]; [email protected]; [email protected]

Ответ 3

Вы можете отправлять электронную почту изнутри SQL Server, используя Database Mail. Это отличный инструмент для уведомления системных администраторов об ошибках или других событиях базы данных. Вы также можете использовать его для отправки отчета или сообщения электронной почты конечному пользователю. Основной синтаксис для этого:

EXEC msdb.dbo.sp_send_dbmail  
@recipients='[email protected]',
@subject='Testing Email from SQL Server',
@body='<p>It Worked!</p><p>Email sent successfully</p>',
@body_format='HTML',
@from_address='Sender Name <[email protected]>',
@reply_to='[email protected]'

Перед использованием Mail Database необходимо включить с помощью мастера настройки почтовой базы данных или sp_configure. Администратор базы данных или Exchange может потребоваться, чтобы помочь вам настроить это. Видеть http://msdn.microsoft.com/en-us/library/ms190307.aspx а также http://www.codeproject.com/Articles/485124/Configuring-Database-Mail-in-SQL-Server для получения дополнительной информации.

Ответ 4

Вы можете сделать это и с помощью курсора. Предполагая, что вы создали учетную запись и профиль, например. "профиль" и учетная запись, и у вас есть таблица, в которой хранятся электронные письма, например. "EmailMessageTable" вы можете сделать следующее:

USE database_name
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE mass_email AS
declare @email nvarchar (50) 
declare @body nvarchar (255)  

declare test_cur cursor for             
SELECT email from [dbo].[EmailMessageTable]

open test_cur                                        

fetch next from test_cur into   
@email     
while @@fetch_status = 0       
begin                                    

set @body = (SELECT body from [dbo].[EmailMessageTable] where email = @email)
EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'profile',
    @recipients = @email,
    @body = @body,
    @subject = 'Credentials for Web';
fetch next from test_cur into  
@email 
end    
close test_cur   
deallocate test_cur

После этого все, что вам нужно сделать, это выполнить хранимую процедуру

EXECUTE mass_email
GO

Ответ 5

иногда, пока не найден sp_send_dbmail напрямую. Вы можете использовать 'msdb.dbo.sp_send_dbmail', чтобы попробовать (Отлично работает на Windows Server 2008 R2 и проверяется)

Ответ 6

Для того, чтобы заставить SQL-сервер отправлять уведомления по электронной почте, вам необходимо создать профиль почты из Менеджмента, почты базы данных.

1) Пользователь Щелкните правой кнопкой мыши, чтобы получить меню профиля почты и выберите команду "настроить почтовую почту"

2) выберите первый открытый (настройте почту базы данных, выполнив следующие задачи) и нажмите следующий Примечание: если SMTP не настроен, обратитесь к URL-адресу ниже

http://www.symantec.com/business/support/index?page=content&id=TECH86263

3) во втором экране введите имя профиля и добавьте учетную запись SMTP, затем нажмите следующий

4) выберите тип почтовой учетной записи (общедоступный или закрытый), затем нажмите следующий

5) измените параметры, связанные с отправкой параметров почты, и нажмите следующий 6) пресс-финиш

Теперь, чтобы заставить SQL-сервер отправить электронное письмо, если произошло действие X, вы можете сделать это через триггер или задание (это обычные способы, которые не единственные).

1) вы можете создать Job от агента SQL-сервера, затем щелкнуть правой кнопкой мыши на операторах и проверить почту (например, заполнить ваш адрес электронной почты) и нажать OK после этого, щелкнув правой кнопкой мыши "Jobs" и выберите новое задание и заполнить необходимую информацию, а также из шагов, имени,... и т.д. и со вкладки уведомлений выберите профиль, который вы сделали.

2) из ​​триггеров, пожалуйста, обратитесь к приведенному ниже примеру.

AS
declare @results varchar(max)
declare @subjectText varchar(max)
declare @databaseName VARCHAR(255)
SET @subjectText = 'your subject'
SET @results = 'your results'
-- write the Trigger JOB
EXEC msdb.dbo.sp_send_dbmail
 @profile_name = 'SQLAlerts',
 @recipients = '[email protected]',
 @body = @results,
 @subject = @subjectText,
 @exclude_query_output = 1 --Suppress 'Mail Queued' message
GO