Sendmail Queue Groups.

Jim Barber jim.barber at ddihealth.com
Tue Nov 4 02:27:20 GMT 2008


Hi all.

I've successfully been using MailScanner with Exim.
Now I am setting up a box that uses Sendmail.

The Sendmail configuration uses queue groups.
The relevant entries from the sendmail.mc file for this are:

    define(`QUEUE_DIR', `/var/spool/mqueue/main*')dnl
    QUEUE_GROUP(`mqueue', `Path=/var/spool/mqueue/incoming, Runners=0')dnl
    QUEUE_GROUP(`main', `Path=/var/spool/mqueue/main, Flags=f')dnl
    QUEUE_GROUP(`hourly', `Path=/var/spool/mqueue/hourly, Flags=f, 
Interval=1h')dnl

Note the asterisk on the end of the QUEUE_DIR name.
It specifies that the /var/spool/mqueue/ directory will be the base 
directory for all the queue groups.
Without the asterisk, Sendmail will expect all queue groups to be under 
/var/spool/mqueue/main/ instead.

The default mqueue queue group has been overridden to place emails into 
an incoming directory.
It has no queue runners to try to pick up messages from this queue and 
deliver them.
MailScanner is configured to do the processing of the incoming queue.

The main queue group is where MailScanner will place good messages.
Sendmail is configured with queue runners to check this queue every minute.

The hourly queue is for jobs that will only attempt to be delivered 
every hour.
A qtool.pl cronjob will move jobs into the hourly queue that have been 
sitting in the main queue for too long.

The MTA part of Sendmail is invoked with the following command line options:

    -OPrivacyOptions=noetrn -ODeliveryMode=queueonly

The DeliveryMode=queueonly will force the MTA not to attempt an 
immediate delivery of an incoming message.
Queue runners are started for the main and hourly queues.

The relevant MailScanner.conf configuration entries are:

    Incoming Queue Dir = /var/spool/mqueue/incoming
    Outgoing Queue Dir = /var/spool/mqueue/main
    MTA = sendmail

The Sendmail2 variable has been commented out completely.

When MailScanner has processed a message it moves it to the 
/var/spool/mqueue/main/ directory.
Then it calls the KickMessage subroutine in the Sendmail.pm perl module.
This has the following line of code:

    $args = " -OQueueDirectory=$queue " if $queue;

I think KickMessage calls sendmail to attempt an immediately delivery 
after placing a job on the queue.
This is so that the message doesn't have to wait for a queue runner to 
process it.
As part of that it needs to tell Sendmail where the message is located.

The problem with the configuration above is that it causes the following 
errors to be output by Sendmail:

    sendmail[2493]: NOQUEUE: SYSERR(root): QueuePath 
/var/spool/mqueue/incoming not subpath of QueueDirectory 
/var/spool/mqueue/main/
    sendmail[2493]: NOQUEUE: SYSERR(root): QueuePath 
/var/spool/mqueue/hourly not subpath of QueueDirectory 
/var/spool/mqueue/main/: No such file or directory

And the immediately delivery attempt doesn't happen.
But the mail does get picked up by the queue runners up to a minute 
later so it isn't the end of the world.

If I change the following in MailScanner.conf:
    Outgoing Queue Dir = /var/spool/mqueue/main
to:
    Outgoing Queue Dir = /var/spool/mqueue/main*
Then I suspect Sendmail will be happy.
But MailScanner isn't happy with that.
If I try it, I'll see messages like the following when I start MailScanner:

    Could not read directory /var/spool/mqueue/main* at 
/usr/share/MailScanner//MailScanner/Config.pm line 2488
    Error in configuration file line 159, directory 
/var/spool/mqueue/main* for outqueuedir does not exist (or is not 
readable) at /usr/share/MailScanner//MailScanner/Config.pm line 2812

If I comment out the code in the Sendmail.pm file, then I get rid of the 
errors.
But I'm not sure if the immediate delivery attempt happens if I do that.
I could also butcher the code to say:

    $args = " -OQueueDirectory=/var/spool/mqueue/main* ";

But that's pretty evil.

Is there a good way to get MailScanner to play nicely with queue groups 
set up like this?
Perhaps this could be a feature request to allow the * in the Outgoing 
Queue Dir setting and handle it accordingly?

Regards,

-- 
----------
Jim Barber
DDI Health



More information about the MailScanner mailing list