대량메일을 다루기 위한 메일서버 튜닝 관련질문..

mirr의 이미지

안녕하세요~
회사에서 대량 메일을 발신 및 수신하기 위한 웹서버를 셋팅하게 되었습니다.
메일 송수신양은 대략 20만통이 넘어가구요 (하루 약 25만통정도)
그중 발신량이 20만통정도 됩니다. (회원으로 등록되어있고, 이메일 수신을 허용한 회원에 대하여 정보성 메일을 발송할 거랍니다.)

센드메일을 쓸거여서 일단 멀티큐와, 다중 프로세스를 이용해서 구축해 놓았긴 했는데요,
이상하게 한두시간 잘~빠르게 날라가고 받아오다가 한두시간쯤 지나면 현저하게 느려지며, 메일송,수신률도 엉망이 되곤 합니다.
설정은 일단 sendmail.cf에 있는 LA 항목들을 높여줬구요...

QueueLA=256
RefuseLA=256
MaxDaemonChildren=64

#deamon
/usr/sbin/sendmail -bd -ODeliveryMode=defer

#1.
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue -OMaxDaemonChildren=32 \
-OTimeout.initial=1m -OTimeout.connect=1m -OTimeout.iconnect=1m -OTimeout.helo=1m \
-OTimeout.mail=1m 

/usr/sbin/sendmail -q1m -OQueueDirectory=/var/spool/mqueue -OMaxDaemonChildren=4

#2_1.
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue_1 -OMaxDaemonChildren=16 \
-OTimeout.initial=1m -OTimeout.connect=1m -OTimeout.iconnect=1m -OTimeout.helo=1m \
-OTimeout.mail=1m 

/usr/sbin/sendmail -q1m -OQueueDirectory=/var/spool/mqueue_1 -OMaxDaemonChildren=4

#2_2
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue_2 -OMaxDaemonChildren=16 \
-OTimeout.initial=1m -OTimeout.connect=1m -OTimeout.iconnect=1m -OTimeout.helo=1m \
-OTimeout.mail=1m 

/usr/sbin/sendmail -q1m -OQueueDirectory=/var/spool/mqueue_2 -OMaxDaemonChildren=4

#2_3
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue_3 -OMaxDaemonChildren=16 \
-OTimeout.initial=1m -OTimeout.connect=1m -OTimeout.iconnect=1m -OTimeout.helo=1m \
-OTimeout.mail=1m 

/usr/sbin/sendmail -q1m -OQueueDirectory=/var/spool/mqueue_3 -OMaxDaemonChildren=4

#2_4
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue_4 -OMaxDaemonChildren=16 \
-OTimeout.initial=1m -OTimeout.connect=1m -OTimeout.iconnect=1m -OTimeout.helo=1m \
-OTimeout.mail=1m 

/usr/sbin/sendmail -q1m -OQueueDirectory=/var/spool/mqueue_4 -OMaxDaemonChildren=4

#2_5
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue_5 -OMaxDaemonChildren=16 \
-OTimeout.initial=1m -OTimeout.connect=1m -OTimeout.iconnect=1m -OTimeout.helo=1m \
-OTimeout.mail=1m 

/usr/sbin/sendmail -q1m -OQueueDirectory=/var/spool/mqueue_5 -OMaxDaemonChildren=4

#2_6
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue_6 -OMaxDaemonChildren=16 \
-OTimeout.initial=1m -OTimeout.connect=1m -OTimeout.iconnect=1m -OTimeout.helo=1m \
-OTimeout.mail=1m

/usr/sbin/sendmail -q1m -OQueueDirectory=/var/spool/mqueue_6 -OMaxDaemonChildren=4

#3
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue2 -OMaxDaemonChildren=32

이렇게 멀티큐를 이용하여 자식프로세스를 생성하여 돌릴 수 있도록 데몬을 띄웠습니다.
물론 MX나 도메인리버싱을 위한 간단한 로컬네임서버또한 서버내에서 돌리도록 설정했구요..

이 설정들 외에도 뭔가 수정해서 조금 더 낳은 결과를 얻을 수 있는 방법이 있을까요?
위에 데몬이 실행되는(자식프로세스가 생성되는) 주기를 조금 더 줄여도 괜찮을지, 아니면 다른 셋팅이 더 필요한지,
혹은 프로세스 수와 큐의 수를 더 늘려도 될지 궁금합니다.
계속 주기적으로 한두시간씩 발송을 멈춘뒤, 메모리반환을 기다리거나, 큐에 쌓인 메일을 삭제하는건 좀 무식한듯 해서말이죠..

메일보내는 서버의 사양은 4기가 램에 AMD Opteron 242(1.6?) 듀얼입니다.
조언 부탁드립니다...

-----------------------------------------------------------------
윽 제가 제목을 잘못정해놨었네요 메일서버인데 웹서버로..이제서야 봐서 수정합니다 :)

송효진의 이미지

대량메일을 위해 고민해 봤는데,
결론은 DB 기반으로 튜닝하자는 것 밖에 안나오더군요.

보내는 것은 소켓통신으로 직접 작성해서, 멀티 프로세스로 직접 쏘고,
받는 것을 DB에 넣게 해야 겠더라고요.

