Help us understand the problem. What is going on with this article?

PHPMailerによるメール送信

なぜ今更

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

oko1977
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした