sestdiena, 2011. gada 26. februāris

E-pastu sūtīšana no SQL Server (DB Mail)

Rakstā aprakstīts, kas ir Database Mail (DB Mail) un kā tas strādā. Tāpat pieminēts tā priekšgājējs- SQL Mail. (rakstu sērija par šo tēmu- DB Mail kompsavilkums)

E-pastu sūtīšana kā reakcija uz kādu notikumu ir visai pieprasīta iespēja. Domāju, ka katram ienāk prātā vismaz pāris scenāriji, kad tas varētu noderēt. E-pastu sūtīšanas iespēja SQL Server tiek piedāvāta jau visai sen. Kopš SQL Server 6.0 (1995 gads) var izmantot SQL Mail e-pastu sūtīšanai. Arī SQL Server 2005, 2008 R2 joprojām ir iespējams izmantot SQL Mail, tomēr tas ir tikai lai nodrošinātu jau izstrādāto risinājumu darbību. Savukārt, sākot ar SQL Server 2005, tiek rekomendēts izmantot jauno DB Mail un pārveidot esošos risinājumus lai tie izmantotu DB Mail.
Starp citu, SQL Server Express nav iespējas izmantot DB Mail.

SQL Mail lietojis nekad neesmu, tāpēc gari komentāri par to nebūs. Bet ja ir vēlme- šeit var aiziet palasīt biežāk uzdotos jautājumus par SQL Mail un pašausmināties. Ja ar to nepietiek, turpat var palasīt kā notiek SQL Mail konfigurācija.
Piemēram man, lai arī esmu, heh, sajūsmā par MS Office, tā instalēšana uz servera liekas nepatīkama lieta (kaut vai daļēji- MS Outlook). [Tā priekšvēsture ir tāda, ka sen atpakaļ biju izveidojis saglabāto (stored) procedūru, kas izveido MS Word dokumentu un saglabā to uz servera. Neskaitās laba prakse- bet vienīgais veids tajos laikos. Tā bija lieliska pieredze un tiešām interesants uzdevums. To veicot, salasījos cik slikti uz servera izmantot office, kādas tam alternatīvas utt utt..]. Outlook uz servera nepieciešams tādēļ, ka SQL Mail izmanto MAPI (Messaging Aplication Programming Interface), kamēr jaunais DB Mail izmanto SMTP (Simple Mail Transfer Protocol).

DB Mail arhitektūra
DB Mail sastāv no 4 galvenajām komponentēm:
  • Konfigurācijas un drošības komponentes (Configuration and security components)
    Drošības un konfigurācijas informācija tiek glabāta msdb sistēmas datu bāzē. Konfigurācijas un drošības objekti tiek izmantoti lai izveidotu DB Mail profilus un kontus (skatīt raksta turpinājumā).
  • Ziņojuma sūtīšanas komponentes (Messaging components)
    Objekti, ko DB Mail izmanto, lai uzglabātu un sūtītu ziņojumus. Sistēmas datu bāze msdb tiek izmantota kā "saimnieka" datu bāze, kurā tiek glabāti šie objekti. Tajā skaitā storētā procedūra sp_send_dbmail.
  • DB Mail izpildāmā faila (Database Mail executable)
    Ārēja programma, kas nolasa sūtīšanai paredzētos e-pastus no msdb datu bāzes rindas. Nosūta/mēģina nosūtīt ziņojumu SMTP serverim. Kad tas izdarīts- veiksmīgi vai neveiksmīgi, tiek reģistrēts ziņojuma statuss msdb datu bāzē.
  • Notikumu reģistrēšanas un auditēšanas komponentes (Logging and auditing components)
    Reģistrē notikumus msdb datu bāzē, kā arī Windows aplikāciju notikumu logā.
E-pasta sūtīšanas process (attēls no raksta)


