#なぜ今更
あるEC2から異なるリージョンのEC2で起動しているメールサーバを使ってメールを送りたかった。sendmailをインストールしてmailコマンドでやってみたら以下のようなエラーが出た。
connect to mailhost.domain.com[3.136.146.20]:25: Connection timed out
to=<admin@domain.com>, relay=none, delay=30, delays=0.02/0.03/30/0, dsn=4.4.1, status=deferred (connect to mailhost.domain.com[3.136.146.20]:25: Connection timed out) B8B79CA81C: to=<user@domain.com>, relay=none, delay=30, delays=0.02/0.03/30/0, dsn=4.4.1, status=deferred (connect to mailhost.domain.com[3.136.146.20]:25: Connection timed out)
message-id=<20200521063716.D013DCA81E@ip-172-31-40-247.ap-northeast-1.compute.internal>
from=<>, size=6462, nrcpt=1 (queue active)
接続タイムアウトになっている。メールサーバはオハイオリージョンなので「us-east-2.compute.internal」のはずだが、送り元が東京リージョンだからなのか「ap-northeast-1.compute.internal」となっていて、接続先がおかしくなっている。
どう対処していいのかわからず、そもそもセキュリティ的に許されているかもわからなかった。
稼働監視の通知をしたかったのでLineやSlackに飛ばすことも考えたが面倒なのでやはりメールで行いたかった。
ということで言語ライブラリでメールてみた。
#結論
以下のスクリプトでできた。
PHPMailerはこちらから入手。
配置構造
├ mailsend.php
└ PHPMailer/
[mailsend.php]
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
$inquiry_no;
$mail = new PHPMailer(true);
$error = null;
try {
// サーバ設定
$mail->isSMTP();
$mail->Host = 'mail.domain.com'; // メールサーバ
$mail->SMTPAuth = true;
$mail->Username = 'sender@domain.com'; // 送信アカウント
$mail->Password = 'password'; // 送信アカウントのパスワード
$mail->SMTPSecure = false; // TLSなどの暗号化非対応のサーバならfalseを設定。使えるなら'tls'か'ssl'を設定。
$mail->SMTPAutoTLS = false; // SMTPSecureをfalseにする場合はfalseにする。それ以外なら未設定で。
$mail->Port = 587;
// 送り先情報
$mail->setFrom('sender@domain.com'); // 送信元アドレス
$mail->addAddress('reciever@domain.com'); // 送信先アドレス
$mail->addReplyTo('sender@domain.com'); // 返信先アドレス
// 本文
$mail->isHTML(false);
$mail->CharSet = 'UTF-8';
$mail->Body = "ここに本文を記載";
$mail->Subject = "ここに件名を記載";
$mail->send();
} catch (Exception $e) {
$error = $e;
echo $mail->ErrorInfo;
}
if ($error!=null) {
echo "send";
}
#課題
Postfix+doevcotでメールサーバはEC2に立てられるけど、リレーとか理解してない。