Сконфигурируйте почту базы данных с профилем, в котором информация от / ответа до соответствует тому, что вы хотите, чтобы ваши получатели видели.Вы можете увидеть один учебник здесь: http://www.mssqltips.com/sqlservertip/1100/setting-up-database-mail-for-sql-2005/
В зависимости от того, хотите ли вы отправить одно и то же сообщение всем или персонализировать каждое из них, вы можете использовать цикл для создания блоков адресов дляBCC (вам не обязательно отправлять всем получателям сразу) или создать индивидуальное тело / тему для каждого получателя.
Как только вы получитетело и получатель (и) в каждой итерации цикла, вы можете использовать msdb.dbo.sp_send_dbmail для отправки каждого сообщения.
EDIT добавление некоторого примера кода.
Настройка:
USE tempdb;
GO
CREATE TABLE dbo.Emails(Email VARCHAR(320));
INSERT dbo.Emails VALUES('a@b.com'),('b@c.com'),('c@d.com');
Если вы хотите просто отправить все одно и то же сообщение и предположить, что список короткий, пакетная обработка или группировка будут другим вопросом:
DECLARE @bcc VARCHAR(MAX) = '';
SELECT @bcc += ';' + Email FROM dbo.Emails;
SET @bcc = STUFF(@bcc,1,1,'');
SELECT @bcc;
/*
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'profile name',
@recipients = 'your address',
@blind_copy_recipients = @bcc,
@body = N'body',
@subject = N'subject';
*/
- Если вы хотите отправить отдельное сообщение каждому получателю, используйте курсор:
DECLARE @e VARCHAR(320);
DECLARE e CURSOR LOCAL STATIC FORWARD_ONLY READ_ONLY
FOR SELECT Email FROM dbo.Emails;
OPEN e;
FETCH NEXT FROM e INTO @e;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Sending to ' + @e;
/*
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'profile name',
@recipients = @e,
@body = N'body',
@subject = N'subject';
*/
FETCH NEXT FROM e INTO @e;
END
CLOSE e;
DEALLOCATE e;
Очистка:
DROP TABLE dbo.Emails;
Наконец, есливаш список получателей большой , я предложу вам искать другие альтернативыШляпа лучше подготовлена для массовой рассылки.