우분투 웹서버에서 메일 전송이 안됩니다

안녕하세요.

Ubuntu 14.04 + Nginx + Php 5 + maria db로 워드프레스 웹사이트를 운영하고 있습니다.

그런데 워드프레스로 제작된 사이트에서 메일을 전송 시,워드프레스에서는 문제없이 전송되었다고 나오는데,

확인해보면 메일이 도착해있지 않습니다.

다양한 플러그인과 워드프레스 사이트로 테스트 해봐도 마찬가지더군요.

인터넷에서 찾아보니, Mail()를 사용하기때문에 sendmail을 설치해보아도 안되더군요.

뭔가 우분투에서의 설정 문제인것 같은데, 어떻게 확인해야되는지, 뭐가 문제인지 잘 모르겠습니다.

도와주세요!

php를 사용하시고 sendmail을 설치 하셨다면 mail() 함수 호출이 정상적일 것으로 생각 됩니다.
보통 보내는 메일은 firewall과는 상관없으니 방화벽 문제는 아닌 것 생각되며 sendmail이 로컬 메일 전용이 아니라면 문제가 없으리라 판단됩니다.

sendmail을 설치하셨으므로 원인을 찾을려면 /var/log/maillog(?) 를 확인하여 참고해 보시기 바립니다.
받는측에서 해당 IP가 블럭되는 경우도 있으니 로그를 확인해 보시기 바랍니다.

보통 /usr/sbin/sendmail 형식으로 링크 되어 있으므로 이 위치에 sendmail이 링크되어 있지 않다면
php에서 에러를 호출하는 데 에러가 아주 잠깐 나타났다 사라지므로 화면상에서 놓칠 수도 있습니다.

참고 하시기 바라며 sendmail 보다는 postfix가 운영에 편리할 것입니다.
또는 update-alternative로 mta 형태로 링크하여 사용하는 경우도 있으므로 확인하여 보십시오.

sudo update-alternative --config mta (목록이 나온다면 sendmail을 선택하십시오.)

마지막으로 php.ini 파일에서 sendmail 부분이 주석 처리되어 있는지 확인해 보십시오.
초기의 php 설정은 sendmail 부분이 공란이거나 주석 처리되어 있으므로
아래와 같이 변경하여 웹서버를 재시작 하시기 바랍니다.

[quote:2pyu26p4]sendmail_path = "/usr/sbin/sendmail -t -i"[/quote:2pyu26p4]
또는 터미날에서 pstree 명령을 이용하여 sendmail 데몬이 목록에 포함되어 있는지 확인해 보십시오.

없다면 sendmail 데몬이 시작되어 있지 않으므로 service 명령을 이용하여 시작시키기 바랍니다.

sudo service sendmail start

Workman729님

친절한 답변 정말 감사합니다.

알려주신 대로 몇 가지 확인을 해보았습니다.

/var/log/mail.log에서는 아래와 같은 오류가 발생합니다.

Feb 6 10:58:50 vultr sm-mta[9361]: u150FoEQ016253: to=<메일주소@naver.com>, delay=1+10:43:00, xdelay=00:00:00, mailer=esmtp, pri=18570852, relay=mx3.naver.com., dsn=4.0.0, stat=Deferred: Connection timed out with mx3.naver.com.

Feb 6 10:58:50 vultr sm-mta[9361]: u150AOkH016164: to=<메일주소@naver.com>, ctladdr=<www-data@vultr.guest> (33/33), delay=1+10:48:26, xdelay=00:00:00, mailer=esmtp, pri=18660664, relay=mx1.naver.com., dsn=4.0.0, stat=Deferred: Connection timed out with mx1.naver.com.

Feb 6 10:58:50 vultr sm-mta[9361]: u1509f0n016159: to=<메일주소@naver.com>, ctladdr=<www-data@vultr.guest> (33/33), delay=1+10:49:08, xdelay=00:00:00, mailer=esmtp, pri=18660677, relay=mx1.naver.com., dsn=4.0.0, stat=Deferred: Connection timed out with mx1.naver.com.

거의 모든 오류가 Connection timed out with ~ 로 발생하더군요.

샌드메일 데몬이 가동중인걸 확인했으며, 알려주신대로 php에서 주석처리 되어있는걸 해제하고 경로를 지정했습니다만, 역시 작동을 안하네요 ㅠㅠ

메일 기능이 꼭 필요한데, 어떻게 방법이 없을까요?

워드프레스 웹사이트에서 메일을 보내는 기능만 사용하고 싶습니다. 우분투로 메일서버를 구축하여 받을것까지는 생각하지 않고 있네요 ㅠㅠ

감사합니다.

