There are several parts to the sendmail configuration that must be used.
Below is a sendmail.mc file with notes:
Example 4-15. sendmail.mc file
divert(-1)dnl # # This file contains definitions for mail.mydomain.com # divert(0)dnl include(`/usr/lib/sendmail-cf/m4/cf.m4') VERSIONID(`@(#)mailserver.mc 1.0 (mydomain.com) 5/1/97') OSTYPE(linux) DOMAIN(generic) dnl Note: The following feature is an aliases file that allows dnl sendmail to recognize mail coming in to several host names dnl for this machine FEATURE(`use_cw_file') define(`confCW_FILE',`/etc/sendmail.cw') FEATURE(nouucp) dnl Note: The virtusertable feature allows you to create an aliases dnl file for users that only have cyrus accounts or to forward mail to dnl another address not handled by this server. The access_db feature dnl allows you to control which hosts and addresses may relay mail dnl using this machine. For more information on this and other dnl anti-spam features, see http://www.sendmail.org/m4/anti-spam.html. FEATURE(`virtusertable', `hash /etc/mail/virtusertable') FEATURE(`access_db', `hash /etc/mail/access') dnl Note: This allows all relayed messages to appear as if they dnl are coming from email@example.com instead of firstname.lastname@example.org MASQUERADE_AS(mydomain.com) dnl Note: This is probably one of the most important entries, dnl LUSER_RELAY tells sendmail to send mail for users that do not have dnl local system accounts on this machine to the cyrus mailer on dnl localhost. Without this entry, all mail addressed to cyrus users dnl would bounce as user unknown. define(`LUSER_RELAY', `cyrus:localhost') dnl Note: rbl uses the Realtime Blackhole List database to keep dnl known spammers from accessing your mail server, for more dnl information, please see http://www.sendmail.org/m4/anti-spam.html. FEATURE(rbl) dnl Note: This feature allows users mail to be forwarded with a dnl .forward file in the users home directory, this is only for users dnl with system accounts, for cyrus only users, use the virtusertable dnl feature. FEATURE(`redirect') dnl Note: This uses procmail instead of the old mail executable for dnl local delivery. FEATURE(`local_procmail') dnl Note: These are the mailer definitions, this allows sendmail to dnl use smtp to deliver outgoing mail, cyrus for imap and pop3 users dnl and procmail for local system account delivery (root). MAILER(smtp) MAILER(procmail) MAILER(cyrus)
You may need to add or modify features for your particular needs. When you are done generate the sendmail.cf file by typing the following command: m4 sendmail.mc > sendmail.cf
Both of these files should reside in /etc.
On my mail server I have a system account setup for myself which has the same username that I use for my mail address. Sendmail was delivering my mail to the local account rather than the cyrus account. I did not want to use cyrus for all my system accounts, especially since my cyrus imap server was using pam_ldap to authenticate users. In my /etc/sendmail.cf file that I output using the /etc/sendmail.mc file in the above section, I added the following under the Class definition section:
Example 4-16. Sendmail Class Definitions
# class C: names that should be sent to cyrus CC <First User>
In the Parse1 section of Ruleset 0 I added the following 2 lines to the #short circuit local delivery so forwarding works sub-section:
Example 4-17. Short Circuiting Delivery (Original)
R$=C < @ $=w . > $#cyrus $: @ $1 special <First User> rule R$=C < @ $=w . > $#cyrus $: $1 special <First User> rule
So now my #short circuit local delivery so forwarding works sub-section of the Parse1 section looked like the following:
Example 4-18. Short Circuiting Delivery (New)
# short circuit local delivery so forwarded email works R$=C < @ $=w . > $#cyrus $: @ $1 special <First User>rule R$=C < @ $=w . > $#cyrus $: $1 special <First User>rule R$=L < @ $=w . > $#local $: @ $1 special local names R$+ < @ $=w . > $#local $: $1 regular local names
I also had to add the following 2 lines to the #handle locally delivered names sub-section of the Parse1 section:
Example 4-19. Handling Locally Delivered Names (Original)
R$=C @ $=w $#cyrus $: @ $1 special <First User>rule R$=C $#cyrus $: @ $1 special <First User>rule
So now the #handle locally delivered names sub-section of the Parse1 section looked like the following:
Example 4-20. Handling Locally Delivered Names (New)
# handle locally delivered names R$=C @ $=w $#cyrus $: @ $1 special <First User>rule R$=C $#cyrus $: @ $1 special <First User>rule R$=L $#local $: @ $1 special local names R$+ $#local $: $1 regular local names
There is a way to add these rules and class to the sendmail.mc file rather than the gory additions to the sendmail.cf file, if you would like to study up on sendmail and send me the lines for the sendmail.mc file, I will gladly replace this section with them. For every user that needs to have mail delivered to cyrus instead of locally, add their user id to the class definition line. This list should be single-space separated. This inelegant method must be administered every time you rebuild the sendmail.cf file from the sendmail.mc file.
Every time your /etc/sendmail.cf changes you must restart sendmail to have the changes take effect. Do this by using the sendmail startup script in /etc/rc.d/init.d/ by typing /etc/rc.d/init.d/sendmail restart . You may also check for errors in the sendmail logfile: /var/log/maillog. I usually run tail -f /var/log/maillog when I am testing sendmail configurations and open the log file in an editor only when I am looking for past errors or information.