4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

中小底辺事務員が自動化を頑張る(PowerShellでメール一斉送信)

Posted at

いきさつ

従業員が使用する、あるオンラインサービスを利用する事になりました。
そこで、全社員のアカウントをあらかじめ作成しておき、アカウント情報は従業員ひとりひとりにメールで通知する事になり、その役を仰せつかりました。

アカウント作成はデータのアップロードして(想像)
メール送信はてきとうなツール使えばすぐ終わりそう(想像)。

アカウント作成は想像通り、登録情報のcsvアップロードが利用できました。

しかし、個別にIDとパスワードを送信できるようなツールが全然見当たりません。有料のソフトはありますが、無料で使えそうなツールが見当たりません。ちょっと調べれば10個20個くらいズラッと出てくると思ったのに、検索能力が低いのでしょうか。

作ってみる

これ以上検索に時間を使っても進展なさそうだったので、諦めて作ってみました。
メールを送る事が出来れば良いので環境はなんでも良さそうですが、ちょうどこの頃PowerShellの存在を知ったところだったので、PowerShellを選びました。

コード

csvの中身を配列に入れてforで回すだけなので、面白味ないです。

#文字化け回避、コンソール上では逆に文字化けするが問題なし
function Encode-MailHeader($subject)
{
    $enc = [System.Text.Encoding]::GetEncoding("iso-2022-jp");
    $strBase64 = [Convert]::ToBase64String($enc.GetBytes($subject));
    "=?{0}?B?{1}?=" -f "iso-2022-jp", $strBase64
}

#送信者情報
$from = "mail@from.dayo"
$smtp = "mail.smtp.dayo"
$port = 587
$user = "mail@from.dayo"
$pass = "PASSWORD" | ConvertTo-SecureString -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $user,$pass

#メールの件名
$title = "メールの件名"
$subject = Encode-MailHeader(Encode-MailHeader($title))

#csv読込
$csv = Import-Csv .\data.csv -Encoding Default -Header "csv_data_a","csv_data_b","csv_data_c","csv_data_d"
$data_a = @($csv | % {$_.csv_data_a})
$data_b = @($csv | % {$_.csv_data_b})
$data_c = @($csv | % {$_.csv_data_c})
$data_d = @($csv | % {$_.csv_data_d})

for ( $i = 0; $i -lt $data_a.Length; $i++ )
    {
    $to = $data_a[$i]
    #メールの本文
    [string]$body = ""
    $body += `
        $data_b[$i]+" 様" `
        +"`n" `
        +"`n" `
        +"○○○のIDとパスワードをお送りします。"`
        +"`n" `
        +"`n" `
        +"ID:"+$data_c[$i] `
        +"`n" `
        +"パスワード:"+$data_d[$i] `
        +"`n" `
        +"`n" `
        +"このメールを受信したあなたが "+$data_b[$i]+" 様 でない場合は、速やかに○○までご連絡頂くか、" `
        +"`n" `
        +"このメールに返信して下さい。" `

    Send-MailMessage -To $to -From $from -SmtpServer $smtp -Subject $subject -Body $body -Encoding UTF8 -Port $port -Credential $credential
    }

送った相手のメーラーによって件名が文字化けする問題があり、こちらのサイトを参考にさせて貰いました。(原理はわかってない)

csvファイルは以下のようにします。(↑のスクリプトの場合は内容1=ID、内容2=パスワード)

data.csv
メールアドレス,氏名,内容1,内容2
.
.
.
メールアドレス,氏名,内容1,内容2

これに限らずデータチェックとか、エラー処理とか、ログ出力とか作ってあると良いですね。
「とりあえず動く」みたいなものばかりなので、いつも動かす時は「えいやっ!(ポチッ)」って感じです。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?