PowerShell パワーシェルとMailKitを使ってメールを送信する

インストール

管理者権限でパワーシェルを起動してください


Install-Package -Name Portable.BouncyCastle -Source https://www.nuget.org/api/v2
Install-Package -Name MailKit -Source https://www.nuget.org/api/v2 -SkipDependencies
Install-Package -Name MimeKit -Source https://www.nuget.org/api/v2 -SkipDependencies

バッチファイル

@echo off
echo MouseClick>y:\a.txt
echo メールの送信テスト>"y:\MailBody.txt" 
echo メール>>"y:\MailBody.txt" 
pwsh -Command "& (Invoke-Expression -Command ('{' + (((Get-Content %~f0 )[8..99]) | Out-String )+ '}'))" %*
timeout /t 55 & goto:eof

# PowerShellスクリプトはここに配置
# DLL読み込み
Add-Type -Path "C:\Program Files\PackageManagement\NuGet\Packages\MailKit.4.10.0\lib\net48\MailKit.dll"
Add-Type -Path "C:\Program Files\PackageManagement\NuGet\Packages\MimeKit.4.10.0\lib\net48\MimeKit.dll"
Add-Type -Path "C:\Program Files\PackageManagement\NuGet\Packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll"

# 必要に応じて変更
$userID = "your-email@gmail.com"
$userPassword = "your_app_password" # 生成したアプリパスワードを使用
$mailServer = "smtp.gmail.com"
$mailPort = 587
$mailFromAddress = "your-email@gmail.com"
$mailFromName = "差出人"
$mailToAddresses = @("your-email@gmail.com","your-email@gmail.com")
$mailCcAddresses = @("your-email@gmail.com")
$mailBccAddresses = @("your-email@gmail.com")
$mailSubject = "メール送信テスト"
$mailBodyText = @"
メールの送信テスト
テスト
"@
$mailBodyFilePath = "y:\MailBody.txt" # メール本文を格納するファイルパス
$attachmentFilePaths = @("y:\a.txt") # 添付ファイルがない場合は@()に設定
# メール本文をファイルから読み込む
$mailBodyText = Get-Content -Path $mailBodyFilePath -Raw
# メッセージ設定
$msg = New-Object MimeKit.MimeMessage
$mailFrom = New-Object MimeKit.MailboxAddress($mailFromName, $mailFromAddress)
$msg.From.Add($mailFrom)

# To
foreach ($address in $mailToAddresses) {
    $mailTo = New-Object MimeKit.MailboxAddress("", $address)
    $msg.To.Add($mailTo)
}

# Cc
foreach ($address in $mailCcAddresses) {
    $mailCc = New-Object MimeKit.MailboxAddress("", $address)
    $msg.Cc.Add($mailCc)
}

# Bcc
foreach ($address in $mailBccAddresses) {
    $mailBcc = New-Object MimeKit.MailboxAddress("", $address)
    $msg.Bcc.Add($mailBcc)
}

$msg.Subject = $mailSubject
$textPart = New-Object MimeKit.TextPart([MimeKit.Text.TextFormat]::Plain)
$textPart.Text = $mailBodyText

# 添付ファイル設定
if ($attachmentFilePaths.Count -gt 0) {
    $multiPart = New-Object MimeKit.Multipart("mixed")
    $multiPart.Add($textPart)
    foreach ($filePath in $attachmentFilePaths) {
        $attachment = New-Object MimeKit.MimePart
        $content = New-Object MimeKit.MimeContent([System.IO.File]::OpenRead($filePath), [MimeKit.ContentEncoding]::Default)
        $attachment.Content = $content
        $contentDisposition = New-Object MimeKit.ContentDisposition([MimeKit.ContentDisposition]::Attachment)
        $attachment.ContentDisposition = $contentDisposition
        $attachment.ContentTransferEncoding = [MimeKit.ContentEncoding]::Base64
        $attachment.FileName = [System.IO.Path]::GetFileName($filePath)
        $multiPart.Add($attachment)
    }
    $msg.Body = $multiPart
} else {
    $msg.Body = $textPart
}

# メール送信
$client = New-Object MailKit.Net.Smtp.SmtpClient
$client.Connect($mailServer, $mailPort, [MailKit.Security.SecureSocketOptions]::StartTlsWhenAvailable)
$client.Authenticate($userID, $userPassword)
$client.Send($msg)
$client.Disconnect($true)

UTF 8で保存してください

GmailのSMTP設定でメール送信ができない問題を解決するための手順

GmailでSMTP送信できない!アプリパスワードで設定した? #Google – Qiita

  1. エラーメッセージ確認: メール送信時のエラーログ(例えば「Auth failed: 535 5.7.8 not accepted」)を確認します。
  2. GmailのSMTP設定確認: 送信メールサーバー(smtp.gmail.com)やポート(587)が正しく設定されているか確認します。
  3. 2段階認証の有効化: Googleアカウントの管理から「セキュリティ」設定で2段階認証プロセスを有効にします。
  4. アプリパスワードの生成:
  • Googleアカウントの管理 > セキュリティ > アプリパスワード から生成します。
  • 「メール」アプリを選択し、「その他(名前を入力)」で適切な名前を入力して生成された16桁のパスワードをコピーします。
  1. SMTP設定の更新:
  • メールクライアントやシステムのSMTP設定で、アカウント名にGmailアドレス、パスワードには生成したアプリパスワードを設定します。

bat,PowerShell ,windows

Posted by eightban