in reply to postfix filter...

I think this is less of a Perl problem than an issue of Postfix configuration. So, at the risk of being off-topic:...

When are you running your filter? If you are doing it as a recipient check, e.g., hanging off smtpd_recipient_restriction, you will not yet have the received that DATA. You will need to hang it off smtpd_data_restrictions instead.

If you are not concerned about rejecting the message, but only to send a message back if they fail the database check, I would be inclined to take your script as is, and fire it off from a procmail rule, and leave Postfix out of the picture. Which would have the added advantage of simplifying your Postfix configuration, since it becomes less bound to the application level, and simply does its job as a Mail Transfer Agent. Besides, as you have already shown, it's easier to test from the command line anyway.

- another intruder with the mooring in the heart of the Perl

Replies are listed 'Best First'.
Re^2: postfix filter...
by hsinclai (Deacon) on Feb 06, 2005 at 18:44 UTC
    smtpd_recipient_restriction, you will not yet have the received that DATA. You will need to hang it off smtpd_data_restrictions

    Neither of those is a "filter" in the general Postfix parlance. A filter is generally an external program or additional Postfix process (like a new smtpd) invoked either from main.cf as content_filter or through master.cf -- such as a program, Perl or shell script to which the entire email would handed off for processing. Postfix would expect it to be returned into the flow as processing or create a bounce. smtpd_data_restrictions reads after the SMTP conversation DATA command so it would not work for the OP's intention..

    From what I can tell of the OP's intended task, (remember: "mail received in queue") he should be running his program as a "filter" in this sense, but even then - that may not be the best design decision - since all incoming mail would run through the Perl script , perhaps needlessly. Better would be to have mail to certain user accounts pipe through the program and get processed by a Perl script accordingly to find out whether they're already registered in the database. Maybe that's what he meant anyway..!