[quote="workman729":mjjwvx0f]php를 사용하시고 sendmail을 설치 하셨다면 mail() 함수 호출이 정상적일 것으로 생각 됩니다.
보통 보내는 메일은 firewall과는 상관없으니 방화벽 문제는 아닌 것 생각되며 sendmail이 로컬 메일 전용이 아니라면 문제가 없으리라 판단됩니다.

sendmail을 설치하셨으므로 원인을 찾을려면 /var/log/maillog(?) 를 확인하여 참고해 보시기 바립니다.
받는측에서 해당 IP가 블럭되는 경우도 있으니 로그를 확인해 보시기 바랍니다.

보통 /usr/sbin/sendmail 형식으로 링크 되어 있으므로 이 위치에 sendmail이 링크되어 있지 않다면
php에서 에러를 호출하는 데 에러가 아주 잠깐 나타났다 사라지므로 화면상에서 놓칠 수도 있습니다.

참고 하시기 바라며 sendmail 보다는 postfix가 운영에 편리할 것입니다.
또는 update-alternative로 mta 형태로 링크하여 사용하는 경우도 있으므로 확인하여 보십시오.

sudo update-alternative --config mta (목록이 나온다면 sendmail을 선택하십시오.)

마지막으로 php.ini 파일에서 sendmail 부분이 주석 처리되어 있는지 확인해 보십시오.
초기의 php 설정은 sendmail 부분이 공란이거나 주석 처리되어 있으므로
아래와 같이 변경하여 웹서버를 재시작 하시기 바랍니다.

[quote:mjjwvx0f]sendmail_path = "/usr/sbin/sendmail -t -i"[/quote:mjjwvx0f]
또는 터미날에서 pstree 명령을 이용하여 sendmail 데몬이 목록에 포함되어 있는지 확인해 보십시오.

없다면 sendmail 데몬이 시작되어 있지 않으므로 service 명령을 이용하여 시작시키기 바랍니다.

sudo service sendmail start[/quote:mjjwvx0f]

[quote:244vx5tv]mailer=esmtp[/quote:244vx5tv]
esmtp는 부적당한 메일 에이전트입니다. 우분투에서도 esmtp가 설치되는 가요??
아마도 서버가 페도라인 것 같은 데 php는 esmtp를 지원하지 않습니다.

esmtp는 약간의 확장적인 메일 보내는 기능만 제공하므로 서버용이라 할 수 없습니다.
mta가 esmtp를 기본적으로 선택되어 있는 것 같은 데 update-alternatives를 확인 하지 않으신 것 같습니다.

sudo update-alternatives --config mta (우분투, 수세)

sudo alternatives --config mta (페도라, 슬랙웨어 계열 일부)

위의 명령어를 사용하시면 메일 에이전트 목록이 나타나고 리스트 중 선택만 하시면 됩니다.
혹은 mta외의 다른 이름을 사용한다면 알수 없으므로 /etc/alternatives의 목록을 보시면
뭐가 메일을 연상하는 이름으로 지정 되어 있을 수 있습니다.

메일 에이전트(sendmail, postfix등)를 선택 후 메일을 다시 보내 보십시오.

안녕하세요 Workman729님

친절한 답변 정말 감사드립니다.

서버는 우분투 14.04를 쓰고 있으며, 제가 esmtp가 정확히 잘 모르겠으나, Sendmail 데몬을 설치했을때

설정되는 기본값입니다.

알려주신

sudo update-alternatives --config mta (우분투, 수세)

sudo alternatives --config mta (페도라, 슬랙웨어 계열 일부)

을 적용해보았으나, update-alternatives: error: no alternatives for mta 라고 에러가 발생하네요.

몇가지 알게된게, 제가 사용중인 VPS에서 SMTP 25번 포트를 막아뒀더군요. 그래서 풀어달라 요청을 해서

풀었습니다만, 역시 메일 전송이 안됩니다. SMTP 포트를 25번이 아닌 다른 포트로 변경해도 안되구요.

메일로그에는 여전히 Connection timed out 에러가 발생합니다.

구글링으로 샌드메일에 관한 온갖 설정을 따라해봐도 안되네요…

서버에서의 문제일 수도 있을 것 같은데, 제 서버의 포트가 제대로 열려있는지 등을 어떻게 확인해야 될까요?

[quote="workman729":j3yhvw8p][quote:j3yhvw8p]mailer=esmtp[/quote:j3yhvw8p]
esmtp는 부적당한 메일 에이전트입니다. 우분투에서도 esmtp가 설치되는 가요??
아마도 서버가 페도라인 것 같은 데 php는 esmtp를 지원하지 않습니다.

esmtp는 약간의 확장적인 메일 보내는 기능만 제공하므로 서버용이라 할 수 없습니다.
mta가 esmtp를 기본적으로 선택되어 있는 것 같은 데 update-alternatives를 확인 하지 않으신 것 같습니다.

