telnetなしで手動でメールを送信する[PowerShell]

2022-09-01

自分用めも。
メールを手動で送る実験をしようと思い立ったものの、telnetはインストールしないと使えなかったので回避策としてPowerShellを使用してメール送信をしてみました。

使用するもの

  • メールアドレス
  • PowerShell

実際のコード

Send-MailMessage `
-from       'from@mail.com' `
-to         'to@mail.com' `
-subject    'Subject' `
-body       'body' `
-smtpServer 'xxx.xxx.xxx.xxx'

認証が必要ないメールアドレスからメールを送信したい場合は必要な設定はこれだけ!
上のままだと日本語を送信する場合文字化けするから、日本語を使いたい場合は変換が必要。

上記以外で使用可能な引数を知りたい場合は以下ページを参照。

コマンドレットは Send-MailMessage 、PowerShell 内から電子メール メッセージを送信します。 簡易メール転送プロトコル (SMTP) …
learn.microsoft.com

認証を通してみる

上記のコードだとメールサーバから認証を求められた場合に対応できません。
認証が必要な場合はパスワードをSecureStringにして認証(Credential)を通すとかの手順が必要になります。

$password = ConvertTo-SecureString "パスワードを記載" -AsPlainText -Force;
$credential = New-Object System.Management.Automation.PSCredential "ユーザ名を記載", $password;

こんな感じで認証を通して、Send-MailMessageの引数-Credentialに作成した$credentialを渡せば認証完了です。

日本語でメールを送れるようにしてみる

Send-MailMessageの引数-Encodingに文字型を渡すだけです。(例:UTF8)

ちなみに他サイトで見かけた『[System.Text.Encoding]::UTF8』と『UTF8』ではBOMの有無に違いがあるので使用の際は気を付けましょう。([System.Text.Encoding]::UTF8の挙動についてはこちらの記事で検証しています。)