겪으신대로 보내다가 큐가 넘치면 느려지고,
받는것도 파일 기반이기 때문에, 한 디렉토리에 파일이 많이 쌓이면 컨트롤이 여러모로 매우 곤란해지죠.

보내는건 금방 만들겠는데, 받는게 문제에요.

emerge money

mirr의 이미지

으흠 보내는것을 소켓통신으로 직접 작성하신다는 말씀은 어떤의미죠?
어차피 smtp프로토콜을 사용하고, sendmail 데몬(25번포트)에 접속하여 보내야 하는거 아닌가요?

소켓통신으로 직접 쏜다는 것이 무슨뜻인지 잘 모르겠습니다..^^

사실 받는것보다 보내는게 더 중요하거든요....큐가 넘치지 않으면서 속도 및 발송성공율또한 만족스러울만한
결과를 내게 하는 방법은 없을까요? 저게 한계인가요?

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

dormael의 이미지

제가 직접 튜닝해 본 적은 없어서 정확한건 아닐수도 있지만 대부분 큐에 쌓여서 처리가 지연되는 발신 메일들이 메일서버의 상태를 악화시키는 것들이라고 보고 있습니다. 상대편 계정이 존재하지 않는다거나 메일박스가 꽉 찾다거나 상대 메일서버 응답 상태가 안좋다거나 하는 식으로요.

sendmail에 이런 설정이 가능할지 모르지만 이런 메일들의 재시도 횟수를 최대한 줄이거나 한번해서 안되면 실패로 간주하거나 큐 내에서의 우선순위를 맨 뒤로 놓는다거나 하여 우선 처리 가능한 것들을 처리하면 새로운 것들이 빨리 처리되지 않을까 싶습니다.

이런 기능이 sendmail에 없다면 apache james라는 자바로 작성된 메일서버를 추천합니다. java언어와 apache 자바 프로젝트에 좀 익숙하시다면 새로운 기능을 추가 작성하거나 기존 기능을 수정하는것이 어려울것 같지 않거든요.

메일은 어려워요. ㅡ,.ㅡ

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

mirr의 이미지

20만개정도(발신만)의 메일처리를 하루에 끝내야 합니다.
보내는 속도또한 최소한 한시간에 3~4만통은 보내야 하죠...
다른 메일발송전용 프로그램을 두어개 써봤지만 발송률 및 속도가 만족스럽지 않더라구요...
그래서 서버에서 바로바로 보낼 수 있게 한거였구요...

실제로 제가 저 설정을 가지고 하루를 돌려본 결과 4기가 제온 듀얼코어씨피유로 한시간에 3만통 넘게..3만5천통쯤 소화해 내던데
그 이상되면 조금씩 느려지드라구요...그래서 한~두시간마다 10분여정도씩 쉽니다....그러면 20만통을 약 6~7시간만에
발송할 수 있는거죠...

php를 통해 디비에서 자료를 뽑아 온 뒤, 메일서버에서 메일함수로 메일을 보냅니다.
이게 처음 한시간가량은 좌좌좌좍 가다가 한시간쯤 지나면 버벅댐과 동시에,
top을 통한 로드율 및 메모리 사용량은 엄청난 수치로 올라가기 시작합니다..
물론 풀된 메일계정 및 없는 메일계정 혹은 블락메일 등등이 큐에 많이 쌓여서 그런것이지요...
그래서 그 블락된 메일계정을 제일 끝에 있는 보류처리용 큐에 쌓아놓도록 해놨고, 그 보류처리된 메일은
2시간 마다 한번씩 큐를 확인하는 데몬을 또다시 띄워놓아 보내보고 안되면 그냥 날리도록 했습니다.
근데 그 2시간을 못버틴다는거죠.... 한시간으로 줄여놓는건 아직 안해봤습니다...

문제는 주기적으로 휴식을 주지 않으면서도 더 빠르게 더 안전하게 보낼 방법이 필요하다는건데...흑..어렵긴 어렵습니다..
혹시 센드메일 멀티큐와 프로세서를 10개 이상으로 올려보신분 계시나요?
제가 테스트 해봐야 하는건가요...

근데 저정도 메일발송량이면 어느정도 수준인가요? 원래 45만개정도의 메일을 발송 할 예정이였는데,
테스트 및 기타 자질구래한 문제들로 인하여 전부 못보내고 있는겁니다......
우리 오~너 께서는 하루이틀이면 금방 되시는줄 알고계시죠 물론 푸힛

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

dormael의 이미지

아, 이미 다 해놓으셨군요. ^^

제 생각에 큐확인 데몬은 자주 떠야 할것 같습니다. 더 빠르고 똑똑한 방식으로요. 예를들어 큐에서 실패한 메일에 대한 정보를 기준으로 횟수나 에러 메시지에 따라 바로 큐에서 제거하는 수준의 확인 데몬이 필요할 것 같습니다.

그리고 sendmail의 타임아웃 값들이 많이 줄어야 할 것 같구요. 아 이건 실패한 메일들의 분석을 토대로 하지 않으면 의미가 없을것 같긴 합니다. 거의 실패해 버릴수도 있어서..

결국 두마리 토끼를 다 잡기 힘들다는 얘기네요. ㅡ,.ㅡ
정확한 작동과 속도의 두마리는 정말 잡기 힘든것 같습니다.

