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

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

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

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

DNSレコード

DNSレコードとは、DNS(ドメインネームシステム)に登録する情報を指します。主なレコードの種類としては「A/AAAA」「PTR」「SOA」「CNAME」「MX」「NS」「TXT」などがあり、それぞれに役割を持ちます。

DNS

DNSとは、Domain Name Systemのことで、インターネットなどのTCP/IPネットワーク上でドメイン名やホスト名と、IPアドレスとの対応づけを管理するシステムです。DNSのデータベースは、IPアドレスの4つの数字を通知するDNSサーバーで構築されており、IPアドレスをドメイン名から引き出す機能やドメイン名に関するメールサーバ情報を取り扱っています。

Postfix

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

636閲覧

Docker Postfix メール送信エラー(Host or domain name not found)の解決方法

bizinesuwa

総合スコア4

Sendmail

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

DNSレコード

DNSレコードとは、DNS(ドメインネームシステム)に登録する情報を指します。主なレコードの種類としては「A/AAAA」「PTR」「SOA」「CNAME」「MX」「NS」「TXT」などがあり、それぞれに役割を持ちます。

DNS

DNSとは、Domain Name Systemのことで、インターネットなどのTCP/IPネットワーク上でドメイン名やホスト名と、IPアドレスとの対応づけを管理するシステムです。DNSのデータベースは、IPアドレスの4つの数字を通知するDNSサーバーで構築されており、IPアドレスをドメイン名から引き出す機能やドメイン名に関するメールサーバ情報を取り扱っています。

Postfix

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2024/08/14 02:45

編集2024/08/14 22:56

実現したいこと

現在、Docker Postfix の環境で、メール送信専用サーバーを構築しています。
当初は何も分からず勉強と思い構築し、正常にメールを送信できていましたが、改めて構築した際、メールが送信出来ない状態で、その不具合を解消し、
SPFやDKIM等は徐々に設定しますが、プレーンなメールの送信がメールを送信出来ればと思っております。

発生している問題・分からないこと

エラーはDNS解決出来ないエラーとなります。

エラーメッセージ

error

1Host or domain name not found. Name service error for name=example.jp type=MX: Host not found, try again

該当のソースコード

From: example.com
To: example.jp

Dockerfile

1FROM ubuntu:22.04 2 3ENV DEBIAN_FRONTEND=noninteractive 4 5# 環境変数の設定 6ENV NODE_ENV=production 7 8RUN apt-get update && apt-get install -y \ 9 rsyslog \ 10 postfix \ 11 iputils-ping \ 12 dnsutils \ 13 netcat-openbsd \ 14 iproute2 \ 15 wget \ 16 libssl-dev \ 17 net-tools \ 18 sasl2-bin \ 19 && apt-get clean \ 20 && rm -rf /var/lib/apt/lists/*

main.cf

1(下記項目以外はデフォルト) 2inet_interfaces = all 3myhostname = mail.example.com 4myorigin = example.com 5mydestination = $myhostname, localhost.$mydomain, localhost 6relayhost = 7smtp_host_lookup = dns 8mynetworks_style = host 9mynetworks = 127.0.0.0/8, 172.17.0.0/16, 10.0.8.0/24

resolv.conf

1(下記項目以外はデフォルト) 2nameserver 8.8.8.8 3nameserver 1.1.1.1

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

コンテナ内から送信実行

echo -e "From: no-reply@example.com\nTo: shop@example.jp\nSubject: Test Email\n\nThis is a test email sent from Postfix on Docker." | sendmail -t

メール送信時のログ

postfix/postfix-script[129]: starting the Postfix mail system postfix/master[131]: daemon started -- version 3.6.4, configuration /etc/postfix postfix/pickup[132]: C0151202D99: uid=0 from=<root> postfix/cleanup[146]: C0151202D99: message-id=<20240813232431.C0151202D99@mail.example.com> postfix/qmgr[133]: C0151202D99: from=<root@example.com>, size=358, nrcpt=1 (queue active) postfix/smtp[148]: C0151202D99: to=<shop@example.jp>, relay=none, delay=0.03, delays=0.01/0.02/0/0, dsn=4.4.3, status=deferred (Host or domain name not found. Name service error for name=example.jp type=MX: Host not found, try again)

digコマンド

