我的邮件服务器的默认配置使用 的reject_authenticated_sender_login_mismatch
设置smtpd_sender_restrictions
来防止任意用户 A 以用户 B 的身份发送电子邮件(在“发件人”字段中)。我意识到这通常是一个很好的策略,因为即使是一个被盗用的用户帐户也基本上会打开我的邮件服务器作为垃圾邮件中继。
但是,我想允许特定用户(通过白名单)以任何用户的身份发送邮件。例如,我想有我的Web服务器本身作为身份验证x@example.com
,最后是能够代表发送电子邮件user1@example.com
,user2@example.com
等等。
所有其他经过身份验证的用户应该只能以自己的身份发送电子邮件。
我认为我正在使用该/etc/postfix/sender-login-maps.cf
文件的正确路径,该文件目前包含:
dbpath=/home/user-data/mail/users.sqlite
query = SELECT permitted_senders
FROM (
SELECT permitted_senders, 0 AS priority
FROM aliases
WHERE source='%s'
AND permitted_senders IS NULL
UNION
SELECT email as permitted_senders, 2 AS priority
FROM users
WHERE email='%s'
)
ORDER BY priority LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
我不知道如何修改它来完成我想要的。
我想出了如何修改查询/etc/postfix/sender-login-maps.cf
以允许任何具有“管理员”权限(如表中定义users.sqlite
)的用户像同一域中的任何其他用户一样发送电子邮件:
SELECT permitted_senders
FROM (
SELECT permitted_senders
FROM (
SELECT permitted_senders, 0 AS priority
FROM aliases
WHERE source='%s'
AND permitted_senders IS NULL
UNION
SELECT email as permitted_senders, 2 AS priority
FROM users
WHERE email='%s'
)
ORDER BY priority LIMIT 1
)
UNION
SELECT email as permitted_senders
FROM users
WHERE privileges="admin"
AND SUBSTR(email, INSTR(email, '@') + 1) = SUBSTR('%s', INSTR('%s', '@') + 1);
Run Code Online (Sandbox Code Playgroud)
所以基本上,如果x@example.com
设置为管理员(您可以在用户数据库中或通过您的帐户配置界面执行此操作),那么将被允许以、等方式x@example.com
发送邮件。对我来说,这似乎是一个合理的策略。user1@example.com
user2@example.com