1

Topic: iRedAPD-1.4.0, errors in logfile

==== Required information ====
- iRedMail version:
- Store mail accounts in which backend (LDAP/MySQL/PGSQL): LDAP
- Linux/BSD distribution name and version: Ubuntu 12.04 LTS
- Related log if you're reporting an issue: /var/log/iredapd.log
====

Hello,

I updated iRedAPD to version 1.4.0 (as announced in the other thread).
I used this version:

https://bitbucket.org/zhb/iredapd/get/default.tar.bz2

Right now, I'm getting these "errors". Any hints?


Thanks in advance!

Best,
Achim



2013-03-04 13:32:17 DEBUG [+] Getting LDIF data of account: user@domain.org
2013-03-04 13:32:17 DEBUG search filter: (&(|(mail=user@domain.org)(shadowAddress=user@domain.org))(|(objectClass=mailUser)(objectClass=mailList)(objectClass=mailAlias)))
2013-03-04 13:32:17 DEBUG search attributes: ['objectClass', 'listAllowedUser', 'accessPolicy', 'amavisBlacklistSender', 'amavisWhitelistSender']
2013-03-04 13:32:17 DEBUG Not a local account.
2013-03-04 13:32:17 DEBUG --> Apply plugin: ldap_maillist_access_policy
2013-03-04 13:32:17 DEBUG <!> Error: 'NoneType' object has no attribute '__getitem__'
2013-03-04 13:32:17 DEBUG --> Apply plugin: ldap_amavisd_block_blacklisted_senders
2013-03-04 13:32:17 DEBUG <!> Error: 'NoneType' object has no attribute '__getitem__'
2013-03-04 13:32:17 INFO [209.85.212.175] sender@anywhere.com -> user@domain.org, DUNNO

2

Re: iRedAPD-1.4.0, errors in logfile

Hi Achim,

Could you please paste all log of this smtp session?

3

Re: iRedAPD-1.4.0, errors in logfile

ZhangHuangbin wrote:

Hi Achim,

Could you please paste all log of this smtp session?


Complete session of /var/log/iredapd.log:

(now with also activated ldap_recipient_restrictions plugin)

