Without smtp Server Authentication (with static IP or internal Mail Server)
Note: Most public mail servers only accept a message for there users and don’t forward it to other servers.
$DNSHostName = (Get-WmiObject win32_computersystem).DNSHostName; $DNSDomainName = (Get-WmiObject win32_computersystem).Domain; $From = "PowerShellMonitoring@$DNSHostName+'.'+$DNSDomainName"; $To = "edv@$DNSHostName+'.'+$DNSDomainName"; $Subject = "Failure $(@($isOnline).Count) Hosts down"; $SMTPServer = @(Resolve-DnsName -Name $DNSDomainName -Type MX | Select-Object -First 1).NameExchange; $Port = 465 $Body = "MESSAGE BODY"; Send-MailMessage -From $From -Subject $Subject -To $To -Body $Body -SmtpServer $SMTPServer -UseSsl -Port $Port;
With authentication (dynamic ip or no internal Mail Server)
Note: Some public mail servers only accept the message if the “From-Address” is a valid DNS name (even @example.com)…
$DNSHostName = (Get-WmiObject win32_computersystem).DNSHostName; $DNSDomainName = (Get-WmiObject win32_computersystem).Domain; $From = "PowerShellMonitoring@$DNSHostName+'.'+$DNSDomainName"; $To = "edv@$DNSHostName+'.'+$DNSDomainName"; $Subject = "Failure $(@($isOnline).Count) Hosts down"; $SMTPServer = @(Resolve-DnsName -Name $DNSDomainName -Type MX | Select-Object -First 1).NameExchange; $Port = 25 $Credential = New-Object System.Management.Automation.PSCredential("USERNAME", $(ConvertTo-SecureString "PASSWORD" -AsPlainText -Force)) $Body = "MESSAGE BODY"; Send-MailMessage -From $From -Subject $Subject -To $To -Body $Body -SmtpServer $SMTPServer -UseSsl -Credential $Credential -Port $Port;
With Outlook Api (so the message shows up in sent items):
# Folders $FolderReports = "D:\Reports"; # Where your reports are # SQL-Server settings $Database = "Database" # Database name $Server = "SERVER\SQLEXPRESS"; # SQL-Server Instanz # Connect to SQL and query data, extract data to SQL Adapter $SqlQuery = "SELECT [Report],[Filiale],[E-Mail] FROM [dbo].[verteiler]"; # Your distributiontable # The mail $MailSubject = "Enter subjectline here" $MailBody = ' Sehr geehrter Kunde, ....... ...... ..... ' # Can be plain text or html # To use this script you must have a database that looks like this: ## Database Layout ## "Report","Filiale","E-Mail" ## "012","12","xyz@irgendwo.de" ## "033","33","abc@web.de" ## "112","112","caz@aol.com" $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;Integrated Security = True" $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.CommandText = $SqlQuery $SqlCmd.Connection = $SqlConnection $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter $SqlAdapter.SelectCommand = $SqlCmd $DataSet = New-Object System.Data.DataSet $nRecs = $SqlAdapter.Fill($DataSet) $nRecs | Out-Null $objTable = $DataSet.Tables[0] # Send the E-Mail using Outlook $ol = New-Object -comObject Outlook.Application $objTable | ForEach-Object { $mail = $ol.CreateItem(0) $Mail.To = $_."E-Mail" $Mail.BCC = $mailBCC $Mail.Subject = $MailSubject if ($MailBody -like '*<HTML>*</HTML>*') { $Mail.HTMLBody = $MailBody } else { $Mail.Body = $MailBody } $Mail.Attachments.Add("$FolderReports\$($_."Report").pdf") $Mail.Send() }