개발과 관련된 측면이긴 하지만 메일배달 결과에 대한 피드백을 기록하고 다음에 보낼때 정책 결정이 가능하다면 더 좋은 성능을 낼 수 있겠지만 커스터마이징에 대한 비용이 상당히 들 것 같구요.

계속 도움은 안되는데 저도 예전부터 관심이 있던 부분이라 미르님을 괴롭히는 느낌입니다. 누군가는 마루타가 되어야 하기에.. ^^

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

송효진의 이미지

phpschool.com 에 보시면 php 소켓함수를 이용해서 직접 보내는 예제가 있습니다.
그런것을 php-cli 용으로 작성해서 1~1000, 1001~2000 이런식으로 나눠서

php mailshot.php 1 1000 &
php mailshot.php 1001 1000 &
php mailshot.php 2001 1000 &

이런식으로 실행하는 거죠.
php 에서 sendmail() 함수를 실행해서 리턴을 받았다고 해도,
큐에 쌓였다는거지 발송되었다는건 아니죠.
큐가 파일 기반인 만큼 일정량 이상 쌓이면 주체못하게 느려집니다.
디렉토리 하나에 몇만 파일이 들어있으면 ls, rm 조차 잘 안되죠.
그래서 소켓함수로 직접 쏘게 작성해서 파일이 쌓이지 않게 하는게 중요하죠.
안전성을 위한다면 DB 테이블에 보냈다는 플래그 하나 둬서 재실행이 가능하게 하는정도면 되겠죠.

emerge money

mirr의 이미지

아~? 그래요? php로 소켓으로 바로 쏘게 하는게 훨씬 낳은가보네요....
아직 개념이 잘 안잡히기 때문에일단 예제를 찾아서 봐야겠어요...뭐...
서버사이드에서 해결하든 프로그램상에서 해결하든 각종 방법을 해보겠습니다.......흑

아앗..찾아보니 역시 소켓으로 직접 발송하는게 아니라 결국은 센드메일을 통해갑니다..
제가 프로그래밍해서 돌리고 있는것과 동일한 형식이에요.....
오히려 저는 그나마 센드메일에 defer옵션을 통해 최대한 큐에 오래 쌓지 않고 보내는 방식을 이용하고있거든요..

결국 센드메일 튜닝(프로세서수,실행주기 및 멀티큐의 양 조절)쪽에서 열심히 짱구를 굴려봐야 한다는 소리군요...........
멀티큐와 프로세서를 일단 지금 6개(실시간발송큐)에서 9개(1.5배)로 늘려봐야 겠습니다...이러면 오히려
프로세스에서 잡아먹는 자원이 더 커져서 동일해 지는건 아닐지 모르겠지만 해봐야겠죵...

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

mirr의 이미지

글구 이 방식으로 (6개 멀티큐에 자식프로세스 뜨는시간 10초, 큐 검사하는시간 1분, 큐마다 각 프로세스 할당)
메일발송스크립트를 시작하면 순식간에 5~7천개의 큐가 쌓입니다.....
물론 발송은 끊임없이 계속 되죠.............그 이상 넘어가는것은 보지 못했구요(한시간 이상이 되기 전까진..)
한계점을 넘으면 로드율 팍팍올라가면서 그때서야 메일이 잘 안가기 시작합니다...

역시 메일로그 분석을 통해 센드메일쪽에서도 반송 및 계정풀, 블락등의 메일을 최대한 빨리 걸를 수 있도록
조절해 줘야 할것같군요..

아참 그리고 위에선 빼먹었는데 1~6차큐를 크론탭을 통해서 5분 이상 계속 머물러 있는 큐의 경우 각 다음 큐로 넘겨줍니다.
그리곤 최종적으로 발송이 잘 안되는 메일은 2시간마다 확인하는 마지막 보류큐로 이동되죠.....

어쩌면 시스템자원이 훨씬 빵빵하다면 한 서버에서 2~3십만 통정도는 보낼 수 있을 듯 하긴 합니다만....
좀더 삽질해보고 올려드릴께요.....흑

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

dormael의 이미지

제 생각에 위에 송효진님께서 말씀해 주신대로 현재 sendmail의 파일시스템 기반 큐가 발목을 잡고 있는것으로 보입니다.

제 기억에 큐에 수천개의 메일이 쌓이면 갯수 세는데도 세월이었던것 같습니다. 물론 그때는 시스템이 워낙 딸리긴 했지만요.

그리고 저도 php에서 직접 smtp로 기능해서 메일을 전송하는 공개된 라이브러리를 보았던 기억이 납니다. 이름이 smtp.php였던가 하도 오래 되어서 정확히는 기억이 안나네요.

혹시 sendmail자체에도 파일시스템 기반이 아닌 dbms기반의 큐 같은게 있다면 좋을텐데요.

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

익명사용자의 이미지

# dig naver.com mx
.
.
;; ANSWER SECTION:
naver.com. 3471 IN MX 10 rcvmail7.naver.com.
.
.

# telnet rcvmail7.naver.com 25
Trying 211.218.150.77...
Connected to rcvmail7.naver.com.
Escape character is '^]'.
220 nhn595.naver.com ESMTP Terrace MailWatcher 5.30.2006022719 (for naver.com)
HELO xxx.com <---입력
250 OK
Mail From: <---입력
250 2.1.0 Sender Ok
Rcpt To: <---입력
250 2.1.0 Recipient Ok
data <---입력
354 Start mail input; end with "."
xxxxxxxxx <---입력
. <---입력
250 2.5.0 Message accepted for delivery
quit <---입력
221 2.0.0 nhn595.naver.com Service closing transmission channel
Connection closed by foreign host.