2013-03-04 14:28:37 DEBUG Connect from 127.0.0.1, port 37788.
2013-03-04 14:28:37 DEBUG smtp session: request=smtpd_access_policy
2013-03-04 14:28:37 DEBUG smtp session: protocol_state=RCPT
2013-03-04 14:28:37 DEBUG smtp session: protocol_name=ESMTP
2013-03-04 14:28:37 DEBUG smtp session: client_address=xxx.xxx.xxx.xxx
2013-03-04 14:28:37 DEBUG smtp session: client_name=mail-we0-f178.google.com
2013-03-04 14:28:37 DEBUG smtp session: reverse_client_name=mail-we0-f178.google.com
2013-03-04 14:28:37 DEBUG smtp session: helo_name=mail-we0-f178.google.com
2013-03-04 14:28:37 DEBUG smtp session: sender=some-sender@gmail.com
2013-03-04 14:28:37 DEBUG smtp session: recipient=recipient@domain.org
2013-03-04 14:28:37 DEBUG smtp session: recipient_count=0
2013-03-04 14:28:37 DEBUG smtp session: queue_id=
2013-03-04 14:28:37 DEBUG smtp session: instance=1ba3.5134a185.bb3b4.0
2013-03-04 14:28:37 DEBUG smtp session: size=0
2013-03-04 14:28:37 DEBUG smtp session: etrn_domain=
2013-03-04 14:28:37 DEBUG smtp session: stress=
2013-03-04 14:28:37 DEBUG smtp session: sasl_method=
2013-03-04 14:28:37 DEBUG smtp session: sasl_username=
2013-03-04 14:28:37 DEBUG smtp session: sasl_sender=
2013-03-04 14:28:37 DEBUG smtp session: ccert_subject=
2013-03-04 14:28:37 DEBUG smtp session: ccert_issuer=
2013-03-04 14:28:37 DEBUG smtp session: ccert_fingerprint=
2013-03-04 14:28:37 DEBUG smtp session: ccert_pubkey_fingerprint=
2013-03-04 14:28:37 DEBUG smtp session: encryption_protocol=TLSv1
2013-03-04 14:28:37 DEBUG smtp session: encryption_cipher=ECDHE-RSA-RC4-SHA
2013-03-04 14:28:37 DEBUG smtp session: encryption_keysize=128
2013-03-04 14:28:37 DEBUG LDAP connection initialied success.
2013-03-04 14:28:37 DEBUG LDAP bind success.
2013-03-04 14:28:37 DEBUG [+] Getting LDIF data of account: some-sender@gmail.com
2013-03-04 14:28:37 DEBUG search filter: (&(|(mail=some-sender@gmail.com)(shadowAddress=some-sender@gmail.com))(|(objectClass=mailUser)(objectClass=mailList)(objectClass=mailAlias)))
2013-03-04 14:28:37 DEBUG search attributes: ['objectClass', 'mailBlacklistedRecipient', 'mailWhitelistRecipient']
2013-03-04 14:28:37 DEBUG Not a local account.
2013-03-04 14:28:37 DEBUG --> Apply plugin: ldap_recipient_restrictions
2013-03-04 14:28:37 DEBUG Allowed recipients: @., recipient@domain.org, @domain.org, @.domain.org, @.org
2013-03-04 14:28:37 DEBUG <!> Error: 'NoneType' object has no attribute 'get'
2013-03-04 14:28:37 DEBUG [+] Getting LDIF data of account: recipient@domain.org
2013-03-04 14:28:37 DEBUG search filter: (&(|(mail=recipient@domain.org)(shadowAddress=recipient@domain.org))(|(objectClass=mailUser)(objectClass=mailList)(objectClass=mailAlias)))
2013-03-04 14:28:37 DEBUG search attributes: ['objectClass', 'listAllowedUser', 'accessPolicy', 'amavisBlacklistSender', 'amavisWhitelistSender']
2013-03-04 14:28:37 DEBUG Not a local account.
2013-03-04 14:28:37 DEBUG --> Apply plugin: ldap_maillist_access_policy
2013-03-04 14:28:37 DEBUG <!> Error: 'NoneType' object has no attribute '__getitem__'
2013-03-04 14:28:37 DEBUG --> Apply plugin: ldap_amavisd_block_blacklisted_senders
2013-03-04 14:28:37 DEBUG <!> Error: 'NoneType' object has no attribute '__getitem__'
2013-03-04 14:28:37 INFO [74.125.82.178] some-sender@gmail.com -> recipient@domain.org, DUNNO
2013-03-04 14:28:37 DEBUG Connection closed
2013-03-04 14:28:37 DEBUG Close LDAP connection.

4

Re: iRedAPD-1.4.0, errors in logfile

*) Could you please restart iRedAPD and paste me log after service restarted? It will log something like "Starting iRedAPD (version 1.4.0", etc.

*) Could you please show me output of below commands:

# ls -dl /opt/iredapd
# ls -dl /opt/iredapd/*
# ls -dl /opt/iredapd/plugins/*

P.S. You can add me as BBM contact if you own a BlackBerry smartphone: 271756F2.

5 (edited by aemaething 2013-03-04 22:12:12)

Re: iRedAPD-1.4.0, errors in logfile

ZhangHuangbin wrote:

*) Could you please restart iRedAPD and paste me log after service restarted? It will log something like "Starting iRedAPD (version 1.4.0", etc.

2013-03-04 15:10:43 INFO Starting iRedAPD (version: 1.4.0, backend: ldap), listening on 127.0.0.1:7777.
2013-03-04 15:10:43 INFO Loading plugin: ldap_recipient_restrictions
2013-03-04 15:10:43 INFO Loading plugin: ldap_maillist_access_policy
2013-03-04 15:10:43 INFO Loading plugin: ldap_amavisd_block_blacklisted_senders
2013-03-04 15:10:43 DEBUG Forking first child.
root@mail:/opt/iredapd# 2013-03-04 15:10:43 DEBUG Creating new session
2013-03-04 15:10:43 DEBUG Forking second child.
2013-03-04 15:10:43 DEBUG Setting umask
2013-03-04 15:10:43 DEBUG Changing working directory to "/"
2013-03-04 15:10:43 DEBUG Redirecting file descriptors
ZhangHuangbin wrote:

*) Could you please show me output of below commands:

