"DTD/xhtml1-strict.dtd">
|
This script serves as an example of how you can use the RFilter::DeliveryAgent class to perform mail delivery. You can also use this script as a fully functioning mail filter.
This script is a basic mail local delivery agent (DeliveryAgent) that can be used in place of procmail, maildrop, etc. in a user's .forward or .qmail file. The user supplies a delivery script that is written in Ruby, which avoids the limitations of the crippled mini-languages so often used in other DeliveryAgent programs.
rdeliver is invoked from the command line using:
% rdeliver <options> [script]
The script argument is optional. If omitted the script will look for a file called .rdeliver in the home directory.
Options are:
--load-path: | Prepend the given directory to ruby's load path. |
--log filename: | Log to the given filename. If no log is specified, no logging occurs. |
--home directory: | Specify the home directory. rdeliver will change to this directory before reading and writing any files. The home directory defaults to the value of the HOME or LOGDIR environment variable. |
The delivery script runs in the context of a class called Deliver (in contrast, most ruby scripts run in the context of the Object class). So any methods added with def will be added to the Deliver class.
A minimal delivery script would be:
def main agent.save('inbox') end
This code defines a Deliver#main method that saves the mail into an mbox style mailbox.
The only API the Deliver script has is the #agent method. This retrieves the RFilter::DeliveryAgent object associated with the current message. Using the API of the RFilter::DeliveryAgent object, you can access and modify the message body and headers, defer or reject the message delivery, and deliver into various mailbox formats.
See also RFilter::DeliveryAgent and Deliver.
Assuming you have the RubyMail mail classes installed, you typically have to put something like this in your .forward file:
|"/usr/local/bin/rdeliver --log /home/you/.rlog"
This will call rdeliver for each new message you get, and log to /home/you/.rlog.
The rdeliver script is very careful with errors. If there is any problem, it logs the error to the log file you specify. But if you do not specify a log file, or the error occurs before the log file is opened, a record of the error is placed in a file called CATASTROPHIC_DELIVERY_FAILURE in the home directory. If that fails, the error information is printed to the standard output in the hopes that it will be part of a bounce message. In all cases, the exit code 75 is returned, which tells the MTA to re-try the delivery again.
Required files |
Classes and Modules |