監視フォルダーへのファイル投入でメールを自動送信する。

監視フォルダーにファイルを投入することでユーザ作成のバッチファイルとPowerShell スクリプトを起動しメールを自動送信します。投入されたファイル(PDF、テキスト、画像ファイルなど)はメールの添付ファイルとして送信されます。

以下はメールを送信する Power Shell スクリプトのサンプル send_email.ps1 です。実際のメールアドレス、サーバーアドレスにメモ帳などで編集後に日本語の文字化けが発生しないように utf-8 BOM付で 保存します。

# バッチファイルから渡される引数(添付ファイルパス)を受け取るための定義
param(
    [string]$AttachmentPath
)

# --- ここからメール設定(ご自身の環境に合わせて変更してください) ---

# 送信元メールアドレス
$from = "xxxxx@xxx.xxxxxx.ne.jp"

# 送信先メールアドレス
$to = "yyyyyy@gmail.com"

# メールの件名
$subject = "【自動送信】ファイル添付のお知らせ"

# --- 本文の作成(ヒアストリングを使用) ---
# 添付ファイルのフルパスからファイル名だけを抽出
$AttachmentName = Split-Path -Path $AttachmentPath -Leaf

# ヒアストリングを使って複数行の本文を作成
$body = @"
お疲れ様です。
システムより自動送信しております。

添付ファイルをお送りいたしますので、ご確認ください。

ファイル名: $AttachmentName

ご確認のほど、よろしくお願いいたします。

---
ABCカンパニー
担当者
TEL: 03-1234-5678
---
"@

# SMTPサーバーのアドレス
$smtpServer = "xxxxx.xxxxxx.ne.jp"

# ポート番号
$port = 587

# SSLを使用するかどうか
$useSsl = $true

# 暗号化されたファイルから資格情報を読み込む
$credPath = "C:\ProgramData\CloudAutoPrint\BatchFile\Sample\my_credential.xml"
$credential = Import-CliXml -Path $credPath


# --- メール送信処理 ---
try {
    # Send-MailMessageコマンドレットでメールを送信
    Send-MailMessage -From $from `
                     -To $to `
                     -Subject $subject `
                     -Body $body `
                     -SmtpServer $smtpServer `
                     -Port $port `
                     -UseSsl:$useSsl `
                     -Credential $credential `
                     -Encoding    UTF8 `
                     -Attachments $AttachmentPath `
                     -ErrorAction Stop

    # 成功メッセージ
    Write-Host "メールを正常に送信しました。"
    Write-Host "添付ファイル: $AttachmentPath"

} catch {
    # エラーが発生した場合のメッセージ
    Write-Error "メールの送信に失敗しました。エラー内容: $_"
}

上記Power Shell スクリプトを呼び出して実行するバッチファイル(send_email.bat)です。ANSIコードで保存します。

@echo off
setlocal

rem --- 設定 ---
rem PowerShellスクリプトのパスを指定
set PSSCRIPT_PATH=%~dp0send_email.ps1

rem --- 処理 ---

rem 第1引数(添付ファイルパス)が指定されているかチェック
if "%~1"=="" (
    echo.
    echo エラー: 添付するファイルのパスを引数に指定してください。
    echo.
    echo 使用例: %~n0 "C:\Users\YourUser\Documents\添付ファイル.xlsx"
    echo.
    goto :eof
)

rem 指定されたファイルが存在するかチェック
if not exist "%~1" (
    echo.
    echo エラー: 指定されたファイルが見つかりません。
    echo ファイルパス: %~1
    echo.
    goto :eof
)


echo メール送信処理を開始します...

rem PowerShellスクリプトを実行
rem -ExecutionPolicy Bypass: スクリプト実行ポリシーを一時的に許可
rem -File: 実行するスクリプトファイルを指定
rem -AttachmentPath: PowerShellスクリプトに渡す引数名
rem "%~1": バッチファイルの第1引数(添付ファイルパス)を渡す
powershell.exe -ExecutionPolicy Bypass -File "%PSSCRIPT_PATH%" -AttachmentPath "%~1"


echo.
echo 処理が完了しました。
pause
endlocal

ユーザー名とパスワード(資格情報)を暗号化してファイルに保存し、メール送信時にはそのファイルを読み込むようにします。この方法は、パスワードをスクリプトに直接書き込むよりもはるかに安全です。この Power Shell スクリプト create_credential.ps1 は初回に一度だけ実行すれば十分です。ANSIコードで保存します。

# 資格情報ファイルの保存先パス(Power Shell と同じフォルダーに保存します。)
$credPath = "C:\ProgramData\CloudAutoPrint\BatchFile\Sample\my_credential.xml"

# ユーザー名とパスワードの入力を求めるウィンドウを表示
$credential = Get-Credential

# 入力された資格情報を暗号化してXMLファイルとして保存
$credential | Export-CliXml -Path $credPath

Write-Host "資格情報ファイルを暗号化して保存しました。"
Write-Host "場所: $credPath"
Write-Host "このスクリプトは再度実行する必要はありません。"

最後に、クラウド対応自動印刷の設定の設定で「クラウド対応自動印刷」で「設定」→「プリンター/処理」→「.Batchファイルを実行する」→「詳細」で保存したバッチファイル(run_email.bat) を選択します。

あとは監視フォルダーにファイルを投入することで添付ファイル付きメールが自動送信されます。