Извлечение электронных писем из базы данных SQL Server 2008 - PullRequest
0 голосов
/ 17 сентября 2011

Мне нужно отправить электронное письмо всем моим подписчикам.В настоящее время у меня есть план общего хостинга, который предлагает базу данных SQL Server 2008.

Я действительно не хочу копировать все электронные письма в мой почтовый клиент (thunderbird), и при этом я не хочу создавать программу, которая бывозьмите все электронные письма из БД и отправьте их через smtp.net

Я ищу бесплатное решение, которое я мог бы просто указать ему путь к БД и столбцу электронных писем и позволит мне написать темуи тело, и позвольте мне отправить его.

Ответы [ 2 ]

2 голосов
/ 17 сентября 2011
  1. Сконфигурируйте почту базы данных с профилем, в котором информация от / ответа до соответствует тому, что вы хотите, чтобы ваши получатели видели.Вы можете увидеть один учебник здесь: http://www.mssqltips.com/sqlservertip/1100/setting-up-database-mail-for-sql-2005/

  2. В зависимости от того, хотите ли вы отправить одно и то же сообщение всем или персонализировать каждое из них, вы можете использовать цикл для создания блоков адресов дляBCC (вам не обязательно отправлять всем получателям сразу) или создать индивидуальное тело / тему для каждого получателя.

  3. Как только вы получитетело и получатель (и) в каждой итерации цикла, вы можете использовать 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;

Наконец, есливаш список получателей большой , я предложу вам искать другие альтернативыШляпа лучше подготовлена ​​для массовой рассылки.

0 голосов
/ 17 сентября 2011

ASP.net имеет класс клиента SMTP . Я уверен, что вы могли бы select все адреса электронной почты из вашей таблицы, а затем перебрать их, вызывая метод SMTP Send() для каждого адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...