JAK: Wysyłanie poczty e-mail bez użycia aplikacji SQL Mail w programie SQL Server

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 312839
Ten artykuł został opublikowany wcześniej pod numerem PL312839
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Streszczenie

Aplikacja SQL Mail pozwala w prosty sposób wysyłać i odczytywać pocztę e-mail z serwera programu SQL Server. Ponieważ jednak SQL Mail jest aplikacją interfejsu Messaging Application Programming Interface (MAPI), na serwerze musi być obecny podsystem MAPI. System Microsoft Windows 2000 nie instaluje podsystemu MAPI (system Microsoft Windows NT 4.0 instaluje podsystem MAPI podczas instalowania usługi Windows Messaging). W związku z tym, aby używać aplikacji SQL Mail, trzeba zainstalować klienta MAPI, na przykład program Microsoft Outlook.

Do wysyłania opartej na protokole Simple Mail Transport Protocol (SMTP) poczty e-mail bezpośrednio z serwera programu SQL Server można również używać innych metod, takich jak użycie serwera Collaboration Data Objects for NT Server (CDONTS) lub Collaboration Data Objects for Windows 2000 (CDOSYS) w połączeniu z procedurami przechowywanymi Automatyzacji OLE, sp_OA, programu SQL Server. W tym artykule przedstawiono przykład, jak używać tych technik do wysyłania poczty e-mail na internetowy serwer poczty. Przedstawioną metodę można rozszerzyć, tworząc bardziej zaawansowany system wysyłania poczty. Można na przykład dodać kod obsługi błędów. Metody omówione w tym przykładzie nie udostępniają sposobów odczytywania ani przetwarzania poczty e-mail.

UWAGA: Przedstawione przykłady programowania ilustrują technikę, której można używać do wywoływania modelu obiektów CDO z języka Transact-SQL. Za wszelkie rozszerzenia programowe tych przykładów oraz testowanie niezbędne do używania tego kodu w środowisku produkcyjnym odpowiedzialność ponosi użytkownik. Firma Microsoft podaje przykłady programowania tylko dla celów ilustracyjnych, nie udzielając żadnej rękojmi, wyrażonej wprost lub domyślnie, w tym także, bez ograniczeń, ustawowej rękojmi co do przydatności handlowej lub do określonych celów. W tym artykule zakłada się, że czytelnik zna demonstrowany język programowania oraz narzędzia używane do tworzenia i debugowania procedur. Jeśli czytelnik ma niewielkie doświadczenie w programowaniu, może skontaktować się z autoryzowanym partnerem firmy Microsoft. Aby uzyskać więcej informacji dotyczących certyfikowanych partnerów firmy Microsoft, odwiedź następującą witrynę firmy Microsoft w sieci Web:
http://www.microsoft.com/poland/partner/mcp/lista.asp
Aby uzyskać więcej informacji na temat dostępnych opcji pomocy technicznej oraz sposobu kontaktowania się z firmą Microsoft, odwiedź następującą witrynę w sieci Web:
http://support.microsoft.com/default.aspx?scid=fh;PL;CNTACTMS
UWAGA: Opisane tu przykłady firm, organizacji, produktów, nazw domen, adresów e-mail, logo, osób, miejsc i zdarzeń są fikcyjne. Ewentualny związek z rzeczywistą firmą, organizacją, produktem, nazwą domeny, adresem e-mail, logo, osobą, miejscem lub zdarzeniem jest niezamierzony i nie należy się go doszukiwać.

Jak używać serwera CDO for NT Server (CDONTS)

