質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Sendmail

Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

2回答

1292閲覧

メール配送の仕組みを知りたい

teratailmacr2

総合スコア31

Sendmail

Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

1クリップ

投稿2019/10/21 04:36

PHPやPerlでメール配信システムを構築しています。

バウンスメールに対してプログラムを起動させ、配信出来なかったメールアドレスは次回以降の配信時に除外するようにしています。

具体的には、送信時にReturn-pathに専用のメールアドレスを指定し、メールサーバの転送設定でそのメールアドレスに届いた場合は規定のプログラムにメールの内容を渡すようにしています。

それを受け取ったプログラムはメールのヘッダ情報から配信先や各種情報を読み取り、データベースを更新して次回以降無効なメールアドレス宛にメールを送らないようになっています。

ここまではネット上の情報を頼りにして希望の機能が実現出来ましたが、不明な点も出てきました。

リターンパスの専用メールアドレス(ドメイン)はDNSにMXレコードの設定を行っていません。
それでもこの仕組が機能するのは、ローカル配送のおかげでしょうか?
もしその場合、全てのバウンスメールは必ずローカル配送となるのでしょうか?
私が疑問に思ったのは、まずメール配送の仕組みが、下記の様になっていると考えていたからです。

  1. sender@example.comreceiver@example.jpにメール送信
  2. sender@example.comの送信したメールはsender@example.comのサーバからインターネット上に出て、receiver@example.jpのサーバを探す
  3. receiver@example.jpのサーバがユーザー不在や何らかの原因で受信拒否をした場合、receiver@example.jpのサーバがsender@example.comのサーバに(バウンス)メールを送信
  4. sender@example.comのサーバはバウンスメールを受信し、sender@example.comのユーザーは届かなかった事に気付く

(ポストに投函した郵便は宛先住所に届いたが、当人は引っ越ししていてもうその住所にはいない為、そこの住人がもう居ないと差出人に返信するイメージ)

上記の様な流れであれば、receiver@example.jpのサーバはsender@example.comの宛先サーバが分からなければバウンスメールを届けられ(返せ)ないのではないかと心配をしたのですが、前述の通り、example.comのMXレコードは設定していません。
(つまり郵便物に差出人住所を記載していない)

それでも上手く行くと言う事は、上記のやりとりは郵便の様に非対面・非同期で行われているのではなく、対面で同期実行されているのではないかと言う仮説にいたりました。
(郵便受取時に郵便屋さんに受け取り拒否をしたので郵便屋さんがsender@example.comに差し戻すイメージ)

しかし、バウンスメールの全てが上記の仮説通りであれば問題ないのですが、一部の理由の場合1~4の様な流れを取っているケースが存在すれば、現在はバウンスメールを受け取る事が出来ず、相手先に届いたと判断しているのではないかと言う不安が残ります。

実際のところ、メール配送の仕組みはどの様なものなのでしょうか?

サルでもわかるようにご説明いただけるか、参考になるサイトを教えていただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

エラーメールは、
・自分のSMTPサーバーが、相手のSMTPサーバーに接続して送ろうとした段階で問題があり、自分のSMTPサーバーからエラーメールが返ってくる場合
・自分のSMTPサーバーが、相手のSMTPサーバーに接続して、一応メールは送信できたが、後で、相手のSMTPサーバーからエラーメールが返ってくる場合
がありますが、最後のケースですよね?

MXレコードが無くても、Aレコードがあればそこに送ろうとします。そこにSMTPサーバーがないと送れません。また、AレコードAAAAレコードもなければ送れません。

昔ウェブのない時代は、組織ドメインのAレコードはSMTPサーバーを登録していたと思います。

投稿2019/10/21 09:55

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratailmacr2

2019/10/21 23:19

ご回答ありがとうございます。 どちらのケースもある為、少なくともAレコードは設定が必要と認識しました。 MXレコードは設定していませんが、Aレコードは設定済みですので、メール送信一日後にバウンスメールが送られてきても、一応ちゃんと受信出来ていると判断します。
guest

0

ベストアンサー

一般的に、メールは送信元ホストから複数の MTA を経由して宛先 MTA に届きます。
バウンスメールは、ある MTA1→MTA2 間で SMTP 通信中にエラー(User Unknown など、応答コード 5xx)となった場合、SMTP 接続元である MTA1 が作成し、envelope-from (sender@example.com) 宛に送信します。

バウンスメールが作成される場所として、主に以下の 2つのケースが考えられます。

(a) [送信元ホスト]→...→[com-MTA-OUT]→(エラー,5xx)→[jp-MTA-MX] [com-MTA-OUT]がバウンスメールを作成、送信します。

[com-MTA-OUT]は example.com 宛の静的な配送先を知っているかもしれないし、知らなければ DNS MX, A の順に検索して配送先を決定します。

(b) [送信元ホスト]→...→[com-MTA-OUT]→(成功,200)→[jp-MTA-MX]→(エラー,5xx)→[jp-MTA-Spool] [jp-MTA-MX]がバウンスメールを作成、送信します。

[jp-MTA-MX]は example.com の DNS MX, A の順に検索して配送先を決定します。
MX, A とも見つからなければダブルバウンスとなり、example.jp の特定のメールアドレスに転送されるか、廃棄されます。

※example.jp 内部の MTA が多段になっていて、その途中でエラーとなる場合もあります。
また、送受信経路が別となっていて、jp-MTA-MX とは別の MTA が出口となる場合もありますが、最終的には出口MTA で example.com の DNS MX, A を検索します。

投稿2019/10/21 09:14

TaichiYanagiya

総合スコア12141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratailmacr2

2019/10/21 23:19

ご回答ありがとうございます。 どちらのケースもある為、少なくともAレコードは設定が必要と認識しました。 MXレコードは設定していませんが、Aレコードは設定済みですので、メール送信一日後にバウンスメールが送られてきても、一応ちゃんと受信出来ていると判断します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問