なぜ今更
ある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に立てられるけど、リレーとか理解してない。