# Configure smtpd for local delivery. # # === Global variables # # $mail_domain: # Domain to masquerade as (envelope only). # # $mail_server: # Hostname of mail relay server. # class smtpd { if $mail_server { $relay = "smtp+tls://${mail_server}" } file { "/etc/mailer.conf": ensure => present, mode => "0644", owner => "root", group => "wheel", source => "puppet:///modules/smtpd/mailer.conf", before => Service["smtpd"], } file { "/etc/mail/smtpd.conf": ensure => present, mode => "0644", owner => "root", group => "wheel", source => "puppet:///modules/smtpd/smtpd.conf", notify => Service["smtpd"], } file { "/etc/mail/smtpd.conf.local": ensure => present, mode => "0644", owner => "root", group => "wheel", content => template("smtpd/client.conf.erb"), notify => Service["smtpd"], } service { "sendmail": ensure => stopped, enable => false, before => Service["smtpd"], } service { "smtpd": ensure => running, enable => true, start => "/usr/sbin/smtpd", } } # Configure smtpd as mail server # # === Parameters # # $maildir: # Directory in user home for INBOX. # # $domains: # Primary domains to accept mail for. # # $virtual: # Virtual domains to accept mail for. # class smtpd::server($maildir, $domains, $virtual=undef) inherits smtpd { include procmail procmail::rc { "00default.rc": content => "MAILDIR=\$HOME/${maildir}\nDEFAULT=\$MAILDIR/INBOX\n", } $mda = "/usr/local/bin/procmail -Y -t -f %{sender} rcpt=%{rcpt}" File["/etc/mail/smtpd.conf.local"] { content => template("smtpd/server.conf.erb"), } file { "/etc/mail/aliases": ensure => present, mode => "0644", owner => "root", group => "wheel", source => [ "puppet:///files/mail/aliases.${::homename}", "puppet:///files/mail/aliases", ], } exec { "makemap -t aliases /etc/mail/aliases": refreshonly => true, path => "/bin:/usr/bin:/sbin:/usr/sbin", subscribe => File["/etc/mail/aliases"], notify => Service["smtpd"], } smtpd::aliases { $domains: } if $virtual { smtpd::virtual { $virtual: } } } define smtpd::aliases() { file { "/etc/mail/aliases.${name}": ensure => present, mode => "0644", owner => "root", group => "wheel", source => [ "puppet:///files/mail/aliases.${name}", "puppet:///files/mail/aliases.${::homename}", "puppet:///files/mail/aliases", ], } exec { "makemap -t aliases /etc/mail/aliases.${name}": refreshonly => true, path => "/bin:/usr/bin:/sbin:/usr/sbin", subscribe => File["/etc/mail/aliases.${name}"], notify => Service["smtpd"], } } define smtpd::virtual() { file { "/etc/mail/virtual.${name}": ensure => present, mode => "0644", owner => "root", group => "wheel", source => [ "puppet:///files/mail/virtual.${name}", "puppet:///files/mail/virtual.${::homename}", "puppet:///files/mail/virtual", ], } exec { "makemap -t aliases /etc/mail/virtual.${name}": refreshonly => true, path => "/bin:/usr/bin:/sbin:/usr/sbin", subscribe => File["/etc/mail/virtual.${name}"], notify => Service["smtpd"], } }