.net 从SQL Server 2008数据库中提取电子邮件

.net 从SQL Server 2008数据库中提取电子邮件,.net,sql-server-2008,smtp,.net,Sql Server 2008,Smtp,我需要给我所有的订户发一封电子邮件。我目前正在执行一项共享托管计划,该计划提供SQL Server 2008数据库 我真的不想将所有电子邮件复制到我的邮件客户端thunderbird,也不想制作一个程序,从db抓取所有电子邮件并通过smtp.net发送 我正在寻找一个免费的解决方案,我可以告诉它的数据库路径和电子邮件列,并允许我写一个主题和正文,让我发送它。ASP.net有一个。我相信您可以从表中选择所有电子邮件地址,然后在其中循环,对每个地址调用SMTP发送方法 使用配置文件配置数据库邮件,该

我需要给我所有的订户发一封电子邮件。我目前正在执行一项共享托管计划,该计划提供SQL Server 2008数据库

我真的不想将所有电子邮件复制到我的邮件客户端thunderbird,也不想制作一个程序,从db抓取所有电子邮件并通过smtp.net发送

我正在寻找一个免费的解决方案,我可以告诉它的数据库路径和电子邮件列,并允许我写一个主题和正文,让我发送它。

ASP.net有一个。我相信您可以从表中选择所有电子邮件地址,然后在其中循环,对每个地址调用SMTP发送方法

使用配置文件配置数据库邮件,该配置文件的发件人/回复收件人信息与您希望收件人看到的内容相匹配。您可以在此处看到一个教程:

根据您是想向每个人发送相同的邮件,还是对每个邮件进行个性化设置,您可以使用一个循环来建立大量地址,以密件抄送您不一定要同时发送给所有收件人的邮件,或者为每个收件人设计个性化的正文/主题

一旦在循环的每个迭代中都有了正文和收件人,就可以使用发送每条消息

编辑并添加一些示例代码

设置:

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;
最后,如果您的收件人列表很大,我建议您寻找其他更适合批量邮寄的替代方案