# encoding: ascii # api: powershell # title: Send-HTMLFormattedEmail # description: Made some improvements # version: 1.0 # type: function # author: tysonkopczynski # license: CC0 # function: Send-HTMLFormattedEmail # x-poshcode-id: 5383 # x-archived: 2016-10-09T05:12:43 # x-published: 2016-08-26T10:56:00 # # Use this function to send an HTML Formatted Email that is based on an XSLT template. This function is based on a blog post by Erik McCarty (http://ewmccarty.spaces.live.com). # ################################################## # cmdlets ################################################## #------------------------------------------------- # Send-HTMLFormattedEmail #------------------------------------------------- # Usage: Send-HTMLFormattedEmail -? #------------------------------------------------- function Send-HTMLFormattedEmail { <# .Synopsis Used to send an HTML Formatted Email. .Description Used to send an HTML Formatted Email that is based on an XSLT template. .Parameter To Email address or addresses for whom the message is being sent to. Addresses should be seperated using ;. .Parameter ToDisName Display name for whom the message is being sent to. .Parameter CC Email address if you want CC a recipient. Addresses should be seperated using ;. .Parameter BCC Email address if you want BCC a recipient. Addresses should be seperated using ;. .Parameter From Email address for whom the message comes from. .Parameter FromDisName Display name for whom the message comes from. .Parameter Subject The subject of the email address. .Parameter Content The content of the message (to be inserted into the XSL Template). .Parameter Relay FQDN or IP of the SMTP relay to send the message to. .XSLPath The full path to the XSL template that is to be used. #> param( [Parameter(Mandatory=$True)][String]$To, [Parameter(Mandatory=$True)][String]$ToDisName, [String]$CC, [String]$BCC, [Parameter(Mandatory=$True)][String]$From, [Parameter(Mandatory=$True)][String]$FromDisName, [Parameter(Mandatory=$True)][String]$Subject, [Parameter(Mandatory=$True)][String]$Content, [Parameter(Mandatory=$True)][String]$Relay, [Parameter(Mandatory=$True)][String]$XSLPath ) try { # Load XSL Argument List $XSLArg = New-Object System.Xml.Xsl.XsltArgumentList $XSLArg.Clear() $XSLArg.AddParam("To", $Null, $ToDisName) $XSLArg.AddParam("Content", $Null, $Content) # Load Documents $BaseXMLDoc = New-Object System.Xml.XmlDocument $BaseXMLDoc.LoadXml("") $XSLTrans = New-Object System.Xml.Xsl.XslCompiledTransform $XSLTrans.Load($XSLPath) #Perform XSL Transform $FinalXMLDoc = New-Object System.Xml.XmlDocument $MemStream = New-Object System.IO.MemoryStream $XMLWriter = [System.Xml.XmlWriter]::Create($MemStream) $XSLTrans.Transform($BaseXMLDoc, $XSLArg, $XMLWriter) $XMLWriter.Flush() $MemStream.Position = 0 # Load the results $FinalXMLDoc.Load($MemStream) $Body = $FinalXMLDoc.Get_OuterXML() # Create Message Object $Message = New-Object System.Net.Mail.MailMessage # Now Populate the Message Object. $Message.Subject = $Subject $Message.Body = $Body $Message.IsBodyHTML = $True # Add From $MessFrom = New-Object System.Net.Mail.MailAddress $From, $FromDisName $Message.From = $MessFrom # Add To $To = $To.Split(";") # Make an array of addresses. $To | foreach {$Message.To.Add((New-Object System.Net.Mail.Mailaddress $_.Trim()))} # Add them to the message object. # Add CC if ($CC){ $CC = $CC.Split(";") # Make an array of addresses. $CC | foreach {$Message.CC.Add((New-Object System.Net.Mail.Mailaddress $_.Trim()))} # Add them to the message object. } # Add BCC if ($BCC){ $BCC = $BCC.Split(";") # Make an array of addresses. $BCC | foreach {$Message.BCC.Add((New-Object System.Net.Mail.Mailaddress $_.Trim()))} # Add them to the message object. } # Create SMTP Client $Client = New-Object System.Net.Mail.SmtpClient $Relay # Send The Message $Client.Send($Message) } catch { throw $_ } } ################################################## # Main ################################################## Export-ModuleMember Send-HTMLFormattedEmail ### XSLT Template Example My First Formatted Email

Dear ,

Please do not respond to this email!
An automated system sent this email, if any point you have any questions or concerns please open a help desk ticket.

Many thanks from your:
Really Cool IT Team