익명사용자의 이미지

윗글 죄송... drupal에서 처음 글 쓰다보니...

# dig naver.com mx
   .
   .
;; ANSWER SECTION:
naver.com.              3471    IN      MX      10 rcvmail7.naver.com.
   .
   .
 
# telnet rcvmail7.naver.com 25
Trying 211.218.150.77...
Connected to rcvmail7.naver.com.
Escape character is '^]'.
220 nhn595.naver.com ESMTP Terrace MailWatcher 5.30.2006022719 (for naver.com)
HELO xxx.com <---입력
250 OK
Mail From: <newsletter@xxx.com> <---입력
250 2.1.0 Sender <newsletter@xxx.com> Ok
Rcpt To: <ididididid@naver.com> <---입력
250 2.1.0 Recipient <ididididid@naver.com> Ok
data <---입력
354 Start mail input; end with "<CRLF>.<CRLF>"
xxxxxxxxx <---입력
. <---입력
250 2.5.0 Message accepted for delivery
quit <---입력
221 2.0.0 nhn595.naver.com Service closing transmission channel
Connection closed by foreign host.
익명 사용자의 이미지

(다른 익명입니다)

Mail server farm을 이야기하는 건가요?

Postfix의 경우는 여러가지 다양한 튜닝 파라미터들이 있다는 것을 아는데, Sendmail은 어떤지 모르겠네요. 판단컨대, 하루정도 파라미터로 튜닝해서 안되면 한대 이상의 메일서버를 둬야 할 듯.

mirr의 이미지

음...센드메일에도 여러가지 튜닝옵션들이랑 파라미터가 있는듯 하긴 한데, Postfix가 더 낳을까요?
저도 최대한 한대로 하려고 해보고 안되면 분산시켜서 하자고 그랬습니다...만...최대한 한대로 끝내보라고 하시는군요 흑..

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

mirr의 이미지

이.....건 무엇.......?

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

gogoonee의 이미지

저게 소켓으로 바로 메일 보내는것 같은데요...
로컬 메일서버(센드메일등..) 안 거치고 바로 받는 쪽 메일 서버로 소켓 접속해서 메일 발송하도록 프로그램을 만들면 된다는 말슴이신것 같습니다.

예전에 들은바로는 (저도 해보진 않았습니다.) 메일 수신자 리스트를 메일 주소 도메인 별로 소팅해서 같은 도메인의 메일은 소켓 연결 한번만 하고 주루룩 보내면 더 빠르다고 들었던 것도 같습니다.

음.. 그리고 같은 도메인 메일은 메일 본문은 한번만 보내고 주소만 좌라락 보낼수도 있다고 어디선가 읽었던것 같기도 하구요....

(호주와 일본 축구 재밌네요.. 8분에 3골!!!)

익명 사용자의 이미지

아, 발송시 (로컬 smtp 거치지 말고) 상대방 smtp에 직접 접속해서 보내라는 소리였군요. 쓸데없는 기능빼고 구현하면 고급언어로 100줄 안팎이면 될 것 같은 생각이 드네요(전에 작성한 적이 있는데, 찾아보기 귀찮아서). 그런 류는 smtp-client 등으로 불리던 것으로 기억하는데, php 사용한다면 한번 찾아보세요. 위의 텔넷 세션 거의 그대로 하면 될겁니다(더 정확히 하려면 에러 핸들링도 해야 하지만 급한대로 위와 같이 시도해 보는 것도 괜찮을 듯). 동일 도메인에 동일 메시지면 아마 여러번 'to' 헤더 덧붙일 수 있던 것으로 기억합니다 - 이렇게 되면 각각 한번의 'to' 헤더로 여러번 보내는 것보다 빠르겠죠.

Sendmail에 비해 Postfix가 처리속도가 더 낫다는 글을 본적은 있는데... 물론 믿거나 말거나 겠죠.

익명 사용자의 이미지

위에 언급되었던 'mailshot.php' 라는 놈이 php용 smtp-client 인 듯.

mirr의 이미지

음....상대방 smtp에 직접 접속하는게 조금 더 힘든거 아닌가요?
다양한 메일이 있고, 메일이 잘못된것들도 있는데....
dig실행하고 접속해서 소켓으로 직접 메일발송하는게 훨씬 더 낳은방법인가요?
같은 메일을 한번에 보내는 방법은 괜찮은듯 한데요......
dig실행하고 직접 상대방 메일서버에 접속해서 하는 방법은 실 테스트를 해봐야 겠습니다...
감사합니다 ^^

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

mirr의 이미지

sendmail에서 설정 변경해서 한시간정도 넘게 돌리고 있습니다.
php에선 슬립타임없이 무조건 큐로 보내도록 해놨더니 파일큐가 너무 쌓이는 경우가 생겨서 시스템부하가 한시간만에 100이 넘어가버리더군요..
그래서 php쪽에서 소켓 열고 닫을때(메일보내고 나서) 0.3초정도의 텀을 줬습니다.
1초에 3~4개정도의 큐가 쌓이고, 10초마다 센드메일에서 이 큐를 확인한 후 최대 30통정도씩 날려줍니다(발송).
nate, lycos, hotmail등에선 일정량을 보내면 너무 많이 보낸다며 그냥 거부해버리는군요..

