접미사 오류 : 호스트 또는 도메인 이름을 찾을 수 없습니다 user@mail.example.com (Host or domain

Raspbian을 사용하고 있으며 부팅 할 때 Postfix (버전 2.9.6) 서비스가 자동으로 실행되는 것처럼 보이지만 메일을 보내려면 이메일이 대기열에 남아 있습니다.

$ mailq
26CB72201F    443 Sat Sep 19 19:44:17   user@mail.example.com
(Host or domain name not found. Name service error for name=smtp.gmail.com type=A: Host not found, try again)
                                        someone@gmail.com

서비스 ( sudo service postfix restart)를 다시 시작 하면 다음 부팅 때까지 이메일이 작동합니다.

왜? 차이점은 무엇입니까?

Postfix 설치 중에“Internet with smarthost”구성을 선택했지만 구성을 마치기 위해… Internet Site”에 대한 자습서를 따랐으므로 이것이 문제가 될 수 있습니다 (?). 이메일을 보내려고합니다.

업데이트 : Wi-Fi가 연결되기 전에 Postfix가 실행되어 문제가 될 수 있습니다.



답변

더 짧은 대답.

“호스트를 찾을 수 없습니다.”로 서버에 DNS 확인 문제가 있거나 Postfix 자체에 DNS 확인 문제가 있음을 의미 할 수 있습니다. 그러나 이것이 정리되어야 할 핵심입니다.

그것을 정리하는 방법에 관해서는, 당신의 질문은 간결한 대답을 줄 수있는 기본 OS 또는 설정에 대한 충분한 세부 사항을 제공하지 않습니다. 실행중인 경우 Ubuntu / Debian을 실행하는 것 같지만 sudo service postfix restart다른 세부 정보를 제공 할 수 있습니까?

더 긴 대답.

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과 관련이 없는지 확인하십시오. 그러나, 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) 이전의 호스트에서 필요합니다.

inet_protocols 매개 변수를 통해 IPv6 지원이 활성화되면 Postfix는 DNS 유형 AAAA 레코드 조회를 수행합니다.

IPv4 및 IPv6 지원이 모두 활성화되면 Postfix SMTP 클라이언트는 smtp_address_preference 매개 변수로 지정된 프로토콜을 선택합니다. 2.8 이전의 Postfix 버전은 IPv4를 사용하기 전에 IPv6을 통해 연결을 시도합니다.

예 :

  • inet_protocols = ipv4
  • inet_protocols = 모두 (DEFAULT)
  • 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

답변

문제는 /etc/resolv.confWiFi가 연결되기 전에 Postfix가 확인한다는 것 입니다. 따라서 /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 &