Spravodaj

21. január 2010 07.55 E-MAIL

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.

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.


Pokiaľ sa ti zdá, že tento článok by sa hodil do výberu zaujímavých stránok, tak ho sme.sk pošli do vybrali.sme.sk

Komentáre k obsahu príspevku:

Chcete napísať nesúhlasný komentár? Prosím, zvážte nasledovné: je šanca, aby niekto zmenil Váš názor alebo chcete iba trvať na svojom? V prvom prípade sú Vaše slová vítané.

Chcete urážať? Nepíšte sem urážky a invektívy. Každý, kto na týchto stránkach publikuje je automaticky (doplňte vhodný výraz). Takže už to všetci vopred vieme, čo si myslíte a preto sa neopakujte.

Zmena od 1.2.2010: Komentovať môžete už iba prostredníctvom IntenseDebate (dolenižšie). Odporúčam Vám registráciu, čo prinesie výhody v nemoderovanom prístupe (nemusím Vám schvaľovať komentáre).

  1. A tvoj názor?