CDONTS jest specyficznym dla protokołu Simple Mail Transfer Protocol (SMTP) serwerem OLE zaprojektowanym specjalnie z myślą o umożliwieniu obsługi wiadomości aplikacjom opartym na sieci Web. W związku z tym, w odróżnieniu od aplikacji opartych na interfejsie MAPI, takich jak SQL Mail, serwer CDONTS obsługuje wysyłanie poczty e-mail opartej na języku HTML. Domyślnie serwer CDONTS jest instalowany przez program Microsoft Internet Information Server (IIS) 4.0 lub nowszy. Program Microsoft Internet Information Server (IIS) 5.0 jest z kolei domyślnie instalowany przez system Microsoft Windows 2000. Aby uzyskać dodatkowe informacje o serwerze CDONTS, kliknij numer artykułu poniżej w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
177850 INFO: What is the Difference Between CDO 1.2 and CDONTS?
Serwer CDONTS wysyła pocztę e-mail za pośrednictwem protokołu SMTP na lokalny serwer. Jeśli na lokalnym serwerze nie ma zainstalowanego serwera SMTP, można użyć wirtualnego serwera SMTP, którego program IIS instaluje w celu routowania poczty e-mail SMTP na odpowiednie serwery poczty SMTP. Aby używać serwera CDONTS do wysyłania poczty e-mail z programu SQL Server, wykonaj następujące kroki:

  1. Zainstaluj i uruchom program IIS na komputerze z programem SQL Server.
  2. Określ serwer poczty SMTP jako „inteligentnego hosta”, tak aby usługa IIS SMTP automatycznie routowała na serwer poczty SMTP wszystkie wiadomości e-mail SMTP wysłane na serwer lokalny.
  3. W programie SQL Server utwórz procedurę przechowywaną, której będzie można używać do wysyłania poczty e-mail.
Jeśli zamiast aplikacji SQL Mail używany jest serwer CDONTS, na komputerze z programem SQL Server nie musi być zainstalowany klient poczty, taki jak program Microsoft Outlook, ani serwer programu Microsoft Exchange. Jako „inteligentnego hosta” można używać dowolnego serwera poczty, który obsługuje pocztę e-mail SMTP. Jednak za pomocą serwera CDONTS nie można odczytywać ani przetwarzać poczty e-mail wysłanej na serwer programu SQL Server. Nie zastępuje on również funkcji aplikacji SQL Agent Mail.

Przedstawione poniżej instrukcje dotyczą systemu Microsoft Windows 2000. Jeśli na komputerze jest zainstalowany program IIS 4.0, w podobny sposób można skonfigurować system Microsoft Windows NT 4.0; jednak kroki, które trzeba w tym celu wykonać, nieco się różnią. Aby uzyskać dodatkowe informacje, jak skonfigurować inteligentnego hosta w systemie Microsoft Windows NT 4.0, kliknij numer artykułu poniżej w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
230235 XCON: How to Configure the IIS SMTP Service to Relay SMTP Mail

Konfigurowanie inteligentnego hosta

  1. Na pasku zadań kliknij przycisk Start, wskaż polecenie Programy, wskaż polecenie Narzędzia administracyjne, a następnie kliknij polecenie Menedżer usług internetowych, aby otworzyć Menedżera IIS.
  2. Otwórz drzewo serwera. Kliknij prawym przyciskiem myszy węzeł Domyślny serwer wirtualny SMTP, a następnie kliknij polecenie Właściwości.
  3. Przejdź na kartę Dostarczanie, a następnie kliknij przycisk Zaawansowane.
  4. Wprowadź nazwę serwera poczty SMTP w polu tekstowym Inteligentny host. (Jeśli nie znasz tej nazwy, skontaktuj się z administratorem poczty.)
  5. Upewnij się, że usługa Simple Mail Transfer Protocol (SMTP) jest uruchomiona. Usługa SMTP jest częścią Usługi administracyjnej IIS, więc ta usługa również musi być uruchomiona.

Tworzenie procedury przechowywanej służącej do wysyłania poczty e-mail CDONTS

Kodu podobnego do przedstawionego poniżej można użyć do utworzenia procedury przechowywanej w głównej bazie danych, służącej do wysyłania poczty e-mail przy użyciu procedur przechowywanych Automatyzacji OLE programu SQL Server do wywoływania modelu obiektów CDONTS:
CREATE PROCEDURE [dbo].[sp_send_cdontsmail] 
@From varchar(100),
@To varchar(100),
@Subject varchar(100),
@Body varchar(4000),
@CC varchar(100) = null,
@BCC varchar(100) = null
AS
Declare @MailID int
Declare @hr int
EXEC @hr = sp_OACreate 'CDONTS.NewMail', @MailID OUT
EXEC @hr = sp_OASetProperty @MailID, 'From',@From
EXEC @hr = sp_OASetProperty @MailID, 'Body', @Body
EXEC @hr = sp_OASetProperty @MailID, 'BCC',@BCC
EXEC @hr = sp_OASetProperty @MailID, 'CC', @CC
EXEC @hr = sp_OASetProperty @MailID, 'Subject', @Subject
EXEC @hr = sp_OASetProperty @MailID, 'To', @To
EXEC @hr = sp_OAMethod @MailID, 'Send', NULL
EXEC @hr = sp_OADestroy @MailID
Użyj tej procedury przechowywanej i podaj właściwe parametry:
exec sp_send_cdontsmail 'osoba@microsoft.com','osoba2@microsoft.com','Test serwera CDONTS','OK'
Serwer CDONTS wysyła wiadomość e-mail na lokalny serwer wirtualny SMTP, który następnie routuje tę wiadomość e-mail na serwer poczty SMTP określony w polu tekstowym Inteligentny host. Serwer poczty SMTP wysyła wiadomość na adres e-mail określony w argumencie To: (w przykładzie osoba2@microsoft.com). Nazwa określona w argumencie From: pojawia się jako nadawca wiadomości e-mail (w przykładzie osoba@microsoft.com) o temacie „Test serwera CDONTS” i treści „OK”. Wiadomość nie jest wysyłana jako „do wiadomości”, ponieważ nie podano argumentów dla pól CC (DW) i BCC (UDW).

