找到了,SELECT的时候用FROM_UNIXTIME将time_num转换一下就可以了,time_iso字段记录的是UTC时间,谢谢张工支持。

但Amavisd中记录的是14位的时间戳,也是按UTC时间记录的,这个怎么自动转换?

没有,我如果修改LDAP中的mail属性,SOGo中LDAP全局地址簿中显示的两个邮件地址都会变化,所以应该是mail属性被映射了两次。

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.5-1
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):OpenLDAP
- 使用的 Linux/BSD 发行版名称及版本号:Centos7
- 与您的问题相关的日志信息:见下方
====

SOGo中配置的全局地址簿,会显示两个一样的邮件地址,我测试了一下,一个是MailFieldNames属性映射到了LDAP中的mail属性,一个是默认的Email属性也是映射到了LDAP中的mail属性,这导致我从CARDDAV中同步地址簿时,会同步到两个EMAIL,在Outlook中写邮件时“检查姓名”会检查到两个一样的联系人。

目前我找到一个临时解决方案是

MailFieldNames =("m");

将MailFieldNames属性映射到一个不存在的LDAP属性上,问题可以解决,但始终不是正途,不知道大家是怎么解决这个问题的?

ZhangHuangbin 写道:

试试:

mapping = {
    ou => ("department", "ou");
};
mapping = {
    ou => ("department", "ou");
};

重启SOGOD服务出错。

mapping = {
    ou = ("department", "ou");
};

没有效果。

mapping = {
    ou = ("departmentNumber", "ou");
};

解决,谢谢张工。

ZhangHuangbin 写道:

在 iRedAdmin 配置文件里设置正确的时区。如:

LOCAL_TIMEZONE = 'GMT+08:00'

重启 apache 或 uwsgi 服务。

之前我在论坛里找到了帖子提到这一参数,已设置并重启APACHE,没有解决,重启了CENTOS,问题还是一样的。

/var/log/iredapd/iredapd.log中的日志时间是正确的,但IREDADMIN数据库中的时间戳就是晚了8小时。

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.5-1
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):OpenLDAP
- 使用的 Linux/BSD 发行版名称及版本号:Centos7
- 与您的问题相关的日志信息:见下方
====

Amavisd数据库中的msgs表的time_iso字段应该是记录邮件投递的时间,但该时间比实际的时间晚了8小时,如下记录中的时间实际应为2017年1月17日18点27分,但数据库中记录的时间为2017年1月17日10点27分。

time_iso
20170117102750

IredAdmin数据库中的log表的timestamp字段应该是记录操作的时间,该时间也比实际的时间晚了8小时。

timestamp
2017/1/17 10:49

我看了下系统的时区设置,没有问题,系统时间也是对的,/var/log/maillog中AMAVISD日志的时间也是对的,mysql中设置的时区也是对的。
系统时区设置:

[root@server_name etc]# timedatectl
Local time: 二 2017-01-17 18:52:30 CST
Universal time: 二 2017-01-17 10:52:30 UTC
RTC time: 二 2017-01-17 10:52:31
Time zone: Asia/Shanghai (CST, +0800)

/var/log/maillog中AMAVISD日志的时间:

Jan 17 19:09:11 server_name amavis[3997]:

Mysql中的时区设置:

MariaDB [iredadmin]> show variables like "%time_zone%";
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        | +08:00 |
+------------------+--------+

但数据库中记录的时间就是晚了8小时,太奇怪了,有同样问题的朋友请指导一下问题在哪,谢谢。

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.5-1
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):OpenLDAP
- 使用的 Linux/BSD 发行版名称及版本号:Centos7
- 与您的问题相关的日志信息:见下方
====

今天测试SOGO的时候发现LDAP通讯录中没有Department属性,查了下文档,SOGO默认是将LDAP中的ou属性映射为通讯录中的Department属性,而IRedMail在LDAP中是不使用ou属性的,根据文档中所述,可以通过配置SOGoUserSources中的mapping属性更改SOGO的默认映射,但我按如下进行配置后,完全没有效果,不知道是怎么回事。

这是按文档进行的配置,没有效果。

mapping = {
    Note = ("cn","Note");
};

这是我google找到的配置,也没有效果。

mapping = {
    note = ("cn");
};

请张工帮忙分析下,谢谢。

看了下日志,没有发现什么问题,日志里显示安装了epel-release仓库,但/etc/yum.repos.d/下面却没有这个仓库文件。
我用yum手动安装了epel-release仓库,安装成功,再继续安装iRedMail,amavisd等也成功安装了,挺奇怪的。

注释掉下面三个参数:
postscreen_dnsbl_threshold
postscreen_dnsbl_sites
postscreen_dnsbl_reply_map

ZhangHuangbin 写道:

iRedMail 会安装 epel-release 这个 rpm 包,它会启用 EPEL 仓库。你的安装过程似乎有点不一样。

