其实很简单:我想将所有收到的电子邮件传递给一个 PHP 脚本,但只是作为副本,原始电子邮件仍应照常发送到邮箱。
我似乎无法让它工作。我试过以下
(1)创建一个catchall-alias(mysql):
@mydomain.tld pipe@mydomain.tld
Run Code Online (Sandbox Code Playgroud)
(2)在/etc/postfix/mailpipe.cf中创建regex-transport映射(基本意思是:适用于mydomain.tld的所有邮件)
/.*@mydomain\.tld/ mailpipe:
Run Code Online (Sandbox Code Playgroud)
(3)将其全部集成在 /etc/postfix/main.cf 中:
transport_maps = ... regexp:/etc/postfix/mailpipe.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/....
Run Code Online (Sandbox Code Playgroud)
(4)将传输添加到/etc/postfix/master.cf:
mailpipe unix - n n - - pipe
flags=FR user=localuser argv=/path/to/my/script.php
${nexthop} ${user}
Run Code Online (Sandbox Code Playgroud)
剧本:
#!/usr/bin/php -q
<?php
$file = '/home/localuser/pipe/log.log';
$input = file_get_contents('php://input');
file_put_contents($file, $input, FILE_APPEND | LOCK_EX);
Run Code Online (Sandbox Code Playgroud)
所以设置似乎有效,脚本在传入的电子邮件中被命中,但它$input
是空的(尽管适用于任何其他字符串)。正在处理电子邮件,然后将其删除/丢弃。所以这是我的两个问题:
如何从脚本访问电子邮件的内容?
如何防止电子邮件在处理后被丢弃?有没有办法像往常一样将一个副本传递到收件箱,另一个传递给脚本进行处理?
我有以下配置:
<VirtualHost 1.2.3.4:443>
ServerName mydomain.com
ServerAlias www.mydomain.com
...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我想www.mydomain.com
成为主域,但我也希望用户能够只输入mydomain.com
,然后我将它们重定向到www
. 所以证书名称是www.mydomain.com
. 但是随着我在启动 apache 时不断收到这个警告:
AH01909: mydomain.com:443:0 服务器证书不包含与服务器名称匹配的 ID
不过一切正常,我在 ssllabs.com 上也获得了 A 级评价。但是这个警告仍然困扰着我,我想知道我是否在这里遗漏了什么?
显然证书的 CN 与服务器名称不匹配,但它仍然匹配别名。
这是“不好的做法”还是有另一种处理方法不会产生此警告?我应该关心它吗?最后,这只是一个警告,可能会出错,但事实并非如此。或者这会导致客户端出现问题吗?
到目前为止,一切对我来说都很好,用户也没有抱怨,所以我想一切正常。