2011-09-17 85 views
0

我需要向我的所有訂閱者發送電子郵件。我目前正在提供一個SQL Server 2008數據庫的共享託管計劃。從SQL Server 2008數據庫中取出電子郵件

我真的不希望將所有郵件複製到我的郵件客戶端(雷鳥)我也不想讓一個程序,將抓住從數據庫中的所有的電子郵件,並通過smtp.net發送

我正在尋找一個免費的解決方案,我可以告訴它的數據庫路徑和電子郵件列,並將允許我寫一個主題和身體,讓我發送它。

回答

2
  1. 配置數據庫郵件的個人資料具有匹配您希望收件人查看的發件人/回覆信息。你可以看到一個教程在這裏:http://www.mssqltips.com/sqlservertip/1100/setting-up-database-mail-for-sql-2005/

  2. 根據您是否要發送相同的消息給大家,或者個性化的每一個,你可以使用一個循環來完成構建起來的地址塊到BCC(你不會必須一次發送給全部收件人)或爲每個收件人制作個性化身體/主題。

  3. 一旦在循環的每次迭代中都有正文和收件人,則可以使用msdb.dbo.sp_send_dbmail發送每條消息。

編輯添加一些示例代碼。

設置:

USE tempdb; 
GO 

CREATE TABLE dbo.Emails(Email VARCHAR(320)); 

INSERT dbo.Emails VALUES('[email protected]'),('[email protected]'),('[email protected]'); 

如果你只想把所有相同的消息,並假設列表很短 - 分批或分塊將是一個不同的問題:

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; 

最後,如果你的收件人列表是,我會建議你尋求的具備更好批量郵寄其他的替代品。

0

ASP.net有一個SMTP client class。我確信你可以從你的表中的所有電子郵件地址select中循環,在每個地址上調用SMTP Send()方法。

相關問題