# ls -dl /opt/iredapd
lrwxrwxrwx 1 root root 13 Mar  4 13:23 /opt/iredapd -> iRedAPD-1.4.0
ZhangHuangbin wrote:
# ls -dl /opt/iredapd/*
-rw-r--r-- 1 iredapd iredapd  3772 Mar  2 17:53 /opt/iredapd/ChangeLog
-rwxr-xr-x 1 root    root     2072 Mar  4 13:22 /opt/iredapd/iredapd.debian
-rw-r--r-- 1 iredapd iredapd  5671 Mar  2 17:53 /opt/iredapd/iredapd.py
drwxr-xr-x 4 iredapd iredapd  4096 Mar  4 13:23 /opt/iredapd/libs
drwxr-xr-x 2 iredapd iredapd  4096 Mar  4 13:57 /opt/iredapd/plugins
drwxr-xr-x 2 iredapd iredapd  4096 Mar  4 13:11 /opt/iredapd/rc_scripts
-rw-r--r-- 1 iredapd iredapd 10066 Mar  2 17:53 /opt/iredapd/README.md
-rw-r--r-- 1 root    root     1246 Mar  4 14:27 /opt/iredapd/settings.py
-rw-r--r-- 1 root    root      867 Mar  4 14:28 /opt/iredapd/settings.pyc
-rw-r--r-- 1 iredapd iredapd  1238 Mar  2 17:53 /opt/iredapd/settings.py.sample
-rw-r--r-- 1 iredapd iredapd   469 Mar  2 17:53 /opt/iredapd/TODO
ZhangHuangbin wrote:
# ls -dl /opt/iredapd/plugins/*
-rw-r--r-- 1 iredapd iredapd    0 Mar  2 17:53 /opt/iredapd/plugins/__init__.py
-rw-r--r-- 1 iredapd iredapd 2124 Mar  2 17:53 /opt/iredapd/plugins/ldap_amavisd_block_blacklisted_senders.py
-rw------- 1 root    root    1623 Mar  4 13:57 /opt/iredapd/plugins/ldap_amavisd_block_blacklisted_senders.pyc
-rwxr-xr-x 1 iredapd iredapd 4673 Mar  2 17:53 /opt/iredapd/plugins/ldap_domain_wblist.py
-rw-r--r-- 1 iredapd iredapd 1043 Mar  2 17:53 /opt/iredapd/plugins/ldap_expired_password.py
-rw-r--r-- 1 iredapd iredapd 4232 Mar  2 17:53 /opt/iredapd/plugins/ldap_maillist_access_policy.py
-rw------- 1 root    root    3164 Mar  4 13:57 /opt/iredapd/plugins/ldap_maillist_access_policy.pyc
-rw-r--r-- 1 iredapd iredapd 2257 Mar  4 13:50 /opt/iredapd/plugins/ldap_recipient_restrictions.py
-rw------- 1 root    root    1436 Mar  4 13:57 /opt/iredapd/plugins/ldap_recipient_restrictions.pyc
-rw-r--r-- 1 iredapd iredapd 3771 Mar  2 17:53 /opt/iredapd/plugins/sql_alias_access_policy.py
-rw-r--r-- 1 iredapd iredapd 4933 Mar  2 17:53 /opt/iredapd/plugins/sql_user_restrictions.py
ZhangHuangbin wrote:

P.S. You can add me as BBM contact if you own a BlackBerry smartphone: 271756F2.

Sorry, iPhone and/or Android user smile

Edit: Added startup sequence

6

Re: iRedAPD-1.4.0, errors in logfile

Could you please try below commands, hope we can fix it:

# cd /opt/iredapd/
# chown iredapd:iredapd settings.py
# find . -name '*pyc' | xargs rm -f {}
# /etc/init.d/iredapd restart

Then try again. Paste all log (service start, smtp session) here if it doesn't work.

7 (edited by aemaething 2013-03-04 22:29:02)

Re: iRedAPD-1.4.0, errors in logfile

No change, afaik.

The settings.pyc file (generated on startup after your commands above) are still owned by root:root (if that matters).

Here's the log:

