내 메일 릴레이는 잘 작동합니다. 내 DigOc 호스트(많은 도메인이 있음)는 내 메일 계정에 로그인된 별도의 cPanel 기반 공유 호스팅 계획 메일 서버를 통해 메일을 릴레이합니다. (나에게는 이것이 Postfix를 설치하고 구성하는 것보다 쉽습니다.)
다음과 같이 AT&T SMS 문자 메시지를 보낼 때를 제외하고는 모든 것이 잘 됩니다.
(물론 저는 이 번호를 바꿨습니다.)
웹 브라우저에서 Gmail을 통해 수동으로 메일을 보내는 경우에는 작동하지만 sendmail 메일 기술이 포함된 PHP 스크립트나 Bash 스크립트를 사용하는 경우에는 작동하지 않습니다. 메일 로그를 확인해 보니 다음과 같습니다. 아래 IP 주소와 전화번호를 의도적으로 변경하였음을 알려드립니다.
Jun 8 17:25:39 corp1 sendmail[5826]: u58HPdCP005826: from=root, size=51, class=0, nrcpts=1, msgid=<[email protected]>, relay=root@localhost
Jun 8 17:25:39 corp1 sm-mta[5827]: u58HPdKW005827: from=<[email protected]>, size=314, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=corp1.104-226-131-166-com [127.0.0.1]
Jun 8 17:25:39 corp1 sendmail[5826]: u58HPdCP005826: [email protected], ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30051, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (u58HPdKW005827 Message accepted for delivery)
Jun 8 17:25:39 corp1 sm-mta[5829]: STARTTLS=client, relay=mx3a.txt.att.net., version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-SHA, bits=256/256
Jun 8 17:25:39 corp1 sm-mta[5829]: u58HPdKW005827: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=120314, relay=mx3a.txt.att.net. [166.216.149.129], dsn=5.0.0, stat=Service unavailable
Jun 8 17:25:39 corp1 sm-mta[5829]: u58HPdKW005827: u58HPdKW005829: DSN: Service unavailable
Jun 8 17:25:39 corp1 sm-mta[5829]: u58HPdKW005829: to=<[email protected]>, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30000, dsn=2.0.0, stat=Sent
나는 다음 줄에 문제가 있다고 강력하게 의심합니다.
Jun 8 17:25:39 corp1 sm-mta[5829]: STARTTLS=client, relay=mx3a.txt.att.net., version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-SHA, bits=256/256
이 메일 메시지가 제대로 작동하도록 Sendmail 구성에서 수행해야 할 확실한 작업이 있습니까?
편집하다
@Anderzej의 제안을 받아들여 그렇게 했습니다.이 단계. 내가 얻은 응답은 다음과 같습니다.
[email protected]... Connecting to mx3a.txt.att.net. via esmtp...
220 alpemg-mtmta04 bizsmtp ESMTP server ready
>>> EHLO corp1.104-226-131-166-com
250-alpemg-mtmta04 hello [104.226.131.166], pleased to meet you
250-HELP
250-SIZE 1500000
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-STARTTLS
250 OK
>>> STARTTLS
220 2.0.0 Ready to start TLS
>>> EHLO corp1.104-226-131-166-com
250-alpemg-mtmta04 hello [104.226.131.166], pleased to meet you
250-HELP
250-SIZE 1500000
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 OK
>>> MAIL From:<[email protected]> SIZE=65
554 5.1.0 corp1.104-226-131-166-com has no MX or A record
/root/dead.letter... Saved message in /root/dead.letter
Closing connection to mx3a.txt.att.net.
>>> QUIT
답변1
@JennyD에게 감사드립니다. 이것이 해결책인 것 같습니다.
디버깅 활성화sendmail 테스트 스크립트에서 문제가 무엇인지 정확히 확인할 수 있습니다.
일부 메일 서버는 다른 호스트를 통해 릴레이되더라도 사용자를 확인합니다. 따라서 /etc/mail/sendmail.mc 파일의 MASQUERADE_AS()에 유효한 도메인이 필요하고 동일한 서버에 있어야 하며 A 및 MX 레코드에 대한 DNS 쿼리에 응답해야 합니다. 도메인은 "보낸 사람:" 또는 "답장:"을 지정하려는 실제 도메인일 필요는 없으며 수신자의 메일 서버가 확인할 도메인만 있으면 됩니다.
MASQUERADE_DOMAIN을 읽은 다음 allmasquerade, masquerade_envelope 및 masquerade_entire_domain 함수를 읽어서 필요한지 확인하거나, 하나의 호스트에서 여러 도메인에 메일을 제공하는 경우 여러 테스트를 실행해야 합니다. 내 경우에는 그런 것이 필요하지 않습니다. 이제 동일한 호스트에서 온 것처럼 x.com, y.com 및 z.com으로 메일을 보낼 수 있으며 AT&T 메일 서버가 메일이 전송된 메일 서버를 확인할 때 내 목록에 x.com이 나열됩니다. 사례. 하지만 SMS 문자 알림 메시지가 오면 x.com, y.com, z.com에서 보낸 것처럼 보이게 할 수 있습니다.
AT&T 메일 서버(및 기타 메일 서버)에서
mail()
PHP의 명령에 다섯 번째 매개변수를 추가해야 하는 이상한 상황에 직면할 수도 있습니다. x.com이 내가 원하는 보낸 사람: 주소 도메인이고 귀하의 받는 사람: 주소가 매개변수 뒤에 공백이 없는 모바일 알림을 조정해야 합니다.mail($sEmail,'',"HERE IS YOUR ALERT",'','[email protected]');
$sEmail
[email protected]
-f
답변2
첫 번째이자 주요 문제는 sendmail이 존재하지 않는 도메인에 존재하지 않는 호스트 이름을 사용하도록 구성되어 있다는 것입니다. "104-226-131-166-com"이라는 도메인이 없습니다. 이는 어떤 스크립트나 시스템 기능이 보낸 사람 주소를 지정하지 않고 메일을 보낼 때마다 유효하지 않은 주소를 사용하게 된다는 것을 의미합니다. 이는 결국 일부 시스템(예: att.net)이 다른 시스템에서 보낸 메일을 거부한다는 의미입니다. 스팸함 또는 자동 폐기됩니다. 수신자의 시스템이 메시지를 수락했지만 전달에 실패한 경우 문제를 알리는 오류 메시지가 수신되지 않습니다.
기본적으로 사용되는 호스트 이름이 서버의 실제 호스트 이름이 되도록 sendmail 구성을 변경해야 합니다.
또한 스크립트 자체의 보낸 사람 주소를 오류 메시지를 보낼 주소로 설정하도록 변경해야 합니다.