VBS: odoslanie HTML emailu s obrázkom cez SMTP

Predvediem Vám odladený krátky skript pre Windows Shell (nasledovník .bat skriptov) napísaný vo Visual Basic (.vbs), ktorý dokáže odoslať HTML mail s vloženým obrázkom. Poskladal som to z príkladov ako vo VBS odoslať mail, ako vložiť HTML telo a hlavne som odladil vloženie obrázku. Strávil som nad tým významnejší čas a nevidím dôvod Vám ho neposkytnúť.

Skript si načíta textový súbor so zoznamom e-mailových adries a postupne každej z nich pošle separátny mail (miesto toho, aby som zoznam adries vložil do skrytej kópie sa teda zdanlivo nelogicky posielajú maily takto – je to cesta k ďalšiemu rozširovaniu skriptu).

Samotné telo v HTML je tiež v samostatnom súbore, takže si môžete separátne poskladať HTML kód tela správy. Nechcelo sa mi riešiť spracovanie obrázkov, takže v skripte je „natvrdo“ ukážka ako pridať JEDEN obrázok. V HTML kóde vidíte potom aj ako sa to zapíše pomocou značky IMG.

V skripte vidíte cestu D:\mailing – buď všetky súbory uložte sem alebo ju v skripte zmeňte.

Skript: uložte ho napríklad do D:\mailing ako mailing.vbs

Set fso = CreateObject("Scripting.FileSystemObject")
Set listFile = fso.OpenTextFile("zoznam.txt")
Dim contentId
Dim objImage
do while not listFile.AtEndOfStream 

Set objMessage = CreateObject("CDO.Message")
' Adresa odosielatela
objMessage.From = "odosielatel@example.org"
objMessage.To = listFile.ReadLine()

' Predmet spravy
objMessage.Subject = "HTML email pre " & objMessage.To
objMessage.TextBody = "Mail nie je mozne zobrazit."

' Súbor s HTML kódom tela e-mailu
objMessage.CreateMHTMLBody "file://D:\mailing\body.htm"

' Priloha - obrazok - premenujte ho podla seba - 100percent.gif
Set objBP = objMessage.AddRelatedBodyPart("file://D:\mailing\100percent.gif", "100percent.gif", CdoReferenceTypeName)

objBP.Fields.Item("urn:schemas:mailheader:Content-ID") = "<100percent.gif>"

objBP.Fields.Update

objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

' Sem vlozte adresu SMTP servera
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "SMTPserver"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update

objMessage.Send

loop

body.htm je telo HTML mailu bez hlavičiek (nemali by ste použiť značky html, head, title, body a pod.).

Obrázok v tomto súbore môžeme teda umiestniť pomocou značky IMG a to takto:

<img src='cid:100percent.gif' width=126 height=50>

vidíte, že v SRC je zvlášť formátovaná adresa k obrázku. Začína kódom cid: a nasleduje pomenovanie obrázku. V kóde skriptu som musel zvlášť vložiť prílohu pod presne definovaným menom (inak to VBS pomenuje náhodným reťazcom). Preto som použil tri riadky začínajúce objBP. Normálne prílohy sa totiž vkladajú jedným príkazom pre VBS.

zoznam.txt je skutočne jednoduchý textový súbor, je možné si to skomplikovať napríklad načítavaním z XLS, databázy a podobne – to sa dá aj dohľadať na webe.

Skript by mal bežať v podstate na všetkých Windows (interpreter VBS pre WSH má už Windows XP).

Samozrejme pre úspešné odoslanie potrebujete SMTP server ale to je už iná kapitola a pokiaľ netušíte aké podmienky by mal SMTP server spĺňať, tak tento skript nie je pre Vás.


Skript poskytujem ľuďom so znalosťou HTML, SMTP komunikácie a aspoň čiastočným povedomím o WSH a VBS. Pokiaľ o niečom z vymenovaného nemáte ani tušenia, tak neriskujte.

  • .vbs: skripty pre Windows Shell priamo spustiteľné v prostredí Windows, sofistikovaný nástroj pre automatizovanie rôznych operácií,
  • SMTP: protokol určený ku komunikácii klienta s poštovým serverom a na odosielanie e-mailovej správy,
  • HTML: značkovací jazyk pre formátovanie dokumentov na webe,
  • Windows: známy operačný systém spoločnosti Microsoft.

Nezodpovedám za blbosti, ktoré spáchate ani za všetky možné dôsledky použitia tohto skriptu. Veľmi vážne upozorňujem na predošlý odstavec a na to, že Vy použitím tohto skriptu preberáte zodpovednosť za všetky následky.

K tomuto článku a skriptu môžete mať pripomienky ale nemôžete mať žiadne výhrady, požiadavky ani nemiestne poznámky. Skript je uverejnený ako inšpirácia.

Written by rony