我可以发送邮件到我用postfixadmin设置的邮箱。 这是正常工作,我可以发送邮件在他们身上。 但是现在我还需要别名才能正常工作。 我已经使用了一个教程来设置这里列出的东西 。 但不知怎的,后缀不断尝试发送邮件到别名的邮箱。
主要电子邮件: [email protected]
别名邮件: [email protected]
数据库中的logging正确设置,当我运行这个命令:
postmap -q [email protected] mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf
我检索正确的电子邮件地址: [email protected]有一个邮箱附加到它。 我究竟做错了什么?
日志不提供任何有用的信息。 当我发送邮件到我的别名日志如下所示:
Jun 10 10:38:13 localhost postfix/smtpd[3061]: C27DC614DD: client=mail-wm0-f41.google.com[74.125.82.41] Jun 10 10:38:13 localhost postfix/cleanup[3072]: C27DC614DD: message-id=<CAGUk6whj3Drb-c=5N55TU80UoKR6sC2r4k+3jtxj9pBO5Gp5Pg@mail.gmail.com> Jun 10 10:38:13 localhost postfix/qmgr[30229]: C27DC614DD: from=<[email protected]>, size=2011, nrcpt=1 (queue active) Jun 10 10:38:13 localhost postfix/smtpd[3061]: disconnect from mail-wm0-f41.google.com[74.125.82.41] Jun 10 10:38:14 localhost postfix/smtp[3074]: C27DC614DD: to=<[email protected]>, orig_to=<[email protected]>, relay=gmail-smtp-in.l.google.com[74.125.136.27]:25, delay=0.32, delays=0.07/0.01/0.15/0.1, dsn=2.0.0, status=sent (250 2.0.0 OK 1465547906 q2si2091788wme.1 - gsmtp) Jun 10 10:38:14 localhost postfix/qmgr[30229]: C27DC614DD: removed
然而,它并没有进入[email protected]的邮箱
我的/etc/postfix/main.cf :
smtpd_banner = $myhostname ESMTP biff = no append_dot_mydomain = no readme_directory = no smtpd_tls_cert_file=/etc/letsencrypt/live/domain.nl/fullchain.pem smtpd_tls_key_file=/etc/letsencrypt/live/domain.nl/privkey.pem smtpd_tls_security_level = may smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_tls_auth_only = yes smtpd_tls_mandatory_protocols=!SSLv2 smtpd_tls_ciphers = high smtpd_tls_loglevel = 1 smtpd_tls_ask_ccert=yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks reject_unauth_destination smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination smtp_tls_security_level = may smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache myhostname = mail.domain.nl alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = $myhostname mydestination = localhost relayhost = mynetworks = 127.0.0.0/8 192.168.0.0/24 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all disable_vrfy_command = yes virtual_transport = lmtp:unix:private/dovecot-lmtp virtual_mailbox_base = /var/mail virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf header_checks = regexp:/etc/postfix/header_checks
我的/etc/dovecot/dovecot-sql.conf.ext如下所示:
driver = mysql connect = host=localhost dbname=postfix user=postfix password=spieard123 default_pass_scheme = MD5-CRYPT password_query = SELECT username as user, password, '/var/mail/%d/%n' as userdb_home, 'maildir:/var/mail/%d/%n' as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
我的/etc/dovecot/conf.d/auth-sql.conf.ext如下所示:
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/%d/%n }
与NickW聊天。
我和NickW一起冻结了,所以我开了一间新房。 你可以join这里。
Postfixadmin设置:
我认为问题在于,你是从邮箱中select你的端点,而不是从虚拟用户表中select你的端点,所以postfix知道它应该去哪里,但不要去。
更改:
SELECT username as user, password, '/var/mail/%d/%n' as userdb_home, 'maildir:/var/mail/%d/%n' as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
至:
password_query = SELECT email as user, password, '/var/mail/%d/%n' as userdb_home, 'maildir:/var/mail/%d/%n' as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid FROM virtual_users WHERE email=(SELECT destination FROM virtual_aliases WHERE source = '%u');
显然,数据库和表名称可能会有所不同。因为它不是邮箱表,所以AND active = '1'不应该是必需的。
为了检查你的别名是否正常工作,你可以尝试直接检查你的MySQL 。
从您的日志中,我没有看到任何尝试传递到您的邮箱
从别名中selectgoto
别名,你应该在你的日志中看到这样的东西
29 06:46:59 mail postfix/local[15339]: A8967BF907: to=<[email protected]>, orig_to=<[email protected]>, relay=local, delay=1.1, delays=1/0.02/0/0.11, dsn=2.0.0, status=sent (delivered
通过查看你的日志,它看起来像你的Gmail地址的别名
编辑我读了你的评论,我模拟了相同的情况。 如果你要遵循你的stream程,你应该在你的日志中看到以下内容。
Jun 29 08:15:31 mail postfix/qmgr[9259]: D803DC04BD: from=<[email protected]>, size=741, nrcpt=2 (queue active) Jun 29 08:15:31 mail postfix/smtpd[18918]: disconnect from micro.sg[128.199.136.21] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5 Jun 29 08:15:31 mail dovecot: lda([email protected]): msgid=<[email protected]>: saved mail to INBOX Jun 29 08:15:31 mail postfix/pipe[18984]: D803DC04BD: to=<[email protected]>, orig_to=<[email protected]>, relay=dovecot, delay=0.06, delays=0.01/0.01/0/0.03, dsn=2.0.0, status=sent (delivered via dovecot service) Jun 29 08:15:33 mail postfix/smtp[18941]: D803DC04BD: to=<[email protected]>, orig_to=<[email protected]>, relay=gmail-smtp-in.l.google.com[74.125.200.27]:25, delay=1.4, delays=0.01/0/0.87/0.49, dsn=2.0.0, status=sent (250 2.0.0 OK 1467202533 f205si352653oib.152 - gsmtp) Jun 29 08:15:33 mail postfix/qmgr[9259]: D803DC04BD: removed
注意有2个不同的smtp电话和交付。 你可以请检查,并确保您的邮件递送到本地邮箱是检查您的后缀pipe理员。 请参阅postfixadmin – >虚拟列表 – >邮箱 – >别名屏幕。 您应该已经交付到本地收件箱检查
如果你已经检查了上面的框,那么这是一个不同的问题。
忽略我的第一个答复(下面) – 它的工作,但它可能不是一个好的解决scheme。
有没有可能在你的Postfix main.cf或master.cf中得到receive_override_options = no_address_mappings。
我把它作为-o receive_override_options = no_address_mappings为SMTP和提交端口。 (我还有DSpam)。
如果你删除它,Postfix会告诉Dovecot应该把邮件发送给哪个用户:
userdb { driver = sql args = /etc/dovecot/dovecot-sql.conf }
/etc/dovecot/dovecot-sql.conf:
user_query = SELECT maildir, 5000 AS uid, 5000 AS gid FROM mailbox, domain WHERE username = '%u' AND mailbox.active = '1' AND domain.domain = '%d' AND domain.active = '1'
通过这种方式,Dovecot可以知道哪些帐户确实存在(并且有邮件目录),而且Postfix告诉Dovecot地址映射到哪个帐户。
你在/etc/dovecot/conf.d/auth-sql.conf.ext中尝试了allow_all_users = yes
userdb { driver = static args = uid=vmail gid=vmail allow_all_users=yes home=/var/mail/%d/%n }
符号链接别名用户/域可能是必要的
cd /var/mail ln -s domain.tld alias_domain.tld or ln -s domain.tld/user domain2.tld/user_alias
这使得它不像一个工作的userdb优雅dovecot SQL查找将是…
userdb { driver = sql args = /etc/dovecot/dovecot-sql.conf }
我到目前为止最好的是:
user_query = SELECT maildir, 5000 AS uid, 5000 AS gid FROM mailbox, domain WHERE local_part = '%u' AND domain.domain = '%d';
(假设5000:5000 = vmail:vmail)
这至less使得user_aliases工作(我无法设法让别名在别名域上工作)
由于Postfixadmin提供了许多SQL查询,邮箱会正确拒绝未知的虚拟用户,但是为dovecot提供的userdb SQL查找缺less别名和alias_domain表,而我在SQL中不足以修复它。