【PowerShell】(PCメンテナンス用)メール送信

【ツールの概要】
・メールを送信するPowerShellスクリプト
・ここではSendgridSMTPサーバを利用しています。
 ・GmailGoogle?)のSMTPサーバはまだ使えるんですかね・・?

【環境(使っている環境)】
・Windows10Pro
Powershell ver2.0以降
 ※他のWindowsでも動くか→7以降なら動くと思われる。
  各OSのPowershell対応については後述の参考リンクを参照。


【ソース(sendmailtest.ps1)】

#param 引数取得
Param($attachment,$Subject)

#Settings 変数設定
$MailSv = "smtp.sendgrid.net" 
$Port = 2525
$Encode = [System.Text.Encoding]::UTF8
$address = "atesaki@mail.com"
$Cc = "cc@mail.com"
$fromaddress = "from@mail.com"
$username = "apikey"
$Body = @"
本文。
"@

#Credential
$pwd = "超長いAPIキーをここのダブルクォーテの中に" | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential $username,$pwd

#Send Mail
Send-MailMessage `
    -To $address `
    -From $fromaddress `
    -Cc $Cc `
    -SmtpServer $MailSv `
    -Credential $cred `
    -UseSsl `
    -Encoding $Encode `
    -Port $Port `
    -Subject $Subject `
    -Body $Body `
    -Attachments $attachment

 

【使用方法】
・各変数を環境に合わせます。
・引数に件名と添付ファイルパスを指定して実行します。例えばこんなの。
   C:\Users\user>powershell -Command "./sendmailtest.ps1 C:\temp\hoge.txt hello"
・受信します。


【説明】
SMTP接続できるサーバなら今時ならほぼ使えるでしょう。
・SendGridへの接続に使うusernameは、「apikey」のこの6文字で行けています。要はapi認証キーだけで認証しているようなイメージ?
 (もちろんSendGrid側でセキュリティを高めることは可能)
・添付ファイルのパスと件名を引数として起動します。
・呼び出し元はコマンドでもいいと思いますが、batなどから呼び出せば、引数を増やしたり設定ファイルとして別だしして読み込むとか柔軟なやり方ができます
 

【総評】
vbsとか他の言語でもSMTPのメール送信はいいのですが、Windowsでのシェルと言ったら今後はPowerShellになる(んじゃないかなあ)と思うので、
弊社環境ではPC設定まとめて取得batやらと一緒に専用アドレスに放り込んでいます。
WindowsServerなら簡易死活監視スクリプトのアラートにも利用できますね。その場合は社内SMTPサーバに接続したいものです()
 

【参考リンク】
PowerShell - Wikipedia

PowerShellスクリプトでメールを送信する (PowerShell プログラミング)