위에 답글해주신 분들중에 한번에 이메일을 여러게 써넣으라는 부분이 있는데 메일 발송 내용이
그 대상자에게 특화되어 보내지는 내용이기때문에 (특정 형식대로 일정부분이 변경됨) 그 방법은 아무래도 안될것 같습니다.

00 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue /var/spool/mqueue_1 300
05 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue /var/spool/mqueue_2 300
10 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue /var/spool/mqueue_3 300
15 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue /var/spool/mqueue_4 300
20 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue /var/spool/mqueue_5 300
25 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue /var/spool/mqueue_6 300
30 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue /var/spool/mqueue_1 300
35 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue /var/spool/mqueue_2 300
40 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue /var/spool/mqueue_3 300
45 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue /var/spool/mqueue_4 300
50 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue /var/spool/mqueue_5 300
55 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue /var/spool/mqueue_6 300

1-50/10 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue_1 /var/spool/mqueue2 3600
1-50/10 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue_2 /var/spool/mqueue2 3600
1-50/10 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue_3 /var/spool/mqueue2 3600
1-50/10 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue_4 /var/spool/mqueue2 3600
1-50/10 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue_5 /var/spool/mqueue2 3600
1-50/10 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue_6 /var/spool/mqueue2 3600

크론탭입니다. 5분씩 큐를 돌아가며 각 메인 큐에서 생성된지 오분이 지난 메일큐를 서브큐들로 옮겨줍니다.
그리곤 각 서브큐들을 다른 센드메일 프로세스가 10초마다 확인하여 나름대로 또 발송시도를 합니다.
그리고 각 서브큐에서 한시간가량 전혀 발송되지 않고 대기중인 녀석들만 골라서 최종 큐에 넣습니다.
일단 제가 생각하기에 여기까지 온 메일들은 대략 안들어가는 메일로 보여집니다.
그래도 혹시 모르니 이 마지막 큐에서 1분간격으로 큐를 확인하여 보내줍니다.

일단 이렇게 서버단에서 설정하였습니다.
메일 발송은 한시간에 약 1만 5백개 조금 못되게 발됩니다. 계산상으로는 1만8백개 정도 였는데
생각처럼 정확하게는 안가지는군요...

20만통정도를 보내야 하니까 하루 꼬빡 돌리면 될듯합니다.

로드에버리지는 시간이 지나면 지날수록 올라갑니다. 많이는 아니고 두시간 돌려보니
0.00대에서(메일만 보낼꺼라 다 꺼놨습니다.) 0.10으로 뛰더니 0.10~ 0.30 또 시간이 지나면 0.20~0.50대 이런식으로
차츰차츰 올라가서 두시간 후에는 5.00~7.00까지 로 올라갑니다...
처음 한시간만에 100이 넘던것 보단 양호하지만 왜 저렇게 시간이 흐를수록 올라가는지 의문입니다.
메일에 쌓여있는 큐 처리량을 따져볼때는 큐마다 각 설정해놓은 sendmail 데몬들이 몇개정도씩 작동을 안하고
대기상태로만 빠져있는게 보이는데 그게 영향을 미치는 듯 합니다.
하드웨어의 허용을 초과하는 프로세스를 띄워서인지는 잘 모르겠군요...
어쨋든 여섯개 큐중 4번~6번의 큐는 거의 안움직입니다. 4번은 조금씩 움직이고 5~6번은 거~~의 안움직이고 있죠..

이 부분은 아직 잘 모르겠습니다.
의외로 MX를 받아오기위한 로컬네임서버에서 CPU사용량이 꽤 나오고 있군요..메모리역시..

조금 더 상황을 보고 다시 스레드를 띄우든지 붙이든지 하겠습니다... 조언 및 아이디어들 있으면 관심갖고 지켜봐 주시다가,
얘기해 주시면 감사하겠습니다^^

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

dormael의 이미지

로드에버리지가 높을때 mailq인가 sendmail -q 인가로 큐 한번 확인해 보셨나요?
궁금한데, 위에도 말씀 드렸지만 파일시스템 기반의 sendmail의 큐가 로드를 잡아먹는 원인이 아닐까 싶어서요.

대강 찾아봤는데 대부분 php메일러들이 smtp로 동작하는것 같지는 않네요.
sendmail의 개선된 방식의 큐도 없어 보이구요.

아님 메일큐 디렉토리를 램디스크나 아주 빠른 디스크로 하는건 어떨까요?
램디스크는 위험하려나?

최소한 파일시스템을 많은 수의 파일에도 빠르게 작동하는 타입으로 바꾸는 것도 가능할것 같습니다.

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

mirr의 이미지

