문제 :전 - 큐 후위의 실행 (펄) 산란기의 물고기 수컷 동안 큐 ID를 가져옵니다
가 후위 대상 IP 주소와 TCP 포트로 이메일에 특정 헤더의 존재를 묶어 위해 산란기의 물고기 수컷을 작성하는 시도 아웃 바운드 중계 호스트의
Postfix milter guide 다음에 나는 before-queue
milter를 구현해야합니다.
Sendmail::Milter perl 모듈을 사용하면됩니다.
내가 중계 할 최종 목적지 (IP 및 포트)를 제외하고 헤더, 봉투 등에서 필요한 모든 것을 얻을 수 있습니다. 분명히 이이 before-queue
milter 인 것을 의미합니다.
중계 정보는 어디서 구할 수 있습니까?
나는 다음과 같은 형식의 메시지를 볼 수있는 우리의 후위 로그를 찾고 :
TIMESTAMP HOST postfix/qmgr[pid]: XXXXXXXXXX: log message here
TIMESTAMP HOST postfix/smtp[pid]: XXXXXXXXXX: log message here
TIMESTAMP HOST postfix/smtpd[pid]: XXXXXXXXXX: log message here
로그 라인의 일부는 내가 찾고 릴레이 정보, 즉이 :
<TIMESTAMP> <HOST> postfix/smtp[pid]: XXXXXXXXXX: to=EMAIL, relay=HOST[ADDR]:PORT, ...
을 그 ADDR
과 PORT
정확히 내가 무엇을 찾고 있어요. XXXXXXXXXX
은 모든 것을 로그에 묶어 두는 것처럼 보입니다. 나는 이것이 당신이 말하는 것에 따라 '큐 ID'또는 '작업 ID'라고 믿게되었습니다.
milter의 대기열/작업 ID가 XXXXXXXXXX
인 경우 로그를 연결하는 데 아무런 문제가 없습니다.
시도 했습니까?
콜백에서 $ctx->getsymval SYMNAME
을 호출하여 일부 공급 업체의 특정 정보를 얻을 수있는 것처럼 보입니다.
Additional information is passed in to the vendor filter routines using symbols.
Symbols correspond closely to sendmail macros. The symbols defined depend on the
context. SYMNAME is the name of the symbol to access.
This function returns the value of the symbol name SYMNAME.
Milter가 가이드는 같은 코드가하여 '큐 ID'에서 얻을 다음 : 나는 getsymval
를 통해 그 작업 ID에 얻을 수 있다면
/* Determine the job ID for logging. */
if (dfc->mctx_jobid == 0 || strcmp(dfc->mctx_jobid, JOBIDUNKNOWN) == 0) {
char *jobid = smfi_getsymval(ctx, "i");
if (jobid != 0)
dfc->mctx_jobid = jobid;
}
난 그냥 알아낼 수 없습니다 (어떤 SYMNAME
일 수 있습니다) 또는 다른 컨텍스트 방법을 통해.
아이디어가 있으십니까?
'my $ queue_id = $ ctx-> getsymval ('i');은 대기열 ID를 제공해야합니다. –
'Sendmail :: Milter'를 그대로 사용할 수있게되었습니다. 우리가 우연히 패치가 필요한'Sendmail :: PMilter'를 사용하고 있음을 알았습니다. 대답을 쓰고 싶으면 받아 들일 것입니다. –
나는 본다. 나는 답을 추가했다. –