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. リボン関連

    PowerShellからリボンUIを呼ぶ方法

    下記記事で簡易的なUIとして手軽なHTAを使いました。…

  2. Windows 10

    「ファイル名を指定して実行」からMicrosoft Edgeを起動する

    以前書いた記事で、Microsoft EdgeをVBScriptから起…

  3. Windows 10

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

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

  4. Office関連

    Excel REST APIをPowerShellから呼び出す方法

    以前Excel REST APIをVBAから呼び出す方法を紹介しました…

  5. PowerShell

    SlackのメッセージをCSVファイルとして保存するPowerShellスクリプト

    数日前、今年の9月1日からSlackのフリープランではメッセージ履歴が…

  6. PowerShell

    winmail.datから添付ファイルを取り出すPowerShellコード

    Outlook以外のメールクライアントを使用しているのであれば、一度は…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP