In some cases, when you are using PowerShell to send emails, you want to configure a delivery notification (read receipts) for events.
Send-MailMessage `
-To "[email protected]" `
-From "[email protected]" `
-Subject "This is a test message from PowerShell" `
-Body "Hello World!" `
-Credential (Get-Credential) `
-SmtpServer "smtp.office365.com" `
-Port 587 `
-UseSsl
To achieve that goal, you need the -DeliveryNotificationOption parameter. Specifies the delivery notification options for the email message. You can specify multiple values. None is the default value. The alias for this parameter is DNO.
The delivery notifications are sent to the address in the parameter. The acceptable values for this parameter are as follows:
- None: No notification.
- OnSuccess: Notify if the delivery is successful.
- OnFailure: Notify if the delivery is unsuccessful.
- Delay: Notify if the delivery is delayed.
- Never: Never notify.
These values are defined as a flag-based enumeration. You can combine multiple values together to set multiple flags using this parameter. The values can be passed to the DeliveryNotification parameter as an array of values or as a comma-separated string of those values. The cmdlet will combine the values using a binary-OR operation. Passing values as an array is the simplest option and also allows you to use tab-completion on the values.
Send-MailMessage `
-To "[email protected]" `
-From "[email protected]" `
-Subject "This is a test message from PowerShell" `
-Body "Hello World!" `
-Credential (Get-Credential) `
-SmtpServer "smtp.office365.com" `
-DeliveryNotificationOption OnSuccess, OnFailure `
-Port 587 `
-UseSsl
As you can see, once mail is delivered to the recipient mailbox and delivery notification mail will be sent to the sender mailbox.
Below PowerShell help you to archive the same using System.Net.Mail.
$smtpServer = "smtp.office365.com"
$msg = new-object Net.Mail.MailMessage
$smtp = new-object Net.Mail.SmtpClient($smtpServer, 587)
$msg.Headers.Add("Disposition-Notification-To", "[email protected]")
$msg.DeliveryNotificationOptions = "OnSuccess"
$msg.From = "[email protected]"
$msg.To.Add("[email protected]")
$msg.Subject = "This is a test message from PowerShell"
$msg.Body = "Hello World!"
$msg.Attachments.Add("C:\temp\pj2022.zip")
$smtp.Credentials = (Get-Credential)
$smtp.EnableSsl = $true
$smtp.Send($msg)