2012-11-09 10 views
33

Come posso inviare un'e-mail usando T-SQL ma l'indirizzo e-mail è memorizzato in una tabella? Voglio passare in rassegna il tavolo ed essere in grado di inviare e-mail. Non riesco a trovare un buon esempio di fare questo fino ad ora ..Come inviare e-mail da SQL Server?

Grazie per il vostro aiuto

+0

ho controllato il link, ma non vedo nulla in materia di e-mail .. – moe

+0

grazie, il collegamento sembra funzionare ora – moe

+3

Non si dovrebbe usare SQL server come app server. Configurare le e-mail per avvisarti è una cosa, ma usarlo come distributore di posta elettronica è un'altra cosa. Mentre tu ** PUI ** fai questo, potresti decidere se ** DEVI farlo **. – SQLMason

risposta

52

Fase 1) Crea profilo e conto

È necessario creare un profilo e account utilizzando il database di configurazione Mail Wizard a cui è possibile accedere dal menu di scelta rapida Configura posta di database del nodo Posta di database nel nodo di gestione. Questa procedura guidata viene utilizzata per gestire account, profili e impostazioni globali di Posta elettronica database.

Fase 2)

RUN:

sp_CONFIGURE 'show advanced', 1 
GO 
RECONFIGURE 
GO 
sp_CONFIGURE 'Database Mail XPs', 1 
GO 
RECONFIGURE 
GO 

Fase 3)

USE msdb 
GO 
EXEC sp_send_dbmail @profile_name='yourprofilename', 
@recipients='[email protected]', 
@subject='Test message', 
@body='This is the body of the test message. 
Congrates Database Mail Received By you Successfully.' 

per scorrere la tabella

DECLARE @email_id NVARCHAR(450), @id BIGINT, @max_id BIGINT, @query NVARCHAR(1000) 

SELECT @id=MIN(id), @max_id=MAX(id) FROM [email_adresses] 

