1 # 2 # smartd mailer script 3 # 4 # Home page of code is: http://www.smartmontools.org 5 # 6 # Copyright (C) 2016 Christian Franke 7 # 8 # SPDX-License-Identifier: GPL-2.0-or-later 9 # 10 # $Id: smartd_mailer.ps1 4760 2018-08-19 18:45:53Z chrfranke $ 11 # 12 13 $ErrorActionPreference = "Stop" 14 15 # Parse command line and check environment 16 $dryrun = $false 17 if (($args.Count -eq 1) -and ($args[0] -eq "--dryrun")) { 18 $dryrun = $true 19 } 20 21 $toCsv = $env:SMARTD_ADDRCSV 22 $subject = $env:SMARTD_SUBJECT 23 $file = $env:SMARTD_FULLMSGFILE 24 25 if (!((($args.Count -eq 0) -or $dryrun) -and $toCsv -and $subject -and $file)) { 26 echo ` 27 "smartd mailer script 28 29 Usage: 30 set SMARTD_ADDRCSV='Comma separated mail addresses' 31 set SMARTD_SUBJECT='Mail Subject' 32 set SMARTD_FULLMSGFILE='X:\PATH\TO\Message.txt' 33 34 .\$($MyInvocation.MyCommand.Name) [--dryrun] 35 " 36 exit 1 37 } 38 39 # Set default sender address 40 if ($env:COMPUTERNAME -match '^[-_A-Za-z0-9]+$') { 41 $hostname = $env:COMPUTERNAME.ToLower() 42 } else { 43 $hostname = "unknown" 44 } 45 if ($env:USERDNSDOMAIN -match '^[-._A-Za-z0-9]+$') { 46 $hostname += ".$($env:USERDNSDOMAIN.ToLower())" 47 } elseif ( ($env:USERDOMAIN -match '^[-_A-Za-z0-9]+$') ` 48 -and ($env:USERDOMAIN -ne $env:COMPUTERNAME) ) { 49 $hostname += ".$($env:USERDOMAIN.ToLower()).local" 50 } else { 51 $hostname += ".local" 52 } 53 54 $from = "smartd daemon <root@$hostname>" 55 56 # Read configuration 57 . .\smartd_mailer.conf.ps1 58 59 # Create parameters 60 $to = $toCsv.Split(",") 61 $body = Get-Content -Path $file | Out-String 62 63 $parm = @{ 64 SmtpServer = $smtpServer; From = $from; To = $to 65 Subject = $subject; Body = $body 66 } 67 if ($port) { 68 $parm += @{ Port = $port } 69 } 70 if ($useSsl) { 71 $parm += @{ useSsl = $true } 72 } 73 74 if ($username -and ($password -or $passwordEnc)) { 75 if (!$passwordEnc) { 76 $secureString = ConvertTo-SecureString -String $password -AsPlainText -Force 77 } else { 78 $passwordEnc = $passwordEnc -replace '[\r\n\t ]','' 79 $secureString = ConvertTo-SecureString -String $passwordEnc 80 } 81 $credential = New-Object -Typename System.Management.Automation.PSCredential -Argumentlist $username,$secureString 82 $parm += @{ Credential = $credential } 83 } 84 85 # Send mail 86 if ($dryrun) { 87 echo "Send-MailMessage" @parm 88 } else { 89 Send-MailMessage @parm 90 } 91