저는 sendmail을 사용하여 텍스트 파일에서 매우 간단한 이메일을 보내고 있습니다. 다음은 텍스트 파일입니다.
to:[email protected]
from:[email protected]
subject:Testing
test test test
내가 보낸 것:
sendmail -t < mail.txt
내가 sendmail을 실행하고 있는 서버는 hostname.tld입니다. 이것은 /etc/hosts입니다:
12.34.56.78 hostname hostname.tld
127.0.0.1 localhost
여기서 hostname.tld는 서버의 FQDN이고 12.34.56.78은 서버의 공용 IP입니다. /etc/hostname에는 hostname.tld만 포함됩니다.
이메일을 받으면 다음 헤더를 받습니다.
Received: from hostname.tld (hostname.tld [127.0.0.1])
127.0.0.1은 필요 없고 공개 IP를 원하지만 무엇을 하든 sendmail에서 사용할 수 없습니다. 또한 다음 줄을 포함하도록 /etc/mail/sendmail.mc를 편집했습니다.
define(`confDOMAIN_NAME', `hostname.tld')dnl
그러나 그것은 아무것도 하지 않습니다.
사람들이 비슷한 문제를 겪고 있지만 해결책이 없는 것 같은 게시물을 많이 읽었습니다. 어떡해?
답변1
데몬 모드 및 MSP
위에서 언급한 IP 주소에 대한 설명은 실제로 sendmail
서버 자체의 구성이 아닙니다. 최신 배포를 살펴보면 sendmail
일반적으로 두 가지 구성 요소로 나뉩니다. 기존 서버(데몬 모드)실행 중인 다른 서버메일 제출자 모드(MSP). 간단한 명령으로 이를 확인할 수 있습니다 ps
.
$ ps -eaf | grep send
root 24488 1 0 21:10 ? 00:00:00 sendmail: accepting connections
smmsp 24504 1 0 21:10 ? 00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
첫 번째 줄은 데몬 모드의 sendmail이고, 두 번째 줄은 MSP 모드의 sendmail입니다. sendmail과 함께 제공되는 대부분의 배포판에는 더 낮은 권한을 가진 특수 사용자로 실행되는 MSP 변형이 있기 때문에 항상 구별할 수 있습니다. 이것은 내 CentOS 5.x 서버에서 사용자로 실행되는 것입니다 smmsp
.
노트:이는 메시지 제출(MSP)과 메시지 전달(데몬 모드) 처리에 대한 책임을 분리하기 위해 수행됩니다. 사용자는 mail
및 같은 명령을 사용하여 메일을 보낼 때 MSP 인스턴스에 로컬로 연결합니다 .mailx
CentOS와 같은 Red Hat 기반 배포판에서 sendmail을 처리할 때 구성 파일은 다음 위치에 있습니다 /etc/mail
. 수정하려는 파일이 2개 있습니다.
- /etc/mail/sendmail.mc
- /etc/mail/submit.mc
첫 번째 파일은 데몬 모드 서버를 제어하고 두 번째 파일은 MSP 서버용입니다.
그런데 이러한 *.mc
파일은 두 서버에서 직접 사용하는 실제 구성 파일이 아니며 일반적으로 sendmail
구성이 복잡할 수 있습니다. 오래되고 다재다능하다는 점을 감안할 때 다양한 방법으로 구성할 수 있으므로 이러한 파일은 실제 구성 파일 *.mc
로 "컴파일"할 수 있는 사전 구성된 파일입니다 . sendmail
이러한 파일의 컴파일된 버전도 동일한 디렉터리에 있습니다.
- /etc/mail/sendmail.cf
- /etc/mail/submit.cf
.mc
일반적으로 이 두 파일을 직접 변경하지 않고 해당 파일을 통해 변경하는 것이 좋습니다 . 일반적으로 .mc
파일을 편집한 다음 디렉터리 내에서 명령을 실행합니다 make
. /etc/mail
내가 아는 한, 이것은 다시 redhat주의이므로 다른 배포판을 사용하면 상황이 달라질 수 있습니다.
노트:* 이 .mc
파일은 다음과 같은 매크로 언어로 되어 있습니다.M4이므로 당연히 이를 컴파일하는 도구를 이라고 합니다 m4
. 다음 명령을 사용하여 이러한 파일을 수동으로 컴파일할 수 있습니다.
$ m4 /etc/mail/submit.mc > /etc/mail/submit.cf
이것이 Red Hat이 카탈로그에서 제공하는 모든 부가 기능입니다 make
.Makefile
/etc/mail
Submit.cf에 대한 변경 사항
그렇다면 어떤 변화를 주어야 할까요? submit.mc
파일 에 다음 줄을 추가해야 합니다 .
CLIENT_OPTIONS(`Family=inet, Address=<your ip here>, Name=MTA')dnl
나타나는 곳에 귀하의 IP를 추가하십시오 <your ip here>
. 이렇게 변경한 후에는 submit.mc
파일을 다시 생성해야 합니다 .
$ cd /etc/mail && make
파일을 다시 생성 한 후 .cf
재부팅해야 합니다 sendmail
.
$ /etc/init.d/sendmail restart
-or-
$ /etc/init.d/sendmail reload
완제품
위와 같이 변경하면 다음 헤더가 표시됩니다. 예를 들어 이 예에서 내 외부 IP 주소는 50.122.22.45입니다.
Return-Path: <[email protected]>
Received: from mail.sdom.com (mail.sdom.com [50.122.22.45])
by sdom.com (8.14.3/8.14.3) with ESMTP id r5J188Gx018193
for <[email protected]>; Tue, 18 Jun 2013 21:08:08 -0400
Received: (from root@localhost)
by mail.sdom.com (8.14.3/8.14.3/Submit) id r5J15ua4018000;
Tue, 18 Jun 2013 21:05:56 -0400
Date: Tue, 18 Jun 2013 21:05:56 -0400
Message-Id: <[email protected]>
to:[email protected]
from:[email protected]
subject:Testing
X-Spam-Status: No, score=-4.4 required=5.0 tests=ALL_TRUSTED,BAYES_00
autolearn=ham version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on mail.sdom.com
X-Greylist: Sender is SPF-compliant, not delayed by milter-greylist-4.0 (sdom.com [127.0.0.1]); Tue, 18 Jun 2013 21:08:09 -0400 (EDT)
test test test
인용하다
답변2
이것이 내 해결책입니다.
/etc/호스트:
12.34.56.78 hostname.tld
127.0.0.1 localhost
/etc/mail/submit.mc:
FEATURE(`msp', `[12.34.56.78]', `25')dnl
(원래는 내 공용 IP 대신 127.0.0.1을 사용했습니다)
/etc/mail/sendmail.mc:
DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp, Addr=12.34.56.78')dnl
DAEMON_OPTIONS(`Family=inet, Name=MSP-v4, Port=submission, M=Ea, Addr=12.34.56.78')dnl
(두 줄 모두 원래 127.0.0.1을 가지고 있었고 이를 변경하면 sendmail이 localhost 대신 공용 IP에서 수신 대기하게 됩니다.)
실행 명령:
make -C /etc/mail
보내는 이메일을 다시 로드하세요.
service sendmail reload
테스트 이메일을 보낸 후:
sendmail -t < mail.txt
지금 내가 좋아하지 않는 제목은 다음과 같습니다.
Received: from hostname.tld (hostname.tld [12.34.56.78])
헤더 어디에도 localhost 또는 127.0.0.1에 대한 언급이 없습니다.