2013-03-04 15:23:53 INFO Starting iRedAPD (version: 1.4.0, backend: ldap), listening on 127.0.0.1:7777.
2013-03-04 15:23:53 INFO Loading plugin: ldap_recipient_restrictions
2013-03-04 15:23:53 INFO Loading plugin: ldap_maillist_access_policy
2013-03-04 15:23:53 INFO Loading plugin: ldap_amavisd_block_blacklisted_senders
2013-03-04 15:23:53 DEBUG Forking first child.
2013-03-04 15:23:53 DEBUG Creating new session
2013-03-04 15:23:53 DEBUG Forking second child.
2013-03-04 15:23:53 DEBUG Setting umask
2013-03-04 15:23:53 DEBUG Changing working directory to "/"
2013-03-04 15:23:53 DEBUG Redirecting file descriptors

2013-03-04 15:25:19 DEBUG Connect from 127.0.0.1, port 37945.
2013-03-04 15:25:19 DEBUG smtp session: request=smtpd_access_policy
2013-03-04 15:25:19 DEBUG smtp session: protocol_state=RCPT
2013-03-04 15:25:19 DEBUG smtp session: protocol_name=ESMTP
2013-03-04 15:25:19 DEBUG smtp session: client_address=xxx.xxx.xxx.xxx
2013-03-04 15:25:19 DEBUG smtp session: client_name=mail-we0-f172.google.com
2013-03-04 15:25:19 DEBUG smtp session: reverse_client_name=mail-we0-f172.google.com
2013-03-04 15:25:19 DEBUG smtp session: helo_name=mail-we0-f172.google.com
2013-03-04 15:25:19 DEBUG smtp session: sender=sender@gmail.com
2013-03-04 15:25:19 DEBUG smtp session: recipient=recipient@domain.org
2013-03-04 15:25:19 DEBUG smtp session: recipient_count=0
2013-03-04 15:25:19 DEBUG smtp session: queue_id=
2013-03-04 15:25:19 DEBUG smtp session: instance=1dac.5134aecf.2f6e1.0
2013-03-04 15:25:19 DEBUG smtp session: size=0
2013-03-04 15:25:19 DEBUG smtp session: etrn_domain=
2013-03-04 15:25:19 DEBUG smtp session: stress=
2013-03-04 15:25:19 DEBUG smtp session: sasl_method=
2013-03-04 15:25:19 DEBUG smtp session: sasl_username=
2013-03-04 15:25:19 DEBUG smtp session: sasl_sender=
2013-03-04 15:25:19 DEBUG smtp session: ccert_subject=
2013-03-04 15:25:19 DEBUG smtp session: ccert_issuer=
2013-03-04 15:25:19 DEBUG smtp session: ccert_fingerprint=
2013-03-04 15:25:19 DEBUG smtp session: ccert_pubkey_fingerprint=
2013-03-04 15:25:19 DEBUG smtp session: encryption_protocol=TLSv1
2013-03-04 15:25:19 DEBUG smtp session: encryption_cipher=ECDHE-RSA-RC4-SHA
2013-03-04 15:25:19 DEBUG smtp session: encryption_keysize=128
2013-03-04 15:25:19 DEBUG LDAP connection initialied success.
2013-03-04 15:25:19 DEBUG LDAP bind success.
2013-03-04 15:25:19 DEBUG [+] Getting LDIF data of account: sender@gmail.com
2013-03-04 15:25:19 DEBUG search filter: (&(|(mail=sender@gmail.com)(shadowAddress=sender@gmail.com))(|(objectClass=mailUser)(objectClass=mailList)(objectClass=mailAlias)))
2013-03-04 15:25:19 DEBUG search attributes: ['objectClass', 'mailBlacklistedRecipient', 'mailWhitelistRecipient']
2013-03-04 15:25:19 DEBUG Not a local account.
2013-03-04 15:25:19 DEBUG --> Apply plugin: ldap_recipient_restrictions
2013-03-04 15:25:19 DEBUG Allowed recipients: @., recipient@domain.org, @domain.org, @.domain.org, @.org
2013-03-04 15:25:19 DEBUG <!> Error: 'NoneType' object has no attribute 'get'
2013-03-04 15:25:19 DEBUG [+] Getting LDIF data of account: recipient@domain.org
2013-03-04 15:25:19 DEBUG search filter: (&(|(mail=recipient@domain.org)(shadowAddress=recipient@domain.org))(|(objectClass=mailUser)(objectClass=mailList)(objectClass=mailAlias)))
2013-03-04 15:25:19 DEBUG search attributes: ['objectClass', 'listAllowedUser', 'accessPolicy', 'amavisBlacklistSender', 'amavisWhitelistSender']
2013-03-04 15:25:19 DEBUG Not a local account.
2013-03-04 15:25:19 DEBUG --> Apply plugin: ldap_maillist_access_policy
2013-03-04 15:25:19 DEBUG <!> Error: 'NoneType' object has no attribute '__getitem__'
2013-03-04 15:25:19 DEBUG --> Apply plugin: ldap_amavisd_block_blacklisted_senders
2013-03-04 15:25:19 DEBUG <!> Error: 'NoneType' object has no attribute '__getitem__'
2013-03-04 15:25:19 INFO [74.125.82.172] sender@gmail.com -> recipient@domain.org, DUNNO
2013-03-04 15:25:19 DEBUG Connection closed
2013-03-04 15:25:19 DEBUG Close LDAP connection.

