PowershellでYahooのSMTPサーバーからメールを送信するサンプル

コンピュータ

はじめに

Powershellスクリプトからメールが送信出来ると何かと便利です。
たとえばバッチ処理の結果をメール送信して出先で受け取ったり、Evernoteなどのクラウドサービスにメールで投稿するなどでアイディア次第で色々な場面で活用出来ます。

メールを送信するためにはメールの送信サーバーが必要です。私を含め多くの方がYahooのアカウントをお持ちだと思います。
今回はYahooのSMTPサーバーからメール送信する方法をご紹介します。

PowerShellスクリプトを初めて実行する場合

PowerShellスクリプトの実行を許可してください。
Powershellのps1ファイルを実行する方法
はじめに WindowsのコマンドラインインターフェースであるPowershellはコマンド操作をテキストファイルに記述したスクリプトファイルを実行することが出来ます。 Microsoft Excelで言うところのマクロのような物で...

サンプルスクリプト

<#
Yahooアカウントでメールを送信するサンプル
#>

$server = "smtp.mail.yahoo.co.jp"; # SMTPサーバーアドレス
$port = 587; # SMTPサーバーポート

$username = "Yahooアカウントのユーザー名" # Yahooアカウントのユーザー名
$password = "Yahooアカウントのパスワード" # Yahooアカウントのパスワード

$from = "ユーザー名@yahoo.co.jp" # 送信元メールアドレス
$to = "送信先メールアドレス" # 送信先メールアドレス
$subject = "subject" # 件名
$body = "body" # 本文

$file = "添付ファイルのローカルパス" # 添付ファイル


#メール送信オブジェクトを生成
$smtp = New-Object Net.Mail.SmtpClient($server, $port);

#SSL通信をしない
$smtp.EnableSsl = $false;
$smtp.Credentials  = New-Object Net.NetworkCredential($username, $password);
$mail = New-Object Net.Mail.MailMessage($from,$to,$subject,$body);

# 添付ファイル
if ($file) {
    $o = New-Object Net.Mail.Attachment($file);
    $mail.Attachments.Add($o);
}

$smtp.Send($mail);

注意点

私がはまった点はSMTPサーバーのポート($port)を465を指定してSSL($smtp.EnableSsl = $true)にするとメールの送信失敗します。
とりあえず送信出来る組合せが見つかりましたので原因は興味がありませんが、Net.Mail.SmtpClientは今のところSMTPS(ポート465)が使えないらしいです。

サーバー側のセキュリティも日々高度化していきますので、この辺は利用したい環境の最新の情報を調べるしかなさそうです。
そのまた昔SMTPのポートと言えば25で大概のメールサーバーからメール送信が可能でした。
今からは信じられないほど、ゆるいセキュリティでした。そのせいでスパムだらけになったわけですが…

スクリプトの実行環境

プロダクト名
Windows 7 Professional
ビルド番号
7601.23934
Powershellバージョン
5.1.14409.1005
.NET Framework
.NET Framework 4.7

スポンサーリンク


コメント