음?? sendmail -q 하니까 아무것도 안나오는군요...
예...저도 파일기반 큐가 로드를 먹는것 같습니다....안가는걸 어쩔수도 없고 혹시몰라서 한시간 텀을 두고 최대한
보내보려고 하고있는데 그걸 더 줄이기에는 좀 그럽니다.
왜냐면 한시간 이상 지연된 큐를 옮겨놨더니 그 큐에서 조금씩 메일을 보내고 있었으니까요...
파일시스템의 변경은 어떤 파일시스템이 좋을지 잘 모르겠군요....reiser가 좋을까요?
아니면 다른?? postfix를 사용하는 방법도 생각중인데 아직 적용해보진 못했습니다.
마이 오널(ㅋㅋ)~가 qmail 혹은 sendmail이 아니면 다 때려쳐! 라는 식으로 나오니까용~

어쨌든 로드율 줄이기에는 많이 성공한 편입니다 흑 :)

지금 쓸데없이 한시간 넘게 안가는 메일을 쌓아놀 필요가 없다는 생각이 드는군요
각종 짓거리 해보고 올리겠습니다 ^^

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

dormael의 이미지

아, 멀티큐에서는 그냥 일반적인 큐 명령과는 다른건가요?
하나도 안나오다니...

파일시스템은 저도 ext3외에는 경험이 없어서 말씀을 못 드리겠습니다. 직접 테스트 해보시는게 다른 컴에서 파티션에 파일 엄청나게 만들어놓고 ls로 응답시간 체크하면 될것 같은데요.

제가볼땐 큐를 효율적으로 관리하지 않으면 다른 메일시스템도 마찬가지일거라고 봅니다.
혹시라도 qmail이라면 큐를 다른식으로 관리할 수 있는 패치가 있을지도 모르겠네요.

꼭 최적화에 성공하시기 바랍니다.^^
성공하시면 방법좀 알려주세용.ㅋㅋ

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

mirr의 이미지

다시 설정 변경해봤습니다.

sendmail.cf 내용중 이번 대량메일에 사용한 옵션변경으로는
O QueueDirectory=/var/spool/mqueue/q* #mqueue하위의 q로 시작하는 모든 디렉토리를 메일큐로 사용합니다. 랜덤하게 들어가죠.
O QueueLA=256
O RefuseLA=256
O MaxDaemonChildren=64

이렇게 두었고 큐 디렉토리 구성은
/var/spool/mqueue 하위에 q1 ~ q6 까지의 하위 멀티큐를 두고,
/var/spool/mqueue2 하위에 또 q1 ~ q2,
최종적으로 /var/spool/mqueue3 을 두었습니다.

센드메일 데몬 실행은

#deamon 센드메일메인 프로세서를 Defer모드로 띄운다(무조건 큐에 쌓아놓는모드. 다른 일체의 행동없이 무조건 쌓는다.) 
/usr/sbin/sendmail -bd -ODeliveryMode=defer

# 각각의 메인 멀티큐를 관장하는 데몬들.
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q1 -OMaxDaemonChildren=32 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q1 -OMaxDaemonChildren=4

#1_1.
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q2 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q2 -OMaxDaemonChildren=4

#1_2
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q3 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q3 -OMaxDaemonChildren=4

#1_3
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q4 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q4 -OMaxDaemonChildren=4

#1_4
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q5 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q5 -OMaxDaemonChildren=4

#1_5
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q6 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q6 -OMaxDaemonChildren=4

#2 (mqueue2의 메일큐들을 관리하는 데몬 : 3분 이상의 메일지연이 이루어 졌던 메일들에 대한 처리)
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue2/q1 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue2/q1 -OMaxDaemonChildren=4

#2_2
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue2/q2 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue2/q2 -OMaxDaemonChildren=4

#3 ( 최후 삼십분동안 지연이 이루어진 메일들의 처리 )
/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue3 -OMaxDaemonChildren=32
[Code]

이렇게 띄웠습니다.

그리곤 크론탭에 re-mqueue.pl을 일정주기로 등록하여 주기적으로 메일지연을 확인한 후 각 큐로
이동시키도록 처리했습니다. 

[Code]
#Hugest Mail Send
#2분마다 메일로그의 로그를 잘라주는 logrotate를 실행.
1-59/2 * * * * /usr/sbin/logrotate /etc/logrotate.d/mail
#1-59/5 * * * * /var/spool/naver.sh

#3분간격으로 각 큐에서 180초 이상 지연된 메일큐를 이차 상위큐로 이동.
*/3 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue/q1 /var/spool/mqueue2/q1 180
*/3 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue/q2 /var/spool/mqueue2/q1 180
*/3 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue/q3 /var/spool/mqueue2/q1 180
*/3 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue/q4 /var/spool/mqueue2/q2 180
*/3 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue/q5 /var/spool/mqueue2/q2 180
*/3 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue/q6 /var/spool/mqueue2/q2 180

#10분이 지난 메일들을 10분간격으로 이차 상위큐에서 최종 큐로 이동.
1-50/10 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue2/q1 /var/spool/mqueue3 600
1-50/10 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue2/q2 /var/spool/mqueue3 600

#최종 큐에서 30분이 지난 메일들을 메일발송 불가로 판단. 다른 센드메일미관련 디렉토리로 이동.
*/30 * * * * /usr/sbin/re-mqueue.pl /var/spool/mqueue2 /etc/mail/mqueue 1800

네임서버 설정(MX값을 확인 하는 부분인지라 그냥 단순히 로컬DNS를 사용했습니다. 물론 리버스 DNS설정은 안했습니다.)