Ten przykład można rozszerzyć, tak aby można było wysyłać wiadomości e-mail oparte na języku HTML lub załączniki. Dokumentację serwera CDONTS można znaleźć w następującej witrynie sieci Web:

MSDN Library

W lewym okienku rozwiń gałąź Messaging and Collaboration, rozwiń gałąź Collaboration Data Objects, a następnie rozwiń gałąź CDO 1.2.1.

Dokumentację procedur przechowywanych Automatyzacji OLE programu SQL Server można znaleźć w podręcznikach online dla programu Microsoft SQL Server 2000.

Jak używać serwera CDO for Windows 2000 (CDOSYS)

Serwer CDOSYS udostępnia model obiektów do tworzenia aplikacji do obsługi wiadomości w systemie Microsoft Windows 2000 i rozszerza funkcje istniejącej biblioteki CDO for Windows NT Server (CDONTS). Serwer CDOSYS wymaga systemu Windows 2000 i lokalnego lub zdalnego serwera SMTP. Serwer CDOSYS można tak skonfigurować, aby programowo wskazywał serwery SMTP, co zapewnia deweloperom elastyczność konfigurowania serwerów SMTP.

Aby uzyskać dodatkowe informacje o serwerze CDOSYS, kliknij numer artykułu poniżej w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
195683 INFO: Relationship between 1.x CDO Libraries and CDOSYS.DLL
Ponieważ serwer CDOSYS może wysyłać pocztę e-mail na zdalny serwer SMTP, serwer CDOSYS nie wymaga zainstalowania i uruchomienia programu Internet Information Server na komputerze z programem SQL Server. Nie trzeba również konfigurować serwera wirtualnego SMTP. Wystarczy jedynie utworzyć w programie SQL Server procedurę przechowywaną, której będzie można używać do wysyłania poczty e-mail.

Jeśli zamiast aplikacji SQL Mail używany jest serwer CDOSYS, na komputerze z programem SQL Server nie musi być zainstalowany klient poczty, taki jak program Microsoft Outlook, ani serwer Microsoft Exchange. Jako „inteligentnego hosta” można używać dowolnego serwera poczty, który obsługuje pocztę e-mail SMTP. Jednak za pomocą serwera CDOSYS nie można odczytywać ani przetwarzać poczty e-mail wysłanej na serwer programu SQL Server. Nie zastępuje on również funkcji aplikacji SQL Agent Mail.

Używanie serwera CDOSYS z obiektem Automatyzacji OLE języka SQL opiera się na używaniu Automatyzacji OLE programu SQL Server do wywoływania modelu obiektów CDOSYS i zostało przetestowane z programami SQL Server 2000 service pack 1 i 2. Firma Microsoft nie gwarantuje, że serwer CDOSYS może być wywoływany przez procedury przechowywane Automatyzacji OLE w wersjach programu SQL Server starszych niż SQL Server 2000 sp1.

Tworzenie procedury przechowywanej służącej do wysyłania poczty CDOSYS

Kodu podobnego do przedstawionego poniżej można użyć do utworzenia procedury przechowywanej w głównej bazie danych, służącej do wysyłania poczty e-mail przy użyciu procedur przechowywanych Automatyzacji OLE programu SQL Server do wywoływania modelu obiektów CDOSYS:
CREATE PROCEDURE [dbo].[sp_send_cdosysmail] 
   @From varchar(100) ,
   @To varchar(100) ,
   @Subject varchar(100)=" ",
   @Body varchar(4000) =" "