iRedMail安装有日志吗?

ZhangHuangbin 写道:

命令显示没有用到 iRedMail 和 EPEL 这两个仓库,所以缺了几个包。检查下 /etc/yum.repos.d/ 目录下的仓库文件。

/etc/yum.repos.d/目录下有这些仓库文件,没有EPEL仓库文件,但我看了下之前装好iRedMail的机器上也没有EPEL仓库文件。

-rw-r--r--. 1 root root 1664 12月  9 2015 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 12月  9 2015 CentOS-CR.repo
-rw-r--r--. 1 root root  649 12月  9 2015 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  290 12月  9 2015 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 12月  9 2015 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 12月  9 2015 CentOS-Sources.repo
-rw-r--r--. 1 root root 1952 12月  9 2015 CentOS-Vault.repo
-rw-r--r--  1 root root  121 12月  6 15:57 iRedMail.repo
-rw-r--r--  1 root root  359 12月  6 15:56 sogo.repo

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.5-1
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):OpenLDAP
- 使用的 Linux/BSD 发行版名称及版本号:Centos7
- 与您的问题相关的日志信息:见下方
====

今天尝试在CentOS7下全新安装iRedMail,CentOS也是新装的,安装完成发现少了Amavisd、ClamAV等组件,恢复系统后再次安装iRedMail,发现yum安装过程中提示找不到amavisd等组件的安装包,见以下输出:

安装命令为:IREDMAIL_MIRROR='http://42.159.241.31' bash iRedMail.sh

[ INFO ] Add yum repo for SOGo: /etc/yum.repos.d/sogo.repo.
[ INFO ] Installing package(s): postfix openldap openldap-clients openldap-servers mariadb-server mod_ldap php-common php-gd php-xml php-mysql php-ldap php-pgsql php-imap php-mbstring php-pecl-apc php-intl php-mcrypt php httpd mod_ssl dovecot dovecot-pigeonhole dovecot-mysql dovecot-pgsql amavisd-new spamassassin altermime perl-LDAP perl-Mail-SPF unrar pax clamav clamav-update clamav-server clamav-server-systemd php-pear-Net-IDNA2 sogo sogo-activesync libwbxml sogo-ealarms-notify sogo-tool sope49-gdl1-mysql sope49-ldap python-sqlalchemy python-setuptools python-dns python-ldap MySQL-python python-jinja2 python-webpy python-netifaces python-beautifulsoup4 python-lxml py-bcrypt mod_wsgi awstats fail2ban unzip bzip2 acl patch tmpwatch crontabs dos2unix logwatch
Loaded plugins: fastestmirror, langpacks
Not using downloaded repomd.xml because it is older than what we have:
  Current   : Tue Nov 15 22:00:31 2016
  Downloaded: Fri Jul 29 08:51:01 2016
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.aliyun.com
No package php-imap available.
No package php-pecl-apc available.
No package php-mcrypt available.
No package amavisd-new available.
No package altermime available.
No package clamav available.
No package clamav-update available.
No package clamav-server available.
No package clamav-server-systemd available.
No package php-pear-Net-IDNA2 available.
Package python-setuptools-0.9.8-4.el7.noarch already installed and latest version
No package python-netifaces available.
No package python-beautifulsoup4 available.
Package python-lxml-3.2.1-4.el7.x86_64 already installed and latest version
No package py-bcrypt available.
No package awstats available.
No package fail2ban available.

看了下/etc/yum.repos.d下的repo文件,iRedMail.repo已正确添加,baseurl=http://42.159.241.31/yum/rpms/7/,没发现什么问题,我尝试了下用yum install amavisd-new命令手动安装,也提示没有可用软件包。

请张工帮忙分析下是什么问题,谢谢。

不好意思,这几天太忙,没来得及回复。

那张工,先不管这个问题是什么引起的,我想确认一下,IREDADMIN-PRO是否使用amavisd-release管理隔离邮件,如果我购买了IREDADMIN-PRO是否可以直接绕开amavisd-release?

试了一下TELNET,命令如下:

request=release
mail_id=WeYW_P_pQI5h
quar_type=Q
recipient=postmaster@example.com

postmaster收到了被隔离的邮件,但数据库quarantine里的记录没有被删除。

既然TELNET的方式是正常的,那问题应该还是出在AMAVISD的配置中,报错跟$QUARANTINEDIR参数有关,但该参数应该是不影响SQL方式存储的隔离邮件,请张工帮忙分析下,谢谢。

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.5-1
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):OpenLDAP
- 使用的 Linux/BSD 发行版名称及版本号:Centos7
- 与您的问题相关的日志信息:450 4.5.0 Failure: Config variable $QUARANTINEDIR is empty at (eval 125) line 317, <GEN18> line 4.
====
今天测试了下AMAVISD的隔离功能,设置

