* PowerShell Coreでgmailアカウントでメール(添付ファイル付き)を送信するスクリプト
:CATEGORIES: PowerShell
参考:
ソースコードの式の途中で改行する方法[PowerShell] : バヤシタ https://bayashita.com/p/entry/show/87
19.複数行の入力を取得する < 自作関数 Tips メニュー < PowerShell Tips < HIRO's.NET https://hiros-dot.net/PowerShell/myfunction/myfunction19.htm
PowerShellでメールを送る([Send-MailMessageコマンドレット] GmailからYahooメールへ) - Qiita https://qiita.com/hisabo/items/077431a9c30d38eae37a
```
#!/snap/bin/pwsh
Param(
[String]$Subject,
[String]$Body,
[String]$Attachments,
[Int]$Test = 0,
[Int]$Read = 0
)
$passwordFile = [String]"パスワードを保存したファイルのフルパス"
if ( $Read -Ne 0 ) {
Write-Host "送信するメールの本文を入力してください。終了は.のみで改行です。"
$Body = Read-MultiLine
}
if ([string]::IsNullOrEmpty($Subject) -Or [string]::IsNullOrEmpty($Body)) {
Write-Host "gmail-sent.ps1 -Subject """" -Body """""
Write-Host "or"
Write-Host "gmail-sent.ps1 -Subject """" -Body """" -Attachments 添付ファイル名"
exit
}
if ( $Test -Ne 0 ) {
Write-Host "Subject:"
Write-Host $Subject
Write-Host "Body:"
Write-Host $Body
exit
}
# 送信元
$From = "送信者のGoogleアカウント@gmail.com"
$To = @("送信先メールアドレス")
# メールサーバ設定
$MailSv = "smtp.gmail.com" #ipaddress or host name
$Port = 587
$Encode = "UTF8"
#$pwd = "XXXX" | ConvertTo-SecureString -AsPlainText -Force
$password = [String](Get-Content $passwordFile)[3].Substring(2)
$pwd = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential $From,$pwd
if (! [string]::IsNullOrEmpty($Attachments)) {
Send-MailMessage -From $From -To $To -SmtpServer $MailSv -Credential $cred -Encoding $Encode -Port $Port -UseSsl -Subject $Subject -Body $Body -Attachments $Attachments
} else {
Send-MailMessage -From $From -To $To -SmtpServer $MailSv -Credential $cred -Encoding $Encode -Port $Port -UseSsl -Subject $Subject -Body $Body
}
function Read-MultiLine ( [string]$prompt, [string]$endChar = "." ){
if ( $prompt.Length -gt 0 ){ Write-Host ($prompt + ":") }
while(1)
{
$ip += Read-Host
if ($ip.SubString($ip.Length - $endChar.Length) -eq $endChar){ break; }
else{$ip += "`n"}
}
return $ip.Substring(0, $ip.Length - $endChar.Length)
}
```
実行結果:
```
PS /home/a66/pwsh> gmail-sent.ps1 -Subject "送信メール($(Get-Date -Format F))" -Body "メールの本文" -Attachments ./t1.txt
WARNING: The command 'Send-MailMessage' is obsolete. This cmdlet does not guarantee secure connections to SMTP servers. While there is no immediate replacement available in PowerShell, we recommend you do not use Send-MailMessage at this time. See https://aka.ms/SendMailMessage for more information.
PS /home/a66/pwsh>
```
決まってワーニングが出るのですが,翻訳すると,「Send-MailMessageは廃止になりました。代替手段はないですが現時点では使わないことを推奨します。」などとありました。
PowerShell Coreの引数は簡単に名前付けが利用できて,引数の順番を意識しないで済むのも楽です。コマンド履歴を再利用する場合,この利便性を強く感じました。
添付ファイルの送信を目的とする場合,メールの本文は必要がないという考えですが,引数に「-Read 1」をつけることで,複数行での入力を出来るようにしました。半角の.だけの行が入力の終了になります。
参考にさせてもらったページは他の記号になっていましたが,平成18年頃によく使っていたコマンドラインのsendmailが半角の.を本文入力の終了にしていたように思います。
0 件のコメント:
コメントを投稿