/*********************************************************************

Ta procedura przechowywana używa powyższych parametrów i wysyła wiadomość e-mail. 
Cała konfiguracja poczty jest ustalona w procedurze przechowywanej. 
Tam, gdzie to konieczne, do procedury przechowywanej dodano komentarze.
Odwołanie do obiektów CDOSYS znajduje się w następującej witrynie usługi MSDN w sieci Web:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_messaging.asp

***********************************************************************/ 
   AS
   Declare @iMsg int
   Declare @hr int
   Declare @source varchar(255)
   Declare @description varchar(500)
   Declare @output varchar(1000)

--************* Utworzenie obiektu CDO.Message ************************
   EXEC @hr = sp_OACreate 'CDO.Message', @iMsg OUT

--*************** Konfigurowanie obiektu wiadomości ******************
-- Konfigurowanie zdalnego serwera SMTP.
-- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_sendusing.asp
   EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'
-- Konfigurowanie nazwy lub adresu IP serwera. 
-- Zastąpienie zmiennej MailServerName nazwą lub adresem IP serwera SMTP.
   EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', 'MailServerName' 

-- Zapisanie konfiguracji w obiekcie wiadomości.
   EXEC @hr = sp_OAMethod @iMsg, 'Configuration.Fields.Update', null

-- Ustawienie parametrów wiadomości e-mail.
   EXEC @hr = sp_OASetProperty @iMsg, 'To', @To
   EXEC @hr = sp_OASetProperty @iMsg, 'From', @From
   EXEC @hr = sp_OASetProperty @iMsg, 'Subject', @Subject

-- Jeśli wiadomość e-mail jest oparta na języku HTML, użyj 'HTMLBody' zamiast 'TextBody'.
   EXEC @hr = sp_OASetProperty @iMsg, 'TextBody', @Body
   EXEC @hr = sp_OAMethod @iMsg, 'Send', NULL

-- Przykładowa obsługa błędów.
   IF @hr <>0 
     select @hr
     BEGIN
       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
       IF @hr = 0
         BEGIN
           SELECT @output = '  Source: ' + @source
           PRINT  @output
           SELECT @output = '  Description: ' + @description
           PRINT  @output
         END
       ELSE
         BEGIN
           PRINT '  sp_OAGetErrorInfo failed.'
           RETURN
         END
     END

-- Obsługę błędów można dodać po każdym kroku.
-- Wyczyszczenie utworzonych obiektów.
   EXEC @hr = sp_OADestroy @iMsg
   go
Użyj tej procedury przechowywanej i podaj właściwe parametry:
   declare @Body varchar(4000)
   select @Body = 'To jest test'
   exec sp_send_cdosysmail 'osoba@microsoft.com','osoba2@microsoft.com','Test serwera CDOSYS',@Body
Serwer CDOSYS wysyła wiadomość e-mail na zdalny serwer poczty SMTP określony jako cdoSMTPServerName. Serwer poczty SMTP wysyła wiadomość na adres e-mail określony w argumencie To: (w przykładzie osoba2@microsoft.com). Nazwa określona w argumencie From: pojawia się jako nadawca wiadomości e-mail (w przykładzie osoba@microsoft.com) o temacie „Test serwera CDOSYS” i sformatowanej jako HTML wiadomości e-mail zawartej w zmiennej @sHTML. Ten przykład można rozszerzyć, tak aby można było wysyłać tekstowe wiadomości e-mail lub załączniki. Dokumentację serwera CDOSYS można znaleźć w następującej witrynie sieci Web:

MSDN Library

W lewym okienku rozwiń gałąź Messaging and Collaboration, rozwiń gałąź Collaboration Data Objects, a następnie rozwiń gałąź CDO for Windows 2000.


Materiały referencyjne

Podręczniki online dla programu SQL Server 2000; temat: „SQL Server OLE Automation stored procedures”

Właściwości

Numer ID artykułu: 312839 - Ostatnia weryfikacja: 15 lutego 2011 - Weryfikacja: 2.9
Słowa kluczowe: 
kbsqlmanagementtools _ik501 kbhowto kbhowtomaster KB312839

Przekaż opinię

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com