2014-09-27 72 views
1

我目前有一個客戶的郵件和網絡服務器。 我使用postfix作爲郵件服務器將電子郵件地址轉發給正確的用戶。例如,將[email protected]轉發給[email protected]保存數據庫中的postfix電子郵件副本

現在我想能夠在網站上顯示郵件,但也不斷髮送給用戶。所以,我想知道是否有一個選項可以將郵件的副本發送到mysql數據庫?

這是我目前main.cf

# Settings 
myhostname = mydomain.com 

# Spam adressen 
#smtpd_recipient_restrictions = check_sender_access hash:/etc/postfix/sender_access 

# KLJ Waregem aliasses 
virtual_alias_domains = mydomain.com 
virtual_alias_maps = mysql:/etc/postfix/mysql-mydomain.cf 

# Mails via Mandrill 
smtp_sasl_auth_enable = yes 
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd 
smtp_sasl_security_options = noanonymous 
smtp_use_tls = yes 
relayhost = [smtp.mandrillapp.com] 

alias_maps = hash:/etc/aliases 

# Spam quarantine via Amavis-New 
content_filter = smtp-amavis:[127.0.0.1]:10024 

# More spam protection 
smtpd_sasl_auth_enable = yes 
broken_sasl_auth_clients = yes 
smtpd_sasl_authenticated_header = yes 
smtpd_sasl_security_options = noanonymous 
smtpd_sasl_path = smtpd 
smtpd_use_tls = yes 
smtpd_tls_cert_file = /etc/postfix/smtpd.cert 
smtpd_tls_key_file = /etc/postfix/smtpd.key 

readme_directory = /usr/share/doc/postfix 
html_directory = /usr/share/doc/postfix/html 

而且我master.cf

# ========================================================================== 
# service type private unpriv chroot wakeup maxproc command + args 
#    (yes) (yes) (yes) (never) (100) 
# ========================================================================== 
smtp  inet n  -  -  -  -  smtpd 
pickup fifo n  -  -  60  1  pickup -o content_filter= -o receive_override_options=no_header_$ 
cleanup unix n  -  -  -  0  cleanup 
qmgr  fifo n  -  n  300  1  qmgr 
#qmgr  fifo n  -  n  300  1  oqmgr 
tlsmgr unix -  -  -  1000? 1  tlsmgr 
rewrite unix -  -  -  -  -  trivial-rewrite 
bounce unix -  -  -  -  0  bounce 
defer  unix -  -  -  -  0  bounce 
trace  unix -  -  -  -  0  bounce 
verify unix -  -  -  -  1  verify 
flush  unix n  -  -  1000? 0  flush 
proxymap unix -  -  n  -  -  proxymap 
proxywrite unix -  -  n  -  1  proxymap 
smtp  unix -  -  -  -  -  smtp 
relay  unix -  -  -  -  -  smtp 
#  -o smtp_helo_timeout=5 -o smtp_connect_timeout=5 
showq  unix n  -  -  -  -  showq 
error  unix -  -  -  -  -  error 
retry  unix -  -  -  -  -  error 
discard unix -  -  -  -  -  discard 
local  unix -  n  n  -  -  local 
virtual unix -  n  n  -  -  virtual 
lmtp  unix -  -  -  -  -  lmtp 
anvil  unix -  -  -  -  1  anvil 
scache unix -  -  -  -  1  scache 
maildrop unix -  n  n  -  -  pipe 
    flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient} 
uucp  unix -  n  n  -  -  pipe 
    flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) 
# 
# Other external delivery methods. 
# 
ifmail unix -  n  n  -  -  pipe 
    flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient) 
bsmtp  unix -  n  n  -  -  pipe 
    flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient 
scalemail-backend unix -  n  n  -  2  pipe 
    flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension} 
mailman unix -  n  n  -  -  pipe 
    flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py 
    ${nexthop} ${user} 

spamassassin unix -  n  n  -  -  pipe 
     user=spamd argv=/usr/bin/spamc -f -e 
     /usr/sbin/sendmail -oi -f ${sender} ${recipient} 

smtp-amavis  unix -  -  -  -  2  smtp 
     -o smtp_data_done_timeout=1200 
     -o smtp_send_xforward_command=yes 
     -o disable_dns_lookups=yes 
     -o max_use=20 

127.0.0.1:10025 inet n  -  -  -  -  smtpd 
     -o content_filter= 
     -o local_recipient_maps= 
     -o relay_recipient_maps= 
     -o smtpd_restriction_classes= 
     -o smtpd_delay_reject=no 
     -o smtpd_client_restrictions=permit_mynetworks,reject 
     -o smtpd_helo_restrictions= 
     -o smtpd_sender_restrictions= 
     -o smtpd_recipient_restrictions=permit_mynetworks,reject 
     -o smtpd_data_restrictions=reject_unauth_pipelining 
     -o smtpd_end_of_data_restrictions= 
     -o mynetworks=127.0.0.0/8 
     -o smtpd_error_sleep_time=0 
     -o smtpd_soft_error_limit=1001 
     -o smtpd_hard_error_limit=1000 
     -o smtpd_client_connection_count_limit=0 
     -o smtpd_client_connection_rate_limit=0 
     -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks 

感謝您的幫助, Jerodev

回答

2

後綴可以」把消息本身放入數據庫中。但是,它有一個pipe傳遞方法,它爲每個傳入消息運行一次自定義命令。你需要編寫一個將消息放入數據庫的程序。

然後,向master.cf添加一行描述您的新交付方式。您提供的文件有幾個示例定義。你必須寫一個適合你的程序。

然後,使用always_bcc選項main.cf將每個傳入郵件的副本發送到特定本地地址,並配置Postfix以使用新配置的傳遞方法發送郵件到該地址。 This page文件如何執行傳送方法選擇。

+0

有什麼辦法可以將密件抄送到服務器上的文件夾,並讓cronjob每x分鐘檢查一次該文件夾? – Jerodev 2014-10-01 08:35:01

+0

Postfix有一個[local](http://www.postfix.org/local.8.html)傳遞代理,它可以將傳入的郵件存儲在郵箱文件中。它將所有消息放入您必須解析的相同文件中。您仍然需要一個將消息放入數據庫的程序。直接發送到程序會更好,因爲消息是實時處理的。另外,當使用文件時,你必須適當地鎖定它,否則你會有數據競爭。 – abacabadabacaba 2014-10-01 08:46:25

+0

所以,現在我在我的'master.cf'中創建了一個新的鉤子:'save_php unix --nn - - pipe flags = F user = www-data argv =/var/www/mysite/Scripts/mail/postfixReceive.php $ {發件人} $ {大小} $ {收件人}'。 但是,我如何發送郵件到這個鉤子?我嘗試使用'content_filter'將它添加到拾取器中,但這不起作用。 當我將'content_filter'添加到smtp時,它可以工作,但郵件不再被轉發給接收方 – Jerodev 2014-10-01 10:48:47