Извлечение электронных писем из базы данных SQL Server 2008

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

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

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


person chobo2    schedule 17.09.2011    source источник


Ответы (2)


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

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

  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;

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

person Aaron Bertrand    schedule 17.09.2011

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

person Jonathan Wilson    schedule 17.09.2011