Sonntag, 31.07.2016 (CEST) um 05:37 Uhr
www.windowspage.de WerbungDer MISCO Deal der Woche!
News:
Herzlich Willkommen bei Windowspage. Alles rund um Windows.

Tipps - E-Mail-Nachrichten mit Windows Powershell / VisualBasic-Skript versenden (Sendmail)
Detailbeschreibung
Betriebssystem: Windows 2000, Windows XP, Windows 2003, Windows Vista, Windows 7, Windows 8

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 New-Object erzeugt. Die SmtpClient-Klasse übergibt die E-Mail-Nachricht einem SMTP-Server und die NetworkCredential-Klasse ist für die gültigen Anmeldeinformationen zuständig. Bei umfangreicheren E-Mail-Nachrichten kann zusätzlich noch die MailMessage-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.

Windows PowerShell

Visual Basic Skript (vbs):

1. Einführung:

Um eine E-Mail-Nachricht mit VisualBasic-Skript (.vbs) zu versenden, muss nur das CDO.Message-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 ".vbs" 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


Windowspage - Weitere interessante Tipps und Einstellungen
Tipps für Windows 2000, Windows XP, Windows 2003, Windows Vista, Windows 7, Windows 8
Statistik
Valid HTML 4.01 Transitional  CSS ist valide!