VM 上に Exchange Server 等のメールサーバーを構築し、外部にメール送信しようとしても、Azure の VM の仕様により送信できません。 Azure 上の VM から直接 SMTP 等を使ってメール送信することは、Azure プラットフォームとしてサポートをしていないようです。
回避策としては、SendGrid などのメール配信の SaaS を使います。プラン Free 100 であれば、100通/day まで無料となります。
最初に Azure のリソース グループから SendGrid を登録し、アカウントを作成します。
アカウントの作成方法と認証情報 (APIキー) の取得については以下となります。
取得した認証情報 (APIキー) を使用し、以下の作業を行います。
SendGrid を使用してメールを送信する (Power Shell 使用)
Power Shell で以下コマンドを実行し、SendGrid にメールを送信します。
Azure 上の VM から実行します。
メールの送信元情報を設定します。
「ユーザー名」、「パスワード」は API キーを使用します。
$mail = @{
from = "送信元 SMTP メールアドレス";
to = "送信先 SMTP メールアドレス";
smtp_server = "smtp.sendgrid.net";
smtp_port = 587;
user = "ユーザー名";
password = "パスワード";
}
$client = New-Object Net.Mail.SmtpClient($mail["smtp_server"], $mail["smtp_port"])
認証情報を設定し、メールを作成し、送信します。
# SMTP Authのため、認証情報を設定
$client.Credentials = New-Object Net.NetworkCredential($mail["user"], $mail["password"])
# メールの作成
$msg = New-Object Net.Mail.MailMessage($mail["from"], $mail["to"], "件名", "本文")
# メールの送信
$client.Send($msg)
認証に失敗すると以下のエラーになるのでご注意ください。
"1" 個の引数を指定して "Send" を呼び出し中に例外が発生しました: "メールを送信できませんでした。"
発生場所 行:1 文字:1
+ $client.Send($msg)
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SmtpException
SendGrid を使用してメールを送信する (Exchange Server から送信)
VM 上の Exchange Server (メールボックス or Edge サーバー) に送信コネクターを作成します。
今回は既に作成済みなので内容の確認を行います。
Get-SendConnector 'to Internet' |select AddressSpaces,Port,SmartHosts
出力結果は以下となります。
ポイントは以下の 3 項目です。
AddressSpaces Port SmartHosts
------------- ---- ----------
{SMTP:*;1} 587 {smtp.sendgrid.net}
認証情報 (APIキー) は GUI での設定となります。
コメント