Odesílání emailů z SQL serveru pomocí CDONTS.NewMail
Potřebujete odeslat email přímo z SQL serveru a nemůžete použít SQL Mail? V tomto článku se dozvíte, jak si s takovým problémem poradit.
Standardně je k odesílání emailů z SQL serveru používána služba SQL Mail. Bohužel, provoz této služby vyžaduje na serveru nainstalovánu klientskou aplikaci rozhraní MAPI (například MS Outlook) a profil zpráv rozhraní MAPI, ke kterému je nutný také doménový uživatelský účet. Splnit výše uvedené podmínky pro službu SQL Mail může být v řadě případů problematické a někdy i nemožné. Jak z této šlamastiky ven? Vzpomeňte si, jakým způsobem lze pomocí ASP odesílat emaily (viz článek ASP a rozesílání emailů? Žádný problém).
V MS SQL existují rozšířené uložené procedury, které dokáží pracovat s COM objekty. Pokud využijete této funkčnosti objektu CDONTS.NewMail a síly rozšířených uložených procedur, záhy zjistíte, že dokážete zcela bez problémů a jakékoli konfigurace MAPI a dalších „zbytečností“ odeslat požadovaný email. Pro zajištění funkčnosti stačí pomocí rozšířené uložené procedury sp_OACreate
vytvořit instanci objektu CDONTS.NewMail a následně nastavit parametry pomocí sp_OASetProperty
jako je odesílatel, příjemce, předmět či tělo zprávy. Takto připravenou poštovní zprávu odešlete pomocí metody Send, k jejímuž provedení využijete rozšířenou uloženou proceduru sp_OAMethod
. Důležitým krokem, kterým je bezpodmínečně nutné celou akci zakončit, je zrušení instance objektu CDONTS.NewMail pomocí uložené procedury sp_OADestroy
!
CREATE Procedure sp_SMTPMail
@SenderAddress varchar(100),
@RecipientAddress varchar(100),
@Subject varchar(200),
@Body varchar(8000)
AS
SET nocount on
declare @oMail int
declare @resultcode int
EXEC @resultcode = sp_OACreate ‚CDONTS.NewMail‘, @oMail OUT
if @resultcode = 0
BEGIN
EXEC @resultcode = sp_OASetProperty @oMail, ‚From‘, @SenderAddress
EXEC @resultcode = sp_OASetProperty @oMail, ‚To‘, @RecipientAddress
EXEC @resultcode = sp_OASetProperty @oMail, ‚Subject‘, @Subject
EXEC @resultcode = sp_OASetProperty @oMail, ‚Body‘, @Body
EXEC @resultcode = sp_OAMethod @oMail, ‚Send‘, NULL
EXEC sp_OADestroy @oMail
END
select @resultcode
SET nocount off
GO
Přestože v uložené proceduře používám objekt CDONTS.NewMail lze jej nahradit jakýmkoli objektem s podobnou funkčností. Hotovou proceduru použijete takto:
EXEC sp_SMTPmaIL „test@INTERVAL.CZ“,“ondrej.kopp@interval.cz“,“Mail odeslaný z SQL pomocí uložené procedury“, „Tento mail by odeslán z SQL serveru pomocí CDONTS.NewMail.“
A jak ji využít v praxi? Co třeba při vložení záznamu do tabulky, pro emailové upozornění na nový příspěvek v diskuzi? Tuto funkčnost můžete zařídit tak, že použijete trigger (spoušť), která se aktivuje při vložení nového záznamu.
Bohužel, s výše popsaným řešením budete mít asi problémy, pokud používáte webhosting, protože budete mít pravděpodobně zakázáno spouštění rozšířených uložených procedur. Zde se však musím správců hostingových SQL serverů zastat, protože rozšířené uložené procedury poskytují mocný nástroj, kterým lze sice udělat spoustu užitečné práce, ale také ho lze velice snadno zneužít. Proto považuji za více než vhodné mít pro uživatele spouštění rozšířených uložených procedur zakázané.
Pokud požíváte výhod placeného hostingu, neměl by pro vás být problém přesvědčit správce SQL serveru, aby vám rozšířené uložené procedury používat povolil. Pokud přesně specifikujete, co a k čemu potřebujete, rozumný správce určitě nebude proti. Není třeba povolovat exekute všech rozšířených uložených procedur, pro práci s COM objekty zcela postačí pouze následující:
- sp_OACreate
- sp_OASetProperty
- sp_OAMethod
- sp_OADestroy
Ještě jedna poznámka na závěr. Už slyším dotazy, zda lze pomocí tohoto řešení odesílat maily s přílohou. Odpověď zní ano. Doplněním několika řádků a plným využitím objektu CDONTS.NewMail lze odesílat i soubory. Myslím si však, že většině z vás nebude činit problém si takovou funkčnost doplnit – tento článek přitom můžete považovat za „odrazový můstek“.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Doména .io v ohrožení: Co přinese předání Čagoských ostrovů?
10. října 2024 -
AI v programování: Jak používat GitHub Copilot (část 1)
12. února 2024 -
Jak zabezpečit váš chytrý telefon před kybernetickými hrozbami
30. listopadu 2023 -
10 nejpopulárnějších programovacích jazyků a jejich využití
9. listopadu 2023
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024