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