web-dev-qa-db-ja.com

Postfixエラー:ホストまたはドメイン名が見つかりません

Raspbianを使用していますが、起動時にPostfix(バージョン2.9.6)サービスが自動的に実行されるようですが、メールを送信する場合、メールはキューに残ります。

$ mailq
26CB72201F    443 Sat Sep 19 19:44:17   [email protected]
(Host or domain name not found. Name service error for name=smtp.gmail.com type=A: Host not found, try again)
                                        [email protected]

サービスを再起動すると(Sudo service postfix restart)その後、次回の起動までメールが機能します。

どうして?違いはなんですか?

Postfixのインストール中に、「インターネットとスマートホスト」の設定を選択しましたが、「インターネットサイト」のチュートリアルに従って設定を完了したので、これが問題となる可能性があります(?)メールを送信したいだけです。

PDATE:問題は、Wi-Fiが接続される前にPostfixが実行されることである可能性があります。

5
clemtoy

問題は、WiFiが接続される前にPostfixが/etc/resolv.confをチェックすることです。したがって、/var/spool/etc/postfix/resolv.confは起動後も空のままで、メールを送信できません。

この問題を解決するために、私はpostfixサービスを無効にしました:

Sudo update-rc.d postfix disable

…そして、Postfixを開始する前にWi-Fi接続の終了を待つようにこのスクリプトを書きました(/usr/local/bin/postfix_wifi.shに保存されています):

#!/usr/bin/sh

Host="smtp.gmail.com"
port=587

until nc $Host $port -w 5
do
    sleep 10
done

Sudo service postfix start
exit 0

…そして、この行を/etc/rc.localに追加して、スクリプトが起動時に実行されるようにしました。

/usr/local/bin/postfix_wifi.sh &
3
clemtoy

より短い答え。

「ホストが見つかりません。もう一度やり直してください。」サーバーにDNS解決の問題があるか、Postfix自体にDNS解決の問題がある可能性があります。しかし、それはクリーンアップする必要があるものの中核です。

それを解決する方法については、あなたの質問はあなたのベースOSまたはセットアップに関する簡潔な答えを与えるのに十分な詳細を提供していません。 Sudo service postfix restartを実行している場合、Ubuntu/Debianを実行しているようですが、他にどのような詳細情報を提供できますか?

より長い答え。

resolv.confに接続されている可能性があります。

エラーに基づいて:

ホストまたはドメイン名が見つかりません。 name = smtp.gmail.com type = Aのネームサービスエラー:ホストが見つかりません。もう一度お試しください。

送信メールにGmailのSMTPサーバーを使用しているようです。ベースOSは不明ですが、 Ubuntuフォーラムでのこの回答 に基づいています。これは、再起動時にresolv.confがないという問題のようです。大胆な強調は私のものです:

Ubuntu 14.04 LTSでも同じ問題があります。 postfixがインストールされると、/etc/resolv.conf/var/spool/postfix/etc/resolve.confにコピーします。しかし、何らかの理由で再起動/再起動後にファイルがコピーされず、ヘッダーのみの空のファイルが取得されます。

推奨される一時的な解決策は、メインOS resolv.confをPostfixのディレクトリにコピーすることです。

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

これは恒久的な修正ではないようですが、少なくとも確認する必要があります。

inet_protocols設定に接続されている可能性があります。

また、 サーバー障害に関するこの回答 は、IPv6サポートに焦点を当てた同様の状況を説明しています。エラーはIPv4である「type = A」レコードに関するものであり、IPv6の場合は「type = AAAA」になるため、問題がIPv6関連ではないことを確認してください。しかし、そうは言っても、Postfix設定ファイルの inet_protocols 設定を調整して実験する価値があるかもしれません。 Postfixの公式ドキュメントの説明は次のとおりです。

Inet_protocolsパラメータを介してIPv4サポートが有効になっている場合、PostfixはDNSタイプAレコードを検索し、IPv4-in-IPv6クライアントのIPアドレス(:: ffff:1.2.3.4)を元のIPv4形式(1.2.3.4)に変換します。後者は、IPV6_V6ONLYサポート(RFC 3493)より前のホストで必要です。

IPv6サポートがinet_protocolsパラメーターを介して有効になっている場合、PostfixはDNSタイプのAAAAレコード検索を行います。

IPv4とIPv6の両方のサポートが有効になっている場合、Postfix SMTPクライアントは、smtp_address_preferenceパラメータで指定されたプロトコルを選択します。 2.8より前のバージョンのPostfixは、IPv4を使用する前にIPv6経由で接続しようとします。

例:

  • inet_protocols = ipv4
  • inet_protocols = all(デフォルト)
  • inet_protocols = ipv6
  • inet_protocols = ipv4、ipv6

Ubuntu/Debianセットアップを使用していると仮定して、ここに構成を開きます。

Sudo nano /etc/postfix/main.cf

そして、次のいずれかになるようにinet_protocols行を見つけるか、値を設定します。

inet_protocols = ipv4

またはこれである:

inet_protocols = all

次に、Postfixサービス(またはサーバー全体)を再起動して、問題が解決するかどうかを確認します。

Sudo service postfix restart
14
JakeGould