WHILE @id<[email protected]_id 
BEGIN 
    SELECT @email_id=email_id 
    FROM [email_adresses] 

    set @query='sp_send_dbmail @profile_name=''yourprofilename'', 
         @recipients='''[email protected]_id+''', 
         @subject=''Test message'', 
         @body=''This is the body of the test message. 
         Congrates Database Mail Received By you Successfully.''' 

    EXEC @query 
    SELECT @id=MIN(id) FROM [email_adresses] where id>@id 

END 

postato sul link seguente http://ms-sql-queries.blogspot.in/2012/12/how-to-send-email-from-sql-server.html

+0

Grazie Ruzbeh, ma ho bisogno di ottenere la lista delle e-mail dal mio tavolo.come posso passare attraverso il tavolo e ricevere ogni email dalla tabella e inviare l'e-mail? il metodo che hai mostrato utilizza solo un indirizzo email fisso. Non vedo l'ora di sentirti presto. grazie – moe

+1

ho modificato la risposta .. controllalo..qui id è la colonna di identità nella tabella degli indirizzi –

+1

Dovrebbe '@ max_id = MIN (id)' essere '@ max_id = MAX (id)'? Altrimenti sembra che non verranno inviate e-mail. – Jimmy

3

Ecco un esempio di come si potrebbe concatenare indirizzi e-mail da una tabella in un unico parametro @recipients:

CREATE TABLE #emailAddresses (email VARCHAR(25)) 

INSERT #emailAddresses (email) VALUES ('[email protected]') 
INSERT #emailAddresses (email) VALUES ('[email protected]') 
INSERT #emailAddresses (email) VALUES ('[email protected]') 

DECLARE @recipients VARCHAR(MAX) 
SELECT @recipients = COALESCE(@recipients + ';', '') + email 
FROM #emailAddresses 

SELECT @recipients 

DROP TABLE #emailAddresses 

Le @recipients risultanti saranno:

[email protected]; [email protected]; [email protected]

1

a volte mentre non trovato sp_send_dbma il direttamente Puoi usare 'msdb.dbo.sp_send_dbmail' per provare (Funziona bene su Windows Server 2008 R2 ed è testato)

1

Al fine di fare in modo che il server SQL invii notifiche via email è necessario creare un profilo di posta da Gestione, posta di database .

1) L'utente Fare clic destro per ottenere il menu profilo di posta e scegliere configurare la posta del database

2) scegliere la prima aperta (istituire una mail di base di dati seguendo i seguenti compiti) e premere Avanti Nota: se il SMTP non è configurato prega di fare riferimento al seguente URL

http://www.symantec.com/business/support/index?page=content&id=TECH86263

3) nella seconda schermata riempire il nome del profilo e aggiungere account SMTP, quindi premere il prossimo

4) scegliere il tipo di account di posta (pubblico o privato), quindi premere il prossimo

5) modificare i parametri correlati alle opzioni di posta di invio, e premere Avanti 6) premere Fine

ora a fare SQL server invia un messaggio di posta elettronica se l'azione X è accaduta puoi farlo tramite trigger o lavoro (questo è il modo comune, non i soli).

1) è possibile creare lavoro da agente di SQL Server, quindi fare clic destro sugli operatori e controllare la posta elettronica (riempire la tua e-mail, per esempio) e premere OK dopo che fate clic destro Jobs e scegliere nuovo lavoro e riempire le informazioni richieste come oltre ai passaggi, nome, ... ecc. e dalla scheda di notifica seleziona il profilo che hai creato.

2) dai trigger fare riferimento all'esempio seguente.

AS 
declare @results varchar(max) 
declare @subjectText varchar(max) 
declare @databaseName VARCHAR(255) 
SET @subjectText = 'your subject' 
SET @results = 'your results' 
-- write the Trigger JOB 
EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'SQLAlerts', 
@recipients = '[email protected]', 
@body = @results, 
@subject = @subjectText, 
@exclude_query_output = 1 --Suppress 'Mail Queued' message 
GO 
3

È possibile inviare e-mail in modo nativo da SQL Server utilizzando Database Mail. Questo è un ottimo strumento per la notifica agli amministratori di sistema di errori o altri eventi del database. Si potrebbe anche usarlo per inviare un report o un messaggio di posta elettronica a un utente finale. La sintassi di base per questo è:

EXEC msdb.dbo.sp_send_dbmail 
@recipients='[email protected]', 
@subject='Testing Email from SQL Server', 
@body='<p>It Worked!</p><p>Email sent successfully</p>', 
@body_format='HTML', 
@from_address='Sender Name <[email protected]>', 
@reply_to='[email protected]' 

Prima dell'uso, Posta elettronica database deve essere abilitato utilizzando il database di configurazione guidata posta elettronica, o sp_configure. Potrebbe essere necessario un database o un amministratore di Exchange per aiutarti a configurarlo. Vedere http://msdn.microsoft.com/en-us/library/ms190307.aspx e http://www.codeproject.com/Articles/485124/Configuring-Database-Mail-in-SQL-Server per ulteriori informazioni.

2

Si può fare anche con un cursore. Supponendo di aver creato un account e un profilo, ad es. "profilo" e un Account e tu hai la tabella che contiene le e-mail pronte ad es. "EmailMessageTable" è possibile effettuare le seguenti operazioni:

USE database_name 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE mass_email AS 
declare @email nvarchar (50) 
declare @body nvarchar (255) 

declare test_cur cursor for    
SELECT email from [dbo].[EmailMessageTable] 

open test_cur           

fetch next from test_cur into 
@email  
while @@fetch_status = 0  
begin          

set @body = (SELECT body from [dbo].[EmailMessageTable] where email = @email) 
EXEC msdb.dbo.sp_send_dbmail 
    @profile_name = 'profile', 
    @recipients = @email, 
    @body = @body, 
    @subject = 'Credentials for Web'; 
fetch next from test_cur into 
@email 
end  
close test_cur 
deallocate test_cur 

Dopo che tutto quello che dovete fare è eseguire la stored procedure

EXECUTE mass_email 
GO 
Problemi correlati