Let us first go through the manual steps required for configuring SMTP server and PowerShell script is included in the end.
For this example, we are using Microsoft Windows Server 2016 and the configuration might change based on the operating system.
Restart the server and test the smtp mail functionality using below PowerShell command
Send-MailMessage -SMTPServer localhost -To to@gmail.com -From from@gmail.com -Subject “Test” -Body “Success”
Note: Sometimes we must restart the server, smtp service multiple times and also leave the server ideal for about 2 hours for the SMTP server to send emails.
#Installing SMTP server—————————————————————————-
$smtp = get-WindowsFeature “smtp-server”
if(!$smtp.Installed){
Add-WindowsFeature $smtp -IncludeAllSubFeatur
}
#Installing Telnet————————————————————————————–
$telnet = get-WindowsFeature “telnet-client”
if(!$telnet.Installed){
Add-WindowsFeature $telnet -IncludeAllSubFeature
}
#Setting Relays—————————————————————————————–
$IpRelayList = @(“127.0.0.1”)
$iisObject = new-object System.DirectoryServices.DirectoryEntry(“IIS://localhost/smtpsvc/1”)
$relays = $iisObject.Properties[“RelayIpList”].Value
#update
$bindingFlags = [Reflection.BindingFlags] “Public, Instance, SetProperty”
$relays.GetType().InvokeMember(“IPGrant”, $bindingFlags, $null, $relays, $IpRelayList);
$iisObject.Properties[“RelayIpList”].Value = $relays
$iisObject.CommitChanges()
#Setting ConnectionIps—————————————————————————–
$iisObject = new-object System.DirectoryServices.DirectoryEntry(“IIS://localhost/SmtpSvc/1”)
$ipSec = $iisObject.Properties[“IPSecurity”].Value
[Object[]] $grantByDefault = @()
$grantByDefault += , $false
$ipSec.GetType().InvokeMember(“GrantByDefault”, $bindingFlags, $null, $ipSec, $grantByDefault);
$iisObject.Properties[“IPSecurity”].Value = $ipSec
$iisObject.CommitChanges()
$connectionips = “127.0.0.1”
$iisObject = new-object System.DirectoryServices.DirectoryEntry(“IIS://localhost/SmtpSvc/1”)
$ipSec = $iisObject.Properties[“IPSecurity”].Value
#update
$bindingFlags = [Reflection.BindingFlags] “Public, Instance, SetProperty”
$ipSec.GetType().InvokeMember(“IPGrant”, $bindingFlags, $null, $ipSec, $connectionips);
$iisObject.Properties[“IPSecurity”].Value = $ipSec
$iisObject.CommitChanges()
#Setting Host, UserName & Password——————————————————–
$iisObject = new-object System.DirectoryServices.DirectoryEntry(“IIS://localhost/SmtpSvc/1”)
$iisObject.Properties[“RouteAction”].Value = 268
$iisObject.Properties[“RouteUserName”].Value = “UserName”
$iisObject.Properties[“RoutePassword”].Value = “Password”
$iisObject.Properties[“SmartHost”].Value = “smtp.gmail.com”
$iisObject.CommitChanges()
#Resart Service—————————————————————————————–
Set-Service -Name “SMTPSVC” -StartupType Automatic
Restart-Service “SMTPSVC”
#Test Mail————————————————————————————————-
Send-MailMessage -SMTPServer localhost -To to@gmail.com -From from@gmail.com -Subject “Test” -Body “Success”
Note: Update your Gmail username, password in the script.
Happy Coding 🙂
Please leave a comment below, and let me know what you think!