E-Mail-Nachrichten können über eine entsprechenden E-Mail-Anwendung (wie z. B. Outlook Express, Windows Mail, Microsoft Outlook) oder über den Internetbrowser (Webmail) versendet werden. Es gibt durchaus auch Einsatzgebiete, in denen eine automatische E-Mail-Benachrichtigung beim Eintritt eines Ereignisses gesendet werden soll (z. B. Backup erstellt). Diese Aufgabe lässt sich auch ohne Einsatz von Drittanwendungen (wie z. B. Sendmail für Windows) mit Hilfe von Windows PowerShell (ab Windows XP) oder mit VisualBasic-Skript (ab Windows 2000).
Die nachfolgenden Beispiele und Beschreibungen zeigen nur den Grundstein bzw. einen Ausschnitt der Möglichkeiten und müssen entsprechend den eigenen Gegebenheiten (Zugangsdaten) noch angepasst werden. Bei VisualBasic-Skript können gegenüber Windows PowerShell grafische Eingabefelder und Meldungen verwendet werden. Die Mail-Funktion kann in vorhandene Skripte eingefügt oder als eigenständiges Skript ausgeführt werden.
Windows PowerShell:
1. Einführung:
Für die Versendung einer E-Mail mit PowerShell sind mindestens zwei Klassen notwendig. Jede Klasse wird mit dem Befehl erzeugt. Die -Klasse übergibt die E-Mail-Nachricht einem SMTP-Server und die -Klasse ist für die gültigen Anmeldeinformationen zuständig. Bei umfangreicheren E-Mail-Nachrichten kann zusätzlich noch die -Klasse verwendet werden. Die Mailfunktion kann entweder in einem PowerShell-Skript abgelegt oder direkt eingegeben werden.
2. Einfache E-Mail-Nachricht versenden:
$EmailFrom = "absender@domain.tld"
$EmailTo = "empfänger@domain.tld"
$Subject = "PowerShell-Mail"
$Body = "Eine Nachricht die mit PowerShell versendet worden ist."
$SMTPHost = "smtp.doamin.tdl"
$SMTPUser = "Benutzername"
$SMTPPass = "Kennwort"
$SMTPClient = New-Object System.Net.Mail.SmtpClient($SmtpHost, 25)
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($SMTPUser, $SMTPPass); $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
3. E-Mail-Nachricht mit Dateianhang versenden:
$Attachment = "C:\Windowspage\Datei.txt"
$EmailMessage = New-Object System.Net.Mail.MailMessage
$EmailMessage.From = "absender@domain.tld"
$EmailMessage.To.Add("empfänger1@domain.tld")
$EmailMessage.To.Add("empfänger2@domain.tld")
$EmailMessage.Subject = "PowerShell-Mail"
$EmailMessage.IsBodyHtml = $true
$EmailMessage.Body = "<p>Eine Nachricht die mit PowerShell im <b>HTML-Format</b> versendet worden ist.</p>"
$EmailMessage.Attachments.Add($Attachment)
$SMTPHost = "smtp.doamin.tdl"
$SMTPPort = "587"
$SMTPUser = "Benutzername"
$SMTPPass = "Kennwort"
$SMTPClient = New-Object System.Net.Mail.SmtpClient($SmtpHost, $SMTPPort)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($SMTPUser, $SMTPPass);
$SMTPClient.Send($EmailMessage)
4. Net.Mail.SmtpClient-Klasse (Auszug):
Funktion / Eigenschaft: |
Kurzbeschreibung: |
Credentials |
Legt die Anmeldeinformationen zum Authentifizieren des Absenders fest (Benutzername und Kennwort). |
EnableSsl |
Legt fest, ob die Verbindung mit SSL verschlüsselt werden soll ($true = aktiviert). |
Send() |
Sendet die angegebene Nachricht an einen SMTP-Server für die Übermittlung. Alternativ kann auch der Absender, der Empfänger, der Betreff und der Inhalt der Nachricht angegeben werden. |
SmtpClient() |
Initialisiert eine neue Instanz der SmtpClient-Klasse. Optional kann der SMTP-Server und ein Port angegeben werden. |
Timeout |
Legt die Zeitspanne bis zur Zeitüberschreitung fest (SMTP-Server reagiert nicht). |
5. Net.Mail.MailMessage-Klasse (Auszug):
Funktion / Eigenschaft: |
Kurzbeschreibung: |
Attachments |
Fügt Dateianhänge der E-Mail-Nachricht hinzu. Mit "Attachments.Add" können mehrere Anhänge hinzugefügt werden. |
Bcc |
Bildkopieempfänger (Mailadresse). Mit "Bcc.Add" können mehrere E-Mail-Adressen hinzugefügt werden. |
Body |
Legt den Nachrichtentext fest (Text, HTML). |
BodyEncoding |
Legt die Codierung des Nachrichtentextes fest (z. B.: "iso-8859-1") |
CC |
Kopieempfänger (Mailadresse). Mit "CC.Add" können mehrere E-Mail-Adressen hinzugefügt werden. |
From |
Absender (Mailadresse). |
MailMessage() |
Initialisiert eine neue Instanz der MailMessage-Klasse. |
Subject |
Betreff der E-Mail-Nachricht. |
To |
Empfänger der Nachricht. Mit "To.Add" können mehrere E-Mail-Adressen hinzugefügt werden. |
Visual Basic Skript (vbs):
1. Einführung:
Um eine E-Mail-Nachricht mit VisualBasic-Skript (.vbs) zu versenden, muss nur das -Objekt erzeugt werden. Eine VisualBasic-Skript-Datei kann mit einem Texteditor (z. B. Notepad) erstellt werden und anschließend unter einem beliebigen Namen mit der Dateierweiterung "" gespeichert werden.
2. Beispiel:
DIM objMail
SET objMail = WScript.CreateObject("CDO.Message")
objMail.From = "absender@domain.tld"
objMail.To = "empfänger@domain.tld"
objMail.Subject = "VisualBasic-Mail"
objMail.Textbody = "Eine Nachricht die mit VisualBasic-Skript versendet worden ist."
objMail.AddAttachment "C:\Windwspage\Datei.txt"
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.doamin.tdl"
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "Benutzername"
'objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "Kennwort"
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/senduserreplyemailaddress") = "absender@domain.tld"
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
objMail.Configuration.Fields.Update
objMail.Send
Set objMail = Nothing
3. CDO.Message (Auszug):
Funktion / Eigenschaft: |
Kurzbeschreibung: |
AddAttachment |
Fügt einen Dateianhang der E-Mail-Nachricht hinzu. |
BCC |
Blindkopie-Empfänger (Mailadresse). Mehrere Empfänger können durch ein Komma getrennt angegeben werden. |
CC |
Kopie-Empfänger (Mailadresse). Mehrere Empfänger können durch ein Komma getrennt angegeben werden. |
Configuration |
Legt die Konfiguration des SMTP-Servers fest (Host, Port, Anmeldeinformationen, usw.). |
From |
Absender (Mailadresse). |
HTMLBody |
Legt den HTML-Nachrichtentext fest. |
Send() |
Sendet die angegebene Nachricht an einen SMTP-Server für die Übermittlung. |
Subject |
Betreff der E-Mail-Nachricht. |
TextBody |
Legt den Nachrichtentext fest (nicht formatiert). |
To |
Empfänger der Nachricht. Mehrere Empfänger können durch ein Komma getrennt angegeben werden. |
4. Konfiguration SMTP-Server (Configuration.Fields.Item):
Funktion / Eigenschaft: |
Kurzbeschreibung: |
sendpassword |
Legt das Kennwort für den SMTP-Server fest. |
sendusername |
Legt den Benutzernamen für den SMTP-Server fest. |
senduserreplyemailaddress |
Antwortmailadresse vom Benutzer / SMTP-Server. |
sendusing |
1 = Mail wird an den lokalen SMTP-Server übermittelt
2 = Mail wird an den angegebenen SMTP-Server übermittelt. |
smtpauthenticate |
0 = Keine Authentifizierung notwendig
1 = Authentifizierung notwendig |
smtpconnectiontimeout |
Legt die Zeitspanne bis zur Zeitüberschreitung fest (SMTP-Server reagiert nicht). |
smtpserver |
Legt den Hostnamen oder die IP-Adresse vom SMTP-Server fest. |
smtpserverport |
Legt den Anschluss (Port) für die Übertragung zum SMTP-Server fest. |
smtpusessl |
0 = normale Verbindung zum SMTP-Server
1 = SSL-Verbindung zum SMTP-Server |
Einfaches Sendmail-Beispiel:
Dieses kleine VisualBasic-Skript ermöglicht die Versendung einer E-Mailnachricht. Als Parameter müssen die Empfängeradresse, die Betreffzeile und der Nachrichtentext übergeben werden.
DIM ArgObj
SET ArgObj = WScript.Arguments
if ArgObj.Count <> 3 then
HelpMessage
WScript.Quit
end if
DIM EmailTo, EmailSub, EMailMsg, EmailFrom
EmailFrom = "www@domain.tld"
EmailTo = ArgObj.Item( 0)
EmailSub = ArgObj.Item( 1)
EMailMsg = ArgObj.Item( 2)
SendMail EmailTo, EmailFrom, EMailSub, EmailMsg
function SendMail(strTo, strFrom, strSub, strMsg)
DIM objMail, SMTPHost, SMTPPort, SMTPUser, SMTPPass
SMTPHost = "localhost"
SMTPPort = 25
SMTPUser = ""
SMTPPass = ""
SET objMail = CreateObject("CDO.Message")
objMail.To = strTo
objMail.From = strFrom
objMail.Subject = strSub
objMail.TextBody = strMsg
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPHost
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPPort
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = false
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = SMTPUser
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = SMTPPass
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/senduserreplyemailaddress") = strFrom
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
objMail.Configuration.Fields.Update
objMail.Send
SET objMail = Nothing
end function
sub HelpMessage()
WScript.Echo "Aufruf: sendmail <empfänger> <betreff> <nachricht>" & vbCrlf & _
"Hinweis: <betreff> und <nachricht> in Anführungszeichen"
end sub
|