Thanks!

Best,
Achim

8

Re: iRedAPD-1.4.0, errors in logfile

Hi Achim,

Sorry about this trouble.
Could you please execute below commands then try again?

# cd /opt/
# chown -R iredapd:iredapd iredapd
# chmod -R 0555 iredapd
# chmod 0500 iredapd/settings.py
# /etc/init.d/iredapd restart

If it still not work, is it possible to let me login to your server for debugging?
It works well during my testing, bypasses all unit tests.

9

Re: iRedAPD-1.4.0, errors in logfile

Hi Achim,

It's confirmed this is a bug in iRedAPD, you can try attached patch to fix it. Sorry about this trouble.

Steps to apply this patch on your server:

*) Download attached patch, upload it to your server which has iRedAPD-1.4.0 (development edition) running. Assume uploaded file is /root/check_ldif.patch.

*) Change working directory to /opt/iredapd/.

# cd /opt/iredapd/

*) Verify the patch with command 'patch --dry-run -p1':

# patch --dry-run -p1 < /root/check_ldif.patch
patching file plugins/ldap_amavisd_block_blacklisted_senders.py
patching file plugins/ldap_expired_password.py
patching file plugins/ldap_maillist_access_policy.py
patching file plugins/ldap_recipient_restrictions.py

*) If you see the SAME output message, it's safe to apply it without '--dry-run':

# patch -p1 < /root/check_ldif.patch

*) Restart iRedAPD service and try again.

Let me know if it doesn't work for you.

Post's attachments

check_ldif.patch 3.53 kb, 2 downloads since 2013-03-04 

You don't have the permssions to download the attachments of this post.

10

Re: iRedAPD-1.4.0, errors in logfile

ZhangHuangbin wrote:

Hi Achim,
...
Let me know if it doesn't work for you.

Hello,

thank you very much!
It patched without any error and also, the python error message no longer appears inside the logfile.

Best,
Achim

11

Re: iRedAPD-1.4.0, errors in logfile

*) Could you please send one more testing email and show me full log of this smtp session? Just want to make sure it's working as expected.

*) Let me know if any plugin doesn't work as expected.

12 (edited by aemaething 2013-03-05 21:46:42)

Re: iRedAPD-1.4.0, errors in logfile

OK,

here a session of the logfile:

