Windows Server 2012 Automation with PowerShell Cookbook
上QQ阅读APP看书,第一时间看更新

Sending e-mail

Integration with e-mail is a key capability for automating administration tasks. With e-mail, you can run tasks that automatically let you know when they are complete, or e-mail users when information is needed from them, or even send reports to administrators.

This recipe shows different methods of sending e-mail to users.

Getting ready

To send an e-mail using PowerShell, we will need a mail system capable of accepting SMTP mail from your computer. This can be a Microsoft Exchange server, and IIS server, a Linux host, or even a public mail service such as Google Mail. The method we use may change how the e-mail appears to the end recipient and may cause the message to be flagged as spam.

How to do it...

To send e-mail using the traditional .NET method:

  1. Open PowerShell and load the following function:
    function Send-SMTPmail($to, $from, $subject, $smtpServer, $body) 
    {
            $mailer = new-object Net.Mail.SMTPclient($smtpServer)
            $msg = new-object Net.Mail.MailMessage($from, $to, $subject, $body)
            $msg.IsBodyHTML = $true
            $mailer.send($msg)
    }
  2. To send the mail message, call the following function:
    Send-SMTPmail -to "admin@contoso.com" -from "mailer@contoso.com" `
    -subject "test email" -smtpserver "mail.contoso.com" -body "testing" 
  3. To send e-mail using the included PowerShell Cmdlet.
  4. Use the Send-MailMessage command as shown:
    Send-MailMessage -To admin@contoso.com -Subject "test email" `
    -Body "this is a test" -SmtpServer mail.contoso.com `
    -From mailer@contoso.com  

How it works...

The first method shown uses a traditional .NET process to create and send the e-mail. If you have experience programming in one of the .NET languages, this process may be familiar. The function starts by creating a Net.Mail.SMTPclient object that allows it to connect to the mail server. Then a Net.Mail.MailMessage object is created and populated with the e-mail content. Lastly, the e-mail is sent to the server.

The second method uses a in-built PowerShell cmdlet named Send-MailMessage. This method simplifies the mailing method into a single command while providing flexibility in the mailing options and methods of connecting to mail servers.

There's more...

Most e-mail functions can be performed by the Send-MailMessage command. More information can be found by executing help Send-MailMessage. The following additional command switches allow the command to perform most mail functions needed:

  • Attachments
  • CC/BCC
  • SMTP authentication
  • Delivery notification
  • E-mail priority
  • SSL encryption