options {
        directory "/var/named";
        check-names master warn;
        datasize 20M;
  };
  zone "." IN {
        type hint;
        file "root.hint";
  };

  zone "localhost" IN {
        type master;
        file "localhost";
        check-names fail;
        allow-update { none; };
        allow-transfer { any; };
  };

<root.hint>
쉘에서 dig > /var/named/root.hint 실행

</var/named/localhost>
@  IN  SOA  @ root (
                  42              ; serial (d. adams)
                  3H              ; refresh
                  15M             ; retry
                  1W              ; expiry
                  1D )            ; minimum
    NS     @
1   A     127.0.0.1

</etc/resolve.conf>
nameserver 127.0.0.1 추가


이렇게 돌렸습니다.

php에서 메일서버로 접속하여 메일을 발송하는 간격은 0.3초당 한통씩이구요
이상태로 한시간에 약 1만통정도의 발송이 가능했습니다.
물론 RBL등으로 블록이 되어있는 메일계정등이 있고, 하루 발송제한량이 있는 대상메일서버의 경우는
돌리면서 php에서 적절하게 처리해 주도록 해놓아야 했으며, 그렇게 했음에도 시간이 흐를수록 약간씩의
속도저하는 있었습니다.

어쩌면 큐확인 시간을 조금 더 조절할 수도 있을지도 모르겠군요...어쨋든 몇시간이 지나면
큐의 양이 어마어마하게 쌓이고, 부하율도 높아지는 부분은 이정도 설정으로 해결했습니다.
부하가 쓸데없이 끊임없이 높아지는 일은 없어졌거든요..
큐에 메일이 쌓이는 비율과 비워지는 비율도 약간의 차이는 있지만 처음처럼 한번에 몇천개씩 싸이거나
하진 않았습니다...

IDE하드라면 hdparm등으로 I/O튜닝도 좀 해봤을텐데 스카시하드는 어떻게 해야할지 모르겠군요..

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

dormael의 이미지

http://people.redhat.com/alikins/system_tuning.html

오래된 문서이긴 한데 도움이 될 가능성이 있을지 몰라서요.
근데 대단합니다. 센드메일 덩치크고 복잡하다고만 생각했는데 이런 구성의 묘가 있기도 하군요.
저는 개발자라 그런지 이런건 생각도 못해봤습니다.
걍 프로토콜 구현해서 만들던지 어디선가 소스 구해다가 수정해서 썼을듯..ㅋㅋ

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

다즐링의 이미지

일단 아마 기본 룰셋이 load 15이상에서는.. 받지를 않을껍니다.

아까 익명사용자분께서 이야기하신

상대방의 smtp로 직접쏘기가 제일 좋습니다.

현재방식의 단점은:
1. 큐의 증가 ( 보내는건 느린데 큐에 집어 넣는건 빠름 )
1. 하드 IO 증가
1. 로드 증가
1. sendmail stop
1. 큐는 더 증가
아마 이런식일껍니다.

현재 방식에서 해결하시려면
1. 큐에서 한번 실패하면 포기 하는 방식
1. 보내는 process를 많이 만들거나 ( 혹은 server farm )
1. return address 의 해결
이런 문제를 해결하시면 되고...

추천하는 방법은 다음과 같습니다.

1. php나 python 이나 perl 로 집접 소켓으로 연결해서 쏘는 프로그램을 만듭니다.
11. 먼저 메일 데이터를 받습니다.
11. dns 를 분리해서 lookup 합니다. MX , host
11. 받은 데이터로 소켓을 접속해서 쏩니다.
11. 끊습니다.
1. 발송하는 상태를 관리하는 프로세스가 필요합니다.
11. 외부의 smtp 중에는 이런놈들이 있습니다.
111. ip 로 발송제한
111. 1분에 몇개 1시간에 몇개로 커넥션 혹은 메일 양제한
111. 한번에 1개만 메일 받고 connection 끝는놈
111. 스팸으로 판별되면 아예 막아버리는놈
111. 이런놈들을 관리하기 위해서 발송제한을 걸어야합니다.
111. 혹은 ip가 많고 약간의 저수준 프로그래밍이 가능하시면.. ip를 계속 바꾸어가면서 보내면 됩니다. ( 이해하실분은 이해하실꺼고;; )
1. 메일의 종유에 따라 틀리지만.. 실패하면 이유가 뜹니다. 이유를 판별하고 상태를 리턴해서 나중에 종합하면 됩니다.
1. 그리고 국내 smtp ( naver , daum 등.. ) 은 ip 관리하는곳이 많은데 각각 회원가입 , 사업자등록증 등등을 해서 등록해야합니다 -_-;
1. 외국 smtp는 보통 rbl 을 쓰는데 -_-;; 이놈들 미칩니다.. 한국은 스팸메일이 많아서 아예 막아뒀다 이런애들이 있는데.. .. 방법이 없습니다.
11. 잘못걸리면.. 아예 못보내는데 야후 global 메일이 그렇습니다 -_-;

-------------------------------------------------------------------------------------------------------
Life ... http://iz4u.net/blog/

------------------------------------------------------------------------------------------------
Life is in 다즐링

mirr의 이미지