dig example.com ANY +noall +answer examples.com. 3600 IN MX 10 mail.examples.com. dig example.jp ANY +noall +answer example.jp. 3600 IN MX 0 sv*****.xserver.jp. sudo docker exec $(sudo docker ps -q -f name=dev_postfix) bash -c 'dig example.com ANY +noall +answer' example.com. 3600 IN MX 10 mail.example.com. sudo docker exec $(sudo docker ps -q -f name=dev_postfix) bash -c 'dig example.jp ANY +noall +answer' example.jp. 3600 IN MX 0 sv*****.xserver.jp.

sendmail コマンド

sudo docker exec $(sudo docker ps -q -f name=dev_postfix) bash -c 'echo -e "Subject: Test Email\nFrom: example@example.com\nTo: example@example.jp\n\nThis is a test email from Postfix" | sendmail -t -f example@example.com' とし送信を実行しても、 Host or domain name not found. Name service error for name=example.jp type=MX: Host not found, try again

cat /etc/resolv.conf コマンド

(色々変更し、現在の値は下記となります) sudo docker exec $(sudo docker ps -q -f name=dev_postfix) cat /etc/resolv.conf nameserver 127.0.0.11 search . options ndots:0 nameserver 8.8.8.8 nameserver 1.1.1.1 options edns0 (8.8.8.8、1.1.1.1 のみでもDNSエラーは解消されません) (/var/spool/postfix/etc/resolv.conf にはファイルがありませんでした)

nslookup コマンド

nslookup example.jp 8.8.8.8 Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: example.jp Address: **.***.**.** nslookup -query=mx example.jp 8.8.8.8 Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: example.jp mail exchanger = 0 sv*****.xserver.jp. Authoritative answers can be found from:

どのドメインへメールを送信しても同じ「Host or domain name not found.」となります。

main.cf の設定を色々変えてみましたが、ドメインの解決が出来ませんため、
他見落としている設定があればご指摘いただければ幸いです。

何卒、よろしくお願いいたします。

補足

バージョン
Postfix: mail_version = 3.6.4

ネットワーク
NETWORK, ID, NAME, DRIVER, SCOPE
1ae39a6baf9c, bridge, bridge, local
4270238db37e, docker_gwbridge, bridge, local
f58f90d5e24e, host, host, local
ufjyjpirj69n, ingress, overlay, swarm
hhuor6855ath, dev_network, overlay, swarm, 10.0.8.0/24 << postfix
c05a8a97581a, none, null, local

ディレクトリ
dev/docker-stack-postfix.yml
dev/postfix/Dockerfile
dev/postfix/config/main.cf
dev/postfix/config/resolv.conf

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

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

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

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

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

otn

2024/08/14 03:47

shop@ToDOMAIN.com というのは実在するドメインですが、実際にこの通り文字通りそのままでしょうか? 質問のために適当に書き換えたのであれば、その本物の宛先には他の手段で普通にメールが送れますか? なお、「文字通りそのドメインを使ったのか」「例として書いただけ」の区別をいちいち聞かれたり説明したりしなくて良いように、「例示専用のドメイン」が用意されているので、それを使いましょう。 example.com example.jp example.org など多数。サブドメインも例示利用可能。
bizinesuwa

2024/08/14 04:42

記述が誤っており失礼致しました。 example.jpexample.com へ変更させていただきました。 また、どのドメインへ対して(現在正常にメールを受け取れているドメイン複数)へ送信しでも、同様にDNSの解決は出来ない状態です。 そのため、Postfix自体の設定の様子かと思いますが、プレーンなメール送信の設定が記述以外に何があるのか検討がつかない状態で御座います。
hqf00342

2024/08/14 07:08

メール送信元(example.com)のサーバを立てようとしていて、 メール送信先(example.jp)のメールサーバは別にあるという前提であってますか? メール送信先ドメイン(example.jp) のDNS設定(MXレコード)はしてありますか?
bizinesuwa

2024/08/14 10:09

はい、合っております。 また、digコマンドの結果も追記させていただきました。 dig example.com ANY +noall +answer examples.com. 3600 IN MX 10 mail.examples.com. dig example.jp ANY +noall +answer example.jp. 3600 IN MX 0 sv*****.xserver.jp. 解決につながる有益な情報にれば幸いです。 他、不足の情報がありましたら、お申し付けください。 お願いいたします。
CHERRY

2024/08/14 10:17 編集

メールを送信している Docker 環境で、 dig mx example.jp のように DNS を検索するとどのような結果になりますか。 失礼。 入れ違いになっていました。 実行結果は、 sendmail を実行した Docker コンテナ内で実行した結果ですか。
bizinesuwa

2024/08/14 12:06

