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