【问题标题】:Pulling out emails from SQL Server 2008 database从 SQL Server 2008 数据库中提取电子邮件
【发布时间】:2011-11-19 02:13:48
【问题描述】:

我需要向所有订阅者发送电子邮件。我目前正在使用提供 SQL Server 2008 数据库的共享主机计划。

我真的不想将所有电子邮件复制到我的邮件客户端(thunderbird)中,也不想制作一个程序来从数据库中获取所有电子邮件并通过 smtp.net 发送

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

【问题讨论】:

    标签: .net sql-server-2008 smtp


    【解决方案1】:
    1. 使用配置文件配置数据库邮件,该配置文件的发件人/回复信息与您希望收件人看到的信息相匹配。您可以在此处查看一个教程:
    1. 根据您是想向每个人发送相同的消息,还是个性化每个人,您可以使用循环将地址块构建到密件抄送(您不一定要发送给 all 收件人)或为每个收件人制作个性化的身体/主题。

    2. 一旦在循环的每次迭代中都有正文和收件人,您就可以使用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;
    

    最后,如果您的收件人列表很大,我建议您寻找其他更适合批量邮寄的替代方案。

    【讨论】:

      【解决方案2】:

      ASP.net 有一个SMTP client class。我相信您可以 select 表中的所有电子邮件地址,然后遍历它们,在每个地址上调用 SMTP Send() 方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多