$banned_files_quarantine_method = 'sql:';
$banned_quarantine_to = 'banned-quarantine';

然后重启AMAVISD,试着发了封含有被禁止后缀名附件的邮件,邮件正确地被隔离到了数据库中。

接下来尝试用amavisd-release命令将隔离邮件释放出来,命令如下:

amavisd-release WeYW_P_pQI5h

很奇怪,报如下错误:

Can't connect to UNIX socket /var/spool/amavisd/amavisd.sock: 没有那个文件或目录 at /usr/bin/amavisd-release line 270.

但我检查了AMAVISD配置文件,指向的应该是如下路径:

$unix_socketname = "/var/run/amavisd/amavisd.sock";

算了,先不管它,我在/var/spool/amavisd/下面用ln命令创建了一个到/var/run/amavisd/amavisd.sock的链接,重新运行amavisd-release,倒是不报之前的错误了,换成了:

450 4.5.0 Failure: Config variable $QUARANTINEDIR is empty at (eval 125) line 317, <GEN18> line 4.

再次检查配置文件,$QUARANTINEDIR=undef,看文档,该参数应该是在$banned_files_quarantine_method=local:的时候生效的,用SQL存储隔离邮件这个参数应该不起作用。

然后就在这里卡住了,请大家帮忙分析下,谢谢。

ZhangHuangbin 写道:

参考:
https://blog.bravi.org/?p=683

看了一下,文档里说的是D_BOUNCE会发送一个“未投递成功”的通知给发件方,而D_REJECT是会发送一个“拒绝”的响应给上游MTA,D_DISCARD则是直接销毁邮件,没搞明白发件方和上游MTA具体有什么区别。

仔细研究了下日志,D_BOUNCE处理方式中我的MTA在BOUNCE之后向发件地址发送了一份“邮件”(也许是别的什么),可能这就是那个所谓的”未投递成功“的通知,但发件人实际并不会收到邮件。

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.5-1
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):OpenLDAP
- 使用的 Linux/BSD 发行版名称及版本号:Centos7
- 与您的问题相关的日志信息:无错误日志
====

Amavisd中对不同类型的风险邮件的定义了四种处理方法:D_PASS,D_BOUNCE,D_REJECT,D_DISCARD。

D_PASS很好理解,直接放行;
D_REJECT是拒收,发件方会收到退信;
但D_BOUNCE和D_DISCARD在处理上有什么区别?

看字面意思一个是弹回,一个是销毁,从文档中看到,D_BOUNCE是反馈给发件方MTA一个2XX的成功状态,并发一个“未投递成功”的响应给发件方,而D_REJECT是反馈给发件方MTA一个5XX的拒绝状态,D_DISCARD则是直接销毁邮件,不给任何反馈。

从实际测试效果来看,D_BOUNCE和D_DISCARD两种处理方式,收件方都没有接收到邮件,发件方也未收到退信,投递状态也就是250 OK,除了在日志中能体现出来一个是BOUNCE了,一个是DISCARD了,似乎没有什么区别?

请了解的朋友解释一下,谢谢!

D_BOUNCE:
Nov 16 15:29:00 Mailserver postfix/smtp[91389]: B7F4C46CCB11: to=<test@example.com>, relay=127.0.0.1[127.0.0.1]:10026, delay=0.57, delays=0.18/0.02/0.01/0.35, dsn=2.5.0, status=sent (250 2.5.0 Ok, id=87004-01, DISCARD(bounce.suppressed))

D_DISCARD:
Nov 16 15:30:28 Mailserver postfix/smtp[91389]: 748EA46CCB12: to=<test@example.com>, relay=127.0.0.1[127.0.0.1]:10026, delay=0.4, delays=0.16/0/0.01/0.22, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=91928-01 - BANNED: .dat,test.xlsx)

Office2010也是正常的,谢谢张工的支持。

ZhangHuangbin 写道:

hmm,洁癖啊。

目前已知的是 sql 版没法单独禁用一个功能,ldap 版可以,但我没测试过。具体请看 sogo 文档里的 ModulesConstraints 参数:
https://sogo.nu/files/docs/SOGoInstallationGuide.html

也不算洁癖了,SOGo的WebMail功能本来也不好用。

已确认,该参数可以单独控制Mail、Calendar、Contacts功能允许哪些用户使用。

示例:
//仅允许LDAP中cn属性为postmaster的用户使用Mail功能。
ModulesConstraints={
    Mail={
        cn=postmaster;
    };
};

谢谢张工支持!

ZhangHuangbin 写道:

这个恐怕是客户端的问题了。。。

很奇怪,难道只有我一个人出现这个问题么?我也是醉了。