상대방 SMTP로 직접소기라면 상대방 메일서버로 접속해서 메일을 보내라는 말씀이신가요?
naver로 테스트 해봤는데 Relay Deny메시지가 뜨드라구요...
dig naver.com mx 를 했을때 나오는 서버들에 테스트 해봤는데 안되드라구요..
방법이 잘못된걸 수 도 있구요....

서버 팜은 클러스터링의 개념인가보죠? 메일서버를 여러대 둬서 분산시키는것같군요....
현재 제가 사용하는 설정대로면 최대 약 260~280정도의 프로세스가 띄워질듯 한데 만약 메일지연이 일어나면
더 쓰레드가 늘어나게되나요?

큐에서 한번 실패하면 바로 포기하는것과, 프로세스 늘리기, 리턴어드레스해결 을 선택해 보고 싶은데요..
제생각에도 이젠 더이상 서버상의 설정은 한계인듯 합니다.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

다즐링의 이미지

naver로 테스트하신거라면..
일단 두세가지가 가능성이 있는데
1. 이미 스팸호스트로 등록되어있다
2. 분당 보내는 메일수 초과
3. 받는 사람주소 잘못설정 이렇겠죠

메일지연이 일어나면 당연히 프로세서가 늘어나겠죠

보통.. 일반 p4 에서.. 2시간이면.. 20만통정도는;;

그리고 qmail을 약간 고치시거나 ( 설정 수정 )
smail 같은것도 꽤 괜찬습니다.

어차피 용도가 회원상대의 메일 발송일테니..

메일은 오라일리의 인터넷이메일 프로그래밍 정도는 보고 하시면 금방 해결됩니다.

-------------------------------------------------------------------------------------------------------
Life ... http://iz4u.net/blog/

------------------------------------------------------------------------------------------------
Life is in 다즐링

mirr의 이미지

스팸이라기보단 회원대상을 상대로 서비스에 대한 정보를 알려주는것이죠 ^^
오히려 메일링리스트의 개념이 더 강합니다.
그사람의 관심정보에 대한 리포팅이 위주니까요...

그리고 네이버에서 스팸등록되어있지 않습니다.
직접접속해서 보내는것만 아니면 잘 가드라구요...
nate에서는 메일발송량이 제한되어있고, netsgo, lycos 국내 대형메일포털에선 이 세군대만
적정 제한이 되어있고 다른곳은 적당히 받아주는듯하는군요...

2시간에 20만통이라.....너무 빠르게 보내는거 아닌가요?
너무 빨리보내면 스팸처리되기 더 쉬울듯한데...

역시 sendmail로는 무리일까요...센드메일로도 가능한걸 보여주고 싶었는데 :)

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

다즐링의 이미지

흐흐 저희도 그렇지만 스팸신고 당합니다 -_-;;

집접적속해서 보내는것이 잘안가는것은..

먼가 코드쪽에 문제가 있는경우입니다; 저희쪽에는 잘감;;

예전에 올린적이 있지만.. 국내에만 약 20개정도의 서비스에는. 등록을 하는게 좋습니다.

그리고.. sendmail 로 당연히 가능하지만..

sendmail.cf나.. mc를 얼마나 열심히 고쳐야할지 의문이라

시험기간 끝나면 조금 살펴보기야 하겠지만 꽤 고쳐야할껍니다;;

2시간에 20만통은 약과입니다 -0-;; ( 더한분들이 꽤 많 )
아마 개인화된 메일을 생성하셔셔 그런가본데요.
이쪽은 이름 빼곤 다 같으니까 =) 구동할때
메일로 만들고 그 자체를 펑션으로 만들어서 처리해버립니다.

dnscache 랑 등등을 잘 이용하시면 쉽습니다;

-------------------------------------------------------------------------------------------------------
Life ... http://iz4u.net/blog/

------------------------------------------------------------------------------------------------
Life is in 다즐링

mirr의 이미지

아..그점이 있었군요..동일한 내용이 아니라 사용자에 맞춰서 일부 다른 정보들을 디비에서 빼와서 보내야 하는거라
조금 걸릴수도 있었습니다....
지금은 qmail도 설정해서 테스트 해보려고 합니다.
아직도 이상하게 직접 telnet으로 그쪽에 접속하는 경우에는 접속거부를 당하고 있습니다...이상하군요 ㅎㅎ
아~~ 되는군요..... 근데 내용이 잘못됬는지 실제 메일이 오질 않네요...
일단 되는건 확인했으니 좀 더 살펴봐야겠어요....

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

익명사용자의 이미지

저한테는 보내지 말아주세요...

dormael의 이미지

가능하면 범용적인 메일서버로 해결하시면 좋겠지만 용도에 최적화된 메일전송 어플리케이션을 생각하셔야 할것도 같습니다.
시스템 튜닝에도 한계는 있는듯 하네요.

우선 직접 전송에서 메일서버를 거치는 것과 다른 결과가 나오는 이유를 확실히 알아보셔야 할것 같습니다.
쉽게 생각나는 Relay Denied의 이유는 네이버측에 등록되어 있지 않은 MX Host에서 전송을 시도한 경우가 있겠네요. DNS도 마찬가지구요.
아니면 접속후에 사용되는 상세 프로토콜의 차이일수도 있구요.
자세한 로깅이나 메시지 출력을 이용해서 둘의 차이를 확실히 찾아 내신후에 전송을 한다면 될것 같습니다.

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.