PowerShell

[PowerShell]MailKitを使ってメールを送信する方法

@ITを眺めていたら、気になる記事を見かけました。

MailKitライブラリを使ってメール送信を行うプログラムの紹介ですが、気になったのはSmtpClientクラスについて書かれた部分。

.NET Framework 2.0以来、メール送信にはSystem.Net.Mail名前空間のSmtpClientクラスが使われてきた。ところが.NET Framework 4.5からは、サードパーティー製のMailKitライブラリが推奨されるようになっている。

従来のSmtpClientクラス(System.Net.Mail名前空間)が「obsoleted(廃止)」扱いとなり、代わりにMailKitを使うように推奨されている。

http://www.atmarkit.co.jp/ait/articles/1811/21/news023.html より

えっ!?そうだったの??
2017年の4月にはSmtpClientクラスのドキュメントに“このクラスはもう使うな!”的なことが書かれていたらしいですが、全然知りませんでした。

SmtpClientクラスを使ったPowerShell関数まで書いちゃってたよ・・・。

自分の勉強不足を恥じるレベルです。

まあ、やってしまったものはしょうがないので、気を取り直して@ITの記事を参考に、PowerShellからMailKitを使ってメールを送信してみようと思います。

事前準備

MailKitはサードパーティー製のライブラリなので、標準ではOSに組み込まれておらず、自分で導入する必要があります。
@ITの記事によると、NuGetで簡単に導入できるようなので、コマンドライン版のNuGetを使ってライブラリのインストールを行います。

nuget install MailKit

バージョン指定する場合は下記のようにVersionオプションを使用します。

nuget install MailKit -Version 2.0.7

NuGetでMailKitをインストールすると、メッセージの作成に必要なMimeKitも自動的にインストールされます。

PowerShellからMailKitを使ってメールを送信する方法

MailKitとMimeKitの準備ができたら、あとはコードを書くだけです。

#DLL読み込み
[void][System.Reflection.Assembly]::LoadFile("C:\System\MailKit\MailKit.dll")
[void][System.Reflection.Assembly]::LoadFile("C:\System\MailKit\MimeKit.dll")

#必要に応じて要変更
$userID = "xxxx@xxxxxxxxxx.onmicrosoft.com"
$userPassword = "(パスワード)"
$mailServer = "smtp.office365.com"
$mailPort = 587
$mailFromAddress = "xxxx@xxxxxxxxxx.onmicrosoft.com"
$mailFromName = "差出人"
$mailToAddress = "(宛先アドレス)"
$mailToName = "宛先"
$mailSubject = "【件名】メールの送信テスト"
$mailBodyText = @"
メールの送信テストです。
ちゃんと届いていますでしょうか?

テスト太郎
"@

#メッセージ設定
$msg = New-Object MimeKit.MimeMessage
$mailFrom = New-Object MimeKit.MailboxAddress($mailFromName, $mailFromAddress)
$msg.From.Add($mailFrom)
$mailTo = New-Object MimeKit.MailboxAddress($mailToName, $mailToAddress)
$msg.To.Add($mailTo)
$msg.Subject = $mailSubject
$mailBody = New-Object MimeKit.TextPart([MimeKit.Text.TextFormat]::Plain)
$mailBody.Text = $mailBodyText
$msg.Body = $mailBody

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

とりあえず、@ITの記事GitHubを参考に、Office 365のアカウントからメール送信するコードを書いてみました。

上記コードを実行すると、下図のようにテストメールが問題なく送れることが確認できました。

まだ簡単な処理しか試していませんが、MailKitは簡単に扱える上に高機能なライブラリであることが実感できました。.NET Framework 4.5以降の環境でメール関連の処理を実装する際は、是非MailKitをお使いください!

関連記事

【アイカツフレンズ!】店頭イベント(フレンズスカウト&ベストフレンズ認定会)への参加方法前のページ

[Office]シンプルリボンのアンケートへの回答でAmazonギフト券が当たるチャンス次のページ

関連記事

  1. Office関連

    Officeアプリケーションのバージョン情報ダイアログから情報を取得するVBScript

    自分の手間を減らすためのスクリプトシリーズ、今回はWordやExcel…

  2. PowerShell

    [PowerShell]MailKitを使ってサーバー上のメールを確認する方法(POP3)

    先日からMailKitを使ってメール送信を行うPowerShellのコ…

  3. PowerShell

    [PowerShell]メール送信用関数

    本記事で使用しているSmtpClientは2018年現在非推奨となって…

  4. Office関連

    PowerShellからClosedXMLを使ってExcelファイルを作成する方法

    以前C#からClosedXMLを使ってExcelファイルを操作する方法…

  5. Windows 10

    ストアアプリを起動するPowerShellコード

    ストアアプリ(UWPアプリ)は実行ファイルをダブルクリックする等して直…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP