preline is a wrapper for program. preline is usually invoked from $HOME/.courier. preline runs program, together with any additional arguments specified on the command line. program then receives the message being delivered, with some additional headers. The additional headers come from the UFLINE, DTLINE, and RPLINE environment variables. These environment variables are initialized by courierdeliver, which reads and executes commands from $HOME/.courier. These environment variables contain additional headers that should be added to every message that's delivered to a local mailbox.
preline must be used if program, that is executed from $HOME/.courier to deliver mail, does not recognize these environment variables. UFLINE contains the From_ line, DTLINE contains the Delivered-To: header, and RPLINE contains the Return-Path: header. If these headers are not present in the message that the program reads, you may end up with excessive resources being consumed by mail loops or by malfunctioning software which expects to see From_ lines in all messages scheduled for local delivery (such as procmail).
This is the normal way to arrange for procmail to handle local mail delivery.