- 使用配置文件配置数据库邮件,该配置文件的发件人/回复信息与您希望收件人看到的信息相匹配。您可以在此处查看一个教程:
-
根据您是想向每个人发送相同的消息,还是个性化每个人,您可以使用循环将地址块构建到密件抄送(您不一定要发送给 all 收件人)或为每个收件人制作个性化的身体/主题。
-
一旦在循环的每次迭代中都有正文和收件人,您就可以使用msdb.dbo.sp_send_dbmail 发送每条消息。
编辑添加一些示例代码。
设置:
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;
最后,如果您的收件人列表很大,我建议您寻找其他更适合批量邮寄的替代方案。