Tādā augstā apstrakcijas līmenī, e-pasta sūtīšana notiek tā:
  1. Lietotājs izsauc storēto procedūru sp_send_dbmail (no msdb datu bāzes), ar parametru palīdzību uzstādot e-pastu saturu, adresātu, utt. (lai būtu tiesības izsaukt šo procedūru un reāli nosūtīt e-pastu, skatīt raksta turpinājumā "DB Mail profili un konti")
  2. Procedūra ievieto e-pastu rindā, process, kas izsauca e-pastu, turpinās.
    Šī ir visai svarīga lieta- DB Mail strādā asinhroni- tas nozīmē, ka izsaucot sp_send_dbmail epasts reāli netiek nosūtīts, bet tikai tiek ielikts rindā sūtīšanai (paldies Service Broker par šīm iespējām). Tas nozīmē, ka procedūras, kuras vidū ir e-pasta sūtīšana, veiksmīga izpilde vēl nenozīmē, ka arī e-pasts ir veiksmīgi nosūtīts. Tā ir nevis problēma, bet lieliska īpašība, jo nemaz nebūtu labi, ja procedūras izpilde "uzkārtos" dēļ tā, ka ziņojuma sūtīšana ieilgst vai nenotiek.
  3. Kad rindā tiek ievietots e-pasts, tiek izsaukts ārējais process- DatabaseMail.exe, kas savukārt ziņojumu mēģina sūtīt uz vajadzīgo e-pasta serveri(em). Šis process reģistrē uzdevuma rezultātus msdb datu bāzes statusu rindā (gan veiksmes, gan neveiksmes gadījumā). Datu bāzē tiek uzglabāti arī e-pasta pielikumi, ja tādi ir.
  4. Kad statusu rindā reģistrēts jauns notikums (tātad- no 3. punkta), tad msdb datu bāzē tiek atjaunots e-pasta statuss.
DB Mail profili un konti
Lietotājiem, kuriem jāvar nosūtīt e-pasts, tiek piešķirts viens vai vairāki profili, ko tie var izmantot e-pastu sūtīšanai. Katrs profils, savukārt, izmanto vienu vai vairākus SMTP kontus e-pastu sūtīšanai. Tas izskatās šādi (attēls no šejienes):
Konts (account) satur informāciju, ko SQL Server izmanto e-pasta sūtīšanai. Svarīgākais- SMTP servera adrese un autentifikācijas veids, kā pie šī servera pieslēgties (plašāk šeit).
Profils (profile) principā ir viena vai vairāku kontu apvienojums. Lietotājs izmanto profilus e-pastu sūtīšanai. Līdz ar to, ja mainās SMTP serveru adreses vai tie vispār tiek nomainīti, nav jāmaina uzrakstītais kods- pietiek nomainīt vai izlabot kontus, ko attiecīgais profils izmanto (plašāk šeit- arī aprakstīts, kurš konts tiks izmantots, ja vienam profilam tādi ir vairāki).

Profili var būt publiski un privāti.
Privātos profilus var izmantot tikai tie lietotāji, kuriem speciāli piešķirtas tiesības izmantot šo profilu. Publiskos profilus var izmantot visi lietotāji, kam ir tiesības sūtīt e-pastus. Kā publisko, tā privāto profilu gadījumā, lietotājs var sūtīt e-pastu tikai tad, ja tas ir msdb datu bāzē un tas pieder lietotāju grupai "DatabaseMailUserRole".

Kopsavilkums
Šī raksta mērķis ir vispārīgi un visai abstrakti apskatīt, kā strādā DB Mail. Šajā rakstā svarīgākais:
Izmantot DB Mail e-pastu sūtīšanai ir labi, SQL Mail ir slikti (SQL Mail bija variants agrāk, bet, sākot ar SQL Server 2005, labāka alternatīva ir DB Mail)
Lai būtu iespējama e-pastu sūtīšana, SQL Server jābūt konfigurētam tā, lai tas atļautu lietot DB Mail. Lietotājam jābūt msdb datu bāzē un jāpieder "DatabaseMailUserRole" lomai. Jābūt konfigurētiem kontiem un profiliem e-pasta sūtīšanai un attiecīgajam lietotājam jābūt tiesībām izmantot kādu no izveidotajiem e-pasta sūtīšanas profiliem.

Nav komentāru:

Komentāra publicēšana