2012-11-09 14 views
33

Jak wysłać wiadomość e-mail przy użyciu T-SQL, ale adres e-mail jest przechowywany w tabeli? Chcę przejrzeć tabelę i móc wysyłać wiadomości e-mail. Nie mogę znaleźć dobry przykład robi to tak daleko ..Jak wysłać wiadomość e-mail z serwera SQL?

Dzięki za pomoc

+0

Sprawdziłem link, ale nie widzę nic w odniesieniu do poczty elektronicznej .. – moe

+0

dziękuję, link wydaje się działać teraz – moe

+3

Nie powinieneś używać serwera SQL jako serwera aplikacji. Konfigurowanie wiadomości e-mail do ostrzeżenia użytkownika to jedno, ale używanie go jako dystrybutora poczty e-mail jest czymś innym. Chociaż ** MOŻESZ ** to zrobić, możesz zastanowić się, czy ** ZNALEISISZ ** to zrobić. – SQLMason

Odpowiedz

52

etap 1) utworzyć profil i konto

Musisz utworzyć profil i konto przy użyciu konfiguracji bazy danych Kreator poczty, do którego można uzyskać dostęp z menu kontekstowego Konfiguracja poczty bazy danych węzła Poczta bazy danych w węźle zarządzania. Ten kreator służy do zarządzania kontami, profilami i globalnymi ustawieniami poczty bazy danych.

Etap 2)

RUN:

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

Etap 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.' 

pętli tabeli

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 

Wysłany to na poniższym linku http://ms-sql-queries.blogspot.in/2012/12/how-to-send-email-from-sql-server.html

+0

Dzięki Ruzbeh, ale muszę dostać listę e-maili z mojego stolika.jak mogę przechodzić przez stół i odbierać wszystkie wiadomości e-mail z tabeli i wysyłać wiadomość e-mail? Metoda, którą pokazałeś, wykorzystuje tylko jeden stały e-mail. Czekam na wiadomość od ciebie wkrótce. dzięki – moe

+1

edytowałem odpowiedź ... sprawdź ... czy id to kolumna tożsamości w twojej tabeli adresowej –

+1

Czy '@ max_id = MIN (id)' powinno być '@ max_id = MAX (id)'? W przeciwnym razie wydaje się, że żadne e-maile nie zostaną wysłane. – Jimmy

3

Oto przykład, jak można łączyć adresy e-mail z tabeli do jednego parametru @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 

Powstałe @recipients będą:

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

1

czasem gdy nie znaleziono sp_send_dbma il bezpośrednio. Możesz użyć "msdb.dbo.sp_send_dbmail", aby wypróbować (działa poprawnie w systemie Windows Server 2008 R2 i jest testowany)

1

Aby serwer SQL wysyłał powiadomienia e-mail, musisz utworzyć profil poczty z zarządzania, poczta bazy danych .

1) Użytkownik Kliknij prawym przyciskiem myszy, aby uzyskać menu profilu poczty i wybierz skonfigurować pocztę bazy

2) Wybierz pierwszy otwarty (skonfigurować pocztę bazy danych, wykonując następujące zadania) i naciśnij następny UWAGA: jeśli SMTP nie jest skonfigurowane można znaleźć w URL poniżej

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

3) w drugim ekranie wypełnić nazwę profilu i dodać konto SMTP, a następnie naciśnij przycisk obok

.210 4) wybrać rodzaj konta pocztowego (publiczne lub prywatne), a następnie naciśnij przycisk obok

5) zmiany parametrów związanych z opcje wysyłania poczty elektronicznej, a następnie naciśnij przycisk obok 6) Naciśnij zakończyć

teraz zrobić SQL serwer wyślij wiadomość e-mail, jeśli zdarzyło się działanie X, możesz to zrobić za pomocą wyzwalacza lub zadania (to jest zwykły sposób, nie jedyny).

1) można utworzyć zadanie z agenta serwera SQL, następnie kliknąć prawym przyciskiem myszy operatorów i sprawdzić pocztę (na przykład wypełnić adres e-mail) i nacisnąć OK po kliknięciu prawym przyciskiem myszy Zadania i wybrać nowe zadanie i wypełnić wymagane informacje jako a także z kroków, nazwiska, ... itd. i z zakładki powiadomień wybierz profil, który zrobiłeś.

2) z wyzwalaczy zapoznaj się z przykładem poniżej.

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

Możesz wysyłać wiadomości e-mail bezpośrednio z programu SQL Server przy użyciu poczty bazy danych. Jest to doskonałe narzędzie do powiadamiania sysadmins o błędach lub innych zdarzeniach bazy danych. Można również użyć go do wysłania raportu lub wiadomości e-mail do użytkownika końcowego. Podstawowa składnia to:

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]' 

Przed użyciem poczty bazy danych muszą być włączone przy użyciu kreatora konfiguracji poczty bazy danych lub sp_configure. Baza danych lub administrator Exchange może potrzebować pomocy w konfiguracji tego. Aby uzyskać więcej informacji, zobacz Aby uzyskać więcej informacji, zobaczAhttp://msdn.microsoft.com/en-us/library/ms190307.aspx i http://www.codeproject.com/Articles/485124/Configuring-Database-Mail-in-SQL-Server.

2

Możesz to zrobić również za pomocą kursora. Zakładając, że utworzyłeś konto i profil, np. "profil" i konto, a masz tabelę, w której są gotowe wiadomości e-mail, np. „EmailMessageTable” można wykonać następujące czynności:

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 

Po że wszystko co musisz zrobić, to wykonać procedury przechowywanej

EXECUTE mass_email 
GO 
Powiązane problemy