2013-03-05 14:43:23 DEBUG Connect from 127.0.0.1, port 40867.
2013-03-05 14:43:23 DEBUG smtp session: request=smtpd_access_policy
2013-03-05 14:43:23 DEBUG smtp session: protocol_state=RCPT
2013-03-05 14:43:23 DEBUG smtp session: protocol_name=ESMTP
2013-03-05 14:43:23 DEBUG smtp session: client_address=xxx.xxx.xxx.xxx
2013-03-05 14:43:23 DEBUG smtp session: client_name=mail-we0-f174.google.com
2013-03-05 14:43:23 DEBUG smtp session: reverse_client_name=mail-we0-f174.google.com
2013-03-05 14:43:23 DEBUG smtp session: helo_name=mail-we0-f174.google.com
2013-03-05 14:43:23 DEBUG smtp session: sender=sender@sender-domain.com
2013-03-05 14:43:23 DEBUG smtp session: recipient=recipient@local-domain.com
2013-03-05 14:43:23 DEBUG smtp session: recipient_count=0
2013-03-05 14:43:23 DEBUG smtp session: queue_id=
2013-03-05 14:43:23 DEBUG smtp session: instance=4ad8.5135f67b.8ad95.0
2013-03-05 14:43:23 DEBUG smtp session: size=0
2013-03-05 14:43:23 DEBUG smtp session: etrn_domain=
2013-03-05 14:43:23 DEBUG smtp session: stress=
2013-03-05 14:43:23 DEBUG smtp session: sasl_method=
2013-03-05 14:43:23 DEBUG smtp session: sasl_username=
2013-03-05 14:43:23 DEBUG smtp session: sasl_sender=
2013-03-05 14:43:23 DEBUG smtp session: ccert_subject=
2013-03-05 14:43:23 DEBUG smtp session: ccert_issuer=
2013-03-05 14:43:23 DEBUG smtp session: ccert_fingerprint=
2013-03-05 14:43:23 DEBUG smtp session: ccert_pubkey_fingerprint=
2013-03-05 14:43:23 DEBUG smtp session: encryption_protocol=TLSv1
2013-03-05 14:43:23 DEBUG smtp session: encryption_cipher=ECDHE-RSA-RC4-SHA
2013-03-05 14:43:23 DEBUG smtp session: encryption_keysize=128
2013-03-05 14:43:23 DEBUG LDAP connection initialied success.
2013-03-05 14:43:23 DEBUG LDAP bind success.
2013-03-05 14:43:23 DEBUG --> Apply plugin: reject_sender_login_mismatch
2013-03-05 14:43:23 DEBUG Sender: sender@sender-domain.com, SASL username:
2013-03-05 14:43:23 DEBUG <-- Result: DUNNO
2013-03-05 14:43:23 DEBUG [+] Getting LDIF data of account: sender@sender-domain.com
2013-03-05 14:43:23 DEBUG search filter: (&(|(mail=sender@sender-domain.com)(shadowAddress=sender@sender-domain.com))(|(objectClass=mailUser)(objectClass=mailList)(objectClass=mailAlias)))
2013-03-05 14:43:23 DEBUG search attributes: ['objectClass', 'mailBlacklistedRecipient', 'mailWhitelistRecipient']
2013-03-05 14:43:23 DEBUG Not a local account.
2013-03-05 14:43:23 DEBUG --> Apply plugin: ldap_recipient_restrictions
2013-03-05 14:43:23 DEBUG <-- Result: DUNNO (No sender LDIF data)
2013-03-05 14:43:23 DEBUG [+] Getting LDIF data of account: recipient@local-domain.com
2013-03-05 14:43:23 DEBUG search filter: (&(|(mail=recipient@local-domain.com)(shadowAddress=recipient@local-domain.com))(|(objectClass=mailUser)(objectClass=mailList)(objectClass=mailAlias)))
2013-03-05 14:43:23 DEBUG search attributes: ['objectClass', 'listAllowedUser', 'accessPolicy', 'amavisBlacklistSender', 'amavisWhitelistSender']
2013-03-05 14:43:23 DEBUG result: [('mail=recipient@local-domain.com,ou=Users,domainName=local-domain.com,o=domains,dc=local-domain,dc=com', {'objectClass': ['inetOrgPerson', 'mailUser', 'shadowAccount', 'amavisAccount']})]
2013-03-05 14:43:23 DEBUG --> Apply plugin: ldap_maillist_access_policy
2013-03-05 14:43:23 DEBUG <-- Result: DUNNO (Not a mail list account)
2013-03-05 14:43:23 DEBUG --> Apply plugin: ldap_amavisd_block_blacklisted_senders
2013-03-05 14:43:23 DEBUG Sender: sender@sender-domain.com
2013-03-05 14:43:23 DEBUG Whitelisted senders: set([])
2013-03-05 14:43:23 DEBUG Blacklisted senders: set([])
2013-03-05 14:43:23 DEBUG <-- Result: DUNNO (No white/blacklist records found)
2013-03-05 14:43:23 INFO [74.125.82.174] sender@sender-domain.com -> recipient@local-domain.com, DUNNO
2013-03-05 14:43:23 DEBUG Connection closed
2013-03-05 14:43:23 DEBUG Close LDAP connection.

Best,
Achim

13

Re: iRedAPD-1.4.0, errors in logfile

Hi Achim,

According to the log you pasted, iRedAPD now works fine. Thanks very much for your feedback, we now get a better component, and better iRedMail. smile