sudo update-alternatives --config mta (우분투, 수세)

sudo alternatives --config mta (페도라, 슬랙웨어 계열 일부)

위의 명령어를 사용하시면 메일 에이전트 목록이 나타나고 리스트 중 선택만 하시면 됩니다.
혹은 mta외의 다른 이름을 사용한다면 알수 없으므로 /etc/alternatives의 목록을 보시면
뭐가 메일을 연상하는 이름으로 지정 되어 있을 수 있습니다.

메일 에이전트(sendmail, postfix등)를 선택 후 메일을 다시 보내 보십시오.[/quote:j3yhvw8p]

esmtp는 mail() 함수를 지원하지 않는다고 말씀 드렸고
sendmail이 돌아가는 지 pstree 목록을 확인라고도 말씀 드렸습니다.

또한 현재 esmtp가 기본적인 mail agent라고도 말씀 드렸습니다.
비록 mta 형식으로 설정되어 있지 않다면 자신이 직접 설정하시면 됩니다.

sudo update-alternatives --install "/usr/sbin/sendmail" "mta" "esmtp가 설치된 경로/실행파일" 5000

sudo update-alternatives --install "/usr/sbin/sendmail" "mta" "sendmail이 설치된 경로/실행파일" 5000

sudo update-alternatives --config mta (리스트에서 선택)

전혀 모르시겠다면 esmtp를 지워 버리기라도 하시기 바랍니다.
지우는 방법도 모르겠고 update-alternatives 사용법도 잘 모르시겠다면
터미널에서 아래와 같이 수동으로 링크를 거시기 바랍니다.

cd /usr/sbin

ls -al | grep sendmail (이 명령어로 sendmail의 링크를 확인 하실 수 있습니다. 아마도 esmtp가 나올 겁니다.)

sudo ln -s /usr/sbin/sendmail /sendmail의 경로/실행파일

링크를 거는 고차원적인 방법이 update-alternatives 를 이용하는 방법입니다.
만약 노파심에 말씀 드리면 sendmail이 심볼릭 링크가 아닌 파일이라면 백업하시고 sendmail을 이용하여 링크하시기 바랍니다.

sudo mv /usr/sbin/sendmail /usr/sbin/sendmail.orig

sudo ln -s /usr/sbin/sendmail /sendmail의 경로/실행파일

php로 esmtp를 이용하는 방법도 있습니다만 mail() 함수를 이용하는 것이 아닌
다른 방법이 필요 합니다. 워드 프레스를 이용하신다니 수정이 불가능 할 것이므로 대안이 될 수 없습니다.

그리고 방화벽은 나가는 것은 필터링 하지 않으며 들어 오는 것만 필터링 합니다.
또한 상대측(메일을 수신)이 time out을 호출하는 것은 메일의 형식을 이해하지 못하는 단순한 이유 때문입니다.

왜냐면 esmtp가 php를 이용하여 보내는 메일 형식(mail())을 해석할 수 없기 때문에 메일 주소는 있으므로
어째든 esmtp가 해석할 순 없지만 보내긴 합니다만 엉터리 형식으로 상대측도 이해 불가인 것은 매 한가지 이므로 수신을 거부하기 때문입니다.

즉 esmtp는 mail() 함수에서 사용하는 header와 subject등을 이해할수 없습니다.
esmtp는 header와 subject등의 해석하기 위해 다른 명령어를 사용합니다.

메일 주소만 있고 제목과 내용이 없는 메일만을 발신하므로 상대측은 올바른 메일인지 체크하기 위해 해석하여 들지만
결국엔 time out에 걸려 수신이 되지 않는 것 입니다.

[quote:tqamzjdg]서버는 우분투 14.04를 쓰고 있으며, 제가 esmtp가 정확히 잘 모르겠으나, Sendmail 데몬을 설치했을때
설정되는 기본값입니다.[/quote:tqamzjdg]
esmtp와 Sendmail은 전혀 다른 겁니다. 님께서는 esmtp를 설치하지 않으셨겠지만
기본적으로 배포반 설치 내용중에 포함되는 경우도 있습니다.

아니면 다른 app을 설치하는 중에 의존성에 의해 함께 설치되는 경우도 있습니다.
어느쪽이든 설치되어 있다면 update-alternatives 명령으로 무엇을 사용할 지 골라서 사용하시면 됩니다.

esmtp를 지워도 상관 없지만 혹 다른 app에서 문제가 될 수 있으므로 update-alternatives 명령어로 선택하여 사용하는 방법을 추천합니다.

리눅스는 매우 이성적인 운영체체입니다.
안되는 이유는 논리적인 사고를 하시면 매우 간단하게 해결되는 법입니다.

아마도 구글 크롬 브라우저를 설치하셨으리라 봅니다. 의존성에 의해 esmtp가 설치 됩니다.