我将Office2013升级至SP1,并在配置文件中namespace后面加了个inbox,目前2013是正常了,等会再测试一下2010。

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.5-1
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):OpenLDAP
- 使用的 Linux/BSD 发行版名称及版本号:Centos7
- 与您的问题相关的日志信息:无错误日志
====

我的理解,在/etc/dovecot/dovecot.conf中通过配置namespace实现IMAP中的已发送邮件、已删除邮件等保存在服务器上。其中的mailbox区块逐一配置IMAP文件夹,并通过special_use参数指定该文件夹的用途(按照RFC 6154),auto参数设置为subscribe表明第一次通过IMAP连接时自动创建该文件夹并注册其用途(让邮件客户端可以查找到)。

以“已发送邮件”为例,安装完iredmail的默认配置中,设置一个mailbox名为Sent,auto=subcribe,special_use=\Sent。

namespace {
    type = private
    separator = /
    prefix = 
    inbox = yes

    mailbox Sent {
        auto = subscribe
        special_use = \Sent
    }
}

当通过foxmail以IMAP方式连接到服务器后,服务器自动在用户邮箱存储路径Maildir文件夹下创建Sent文件夹,foxmail自动映射该文件夹为“已发送邮件”。

但是,如果通过Outlook2010配置IMAP,服务器也自动创建了Sent文件夹,但Outlook2010没有映射该文件夹为“已发送邮件”,而是自行在用户邮箱存储路径Maildir文件夹下创建了一个名为“.&XfJT0ZABkK5O9g-”的文件夹,并将其映射为“已发送邮件”。

为此,我将/etc/dovecot/dovecot.conf中的Mailbox Sent更改为中文的“已发送邮件”,其他设置保持不变,删除用户邮箱文件夹,重启DOVECOT,再用Outlook2010重新连接,服务器也自动创建了“.&XfJT0ZABkK5O9g-”文件夹,并且Outlook2010也将其映射为已发送邮件了。

namespace {
    type = private
    separator = /
    prefix = 
    inbox = yes

    mailbox 已发送邮件 {
        auto = subscribe
        special_use = \Sent
    }
}

Outlook2010是正常了,foxmail在这种设置下也是正常的,但是当我尝试用Outlook2013配置IMAP的时候,问题又来了,Outlook2013没有自动将“.&XfJT0ZABkK5O9g-”文件夹映射为“已发送邮件”,而是在客户端生成了一个“已发送邮件(仅限于此计算机)”的文件夹,已发送邮件会保存到该文件夹中,但该文件夹并不位于IMAP服务器上,效果就类似于POP3方式配置的情况了。

不知道大家在使用Outlook配置邮箱的时候有没有遇到过这样的问题,是怎么解决的,请指教,谢谢。

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.5-1
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):OpenLDAP
- 使用的 Linux/BSD 发行版名称及版本号:Centos7
- 与您的问题相关的日志信息:无错误日志
====

既然已经有了RoundCube作为WebMail,SOGo的WebMail功能就有些鸡肋了,是否可以更改配置,关闭SOGo的WebMail功能,只提供CARDDAV、CALDAV等功能?

ZhangHuangbin 写道:

似乎是 DNS 查询受到干扰了。在 postfix 配置文件里的 zen.spamhaus.org 后面指定只处理返回的 127.0.0.2-11 结果。

原设置:

postscreen_dnsbl_sites = zen.spamhaus.org*3 b.barracudacentral.org*2

改为:

postscreen_dnsbl_sites = zen.spamhaus.org=127.0.0.[2..11]*3 b.barracudacentral.org*2

reload 或 restart postfix 服务。

问题已解决,谢谢张工的支持!

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.5-1
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):OpenLDAP
- 使用的 Linux/BSD 发行版名称及版本号:Centos7
- 与您的问题相关的日志信息:
postfix/dnsblog[69332]: addr 115.124.20.39 listed by domain zen.spamhaus.org as 220.250.64.225
postfix/postscreen[69496]: DNSBL rank 2 for [64.137.185.126]:50617
postfix/postscreen[69496]: DISCONNECT [64.137.185.126]:50617
====

iredmail默认开启了postfix的postscreen功能进行反垃圾邮件,使用的DNSBL服务器是zen.spamhaus.org,如果发件方服务器IP被列在zen.spamhaus.org的名单中,应该是返回127.0.0.2,但很奇怪,我测试下来,用国内多个个人邮箱(网易、腾讯、阿里云)提供商发送邮件给自己的iredmail邮箱,都被退信了,从maillog中看到,zen.spamhaus.org返回的是220.250.64.225而不是127.0.0.2,但postscreen功能还是生效了,断开了对方服务器的连接,因此发件方显示被退信。

请问这是什么情况?返回值220.250.64.225是什么意思?发件服务器应该不是垃圾邮件服务器,但从zen.spamhaus.org查询确实返回了值,虽然不是127.0.0.2,很是困扰,召唤高手解答,谢谢!