Where I said  "user virtual" I meant "user vmail".   I've not had enough
coffee yet.


On 11/23/2019 9:23 AM, Andrew Swartz wrote:
> As a proof of concept, I have a setup doing that which I think you are
> trying to do:
>
> -------------------
> table vdomains     file:/etc/mail/table_vmail_domains
> table vaddr     file:/etc/mail/table_vmail_addresses
> table vmailstub { '@' = vmail }
> listen on em0
> action "deliver_vmail" maildir
> "/home/vmail/domains/%{rcpt.domain:lowercase}/%{rcpt.user:lowercase|strip}"
> virtual <vmailstub>
> match from any for domain <vdomains> rcpt-to <vaddr> action "deliver_vmail"
> -------------------
>
> I'm using 6.6.0.  For clarity I've included only the pertinent conf
> lines.  This config is successfully delivering the mail to the
> pure-virtual users in the desired directory heirarchy
> (/home/vmail/domains/example.com/user).  The only places these
> pure-virtual users exist is in the "vaddr" table and the directory
> heirarchy (they are also in an "auth" table for relaying, but I removed
> that for clarity).
>
> It took me a lot of trial and error to come up with the "virtual
> <vmailstub>" at the end of the action.  It seems like "user virtual"
> should go there, but for unclear reasons that yields "** 550 Invalid
> recipient"; when I replace "user virtual" with "virtual <vmailstub>"
> (which always returns "vmail") the mail is accepted (for users in the
> vaddr table) and delivered as desired.  Not an elegant solution, but it
> works.
>
> I've not installed/integrated dovecot yet.  I'm curious about
> suggestions for the best way to integrated dovecot and/or manage users
> in such a system.
>
>
> -Andy
>
>
> On 11/23/2019 7:08 AM, Implausibility wrote:
>> Hi again.
>>
>> My mail server has been running fine since last weekend, and I'm trying to 
>> expand its functionality by including the ability to send and receive mail 
>> for my list of domains, and for eMail addresses which forward to locally 
>> defined users -- but I can't seem to get it working, and I think the issue 
>> is my (mis-)understanding of how the match parameter works...
>>
>> In order to get virtual users working, I've added three lines to the config:
>>
>>> table vusers file:/etc/mail/vusers
>>> action "vusers" maildir junk virtual <vusers>
>>> match from any for domain <domains> rcpt-to virtual <vusers> action "vusers"
>> I was able to get mail delivered for local users to my virtual domains 
>> previously without issue.  But I can't get virtual addresses working...
>>
>> I've tried a half a dozen varieties of the match command, and I keep getting 
>> 'syntax error', and it doesn't give me any hint as to what exactly the 
>> problem is.  I want to accept eMail from any destination, to the domains 
>> defined in the domains table, that are sending to recipients listed in the 
>> vusers table, to deliver them to the maildir for access via Dovecot IMAP.
>>
>> Any help in getting this working would be appreciated.
>>
>> Here's my config:
>>
>>> #       $OpenBSD: smtpd.conf,v 1.11 2018/06/04 21:10:58 jmc Exp $
>>>
>>> # This is the smtpd server system-wide configuration file.
>>> # See smtpd.conf(5) for more information.
>>>
>>> table aliases file:/etc/mail/aliases
>>> table domains db:/etc/mail/domains.db
>>> table vusers file:/etc/mail/vusers
>>>
>>> # To accept external mail, replace with: listen on all
>>> #
>>> # listen on all
>>>
>>> action "local_mail" maildir junk alias <aliases>
>>> action "vusers" maildir junk virtual <vusers>
>>> action "outbound" relay helo mail.example.com
>>>
>>> match from any for domain <domains> action "local_mail"
>>> match for local action "local_mail"
>>> match for any action "outbound"
>>>
>>> pki mail.hottub.ca cert "/etc/ssl/mail.example.fullchain.pem"
>>> pki mail.hottub.ca key "/etc/ssl/private/mail.example.key"
>>>
>>> filter check_dyndns phase connect match rdns regex { '.*\.dyn\..*', 
>>> '.*\.dsl\..*' } \
>>>     disconnect "550 you look like a spammer"
>>>
>>> filter check_rdns phase connect match !rdns \
>>>     disconnect "550 you look like a spammer"
>>>
>>> filter check_fcrdns phase connect match !fcrdns \
>>>     disconnect "550 you look like a spammer"
>>>
>>> filter senderscore \
>>>     proc-exec "filter-senderscore -blockBelow 10 -junkBelow 70 -slowFactor 
>>> 5000"
>>>
>>> filter rspamd proc-exec "filter-rspamd"
>>>
>>> listen on all tls pki mail.example.ca \
>>>     filter { check_dyndns, check_rdns, check_fcrdns, senderscore, rspamd }
>>>
>>> listen on all port submission tls-require pki mail.hottub.ca auth filter 
>>> rspamd
>>>
>>> match from any for domain "mail.example.ca" action "local_mail"
>>> match from any for domain <domains> rcpt-to virtual <vusers> action "vusers"
>>> match for local action "local_mail"
>>>
>>> match from any auth for any action "outbound"
>>> match for any action "outbound"
>>>
>>
>

Reply via email to