ありがとうございます。 >実行結果は、 sendmail を実行した Docker コンテナ内で実行した結果ですか。 左様です。 Dockerコンテナ内からのメール実行、Dockerコンテナ外から sudo docker exec $(sudo docker ps -q -f name=dev_postfix) bash -c 'echo -e "Subject: Test Email\nFrom: example@example.com\nTo: example@example.jp\n\nThis is a test email from Postfix" | sendmail -t -f example@example.com' とし送信を実行しても、 Host or domain name not found. Name service error for name=example.jp type=MX: Host not found, try again でDNSが解決出来ないエラーとなってしまうのが現状で御座います。
otn

2024/08/14 12:29

> >実行結果は、 sendmail を実行した Docker コンテナ内で実行した結果ですか。 > 左様です。 メール送信例と同じく、実行したコマンドとその出力をコピペしましょう。 sudo docker exec $(sudo docker ps -q -f name=dev_postfix) bash -c 'dig example.jp ANY +noall +answer' ですかね。
hqf00342

2024/08/14 13:58

DockerコンテナはなにかのベースOSイメージにpostfixを入れたものですか(公式ありましたっけ?)。 dockerコンテナ内でpostfixを稼働させたことはないのですが、posftfixはresolv.confを/var/spool/postfix/etc/resolv.confにコピーし利用するようです(ディストリビューションによるかもしれません)。コンテナrunning時にこれらのファイルが存在するか/どんな値か見てみたほうがいいかもしれません。
bizinesuwa

2024/08/14 22:59

コメントありがとうございます。 sudo docker exec $(sudo docker ps -q -f name=dev_postfix) bash -c 'dig example.jp ANY +noall +answer' の結果は下記となります。 sudo docker exec $(sudo docker ps -q -f name=dev_postfix) bash -c 'dig example.com ANY +noall +answer' example.com. 3600 IN MX 10 mail.example.com. sudo docker exec $(sudo docker ps -q -f name=dev_postfix) bash -c 'dig example.jp ANY +noall +answer' example.jp. 3600 IN MX 0 sv*****.xserver.jp. (記事内にも追加させていただきました) Dockerコンテナへは、 RUN apt-get update && apt-get install -y \ rsyslog \ postfix \ ... と記述し起動しています (こちらもDockerfileの記載を記事に追記させていただきました)
hqf00342

2024/08/15 08:52

dockerfileの記載ありがとうございます。 参考までに、 実際にコンテナを作ってみましたが(プロセス起動部は記載なかったので適当) /var/spool/postfix/etc/resolv.confを 作成するとDNSに関するエラーは解決するように見えます。 cp /etc/resolv.conf /var/spool/postfix/etc/
otn

2024/08/15 10:21

master.confの設定でchrootをyesにしていると、/var/spool/postfix にchrootして実行されるようですが、 (なので、必要なファイルは、/var/spool/postfix 配下にコピーしておかないといけない) Dockerで動かす場合は、意図的にmaster.confを変更しなくても勝手にそうなると言うことなんですかね?
hqf00342

2024/08/15 12:13

dockerでは、というよりはUbuntuのpostfixパッケージではchroot環境動作ということだと思います。 RHEL系は違ったはずです。postfix全盛?のころはインターネットサービスはchrootするのが常識のような感じですがdockerコンテナ内でchrootするのは違和感がありますね。
otn

2024/08/15 12:19 編集

なるほど。ubuntuではそれがデフォルトと言うことでしたか。ありがとうございます。
bizinesuwa

2024/08/15 22:59

コメントいただきありがとうございます。 >> cp /etc/resolv.conf /var/spool/postfix/etc/ >> (なので、必要なファイルは、/var/spool/postfix 配下にコピーしておかないといけない) の部分、問題解決の糸口(今までに試した事のない部分)をお教えいただきありがとうございます。 少し希望がもてました。 後ほど上記の件を確認させていただき、また結果をお知らせさせていただきたく思います。
guest

回答1

0

自己解決

この度は沢山の方々にコメントいただき、ありがとうございます。

cp /etc/resolv.conf /var/spool/postfix/etc/

の対応をしましたところ、正常にメールが送信されました。

ここ10日程度、この一つの事で時間を費やしてしまいましたが、
こちらの書き込みやコメントで、メール送信の解決の他に、他の方へ少しでも有意義な情報交換が出来、ありがとうございました。

今回は直接的な解決方法をごご教授いただきました hqf00342 さまをベストアンサーとさせていただきたく思います。
hqf00342さまを含め他のコメントいただきました方々、本当にありがとうございました。

投稿2024/08/16 04:59

bizinesuwa

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問