Send-MailKitMessage.psm1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
#################################### # Author: Eric Austin # Repo: https://github.com/austineric/Send-MailKitMessage # Description: A replacement for PowerShell's obsolete Send-MailMessage implementing the Microsoft-recommended MailKit library. #################################### function Send-MailKitMessage(){ param( [Parameter(Mandatory=$false)][switch]$UseSecureConnectionIfAvailable = $true, [Parameter(Mandatory=$false)][pscredential]$Credential, [Parameter(Mandatory=$true)][string]$SMTPServer, [Parameter(Mandatory=$true)][int]$Port, [Parameter(Mandatory=$true)][MimeKit.MailboxAddress]$From, [Parameter(Mandatory=$true)][MimeKit.InternetAddressList]$RecipientList, [Parameter(Mandatory=$false)][MimeKit.InternetAddressList]$CCList, [Parameter(Mandatory=$false)][MimeKit.InternetAddressList]$BCCList, [Parameter(Mandatory=$false)][string]$Subject, [Parameter(Mandatory=$false)][string]$TextBody, [Parameter(Mandatory=$false)][string]$HTMLBody, [Parameter(Mandatory=$false)][string[]]$AttachmentList ) Try { $ErrorActionPreference="Stop" #message $Message=[MimeKit.MimeMessage]::new() #from $Message.From.Add($From) #to $Message.To.AddRange($RecipientList) #cc if ($CCList.Count -gt 0) { $Message.Cc.AddRange($CCList) } #bcc if ($BCCList.Count -gt 0) { $Message.Bcc.AddRange($BCCList) } #subject if ( -not ([string]::IsNullOrWhiteSpace($Message))) { $Message.Subject=$Subject } #body #$BodyBuilder=New-Object BodyBuilder $BodyBuilder=[MimeKit.BodyBuilder]::new() #text body if (-not ([string]::IsNullOrWhiteSpace($TextBody))) { $BodyBuilder.TextBody=$TextBody } #html body if (-not ([string]::IsNullOrWhiteSpace($HTMLBody))) { $BodyBuilder.HtmlBody=[System.Web.HttpUtility]::HtmlDecode($HTMLBody) #use [System.Web.HttpUtility]::HtmlDecode() in case there are html elements present that have been escaped } #attachment(s) if ($AttachmentList.Count -gt 0) { $AttachmentList | ForEach-Object { $BodyBuilder.Attachments.Add($_) | Out-Null } } #add bodybuilder to message body $Message.Body=$BodyBuilder.ToMessageBody() #smtp send $Client=New-Object MailKit.Net.Smtp.SmtpClient $Client.Connect($SMTPServer, $Port, ($UseSecureConnectionIfAvailable.IsPresent ? [MailKit.Security.SecureSocketOptions]::Auto : [MailKit.Security.SecureSocketOptions]::None)) if ($Credential) { $Client.Authenticate($Credential.UserName, ($Credential.Password | ConvertFrom-SecureString -AsPlainText)) } $Client.Send($Message) } Catch { Throw $Global:Error[0] } Finally { if ($Client.IsConnected) { $Client.Disconnect($true) } } } |