Windows - Közvetlen levélküldés szkriptekből, weblapokról

forráskód letöltése
Hetilapunkban már többször szerepeltek olyan szkriptek, melyekből E-mail üzeneteket küldtünk. Ezek kivétel nélkül mind paraméterezve hívták meg az Outlook-ot, de mi van, ha nem áll rendelkezésünkre a Microsoft üzenetküldő alkalmazása? Ilyenkor közvetlenül egy SMTP szerveren keresztül kell megvalósítani a küldést. A hogyanra az alábbiakban adunk választ.
A mellékletben megtalálható az alábbi szkript "Mail.vbs" néven. Felhasználása előtt a ponttal kezdődő sorokban módosítsuk az SMPT szerver és levél küldésének paramétereit, valós értékeket megadva.
Mi a CDO?
A CDO a Collaboration Data Objects kifejezésből származik. Tulajdonképpen egy COM komponens gyűjteményről szó, azzal a célzattal, hogy a programok általi Internetes üzenetküldést leegyszerűsítse. Windows 2000-től kezdve az operációs rendszer részeként szállítják. Elérhető a nagyobb programozási nyelveken kívül (C#, C++, Delphi, J++, stb.) szkriptekből is (VBScript, JScript). Támogatja az SMTP és NNTP protokollokkal végrehajtott üzenetküldéseket.
Rutinjait szkriptekből, programokból meghívhatjuk és így külső alkalmazás igénybevétele nélkül tudunk leveleket küldeni. Az alábbiakban példaként bemutatunk egy Visual Basic szkriptet, mely kizárólag a CDO segítségével végzi el egy E-mail elküldését. A szkript előnye, hogy önállóan is futtatható, de meghívható programokból és beépíthető weblapokba is.
Levélküldés VBScript-ből, CDO használatával
Nézzük tehát a szkriptet és működésének magyarázatát:
Elsőként létre kell hozni egy új üzenetet a CDO.Message objektumpéldánnyal.
Dim iMsg
Set iMsg = CreateObject("CDO.Message")
Az üzenet küldésének - tehát nem magának az üzenetnek - a konfigurációs beállításait (melyik SMTP szerveren keresztül küldjük, stb.) a "Configuration" interfészen keresztül lehet változtatni. Tulajdonságok és metódusok is rendelkezésünkre állnak. Utóbbiak között például a "Load", mely egy külső fájlból képes beolvasni a tulajdonságok értékeit, így nem kell minden alkalommal megadni őket, illetve nem szükséges belenyúlni a programba, ha megváltozik valamelyik érték.
Dim iConf 
Set iConf = CreateObject("CDO.Configuration")
A "Configuration" objektum "Fields" tulajdonságán keresztül lehet beállítani a küldés paramétereit. A "Fields" tulajdonság visszatérési értéke a "Fields" objektum az aktuális konfigurációs paraméterekkel.
Dim Flds
Set Flds = iConf.Fields
Ha a "cdoSendUsingMethod" értéke 2, akkor SMTP-n, ha 3, akkor Exchange kiszolgálón keresztül zajlik a küldés.
With Flds
  .Item(cdoSendUsingMethod)       = 2
A "cdoSMTPServerName" tárolja az SMTP kiszolgáló nevét vagy IP címét. Utána mindjárt megadtuk a kapcsolat időtúllépésének idejét milliszekundumban mérve.
  .Item(cdoSMTPServerName)        = "mail.microsoft.com"
  .Item(cdoSMTPConnectionTimeout) = 10
Biztonsági okokból sok esetben levelet csak a kiszolgálóra való bejelentkezés után lehet küldeni. Ehhez a felhasználói néven ("cdoSendUsername") és jelszón ("cdoSendPassword") kívül meg kell adni a hitelesítés módját. Leggyakrabban az alapfokú ("cdoBasic") használatos (lehet akár névtelen is ("cdoAnonymous").
  .Item(cdoSMTPAuthenticate)      = cdoBasic
  .Item(cdoSendUserName)          = "username"
  .Item(cdoSendPassword)          = "password"
A levélküldés proxy kiszolgálón keresztül is végrehajtható. Ha nincs proxy a következő sorok elhagyhatók.
  .Item(cdoURLProxyServer)        = "server:80"
  .Item(cdoURLProxyBypass)        = "<local>"
  .Item(cdoURLGetLatestVersion)   = True
  .Update
End With
Most már mindent beállítottunk a kiszolgálóval kapcsolatban, következhet maga az üzenet.
A tulajdonságnevek egy az egyben megegyeznek az E-mail szabvánnyal (To, From, Subject), így nem szorulnak különösebb magyarázatra.
With iMsg
  Set .Configuration = iConf
      .To       = """Matuska Szilveszter"" <sz.matuska@microsoft.com>"
      .From     = """Pogány Madonna"" <m.pogany@microsoft.com>"
      .Subject  = "Hol vagy?"
Üzenettörzsnek HTML formátum esetén egyszerűen adjuk a tároló oldal címét.
      .CreateMHTMLBody "http://mypage.html"
Mellékletet is fűzhetünk a már kész E-mail-hez.
      .AddAttachment "C:\myfile.doc"
Ezzel teljesen összeállt az üzenet és a küldéshez szükséges konfigurációs beállítások is. Utolsó lépésként a "Send" metódus használatával útjára bocsáthatjuk.
      .Send
End With