$headContent
The following document contains the results of Rat (Release Audit Tool).
*****************************************************
Summary
-------
Generated at: 2025-10-03T22:50:52+02:00
Notes: 40
Binaries: 407
Archives: 8
Standards: 9041
Apache Licensed: 7702
Generated Documents: 2
JavaDocs are generated, thus a license header is optional.
Generated files do not require license headers.
1329 Unknown Licenses
*****************************************************
Files with unapproved licenses:
mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_session_fixation.test
mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/rcpt_with_starttls.test
mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/authplain.test
mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/data_with_starttls.test
mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_with_injection.test
mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/helo.test
mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/data_starts_with_starttls.test
mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls.test
mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListWithPercentWildcardInMailboxName.test
mpt/impl/imap-mailbox/core/src/main/resources/logback.xml
mpt/impl/imap-mailbox/cassandra/src/test/resources/cassandra-driver.conf
upgrade-instructions.md
code-coverage-report/pom.xml
CHANGELOG.md
third-party/rspamd/docker-compose-rspamd-with-redis-sentinel.yml
third-party/rspamd/docker-compose.yml
third-party/rspamd/docker-compose-rspamd-with-kvrocks-standalone.yml
third-party/rspamd/src/test/resources/rspamd-config/actions.conf
third-party/rspamd/src/test/resources/rspamd-config/worker-controller.inc
third-party/rspamd/src/test/resources/rspamd-config/antivirus.conf
third-party/rspamd/src/test/resources/rspamd-config/redis.conf
third-party/rspamd/src/test/resources/rspamd-config/statistic.conf
third-party/rspamd/src/test/resources/mail/ham/ham1.eml
third-party/rspamd/src/test/resources/mail/attachment/inlineVirusTextAttachment.eml
third-party/rspamd/src/test/resources/mail/attachment/inlineNonVirusTextAttachment.eml
third-party/rspamd/src/test/resources/mail/spam/phishing.eml
third-party/rspamd/src/test/resources/mail/spam/spam8.eml
third-party/rspamd/README.md
third-party/rspamd/sample-configuration/extensions.properties
third-party/rspamd/sample-configuration/kvrocks/standalone/kvrocks.conf
third-party/rspamd/sample-configuration/kvrocks/sentinel/master-node/kvrocks.conf
third-party/rspamd/sample-configuration/kvrocks/sentinel/sentinel-node/docker-entrypoint-sentinel.sh
third-party/rspamd/sample-configuration/kvrocks/sentinel/sentinel-node/sentinel.conf.template
third-party/rspamd/sample-configuration/kvrocks/sentinel/replica-node/kvrocks.conf
third-party/rspamd/sample-configuration/rspamd-redis-sentinel.conf
third-party/rspamd/sample-configuration/redis/replica/redis.conf.template
third-party/rspamd/sample-configuration/redis/replica/docker-entrypoint-replica.sh
third-party/rspamd/sample-configuration/redis/sentinel/docker-entrypoint-sentinel.sh
third-party/rspamd/sample-configuration/redis/sentinel/sentinel.conf.template
third-party/rspamd/sample-configuration/redis/master/redis.conf.template
third-party/rspamd/sample-configuration/redis/master/docker-entrypoint-master.sh
third-party/rspamd/sample-configuration/worker-controller.inc
third-party/rspamd/sample-configuration/antivirus.conf
third-party/rspamd/sample-configuration/classifier-bayes.conf
third-party/rspamd/sample-configuration/redis.conf
third-party/rspamd/sample-configuration/redis-shake/shake.toml
third-party/rspamd/sample-configuration/statistic.conf
third-party/rspamd/sample-configuration/rspamd-kvrocks-sentinel.conf
third-party/rspamd/sample-configuration/rspamd.properties
third-party/rspamd/docker-compose-distributed.yml
third-party/rspamd/docker-compose-rspamd-with-kvrocks-sentinel.yml
third-party/elasticsearch/docker-compose.yml
third-party/elasticsearch/conf/extensions.properties
third-party/elasticsearch/conf/elasticsearch.properties
third-party/elasticsearch/README.md
third-party/clamav/docker-compose.yml
third-party/clamav/src/test/resources/attachment/inlineVirusTextAttachment.eml
third-party/clamav/src/test/resources/attachment/inlineNonVirusTextAttachment.eml
third-party/clamav/README.md
third-party/crowdsec/Dockerfile
third-party/crowdsec/docker-compose.yml
third-party/crowdsec/src/test/resources/crowdsec/collections/james.yaml
third-party/crowdsec/src/test/resources/crowdsec/parsers/james-dictionary-attack.yaml
third-party/crowdsec/src/test/resources/crowdsec/parsers/syslog-logs.yaml
third-party/crowdsec/src/test/resources/crowdsec/parsers/james-auth.yaml
third-party/crowdsec/src/test/resources/crowdsec/acquis.yaml
third-party/crowdsec/src/test/resources/crowdsec/scenarios/james-bf-auth.yaml
third-party/crowdsec/src/test/resources/crowdsec/scenarios/james-dictionary-attack.yaml
third-party/crowdsec/src/test/resources/haproxy.cfg
third-party/crowdsec/src/test/resources/log/james.log
third-party/crowdsec/README.md
third-party/crowdsec/sample-configuration/collections/james.yaml
third-party/crowdsec/sample-configuration/parsers/james-dictionary-attack.yaml
third-party/crowdsec/sample-configuration/parsers/syslog-logs.yaml
third-party/crowdsec/sample-configuration/parsers/james-auth.yaml
third-party/crowdsec/sample-configuration/extensions.properties
third-party/crowdsec/sample-configuration/acquis.yaml
third-party/crowdsec/sample-configuration/scenarios/james-bf-auth.yaml
third-party/crowdsec/sample-configuration/scenarios/james-dictionary-attack.yaml
third-party/crowdsec/sample-configuration/crowdsec.properties
third-party/spamassassin/docker-compose.yml
third-party/spamassassin/src/test/resources/eml/spam.eml
third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham1
third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham3
third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham2
third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam2
third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam3
third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam1
third-party/spamassassin/sample-configuration/extensions.properties
third-party/spamassassin/sample-configuration/spamassassin.properties
backends-common/opensearch/src/test/resources/auth-es/nginx-conf/reverse_elasticsearch.conf
backends-common/opensearch/src/test/resources/auth-es/nginx-conf/passwd
backends-common/opensearch/src/test/resources/auth-es/NginxDockerfile
backends-common/opensearch/src/test/resources/auth-es/README.md
backends-common/opensearch/src/test/resources/auth-es/default.key
backends-common/opensearch/src/test/resources/auth-es/default.crt
backends-common/rabbitmq/src/test/resources/empty-store
backends-common/redis/src/test/resources/kvrocks/replica/kvrocks.conf
backends-common/redis/src/test/resources/kvrocks/sentinel/sentinel.conf
backends-common/redis/src/test/resources/kvrocks/master/kvrocks.conf
backends-common/redis/src/test/resources/sentinel_tls.conf
backends-common/redis/src/test/resources/sentinel.conf
backends-common/redis/src/test/resources/redis_cluster.conf
backends-common/redis/src/test/resources/private.key
backends-common/redis/src/test/resources/rootCA.crt
backends-common/redis/src/test/resources/certificate.crt
backends-common/redis/pom.xml
backends-common/README.adoc
backends-common/cassandra/src/test/resources/cassandra-driver.conf
backends-common/cassandra/src/test/resources/configuration-reader-test/cassandra.properties
README.adoc
src/site/resources/server/rfclist/smtp/rfc1985.txt
src/site/resources/server/rfclist/smtp/rfc2554.txt
src/site/resources/server/rfclist/smtp/rfc1652.txt
src/site/resources/server/rfclist/smtp/rfc1830.txt
src/site/resources/server/rfclist/smtp/rfc2142.txt
src/site/resources/server/rfclist/smtp/rfc2034.txt
src/site/resources/server/rfclist/smtp/rfc1891.txt
src/site/resources/server/rfclist/smtp/rfc0974.txt
src/site/resources/server/rfclist/smtp/rfc2821.txt
src/site/resources/server/rfclist/smtp/rfc1870.txt
src/site/resources/server/rfclist/smtp/rfc2197.txt
src/site/resources/server/rfclist/smtp/rfc0821.txt
src/site/resources/server/rfclist/smtp/rfc1869.txt
src/site/resources/server/rfclist/smtp/rfc1893.txt
src/site/resources/server/rfclist/smtp/rfc6710.txt
src/site/resources/server/rfclist/lmtp/rfc2033.txt
src/site/resources/server/rfclist/imap4/rfc2087.txt
src/site/resources/server/rfclist/imap4/rfc2221.txt
src/site/resources/server/rfclist/imap4/rfc2193.txt
src/site/resources/server/rfclist/imap4/rfc2192.txt
src/site/resources/server/rfclist/imap4/rfc2088.txt
src/site/resources/server/rfclist/imap4/rfc2060.txt
src/site/resources/server/rfclist/imap4/rfc2086.txt
src/site/resources/server/rfclist/imap4/rfc2342.txt
src/site/resources/server/rfclist/imap4/rfc2595.txt
src/site/resources/server/rfclist/imap4/rfc2195.txt
src/site/resources/server/rfclist/imap4/rfc2180.txt
src/site/resources/server/rfclist/imap4/rfc5256.txt
src/site/resources/server/rfclist/imap4/rfc2177.txt
src/site/resources/server/rfclist/imap4/rfc2683.txt
src/site/resources/server/rfclist/imap4/rfc2359.txt
src/site/resources/server/rfclist/imap4/rfc1731.txt
src/site/resources/server/rfclist/pop3/rfc1725.txt
src/site/resources/server/rfclist/pop3/rfc1939.txt
src/site/resources/server/rfclist/pop3/rfc1734.txt
src/site/resources/server/rfclist/ldap/rfc2830.txt
src/site/resources/server/rfclist/ldap/rfc2255.txt
src/site/resources/server/rfclist/ldap/rfc2252.txt
src/site/resources/server/rfclist/ldap/rfc3377.txt
src/site/resources/server/rfclist/ldap/rfc2256.txt
src/site/resources/server/rfclist/ldap/rfc2253.txt
src/site/resources/server/rfclist/ldap/rfc2829.txt
src/site/resources/server/rfclist/ldap/rfc2254.txt
src/site/resources/server/rfclist/ldap/rfc2251.txt
src/site/resources/server/rfclist/basic/rfc0822.txt
src/site/resources/server/rfclist/basic/rfc2046.txt
src/site/resources/server/rfclist/basic/rfc2822.txt
src/site/resources/server/rfclist/basic/rfc1123.txt
src/site/resources/server/rfclist/basic/rfc2045.txt
src/site/markdown/server/manage-guice-distributed-james.md
src/site/markdown/server/manage-cli.md
src/site/markdown/server/install/guice-cassandra-rabbitmq-s3.md
src/site/markdown/server/install/guice-cassandra.md
src/site/markdown/server/install/guice-jpa.md
src/site/markdown/server/install/guice-jpa-smtp.md
src/site/markdown/server/manage-webadmin.md
src/site/markdown/mailet/release-notes.md
src/site/markdown/mailet/quickstart.md
src/homepage/about.md
src/homepage/images/james-alt.svg
src/homepage/images/james.svg
src/homepage/_posts/2007-09-16-jspf-0.9.5.markdown
src/homepage/_posts/2019-03-26-james-3.3.0.markdown
src/homepage/_posts/2022-01-26-james-3.6.2.markdown
src/homepage/_posts/2011-12-07-protocols-1.6.0-RC1.markdown
src/homepage/_posts/2009-07-17-jMPT-0.1.markdown
src/homepage/_posts/2023-06-20-fail2ban.markdown
src/homepage/_posts/2007-04-05-JAMES-2.3.1-RC1.markdown
src/homepage/_posts/2022-08-26-james-3.7.1.markdown
src/homepage/_posts/2006-09-03-JSPF-0.9-b3.markdown
src/homepage/_posts/2022-10-28-jspf-1.0.2.markdown
src/homepage/_posts/2011-02-06-protocols-1.5.markdown
src/homepage/_posts/2009-05-16-Mailet-crypto-0.1.markdown
src/homepage/_posts/2012-01-07-mime4j-0.7.2.markdown
src/homepage/_posts/2024-03-05-mime4j-0.8.11.markdown
src/homepage/_posts/2007-04-15-JAMES-2.3.1.markdown
src/homepage/_posts/2010-06-02-mailet-base-1.1.markdown
src/homepage/_posts/2016-01-08-module-merge.markdown
src/homepage/_posts/2016-02-08-moving-to-git.markdown
src/homepage/_posts/2025-09-25-james-3.9.0.markdown
src/homepage/_posts/2022-03-01-james-3.7.0.markdown
src/homepage/_posts/2016-10-19-james-3.0.markdown
src/homepage/_posts/2017-06-23-jsieve-0.7.markdown
src/homepage/_posts/2024-06-07-jspf-1.0.4.markdown
src/homepage/_posts/2018-05-07-mime4j-0.8.2.markdown
src/homepage/_posts/2012-04-08-James-3.0-beta4.markdown
src/homepage/_posts/2007-01-03-Mailet-api.markdown
src/homepage/_posts/2025-03-03-jspf-1.0.5.markdown
src/homepage/_posts/2007-05-15-mailet-api-lives.markdown
src/homepage/_posts/2009-06-16-jsieve-03.markdown
src/homepage/_posts/2016-11-19-james-3.0.markdown
src/homepage/_posts/2019-08-30-latest-image-changes.markdown
src/homepage/_posts/2015-10-08-james-2.3.1.markdown
src/homepage/_posts/2011-01-06-imap-mailbox-0.2.markdown
src/homepage/_posts/2011-11-07-jspf-1.0.0.markdown
src/homepage/_posts/2021-12-02-james-3.6.1.markdown
src/homepage/_posts/2021-09-21-james-joinsapachecon.markdown
src/homepage/_posts/2017-10-02-BlogPostInstallingJames.markdown
src/homepage/_posts/2022-10-07-jdkim-0.3.markdown
src/homepage/_posts/2011-10-07-mime4j-0.7.1.markdown
src/homepage/_posts/2010-05-01-mailet-1.0.markdown
src/homepage/_posts/2019-03-19-mime4j-0.8.3.markdown
src/homepage/_posts/2016-05-09-jmap.markdown
src/homepage/_posts/2009-01-16-MAILET-2.4.markdown
src/homepage/_posts/2006-10-03-JAMES-2.3.markdown
src/homepage/_posts/2012-01-08-protocols-1.6.1.markdown
src/homepage/_posts/2019-09-05-james-3.4.0.markdown
src/homepage/_posts/2007-02-04-JSPF-0.9-beta4.markdown
src/homepage/_posts/2009-10-17-jdkim.markdown
src/homepage/_posts/2007-05-16-mime4j-0.3.markdown
src/homepage/_posts/2020-07-16-james-3.5.0.markdown
src/homepage/_posts/2011-03-06-jspf-0.9.9.markdown
src/homepage/_posts/2009-03-16-Mime4j-0.6.markdown
src/homepage/_posts/2010-05-02-jsieve-0.4.markdown
src/homepage/_posts/2018-06-06-linagora-june-nl.markdown
src/homepage/_posts/2024-01-08-mime4j-0.8.10.markdown
src/homepage/_posts/2007-02-03-feathercast-fetures.markdown
src/homepage/_posts/2018-11-14-james-3.2.0.markdown
src/homepage/_posts/2010-12-06-protocols-1.2.markdown
src/homepage/_posts/2025-01-29-james-3.7.6.markdown
src/homepage/_posts/2010-11-06-james-3.0-M2.markdown
src/homepage/_posts/2023-05-17-james-3.8.0.markdown
src/homepage/_posts/2017-10-03-Hacktoberfest.markdown
src/homepage/_posts/2016-07-09-jmap.markdown
src/homepage/_posts/2008-10-16-mime4j-0.5.markdown
src/homepage/_posts/2022-10-06-james-3.7.2.markdown
src/homepage/_posts/2007-04-04-james-commiters-guidelines.markdown
src/homepage/_posts/2022-12-30-james-3.7.3.markdown
src/homepage/_posts/2009-02-16-MAILET-docs-plugin-0.1.markdown
src/homepage/_posts/2015-09-08-james-2.3.1.markdown
src/homepage/_posts/2020-10-29-testing-james-with-jmeter.markdown
src/homepage/_posts/2009-06-17-jspf-0.9.7.markdown
src/homepage/_posts/2010-09-04-imap-0.2-M1.markdown
src/homepage/_posts/2023-03-20-james-3.7.4.markdown
src/homepage/_posts/2009-08-17-james-2.3.2.markdown
src/homepage/_posts/2018-01-26-admin-features.markdown
src/homepage/_posts/2011-04-06-mime4J-0.7.markdown
src/homepage/_posts/2017-07-20-james-3.0.markdown
src/homepage/_posts/2017-05-16-mime4j-0.8.1.markdown
src/homepage/_posts/2008-08-17-JSIEVE-0.2.markdown
src/homepage/_posts/2010-11-05-james-3.0-M1.markdown
src/homepage/_posts/2021-04-21-mime4j-0.8.4.markdown
src/homepage/_posts/2022-12-30-mime4j-0.8.9.markdown
src/homepage/_posts/2011-08-06-james-beta3.markdown
src/homepage/_posts/2018-02-12-gsoc-2018.markdown
src/homepage/_posts/2021-09-26-mime4j-0.8.6.markdown
src/homepage/_posts/2025-07-18-mime4j-0.8.13.markdown
src/homepage/_posts/2016-07-19-jmap.markdown
src/homepage/_posts/2008-03-16-gsoc-2008.markdown
src/homepage/_posts/2019-11-19-apache-con-eu.markdown
src/homepage/_posts/2011-05-06-jdKim0.2.markdown
src/homepage/_posts/2009-09-17-hupa.markdown
src/homepage/_posts/2010-06-03-jspf-0.9.8.markdown
src/homepage/_posts/2022-10-28-mime4j-0.8.8.markdown
src/homepage/_posts/2010-09-03-protocols-1.2-M2.markdown
src/homepage/_posts/2021-03-16-james-3.6.0.markdown
src/homepage/_posts/2016-09-19-james-3.0.markdown
src/homepage/_posts/2022-04-01-mime4j-0.8.7.markdown
src/homepage/_posts/2022-10-28-jsieve-0.8.markdown
src/homepage/_posts/2009-04-16-Mailet-base-0.1.markdown
src/homepage/_posts/2018-07-31-james-3.1.0.markdown
src/homepage/_posts/2025-05-21-jdKim0.5.markdown
src/homepage/_posts/2006-08-02-james-website-updates.markdown
src/homepage/_posts/2008-08-16-mime4j-0.4.markdown
src/homepage/_posts/2012-06-08-hupa-0.2.markdown
src/homepage/_posts/2024-01-09-james-3.7.5.markdown
src/homepage/_posts/2016-02-09-jmap.markdown
src/homepage/_posts/2024-12-23-mime4j-0.8.12.markdown
src/homepage/_posts/2024-01-09-james-3.8.1.markdown
src/homepage/_posts/2012-01-07-protocols-1.6.0.markdown
src/homepage/_posts/2021-07-02-mime4j-0.8.5.markdown
src/homepage/_posts/2006-08-03-2.3.0-RC3.markdown
src/homepage/_posts/2011-10-06-protocols-1.6-beta2.markdown
src/homepage/_posts/2017-10-20-james-3.0.1.markdown
src/homepage/_posts/2025-03-04-jdKim0.4.markdown
src/homepage/_posts/2017-05-16-james-3.0.0-rc1.markdown
src/homepage/_posts/2008-04-16-jspf-0.9.6.markdown
src/homepage/_posts/2025-01-29-james-3.8.2.markdown
src/homepage/_posts/2012-12-08-mailet-2.5.0.markdown
src/homepage/_posts/2006-07-02-2.3.0on-the-way.markdown
src/homepage/_config.yml
src/homepage/assets/css/font-awesome.min.css
src/homepage/assets/css/main.css
src/homepage/assets/css/lity.min.css
src/homepage/assets/css/ie8.css
src/homepage/assets/css/ie9.css
src/homepage/assets/css/test.html
src/homepage/assets/css/lightbox.css
src/homepage/assets/fonts/fontawesome-webfont.svg
src/homepage/assets/js/main.js
src/homepage/assets/js/github-fetch.js
src/homepage/assets/js/jquery.min.js
src/homepage/assets/js/lightbox.js
src/homepage/assets/js/ie/PIE.htc
src/homepage/assets/js/ie/respond.min.js
src/homepage/assets/js/ie/html5shiv.js
src/homepage/assets/js/jquery.scrolly.min.js
src/homepage/assets/js/skel.min.js
src/homepage/assets/js/lity.min.js
src/homepage/assets/js/util.js
src/homepage/assets/js/jquery.scrollex.min.js
src/homepage-docker/Dockerfile
src/homepage-docker/compile.sh
src/site-docker/Dockerfile
src/site-docker/compile.sh
src/adr/0026-removing-configured-additional-mailboxListeners.md
src/adr/0032-distributed-mail-queue-cleanup.md
src/adr/0007-distributed-task-cancellation.md
src/adr/0043-avoid-elasticsearch-on-critical-reads.md
src/adr/0068-mutualize-cassandra-storge-for-quota.md
src/adr/0066-modular-user-data-deletion.md
src/adr/0039-distributed-blob-garbage-collector.md
src/adr/0030-separate-attachment-content-and-metadata.md
src/adr/0055-rspamd-spam-filtering.md
src/adr/0044-against-the-use-of-cassandra-lightweight-transactions.md
src/adr/0050-jmap-web-push.md
src/adr/0002-make-taskmanager-distributed.md
src/adr/0012-jmap-partial-reads.md
src/adr/0038-distributed-eventbus.md
src/adr/0031-distributed-mail-queue.md
src/adr/0004-distributed-tasks-listing.md
src/adr/0027-eventBus-error-handling-upon-dispatch.md
src/adr/0021-cassandra-acl-inconsistency.md
src/adr/0023-cassandra-mailbox-counters-inconsistencies.md
src/adr/0063-temporary-file-leaks.md
src/adr/0069-crowdsec-IP-filtering.md
src/adr/0037-eventbus.md
src/adr/0049-deduplicated-blobs-gs-with-bloom-filters.md
src/adr/0024-polyglot-strategy.md
src/adr/0060-adopt-bounded-elastic.md
src/adr/0058-upgrade-to-netty-4.md
src/adr/0042-applicative-read-repairs.md
src/adr/0048-cleanup-jmap-uploads.md
src/adr/0072-postgresql-flags-update-concurrency-control.md
src/adr/0015-objectstorage-blobid-list.md
src/adr/0017-file-mail-queue-deprecation.md
src/adr/0020-cassandra-mailbox-object-consistency.md
src/adr/0047-jmap-push-over-websockets.md
src/adr/0009-disable-elasticsearch-dynamic-mapping.md
src/adr/0006-task-serialization.md
src/adr/0057-reactive-imap.md
src/adr/0051-oidc.md
src/adr/0019-reactor-netty-adoption.md
src/adr/0054-elasticsearch-search-overrides.md
src/adr/0040-quality-levels-definitions.md
src/adr/0056-opensearch-migration.md
src/adr/0042-james-cli-based-on-webadmin.md
src/adr/0003-distributed-workqueue.md
src/adr/0009-java-11-migration.md
src/adr/0065-changing-username.md
src/adr/0025-cassandra-blob-store-cache.md
src/adr/0029-Cassandra-mailbox-deletion-cleanup.md
src/adr/0064-account-delegation.md
src/adr/0046-generalize-event-bus.md
src/adr/0001-record-architecture-decisions.md
src/adr/0034-mailbox-api-visibility-and-usage.md
src/adr/0018-jmap-new-specs.md
src/adr/0035-distributed-listeners-configuration.md
src/adr/0062-oidc-token-introspection.md
src/adr/0041-replace-jcloud-with-s3.md
src/adr/0036-against-use-of-conditional-statements-in-guice-modules.md
src/adr/0011-remove-elasticsearch-document-source.md
src/adr/0059-upgrade-to-cassadra-driver-4.md
src/adr/0071-postgresql-mailbox-tables-structure.md
src/adr/0016-distributed-workqueue.md
src/adr/0052-pulsar-mailqueue.md
src/adr/0014-blobstore-storage-policies.md
src/adr/0008-distributed-task-await.md
src/adr/0053-email-rate-limiting.md
src/adr/0013-precompute-jmap-preview.md
src/adr/0067-quota-for-jmap-uploads.md
src/adr/0028-Recompute-mailbox-quotas.md
src/adr/0070-postgresql-adoption.md
src/adr/0022-cassandra-message-inconsistency.md
src/adr/0005-distributed-task-termination-ackowledgement.md
src/adr/0033-use-scala-in-event-sourcing-modules.md
src/adr/0061-delegation.md
src/adr/0071-objectstorage-sse-c.md
src/adr/0045-support-jmap-push-with-mailbox-changes-implementation.md
src/adr/0010-enable-elasticsearch-routing.md
protocols/smtp/src/test/resources/a50.eml
server/README.crypto
server/queue/queue-pulsar/README.adoc
server/queue/queue-memory/pom.xml
server/apps/memory-app/docker-configuration/logback-cli.xml
server/apps/memory-app/src/main/extensions-jars/README.md
server/apps/memory-app/src/main/scripts/james-cli
server/apps/memory-app/src/test/resources/jwt_publickey
server/apps/memory-app/src/test/resources/eml/otherDomainDkimLocalFrom.eml
server/apps/memory-app/src/test/resources/eml/otherDomainDkim.eml
server/apps/memory-app/src/test/resources/eml/badDkim.eml
server/apps/memory-app/src/test/resources/eml/goodDkim.eml
server/apps/memory-app/src/assemble/README.adoc
server/apps/memory-app/src/assemble/extensions-jars.txt
server/apps/memory-app/README.md
server/apps/memory-app/sample-configuration/extensions.properties
server/apps/memory-app/sample-configuration/deletedMessageVault.properties
server/apps/memory-app/sample-configuration/jvm.properties
server/apps/memory-app/sample-configuration/jmap.properties
server/apps/memory-app/sample-configuration/droplists.properties
server/apps/webadmin-cli/src/test/resources/jwt_publickey
server/apps/webadmin-cli/src/test/resources/valid_token_admin_false.jwt
server/apps/webadmin-cli/src/test/resources/valid_token_admin_true.jwt
server/apps/webadmin-cli/README.md
server/apps/webadmin-cli/james-cli
server/apps/scaling-pulsar-smtp/docker-compose.yml
server/apps/scaling-pulsar-smtp/README.adoc
server/apps/scaling-pulsar-smtp/src/main/scripts/james-cli
server/apps/scaling-pulsar-smtp/sample-configuration/extensions.properties
server/apps/scaling-pulsar-smtp/sample-configuration/pulsar.properties
server/apps/scaling-pulsar-smtp/sample-configuration/scriptFile.scala
server/apps/scaling-pulsar-smtp/sample-configuration/jvm.properties
server/apps/scaling-pulsar-smtp/sample-configuration/postgres.properties
server/apps/scaling-pulsar-smtp/sample-configuration/logback.xml
server/apps/scaling-pulsar-smtp/sample-configuration/blob.properties
server/apps/spring-app/README.crypto
server/apps/spring-app/src/main/resources/log4j2.xml
server/apps/spring-app/src/main/resources/jmxremote.access
server/apps/spring-app/src/main/resources/jmxremote.password
server/apps/spring-app/src/main/licensing/app/notice-for-binary.txt
server/apps/spring-app/src/debian/control/control
server/apps/distributed-pop3-app/docker-configuration/jvm.properties
server/apps/distributed-pop3-app/docker-configuration/logback-cli.xml
server/apps/distributed-pop3-app/docker-compose.yml
server/apps/distributed-pop3-app/README.adoc
server/apps/distributed-pop3-app/src/main/extensions-jars/README.md
server/apps/distributed-pop3-app/src/main/scripts/james-cli
server/apps/distributed-pop3-app/src/test/resources/attachment.eml
server/apps/distributed-pop3-app/src/test/resources/big.eml
server/apps/distributed-pop3-app/src/test/resources/batchsizes.properties
server/apps/distributed-pop3-app/src/test/resources/rabbitmq.properties
server/apps/distributed-pop3-app/sample-configuration/extensions.properties
server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties
server/apps/distributed-pop3-app/sample-configuration/jvm.properties
server/apps/distributed-pop3-app/sample-configuration/logback.xml
server/apps/distributed-pop3-app/sample-configuration/cassandra-driver.conf
server/apps/distributed-pop3-app/sample-configuration/batchsizes.properties
server/apps/distributed-pop3-app/sample-configuration/blob.properties
server/apps/distributed-pop3-app/sample-configuration/cassandra.properties
server/apps/distributed-pop3-app/sample-configuration/rabbitmq.properties
server/apps/migration/core-data-jpa-to-pg/README.adoc
server/apps/migration/core-data-jpa-to-pg/src/main/scripts/james-migration
server/apps/migration/core-data-jpa-to-pg/src/assemble/README.adoc
server/apps/migration/core-data-jpa-to-pg/src/assemble/extensions-jars.txt
server/apps/migration/core-data-jpa-to-pg/sample-configuration/postgres.properties
server/apps/migration/core-data-jpa-to-pg/sample-configuration/logback.xml
server/apps/migration/core-data-jpa-to-pg/sample-configuration/blob.properties
server/apps/jpa-smtp-app/docker-configuration/logback-cli.xml
server/apps/jpa-smtp-app/docker-compose.yml
server/apps/jpa-smtp-app/README.adoc
server/apps/jpa-smtp-app/src/main/extensions-jars/README.md
server/apps/jpa-smtp-app/src/main/scripts/james-cli
server/apps/jpa-smtp-app/src/assemble/extensions-jars.txt
server/apps/jpa-smtp-app/sample-configuration/extensions.properties
server/apps/jpa-smtp-app/sample-configuration/jvm.properties
server/apps/jpa-smtp-app/sample-configuration/logback.xml
server/apps/postgres-app/clean_up.sql
server/apps/postgres-app/sample-configuration-single/search.properties
server/apps/postgres-app/docker-compose.yml
server/apps/postgres-app/README.adoc
server/apps/postgres-app/sample-configuration-distributed/blob.properties
server/apps/postgres-app/sample-configuration-distributed/rabbitmq.properties
server/apps/postgres-app/src/main/extensions-jars/README.md
server/apps/postgres-app/src/main/scripts/james-cli
server/apps/postgres-app/src/test/resources/eml/htmlMail.eml
server/apps/postgres-app/src/assemble/extensions-jars.txt
server/apps/postgres-app/provision.sh
server/apps/postgres-app/imap-provision-conf/provisioning.properties
server/apps/postgres-app/sample-configuration/extensions.properties
server/apps/postgres-app/sample-configuration/jwt_publickey
server/apps/postgres-app/sample-configuration/deletedMessageVault.properties
server/apps/postgres-app/sample-configuration/jvm.properties
server/apps/postgres-app/sample-configuration/postgres.properties
server/apps/postgres-app/sample-configuration/logback.xml
server/apps/postgres-app/sample-configuration/jmap.properties
server/apps/postgres-app/sample-configuration/droplists.properties
server/apps/postgres-app/sample-configuration/blob.properties
server/apps/postgres-app/docker-compose-distributed.yml
server/apps/postgres-app/performance-test.md
server/apps/demo/initialdata.sh
server/apps/demo/Dockerfile
server/apps/demo/startup.sh
server/apps/cli/README.adoc
server/apps/distributed-app/docker-configuration/jvm.properties
server/apps/distributed-app/docker-configuration/logback-cli.xml
server/apps/distributed-app/docker-compose.yml
server/apps/distributed-app/helm-chart/james/templates/secrets.yaml
server/apps/distributed-app/helm-chart/james/templates/servicemonitor.yaml
server/apps/distributed-app/helm-chart/james/templates/james-admin-ingress.yaml
server/apps/distributed-app/helm-chart/james/templates/_docker-secrets.tpl
server/apps/distributed-app/helm-chart/james/templates/_helpers.tpl
server/apps/distributed-app/helm-chart/james/templates/jmap-ingress.yaml
server/apps/distributed-app/helm-chart/james/templates/deployment.yaml
server/apps/distributed-app/helm-chart/james/templates/service.yaml
server/apps/distributed-app/helm-chart/james/templates/_urls.tpl
server/apps/distributed-app/helm-chart/james/templates/configmaps.yaml
server/apps/distributed-app/helm-chart/james/secrets.sample.yaml
server/apps/distributed-app/helm-chart/james/Chart.yaml
server/apps/distributed-app/helm-chart/james/values.yaml
server/apps/distributed-app/helm-chart/james/configs/webadmin.properties
server/apps/distributed-app/helm-chart/james/configs/jmap.properties
server/apps/distributed-app/helm-chart/james/configs/batchsizes.properties
server/apps/distributed-app/helm-chart/james/configs/blob.properties
server/apps/distributed-app/helm-chart/james/configs/cassandra.properties
server/apps/distributed-app/helm-chart/james/configs/rabbitmq.properties
server/apps/distributed-app/helm-chart/README.md
server/apps/distributed-app/docker-compose-with-pulsar.yml
server/apps/distributed-app/README.adoc
server/apps/distributed-app/src/main/extensions-jars/README.md
server/apps/distributed-app/src/main/scripts/james-cli
server/apps/distributed-app/src/test/resources/eml/htmlMail.eml
server/apps/distributed-app/src/test/resources/batchsizes.properties
server/apps/distributed-app/src/test/resources/rabbitmq.properties
server/apps/distributed-app/src/assemble/extensions-jars.txt
server/apps/distributed-app/sample-configuration/extensions.properties
server/apps/distributed-app/sample-configuration/deletedMessageVault.properties
server/apps/distributed-app/sample-configuration/queue-pulsar.properties
server/apps/distributed-app/sample-configuration/pulsar.properties
server/apps/distributed-app/sample-configuration/jvm.properties
server/apps/distributed-app/sample-configuration/queue.properties
server/apps/distributed-app/sample-configuration/logback.xml
server/apps/distributed-app/sample-configuration/jmap.properties
server/apps/distributed-app/sample-configuration/cassandra-driver.conf
server/apps/distributed-app/sample-configuration/batchsizes.properties
server/apps/distributed-app/sample-configuration/droplists.properties
server/apps/distributed-app/sample-configuration/blob.properties
server/apps/distributed-app/sample-configuration/cassandra.properties
server/apps/distributed-app/sample-configuration/rabbitmq.properties
server/apps/distributed-app/docs/Dockerfile
server/apps/distributed-app/docs/ui-overrides/partials/header-content.hbs
server/apps/distributed-app/docs/ui-overrides/img/james.svg
server/apps/distributed-app/docs/modules/ROOT/nav.adoc
server/apps/distributed-app/docs/modules/ROOT/pages/index.adoc
server/apps/distributed-app/docs/README.md
server/apps/distributed-app/docs/antora-playbook-local.yml
server/apps/distributed-app/docs/antora.yml
server/apps/cli-integration-tests/src/test/resources/jwt_publickey
server/apps/jpa-app/docker-configuration/logback-cli.xml
server/apps/jpa-app/docker-compose.yml
server/apps/jpa-app/README.adoc
server/apps/jpa-app/src/main/extensions-jars/README.md
server/apps/jpa-app/src/main/scripts/james-cli
server/apps/jpa-app/src/assemble/extensions-jars.txt
server/apps/jpa-app/sample-configuration/extensions.properties
server/apps/jpa-app/sample-configuration/jwt_publickey
server/apps/jpa-app/sample-configuration/jvm.properties
server/apps/jpa-app/sample-configuration/logback.xml
server/apps/jpa-app/sample-configuration/droplists.properties
server/blob/blob-cassandra/src/test/resources/cassandra-driver.conf
server/blob/blob-s3/src/test/resources/minio/public.crt
server/blob/blob-s3/src/test/resources/minio/private.key
server/task/task-postgres/pom.xml
server/protocols/protocols-pop3-distributed/src/test/resources/pop3server.xml
server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mail.eml
server/protocols/webadmin/webadmin-data/src/test/resources/sieve/my_sieve
server/protocols/webadmin/webadmin-pop3/README.md
server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message.eml
server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message-without-from.eml
server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message-without-tos.eml
server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/BlobId.java
server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMessageListMethod.java
server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/BlobManagerImpl.java
server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactoryTest.java
server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java
server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java
server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/BlobManagerImplTest.java
server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/MIMEMessageConverterTest.java
server/protocols/jmap-rfc-8621/doc/specs/rfc/src/jmap.mdown
server/protocols/jmap-rfc-8621/doc/specs/rfc/src/quotas.mdown
server/protocols/jmap-rfc-8621/doc/specs/rfc/src/mail.mdown
server/protocols/jmap-rfc-8621/doc/specs/README.md
server/protocols/jmap-rfc-8621/doc/specs/spec/mail/message.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/mail/mailbox.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/mail/identity.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/mail/identitySortOrder.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/mail/messagesubmission.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/mail/rights.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/mail/securityconsiderations.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/mail/thread.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/mail/ianaconsiderations.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/mail/searchsnippet.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/mail/vacationresponse.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/mail/delegation.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/mail/intro.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/custom-quotas/quotas.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/securityconsiderations.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/ianaconsiderations.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/quota.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/intro.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/push.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/securityconsiderations.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/session.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/ianaconsiderations.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/binary.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/api.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/intro.mdown
server/protocols/jmap-rfc-8621/doc/specs/spec/authentication.mdown
server/protocols/jmap-rfc-8621/doc/README.md
server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetCreatePerformer.scala
server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/DelegatedAccountSet.scala
server/protocols/jmap-rfc-8621/src/test/resources/spamMail.eml
server/protocols/jmap-rfc-8621/src/test/resources/fullMessage.eml
server/protocols/jmap-rfc-8621/src/test/resources/example.html
server/protocols/jmap-rfc-8621/src/test/resources/emptyBodyMessageWithOneAttachment.eml
server/protocols/jmap-rfc-8621/src/test/resources/calendar.eml
server/protocols/protocols-smtp/src/test/resources/smtpserver-requireTls.xml
server/protocols/protocols-smtp/src/test/resources/log4j.xml
server/protocols/protocols-smtp/src/test/resources/smtpserver-advancedSecurity.xml
server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
server/protocols/protocols-library/src/test/resources/testServerTLSDefaultAuth.xml
server/protocols/protocols-library/src/test/resources/testServerDisabled.xml
server/protocols/protocols-library/src/test/resources/testServerStartTLS.xml
server/protocols/protocols-library/src/test/resources/testServerTLSNeedAuth.xml
server/protocols/protocols-library/src/test/resources/testServerDefaults.xml
server/protocols/protocols-library/src/test/resources/testServerPlain.xml
server/protocols/protocols-library/src/test/resources/testServerTLS.xml
server/protocols/protocols-managesieve/pom.xml
server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/jwt_publickey
server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/eml/emailWithOnlyAttachment.eml
server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/jwt_publickey
server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/jwt_publickey
server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/eml/emailWithOnlyAttachment.eml
server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/rabbitmq.properties
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/inlined-single-attachment.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_complex.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/related_in_alternative_multipart.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/alternative.cal.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/html.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/inlined-mixed.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_simple.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_simple.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_complex.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_relate_original_message.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/attachment-filename-in-content-type.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/html_body.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/simple-inlined-attachment.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/alternative.eml
server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested2.eml
server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
server/protocols/protocols-pop3/src/test/resources/pop3server.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSslJKSNotFound.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSslPEM.xml
server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthAllowed.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSSLCompress.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSslDefaultJKS.xml
server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthEnabledWithoutRequireSSL.xml
server/protocols/protocols-imap4/src/test/resources/oauth.xml
server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsTrueAndStartSSLIsFalse.xml
server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthDisabled.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMBadPass.xml
server/protocols/protocols-imap4/src/test/resources/imapServerProxy.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSSL.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMNoPass.xml
server/protocols/protocols-imap4/src/test/resources/imapServerCompress.xml
server/protocols/protocols-imap4/src/test/resources/imapServerImapConnectCheck.xml
server/protocols/protocols-imap4/src/test/resources/private.nopass.key
server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12MissingPassword.xml
server/protocols/protocols-imap4/src/test/resources/imapServer.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSslJKSBadPassword.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMExtraPass.xml
server/protocols/protocols-imap4/src/test/resources/imapServerNoLimits.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSslNoKeys.xml
server/protocols/protocols-imap4/src/test/resources/imapSSL.xml
server/protocols/protocols-imap4/src/test/resources/private.key
server/protocols/protocols-imap4/src/test/resources/imapServerHealthCheck.xml
server/protocols/protocols-imap4/src/test/resources/imapServerIdCommandResponseFields.xml
server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsFalseAndStartSSLIsTrue.xml
server/protocols/protocols-imap4/src/test/resources/commandsThrottling.xml
server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsTrueAndStartSSLIsTrue.xml
server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthDisallowed.xml
server/protocols/protocols-imap4/src/test/resources/imapServerStartTLS.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSslJKS.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMMissingPass.xml
server/protocols/protocols-imap4/src/test/resources/certs.csr
server/protocols/protocols-imap4/src/test/resources/certs.self-signed.csr
server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsFalseAndStartSSLIsFalse.xml
server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12WrongPassword.xml
server/Overview.md
server/mailet/rate-limiter-redis/redis.properties
server/mailet/rate-limiter-redis/docker-compose-sample/redis.properties
server/mailet/rate-limiter-redis/docker-compose-sample/docker-compose-with-redis-sentinel.yml
server/mailet/rate-limiter-redis/docker-compose-sample/README.md
server/mailet/rate-limiter-redis/docker-compose-sample/config-template/replica/redis.conf.template
server/mailet/rate-limiter-redis/docker-compose-sample/config-template/replica/docker-entrypoint-replica.sh
server/mailet/rate-limiter-redis/docker-compose-sample/config-template/sentinel/docker-entrypoint-sentinel.sh
server/mailet/rate-limiter-redis/docker-compose-sample/config-template/sentinel/sentinel.conf.template
server/mailet/rate-limiter-redis/docker-compose-sample/config-template/master/redis.conf.template
server/mailet/rate-limiter-redis/docker-compose-sample/config-template/master/docker-entrypoint-master.sh
server/mailet/rate-limiter-redis/extensions.properties
server/mailet/rate-limiter-redis/docker-compose.yml
server/mailet/rate-limiter-redis/README.adoc
server/mailet/rate-limiter-redis/healthcheck.properties
server/mailet/dkim/src/test/resources/long-multipart.msg
server/mailet/integration-testing/src/main/resources/eml/message-multipart-8bit.eml
server/mailet/integration-testing/src/main/resources/eml/mail_with_no_signature.eml
server/mailet/integration-testing/src/main/resources/eml/crypted.eml
server/mailet/integration-testing/src/main/resources/eml/mail_with_bad_signature.eml
server/mailet/integration-testing/src/main/resources/eml/non_smime_mail.eml
server/mailet/integration-testing/src/main/resources/eml/message-multipart-7bit.eml
server/mailet/integration-testing/src/main/resources/eml/dlp_read_mail_with_attachment.eml
server/mailet/integration-testing/src/main/resources/eml/message-text-only-8bit.eml
server/mailet/integration-testing/src/main/resources/eml/crypted_with_attachment.eml
server/mailet/integration-testing/src/main/resources/eml/message-text-only-7bit.eml
server/mailet/integration-testing/src/main/resources/eml/calendar.eml
server/mailet/integration-testing/src/main/resources/eml/bad_crypted.eml
server/mailet/integration-testing/src/main/resources/eml/yahooInvitation.eml
server/mailet/integration-testing/src/main/resources/smime-test-resource-set/instruction.md
server/mailet/integration-testing/src/main/resources/smime-test-resource-set/rootCA.srl
server/mailet/integration-testing/src/main/resources/smime-test-resource-set/mail_with_signature.eml
server/mailet/integration-testing/src/main/resources/smime-test-resource-set/rootCA.private.key
server/mailet/integration-testing/src/main/resources/smime-test-resource-set/mail_with_signature_and_content_type_xpkcs7mime.eml
server/mailet/integration-testing/src/main/resources/smime-test-resource-set/private.key
server/mailet/integration-testing/src/main/resources/smime-test-resource-set/rootCA.crt
server/mailet/integration-testing/src/main/resources/smime-test-resource-set/request.csr
server/mailet/integration-testing/src/main/resources/smime-test-resource-set/mail-with-signature-and-multi-certs.eml
server/mailet/integration-testing/src/main/resources/smime-test-resource-set/certificate.crt
server/mailet/ldap/src/test/resources/ldif-files/populate.ldif
server/mailet/ldap/README.md
server/mailet/rate-limiter/extensions.properties
server/mailet/rate-limiter/docker-compose.yml
server/mailet/rate-limiter/README.adoc
server/mailet/mailets/src/main/resources/managesieve.help.txt
server/mailet/mailets/src/test/resources/noReplyTo.eml
server/mailet/mailets/src/test/resources/brokenReplyTo.eml
server/mailet/mailets/src/test/resources/spamMail.eml
server/mailet/mailets/src/test/resources/eml/gmail.eml
server/mailet/mock-smtp-server/README.adoc
server/mailet/mock-smtp-server/src/main/jib/logback.xml
server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConfigurationClientTest.java
server/container/filesystem-api/src/test/resources/classpathTest.txt
server/container/filesystem-api/src/test/resources/class path Test.txt
server/container/core/src/test/resources/JAMES-1593.eml
server/container/core/src/test/resources/invalid.eml
server/container/core/src/test/resources/mail-containing-unicode-characters.eml
server/container/guice/memory/README.md
server/container/guice/configuration/src/test/resources/b.properties
server/container/guice/configuration/src/test/resources/a.properties
server/container/guice/configuration/src/test/resources/env.properties
server/container/guice/common/src/test/resources/eml/mail-containing-unicode-characters.eml
server/container/guice/common/src/test/resources/test.properties
server/container/guice/protocols/webadmin/src/test/resources/webadmin-two.properties
server/container/guice/protocols/webadmin/src/test/resources/webadmin-one.properties
server/container/guice/protocols/webadmin/src/test/resources/webadmin-empty.properties
server/container/guice/protocols/webadmin/src/test/resources/webadmin-none.properties
server/container/guice/utils/src/test/resources/extensions-empty.properties
server/container/guice/utils/src/test/resources/extensions-two.properties
server/container/guice/utils/src/test/resources/extensions-none.properties
server/container/guice/utils/src/test/resources/extensions-one.properties
server/container/guice/testing/custom-mailets/README.md
server/container/guice/cassandra/src/test/resources/modules/mailbox/cassandra.properties
server/container/mailbox-jmx/src/test/resources/eml/frnog.eml
server/data/data-library/src/test/resources/sieve/my_sieve
server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature
server/data/data-postgres/src/test/resources/log4j.properties
server/data/data-postgres/pom.xml
server/data/data-ldap/src/test/resources/usersrepository-enableVirtualHosting.xml
server/data/data-ldap/src/test/resources/invalid/ldif-files/populate.ldif
server/data/data-ldap/src/test/resources/localpartLogin/ldif-files/populate.ldif
server/data/data-ldap/src/test/resources/ldif-files/populate.ldif
server/data/data-ldap/src/test/resources/usersrepository-supportsVirtualHosting.xml
server/data/data-ldap/src/test/resources/usersrepository-default.xml
server/data/data-jpa/src/test/resources/log4j.properties
server/data/data-file/src/test/resources/org/apache/james/mailrepository/testdata/Inbox
server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/UploadUsageRepositoryContract.scala
server/grafana-reporting/prometheus-datasource/README.md
server/grafana-reporting/es-datasource/README.md
mailet/icalendar/src/test/resources/ics_in_header.eml
mailet/icalendar/src/test/resources/ics/no_event.ics
mailet/icalendar/src/test/resources/ics/meeting_without_dtstamp.ics
mailet/icalendar/src/test/resources/ics/ics_with_error.ics
mailet/icalendar/src/test/resources/ics/meeting_without_sequence.ics
mailet/icalendar/src/test/resources/ics/meeting_2.ics
mailet/icalendar/src/test/resources/ics/meeting_without_uid.ics
mailet/icalendar/src/test/resources/ics/meeting.ics
mailet/icalendar/src/test/resources/ics/meeting_without_method.ics
mailet/standard/src/test/resources/mime/sendToRemoteHttp.mime
mailet/standard/src/test/resources/mime/gmail.mime
mailet/standard/src/test/resources/mime/headerFolded.mime
mailet/standard/src/test/resources/mime/space.eml
mailet/standard/src/test/resources/mime/incorrect-headers.mime
mailet/standard/LICENSE.apache
mailet/standard/LICENSE.activation
mailet/standard/LICENSE.mail
mailet/base/src/test/resources/eml/text-only-7bit.eml
mailet/base/src/test/resources/eml/multipart-7bit.eml
mailet/base/src/test/resources/eml/multipart-7bit-attachment-content.txt
mailet/base/src/test/resources/eml/multipart-8bit-attachment-content.txt
mailet/base/src/test/resources/eml/multipart-8bit.eml
mailet/base/src/test/resources/eml/text-only-8bit.eml
examples/custom-webadmin-route/README.md
examples/metrics-graphite/docker-compose.yml
examples/metrics-graphite/james/extensions.properties
examples/metrics-graphite/README.md
examples/custom-smtp-hooks/README.md
examples/proxy-smtp/docker-compose.yml
examples/proxy-smtp/haproxy.cfg
examples/proxy-smtp/README.md
examples/custom-smtp-command/README.md
examples/custom-listeners/README.md
examples/custom-imap/docker-compose.yml
examples/custom-imap/README.md
examples/custom-mailets/README.md
examples/custom-healthcheck/README.md
examples/README.md
examples/imap-autoconf/content/mail/config-v1.1.xml
examples/imap-autoconf/content/.well-known/autoconfig/mail/config-v1.1.xml
examples/imap-autoconf/content/autodiscover/autodiscover.xml
examples/imap-autoconf/docker-compose.yml
examples/imap-autoconf/README.adoc
examples/custom-james-assembly/README.md
examples/opensearch-dahsboard/docker-compose.yml
examples/opensearch-dahsboard/README.md
examples/opensearch-dahsboard/james-dashboard.ndjson
examples/oidc/test.sh
examples/oidc/docker-compose.yml
examples/oidc/james/imapserver.xml
examples/oidc/james/jmap.properties
examples/oidc/james/smtpserver.xml
examples/oidc/_media/oidc-sso.drawio
examples/oidc/_media/oidc-slo.drawio
examples/oidc/_media/IMAP_SMTP oidc.drawio
examples/oidc/apisix/conf/apisix.yaml
examples/oidc/apisix/conf/config.yaml
examples/oidc/README.md
examples/oidc/ldap/populate.ldif
mailbox/spring/src/test/README.md
mailbox/plugin/quota-mailing/src/main/resources/templates/QuotaThresholdMailBody.mustache
mailbox/plugin/quota-mailing/src/main/resources/templates/QuotaThresholdMailSubject.mustache
mailbox/plugin/quota-mailing/src/test/resources/templates/body1.mustache
mailbox/plugin/quota-mailing/src/test/resources/templates/body2.mustache
mailbox/plugin/quota-mailing/src/test/resources/templates/subject2.mustache
mailbox/plugin/quota-mailing/src/test/resources/templates/subject1.mustache
mailbox/opensearch/src/test/resources/eml/emailWith3Attachments.eml
mailbox/opensearch/src/test/resources/eml/mailCustomStringHeader.eml
mailbox/opensearch/src/test/resources/eml/bodyMakeTikaToFail.eml
mailbox/opensearch/src/test/resources/eml/alternative_simple.eml
mailbox/opensearch/src/test/resources/eml/attachments-filename-in-content-type.eml
mailbox/opensearch/src/test/resources/eml/mailCustomDateHeader.eml
mailbox/opensearch/src/test/resources/eml/inlined-mixed.eml
mailbox/opensearch/src/test/resources/eml/mailWithHeaders.eml
mailbox/opensearch/src/test/resources/eml/htmlContent.txt
mailbox/opensearch/src/test/resources/eml/alternative.eml
mailbox/memory/src/test/resources/test.eml
mailbox/tika/src/test/resources/documents/Text.txt
mailbox/api/src/test/resources/eml/twoAttachmentsApi.eml
mailbox/README.md
mailbox/store/src/test/resources/eml/pgpSignedMail.eml
mailbox/store/src/test/resources/eml/htmlMail.eml
mailbox/store/src/test/resources/eml/mail4.eml
mailbox/store/src/test/resources/eml/recursiveMail.eml
mailbox/store/src/test/resources/eml/emailWithNonIndexableAttachment.eml
mailbox/store/src/test/resources/eml/mailWithLongHeaders.eml
mailbox/store/src/test/resources/eml/calendar2.eml
mailbox/store/src/test/resources/eml/signedMessage.eml
mailbox/store/src/test/resources/eml/oneAttachmentWithSimpleContentType.eml
mailbox/store/src/test/resources/eml/mail5.eml
mailbox/store/src/test/resources/eml/multiAttachmentsWithOneWrongContentDisposition.eml
mailbox/store/src/test/resources/eml/spamMail.eml
mailbox/store/src/test/resources/eml/mail.eml
mailbox/store/src/test/resources/eml/mailWithManyHeaders.eml
mailbox/store/src/test/resources/eml/oneAttachmentWithEmptyContentType.eml
mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithNoCid.eml
mailbox/store/src/test/resources/eml/invalidCharset.eml
mailbox/store/src/test/resources/eml/headerWithDot.eml
mailbox/store/src/test/resources/eml/emailWithOnlyAttachment.eml
mailbox/store/src/test/resources/eml/inlined-mixed.eml
mailbox/store/src/test/resources/eml/filenameOnly.eml
mailbox/store/src/test/resources/eml/noContentDispositionWithCID.eml
mailbox/store/src/test/resources/eml/embeddedAttachmentWithAttachment.eml
mailbox/store/src/test/resources/eml/oneInlinedAttachment.eml
mailbox/store/src/test/resources/eml/james-3901.eml
mailbox/store/src/test/resources/eml/messageWithNonASCIIFilenameAttachment.eml
mailbox/store/src/test/resources/eml/filenameAndName.eml
mailbox/store/src/test/resources/eml/invitationEmailFromOP.eml
mailbox/store/src/test/resources/eml/mail3.eml
mailbox/store/src/test/resources/eml/frnog.eml
mailbox/store/src/test/resources/eml/twoAttachments.eml
mailbox/store/src/test/resources/eml/oneAttachmentAndSomeTextInlined.eml
mailbox/store/src/test/resources/eml/oneHtmlAttachmentAndSomeTextInlined.eml
mailbox/store/src/test/resources/eml/unknownDisposition.eml
mailbox/store/src/test/resources/eml/mail2.eml
mailbox/store/src/test/resources/eml/mail1.eml
mailbox/store/src/test/resources/eml/noAttachment.eml
mailbox/store/src/test/resources/eml/charset.eml
mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithBlankCid.eml
mailbox/store/src/test/resources/eml/embeddedAttachmentWithInline.eml
mailbox/store/src/test/resources/eml/oneAttachmentWithoutContentType.eml
mailbox/store/src/test/resources/eml/emailWithTextAttachment.eml
mailbox/store/src/test/resources/eml/oneAttachmentWithoutName.eml
mailbox/store/src/test/resources/eml/calendar.eml
mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithEmptyCid.eml
mailbox/store/src/test/resources/eml/charset2.eml
mailbox/store/src/test/resources/eml/nonTextual.eml
mailbox/store/src/test/resources/documents/writter.docx
mailbox/store/src/test/resources/documents/Text.txt
mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/FetchGroupConverterTest.java
mailbox/cassandra/doc/README.md
mailbox/cassandra/doc/table_structure.drawio
mailbox/cassandra/src/test/resources/cassandra-driver.conf
docs/Dockerfile
docs/ui-overrides/partials/header-content.hbs
docs/ui-overrides/img/james.svg
docs/modules/customization/nav.adoc
docs/modules/customization/pages/mail-processing.adoc
docs/modules/customization/pages/smtp-hooks.adoc
docs/modules/customization/pages/imap.adoc
docs/modules/customization/pages/webadmin-routes.adoc
docs/modules/customization/pages/mailbox-listeners.adoc
docs/modules/customization/pages/index.adoc
docs/modules/servers/nav.adoc
docs/modules/servers/pages/distributed/architecture/mailqueue_combined_extend.adoc
docs/modules/servers/pages/distributed/architecture/consistency_model_data_replication_extend.adoc
docs/modules/servers/pages/distributed/architecture/data-tiering.adoc
docs/modules/servers/pages/distributed/architecture/implemented-standards.adoc
docs/modules/servers/pages/distributed/architecture/specialized-instances.adoc
docs/modules/servers/pages/distributed/architecture/index.adoc
docs/modules/servers/pages/distributed/architecture/consistency-model.adoc
docs/modules/servers/pages/distributed/extending.adoc
docs/modules/servers/pages/distributed/objectives.adoc
docs/modules/servers/pages/distributed/operate/metrics.adoc
docs/modules/servers/pages/distributed/operate/security.adoc
docs/modules/servers/pages/distributed/operate/webadmin/admin-messages-extend.adoc
docs/modules/servers/pages/distributed/operate/webadmin/admin-mailboxes-extend.adoc
docs/modules/servers/pages/distributed/operate/webadmin/admin-mail-queues-extend.adoc
docs/modules/servers/pages/distributed/operate/migrating.adoc
docs/modules/servers/pages/distributed/operate/logging/docker-compose-block.adoc
docs/modules/servers/pages/distributed/operate/guide.adoc
docs/modules/servers/pages/distributed/operate/performanceChecklist.adoc
docs/modules/servers/pages/distributed/operate/webadmin.adoc
docs/modules/servers/pages/distributed/operate/logging.adoc
docs/modules/servers/pages/distributed/operate/index.adoc
docs/modules/servers/pages/distributed/operate/cassandra-migration.adoc
docs/modules/servers/pages/distributed/operate/cli.adoc
docs/modules/servers/pages/distributed/benchmark/benchmark_prepare.adoc
docs/modules/servers/pages/distributed/benchmark/db-benchmark.adoc
docs/modules/servers/pages/distributed/benchmark/james-benchmark.adoc
docs/modules/servers/pages/distributed/benchmark/provision.sh
docs/modules/servers/pages/distributed/benchmark/index.adoc
docs/modules/servers/pages/distributed/index.adoc
docs/modules/servers/pages/distributed/run/k8s-secrets.adoc
docs/modules/servers/pages/distributed/run/k8s-logsMetrics.adoc
docs/modules/servers/pages/distributed/run/run-docker.adoc
docs/modules/servers/pages/distributed/run/run-kubernetes.adoc
docs/modules/servers/pages/distributed/run/k8s-values.adoc
docs/modules/servers/pages/distributed/run/index.adoc
docs/modules/servers/pages/distributed/run/run-java.adoc
docs/modules/servers/pages/distributed/run/k8s-checklist.adoc
docs/modules/servers/pages/distributed/configure/collecting-events.adoc
docs/modules/servers/pages/distributed/configure/matchers.adoc
docs/modules/servers/pages/distributed/configure/mailets.adoc
docs/modules/servers/pages/distributed/configure/batchsizes.adoc
docs/modules/servers/pages/distributed/configure/smtp-hooks.adoc
docs/modules/servers/pages/distributed/configure/domainlist.adoc
docs/modules/servers/pages/distributed/configure/queue.adoc
docs/modules/servers/pages/distributed/configure/dsn.adoc
docs/modules/servers/pages/distributed/configure/jmx.adoc
docs/modules/servers/pages/distributed/configure/cassandra.adoc
docs/modules/servers/pages/distributed/configure/tika.adoc
docs/modules/servers/pages/distributed/configure/jvm.adoc
docs/modules/servers/pages/distributed/configure/jmap.adoc
docs/modules/servers/pages/distributed/configure/mailrepositorystore.adoc
docs/modules/servers/pages/distributed/configure/collecting-contacts.adoc
docs/modules/servers/pages/distributed/configure/droplists.adoc
docs/modules/servers/pages/distributed/configure/mat-sts.adoc
docs/modules/servers/pages/distributed/configure/search.adoc
docs/modules/servers/pages/distributed/configure/blobstore.adoc
docs/modules/servers/pages/distributed/configure/extensions.adoc
docs/modules/servers/pages/distributed/configure/sieve.adoc
docs/modules/servers/pages/distributed/configure/listeners.adoc
docs/modules/servers/pages/distributed/configure/vault.adoc
docs/modules/servers/pages/distributed/configure/imap.adoc
docs/modules/servers/pages/distributed/configure/ssl.adoc
docs/modules/servers/pages/distributed/configure/smtp.adoc
docs/modules/servers/pages/distributed/configure/mailetcontainer.adoc
docs/modules/servers/pages/distributed/configure/webadmin.adoc
docs/modules/servers/pages/distributed/configure/recipientrewritetable.adoc
docs/modules/servers/pages/distributed/configure/rabbitmq.adoc
docs/modules/servers/pages/distributed/configure/spam.adoc
docs/modules/servers/pages/distributed/configure/remote-delivery-error-handling.adoc
docs/modules/servers/pages/distributed/configure/index.adoc
docs/modules/servers/pages/distributed/configure/dns.adoc
docs/modules/servers/pages/distributed/configure/redis.adoc
docs/modules/servers/pages/distributed/configure/healthcheck.adoc
docs/modules/servers/pages/distributed/configure/usersrepository.adoc
docs/modules/servers/pages/distributed/configure/opensearch.adoc
docs/modules/servers/pages/distributed/configure/pop3.adoc
docs/modules/servers/pages/5-minute-demo.adoc
docs/modules/servers/pages/15-minute-demo.adoc
docs/modules/servers/pages/test.adoc
docs/modules/servers/pages/demo.adoc
docs/modules/servers/pages/basic/context.adoc
docs/modules/servers/pages/basic/objectives.adoc
docs/modules/servers/pages/basic/conf/index.adoc
docs/modules/servers/pages/basic/help.adoc
docs/modules/servers/pages/basic/concepts.adoc
docs/modules/servers/pages/basic/architecture.adoc
docs/modules/servers/pages/basic/index.adoc
docs/modules/servers/pages/basic/self-hosting.notes
docs/modules/servers/pages/run.adoc
docs/modules/servers/pages/index.adoc
docs/modules/servers/pages/postgres/architecture/mailqueue_combined_extend.adoc
docs/modules/servers/pages/postgres/architecture/consistency_model_data_replication_extend.adoc
docs/modules/servers/pages/postgres/architecture/implemented-standards.adoc
docs/modules/servers/pages/postgres/architecture/specialized-instances.adoc
docs/modules/servers/pages/postgres/architecture/index.adoc
docs/modules/servers/pages/postgres/architecture/consistency-model.adoc
docs/modules/servers/pages/postgres/extending.adoc
docs/modules/servers/pages/postgres/objectives.adoc
docs/modules/servers/pages/postgres/operate/metrics.adoc
docs/modules/servers/pages/postgres/operate/security.adoc
docs/modules/servers/pages/postgres/operate/webadmin/admin-messages-extend.adoc
docs/modules/servers/pages/postgres/operate/webadmin/admin-mailboxes-extend.adoc
docs/modules/servers/pages/postgres/operate/webadmin/admin-mail-queues-extend.adoc
docs/modules/servers/pages/postgres/operate/migrating.adoc
docs/modules/servers/pages/postgres/operate/logging/docker-compose-block.adoc
docs/modules/servers/pages/postgres/operate/guide.adoc
docs/modules/servers/pages/postgres/operate/performanceChecklist.adoc
docs/modules/servers/pages/postgres/operate/webadmin.adoc
docs/modules/servers/pages/postgres/operate/logging.adoc
docs/modules/servers/pages/postgres/operate/index.adoc
docs/modules/servers/pages/postgres/operate/cli.adoc
docs/modules/servers/pages/postgres/benchmark/benchmark_prepare.adoc
docs/modules/servers/pages/postgres/benchmark/db-benchmark.adoc
docs/modules/servers/pages/postgres/benchmark/james-benchmark.adoc
docs/modules/servers/pages/postgres/benchmark/index.adoc
docs/modules/servers/pages/postgres/index.adoc
docs/modules/servers/pages/postgres/extending/index.adoc
docs/modules/servers/pages/postgres/run/run-docker.adoc
docs/modules/servers/pages/postgres/run/index.adoc
docs/modules/servers/pages/postgres/run/run-java.adoc
docs/modules/servers/pages/postgres/configure/collecting-events.adoc
docs/modules/servers/pages/postgres/configure/matchers.adoc
docs/modules/servers/pages/postgres/configure/mailets.adoc
docs/modules/servers/pages/postgres/configure/batchsizes.adoc
docs/modules/servers/pages/postgres/configure/smtp-hooks.adoc
docs/modules/servers/pages/postgres/configure/domainlist.adoc
docs/modules/servers/pages/postgres/configure/queue.adoc
docs/modules/servers/pages/postgres/configure/dsn.adoc
docs/modules/servers/pages/postgres/configure/jmx.adoc
docs/modules/servers/pages/postgres/configure/tika.adoc
docs/modules/servers/pages/postgres/configure/jvm.adoc
docs/modules/servers/pages/postgres/configure/jmap.adoc
docs/modules/servers/pages/postgres/configure/mailrepositorystore.adoc
docs/modules/servers/pages/postgres/configure/collecting-contacts.adoc
docs/modules/servers/pages/postgres/configure/droplists.adoc
docs/modules/servers/pages/postgres/configure/mat-sts.adoc
docs/modules/servers/pages/postgres/configure/search.adoc
docs/modules/servers/pages/postgres/configure/blobstore.adoc
docs/modules/servers/pages/postgres/configure/extensions.adoc
docs/modules/servers/pages/postgres/configure/sieve.adoc
docs/modules/servers/pages/postgres/configure/listeners.adoc
docs/modules/servers/pages/postgres/configure/vault.adoc
docs/modules/servers/pages/postgres/configure/imap.adoc
docs/modules/servers/pages/postgres/configure/ssl.adoc
docs/modules/servers/pages/postgres/configure/smtp.adoc
docs/modules/servers/pages/postgres/configure/mailetcontainer.adoc
docs/modules/servers/pages/postgres/configure/webadmin.adoc
docs/modules/servers/pages/postgres/configure/recipientrewritetable.adoc
docs/modules/servers/pages/postgres/configure/rabbitmq.adoc
docs/modules/servers/pages/postgres/configure/spam.adoc
docs/modules/servers/pages/postgres/configure/remote-delivery-error-handling.adoc
docs/modules/servers/pages/postgres/configure/index.adoc
docs/modules/servers/pages/postgres/configure/dns.adoc
docs/modules/servers/pages/postgres/configure/redis.adoc
docs/modules/servers/pages/postgres/configure/healthcheck.adoc
docs/modules/servers/pages/postgres/configure/usersrepository.adoc
docs/modules/servers/pages/postgres/configure/opensearch.adoc
docs/modules/servers/pages/postgres/configure/pop3.adoc
docs/modules/servers/partials/architecture/implemented-standards.adoc
docs/modules/servers/partials/architecture/specialized-instances.adoc
docs/modules/servers/partials/architecture/index.adoc
docs/modules/servers/partials/architecture/consistency-model.adoc
docs/modules/servers/partials/IsOverQuota.adoc
docs/modules/servers/partials/HasHeaderWithPrefix.adoc
docs/modules/servers/partials/ManageSieveMailet.adoc
docs/modules/servers/partials/AddFooter.adoc
docs/modules/servers/partials/FileRegexMatcher.adoc
docs/modules/servers/partials/AtMostPriority.adoc
docs/modules/servers/partials/RecipientToLowerCase.adoc
docs/modules/servers/partials/MailToAllUsers.adoc
docs/modules/servers/partials/Expires.adoc
docs/modules/servers/partials/AmqpForwardAttribute.adoc
docs/modules/servers/partials/SenderHasMXRecord.adoc
docs/modules/servers/partials/LogMessage.adoc
docs/modules/servers/partials/ClamAVScan.adoc
docs/modules/servers/partials/MailAttributesToMimeHeaders.adoc
docs/modules/servers/partials/RemoveMimeHeader.adoc
docs/modules/servers/partials/SenderIsNull.adoc
docs/modules/servers/partials/SerialiseToHTTP.adoc
docs/modules/servers/partials/ClassifyBounce.adoc
docs/modules/servers/partials/IsSMIMESigned.adoc
docs/modules/servers/partials/SubjectIs.adoc
docs/modules/servers/partials/ToPlainText.adoc
docs/modules/servers/partials/WithStorageDirective.adoc
docs/modules/servers/partials/IsSMIMEEncrypted.adoc
docs/modules/servers/partials/RecipientHasMXRecord.adoc
docs/modules/servers/partials/AtMost.adoc
docs/modules/servers/partials/ExtractMDNOriginalJMAPMessageId.adoc
docs/modules/servers/partials/RecipientRewriteTable.adoc
docs/modules/servers/partials/RecipientIsLocal.adoc
docs/modules/servers/partials/RemoveMimeHeaderByPrefix.adoc
docs/modules/servers/partials/ConvertTo7Bit.adoc
docs/modules/servers/partials/HostIs.adoc
docs/modules/servers/partials/UserIs.adoc
docs/modules/servers/partials/XOriginatingIpInNetwork.adoc
docs/modules/servers/partials/ICalendarParser.adoc
docs/modules/servers/partials/HasPriority.adoc
docs/modules/servers/partials/LocalDelivery.adoc
docs/modules/servers/partials/NESSpamCheck.adoc
docs/modules/servers/partials/SPF.adoc
docs/modules/servers/partials/TextCalendarBodyToAttachment.adoc
docs/modules/servers/partials/WithPriority.adoc
docs/modules/servers/partials/SpamAssassin.adoc
docs/modules/servers/partials/Forward.adoc
docs/modules/servers/partials/RecipientDomainIs.adoc
docs/modules/servers/partials/SaveMailNameInHeaders .adoc
docs/modules/servers/partials/SMTPIsAuthNetwork.adoc
docs/modules/servers/partials/HasMailAttributeWithValueRegex.adoc
docs/modules/servers/partials/ReplaceContent.adoc
docs/modules/servers/partials/RemoteAddrInNetwork.adoc
docs/modules/servers/partials/NotifyPostmaster.adoc
docs/modules/servers/partials/HeadersToHTTP.adoc
docs/modules/servers/partials/CommandForListserv.adoc
docs/modules/servers/partials/RandomStoring.adoc
docs/modules/servers/partials/PostmasterAlias.adoc
docs/modules/servers/partials/SMIMECheckSignature.adoc
docs/modules/servers/partials/RecoverAttachment.adoc
docs/modules/servers/partials/StripAttachment.adoc
docs/modules/servers/partials/SubAddressing.adoc
docs/modules/servers/partials/DKIMSign.adoc
docs/modules/servers/partials/TooManyRecipients.adoc
docs/modules/servers/partials/SplitMail.adoc
docs/modules/servers/partials/RemoveAllMailAttributes.adoc
docs/modules/servers/partials/ICALToHeader.adoc
docs/modules/servers/partials/SanitizeMimeMessageId.adoc
docs/modules/servers/partials/HasMimeTypeAnySubPart.adoc
docs/modules/servers/partials/AttachmentFileNameIs.adoc
docs/modules/servers/partials/MimeDecodingMailet.adoc
docs/modules/servers/partials/IsX509CertificateSubject.adoc
docs/modules/servers/partials/Bounce.adoc
docs/modules/servers/partials/RecipientCountExceeds.adoc
docs/modules/servers/partials/WrapText.adoc
docs/modules/servers/partials/DKIMVerify.adoc
docs/modules/servers/partials/IsSenderInRRTLoop.adoc
docs/modules/servers/partials/SetMimeHeader.adoc
docs/modules/servers/partials/Redirect.adoc
docs/modules/servers/partials/RelayLimit.adoc
docs/modules/servers/partials/DeconnectionRight.adoc
docs/modules/servers/partials/ICALToJsonAttribute.adoc
docs/modules/servers/partials/SenderIs.adoc
docs/modules/servers/partials/TooManyLines.adoc
docs/modules/servers/partials/IsSingleRecipient.adoc
docs/modules/servers/partials/ToRepository.adoc
docs/modules/servers/partials/SenderInFakeDomain.adoc
docs/modules/servers/partials/Null.adoc
docs/modules/servers/partials/IsRemoteDeliveryPermanentError.adoc
docs/modules/servers/partials/RemoteDelivery.adoc
docs/modules/servers/partials/ServerTime.adoc
docs/modules/servers/partials/AddSubjectPrefix.adoc
docs/modules/servers/partials/RemoveMailAttribute.adoc
docs/modules/servers/partials/Resend.adoc
docs/modules/servers/partials/HasException.adoc
docs/modules/servers/partials/UnwrapText.adoc
docs/modules/servers/partials/ToSenderDomainRepository.adoc
docs/modules/servers/partials/VacationMailet.adoc
docs/modules/servers/partials/HasAttachment.adoc
docs/modules/servers/partials/operate/metrics.adoc
docs/modules/servers/partials/operate/security.adoc
docs/modules/servers/partials/operate/migrating.adoc
docs/modules/servers/partials/operate/guide.adoc
docs/modules/servers/partials/operate/performanceChecklist.adoc
docs/modules/servers/partials/operate/webadmin.adoc
docs/modules/servers/partials/operate/logging.adoc
docs/modules/servers/partials/operate/index.adoc
docs/modules/servers/partials/operate/cli.adoc
docs/modules/servers/partials/All.adoc
docs/modules/servers/partials/benchmark/db-benchmark.adoc
docs/modules/servers/partials/benchmark/james-benchmark.adoc
docs/modules/servers/partials/benchmark/index.adoc
docs/modules/servers/partials/CommandListservMatcher.adoc
docs/modules/servers/partials/Sieve.adoc
docs/modules/servers/partials/ToProcessor.adoc
docs/modules/servers/partials/MailAttributesListToMimeHeaders.adoc
docs/modules/servers/partials/FetchedFrom.adoc
docs/modules/servers/partials/HostIsLocal.adoc
docs/modules/servers/partials/SetMailAttribute.adoc
docs/modules/servers/partials/HasMimeTypeParameter.adoc
docs/modules/servers/partials/RemoteAddrNotInNetwork.adoc
docs/modules/servers/partials/AtLeastPriority.adoc
docs/modules/servers/partials/ContactExtractor.adoc
docs/modules/servers/partials/Sign.adoc
docs/modules/servers/partials/HasMailAttributeWithValue.adoc
docs/modules/servers/partials/DSNBounce.adoc
docs/modules/servers/partials/RemoteDeliveryFailedWithSMTPCode.adoc
docs/modules/servers/partials/FoldLongLines.adoc
docs/modules/servers/partials/HasMailAttribute.adoc
docs/modules/servers/partials/ToSenderFolder.adoc
docs/modules/servers/partials/SenderHostIsLocal.adoc
docs/modules/servers/partials/CompareNumericHeaderValue.adoc
docs/modules/servers/partials/RecipientIsRegex.adoc
docs/modules/servers/partials/NotifySender.adoc
docs/modules/servers/partials/LDAPMatchers.adoc
docs/modules/servers/partials/SMIMESign.adoc
docs/modules/servers/partials/SubjectStartsWith.adoc
docs/modules/servers/partials/SenderDomainIs.adoc
docs/modules/servers/partials/IsRemoteDeliveryTemporaryError.adoc
docs/modules/servers/partials/SentByMailet.adoc
docs/modules/servers/partials/DLP.adoc
docs/modules/servers/partials/SenderIsLocal.adoc
docs/modules/servers/partials/RecipientIs.adoc
docs/modules/servers/partials/FromRepository.adoc
docs/modules/servers/partials/InSpammerBlacklist.adoc
docs/modules/servers/partials/SenderHostIs.adoc
docs/modules/servers/partials/IsMarkedAsSpam.adoc
docs/modules/servers/partials/SMTPAuthSuccessful.adoc
docs/modules/servers/partials/HasHeader.adoc
docs/modules/servers/partials/HasMimeType.adoc
docs/modules/servers/partials/OnlyText.adoc
docs/modules/servers/partials/UseHeaderRecipients.adoc
docs/modules/servers/partials/SentByJmap.adoc
docs/modules/servers/partials/ICSSanitizer.adoc
docs/modules/servers/partials/SenderIsRegex.adoc
docs/modules/servers/partials/configure/forProtocolsPartial.adoc
docs/modules/servers/partials/configure/collecting-events.adoc
docs/modules/servers/partials/configure/matchers.adoc
docs/modules/servers/partials/configure/mailets.adoc
docs/modules/servers/partials/configure/batchsizes.adoc
docs/modules/servers/partials/configure/forStorageDependenciesPartial.adoc
docs/modules/servers/partials/configure/smtp-hooks.adoc
docs/modules/servers/partials/configure/domainlist.adoc
docs/modules/servers/partials/configure/queue.adoc
docs/modules/servers/partials/configure/mta-sts.adoc
docs/modules/servers/partials/configure/dsn.adoc
docs/modules/servers/partials/configure/jmx.adoc
docs/modules/servers/partials/configure/tika.adoc
docs/modules/servers/partials/configure/jvm.adoc
docs/modules/servers/partials/configure/jmap.adoc
docs/modules/servers/partials/configure/mailrepositorystore.adoc
docs/modules/servers/partials/configure/collecting-contacts.adoc
docs/modules/servers/partials/configure/droplists.adoc
docs/modules/servers/partials/configure/search.adoc
docs/modules/servers/partials/configure/blobstore.adoc
docs/modules/servers/partials/configure/forCoreComponentsPartial.adoc
docs/modules/servers/partials/configure/extensions.adoc
docs/modules/servers/partials/configure/sieve.adoc
docs/modules/servers/partials/configure/listeners.adoc
docs/modules/servers/partials/configure/vault.adoc
docs/modules/servers/partials/configure/imap.adoc
docs/modules/servers/partials/configure/ssl.adoc
docs/modules/servers/partials/configure/systemPropertiesPartial.adoc
docs/modules/servers/partials/configure/smtp.adoc
docs/modules/servers/partials/configure/mailetcontainer.adoc
docs/modules/servers/partials/configure/webadmin.adoc
docs/modules/servers/partials/configure/smtp-limitation-hoot.adoc
docs/modules/servers/partials/configure/recipientrewritetable.adoc
docs/modules/servers/partials/configure/rabbitmq.adoc
docs/modules/servers/partials/configure/spam.adoc
docs/modules/servers/partials/configure/remote-delivery-error-handling.adoc
docs/modules/servers/partials/configure/forExtensionsPartial.adoc
docs/modules/servers/partials/configure/dns.adoc
docs/modules/servers/partials/configure/redis.adoc
docs/modules/servers/partials/configure/healthcheck.adoc
docs/modules/servers/partials/configure/usersrepository.adoc
docs/modules/servers/partials/configure/opensearch.adoc
docs/modules/servers/partials/configure/pop3.adoc
docs/modules/servers/partials/MetricsMailet.adoc
docs/modules/servers/partials/PartHasContentType.adoc
docs/modules/servers/partials/SMTPAuthUserIs.adoc
docs/modules/servers/partials/AddDeliveredToHeader.adoc
docs/modules/servers/partials/SMIMEDecrypt.adoc
docs/modules/servers/partials/SizeGreaterThan.adoc
docs/modules/servers/assets/images/storage_james_postgres.svg
docs/modules/concepts/nav.adoc
docs/modules/concepts/pages/configuration.adoc
docs/modules/concepts/pages/mail/index.adoc
docs/modules/concepts/pages/storage/mailbox.adoc
docs/modules/concepts/pages/storage/users.adoc
docs/modules/concepts/pages/storage/index.adoc
docs/modules/concepts/pages/messages/mime.adoc
docs/modules/concepts/pages/messages/imf.adoc
docs/modules/concepts/pages/messages/index.adoc
docs/modules/concepts/pages/protocols/jmap.adoc
docs/modules/concepts/pages/protocols/imap.adoc
docs/modules/concepts/pages/protocols/smtp.adoc
docs/modules/concepts/pages/protocols/index.adoc
docs/modules/concepts/pages/protocols/pop.adoc
docs/modules/concepts/pages/protocols/esmtp.adoc
docs/modules/concepts/pages/protocols/lmtp.adoc
docs/modules/concepts/pages/user/index.adoc
docs/modules/concepts/pages/processing/index.adoc
docs/modules/concepts/pages/glossary.adoc
docs/modules/concepts/pages/index.adoc
docs/modules/ROOT/nav.adoc
docs/modules/ROOT/pages/index.adoc
docs/modules/development/nav.adoc
docs/modules/development/pages/deployment-tests.adoc
docs/modules/development/pages/logging.adoc
docs/modules/development/pages/index.adoc
docs/modules/community/nav.adoc
docs/modules/community/pages/support.adoc
docs/modules/community/pages/website.adoc
docs/modules/community/pages/guidelines.adoc
docs/modules/community/pages/download.adoc
docs/modules/community/pages/mailing-lists.adoc
docs/modules/community/pages/release.adoc
docs/modules/community/pages/index.adoc
docs/modules/community/pages/contributing.adoc
docs/README.md
docs/antora-playbook-local.yml
docs/antora.yml
testing/base/src/main/resources/logback-test.xml
testing/base/src/main/resources/testcontainers.properties
*****************************************************
Archives:
+ server/container/guice/mailet/src/test/resources/recursive/extensions-jars/custom-mailets-implementation-3.9.0-SNAPSHOT.jar
+ server/container/guice/mailet/src/test/resources/recursive/extensions-jars/james-server-guice-custom-mailets-3.9.0-SNAPSHOT-jar-with-dependencies.jar
+ mailet/standard/src/test/resources/nested.zip
+ mailet/standard/src/test/resources/sonde.zip
+ mailbox/tika/src/test/resources/documents/slides.odp
+ mailbox/tika/src/test/resources/documents/writter.odt
+ mailbox/tika/src/test/resources/documents/calc.ods
+ mailbox/store/src/test/resources/eml/ديناصور.odt
*****************************************************
Files with Apache License headers will be marked AL
Binary files (which do not require any license headers) will be marked B
Compressed archives will be marked A
Notices, licenses etc. will be marked N
AL metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultTimeMetric.java
AL metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultMetricFactory.java
AL metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultMetric.java
AL metrics/metrics-logger/src/test/java/org/apache/james/metrics/logger/DefaultMetricFactoryTest.java
AL metrics/metrics-logger/src/test/java/org/apache/james/metrics/logger/DefaultMetricTest.java
AL metrics/metrics-logger/pom.xml
AL metrics/pom.xml
AL metrics/metrics-api/src/main/java/org/apache/james/metrics/api/GaugeRegistry.java
AL metrics/metrics-api/src/main/java/org/apache/james/metrics/api/TimeMetric.java
AL metrics/metrics-api/src/main/java/org/apache/james/metrics/api/Metric.java
AL metrics/metrics-api/src/main/java/org/apache/james/metrics/api/MetricFactory.java
AL metrics/metrics-api/src/main/java/org/apache/james/metrics/api/Gauge.java
AL metrics/metrics-api/src/main/java/org/apache/james/metrics/api/NoopGaugeRegistry.java
AL metrics/metrics-api/src/test/java/org/apache/james/metrics/api/MetricContract.java
AL metrics/metrics-api/src/test/java/org/apache/james/metrics/api/MetricFactoryContract.java
AL metrics/metrics-api/pom.xml
AL metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java
AL metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardJVMMetrics.java
AL metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetric.java
AL metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardGaugeRegistry.java
AL metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardTimeMetric.java
AL metrics/metrics-dropwizard/src/test/java/org/apache/james/metrics/dropwizard/DropWizardMetricTest.java
AL metrics/metrics-dropwizard/src/test/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactoryTest.java
AL metrics/metrics-dropwizard/pom.xml
AL metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingTimeMetric.java
AL metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetric.java
AL metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java
AL metrics/metrics-tests/src/test/java/org/apache/james/metrics/tests/RecordingMetricFactoryTest.java
AL metrics/metrics-tests/src/test/java/org/apache/james/metrics/tests/RecordingMetricTest.java
AL metrics/metrics-tests/pom.xml
AL json/src/main/java/org/apache/james/json/DTOModule.java
AL json/src/main/java/org/apache/james/json/DTO.java
AL json/src/main/java/org/apache/james/json/JsonGenericSerializer.java
AL json/src/main/java/org/apache/james/json/DTOConverter.java
AL json/src/test/java/org/apache/james/JsonSerializationVerifier.java
AL json/src/test/java/org/apache/james/JsonGenericSerializerTest.java
AL json/src/test/java/org/apache/james/DTOConverterTest.java
AL json/src/test/java/org/apache/james/SerializationFixture.java
AL json/src/test/java/org/apache/james/dto/TestNestedModule.java
AL json/src/test/java/org/apache/james/dto/FirstNestedType.java
AL json/src/test/java/org/apache/james/dto/FirstDTO.java
AL json/src/test/java/org/apache/james/dto/TestModule.java
AL json/src/test/java/org/apache/james/dto/FirstNestedDTO.java
AL json/src/test/java/org/apache/james/dto/BaseType.java
AL json/src/test/java/org/apache/james/dto/SecondDTO.java
AL json/src/test/java/org/apache/james/dto/SecondNestedType.java
AL json/src/test/java/org/apache/james/dto/NestedType.java
AL json/src/test/java/org/apache/james/dto/SecondDomainObject.java
AL json/src/test/java/org/apache/james/dto/FirstDomainObject.java
AL json/src/test/java/org/apache/james/dto/TestModules.java
AL json/src/test/java/org/apache/james/dto/SecondNestedDTO.java
AL json/src/test/java/org/apache/james/JsonSerializationVerifierTest.java
AL json/pom.xml
N mpt/mavenplugin/LICENSE.txt
N mpt/mavenplugin/NOTICE.txt
AL mpt/mavenplugin/src/site/fml/faq.fml
AL mpt/mavenplugin/src/site/site.xml
AL mpt/mavenplugin/src/site/apt/usage.apt.vm
AL mpt/mavenplugin/src/site/apt/index.apt
AL mpt/mavenplugin/src/main/java/org/apache/james/mpt/maven/MailProtocolTest.java
AL mpt/mavenplugin/src/main/java/org/apache/james/mpt/maven/MailProtocolTestMojo.java
AL mpt/mavenplugin/src/main/java/org/apache/james/mpt/maven/AddUser.java
AL mpt/mavenplugin/src/reporting-site/site.xml
AL mpt/mavenplugin/pom.xml
AL mpt/all/src/site/site.xml
AL mpt/all/src/assemble/bin.xml
AL mpt/all/src/assemble/src.xml
AL mpt/all/src/reporting-site/site.xml
AL mpt/all/pom.xml
AL mpt/impl/smtp/pom.xml
!????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_session_fixation.test
!????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/rcpt_with_starttls.test
!????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/authplain.test
!????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/data_with_starttls.test
!????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_with_injection.test
!????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/helo.test
!????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/data_starts_with_starttls.test
!????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls.test
AL mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/SmtpAuthCommandTest.java
AL mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
AL mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/SmtpHostSystem.java
AL mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/InMemoryDnsExtension.java
AL mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/SmtpStarttlsCommandTest.java
AL mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/SmtpTestExtension.java
AL mpt/impl/smtp/core/pom.xml
AL mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/dnsservice.xml
AL mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/lmtpserver.xml
AL mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/mailetcontainer.xml
AL mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/imapserver.xml
AL mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/managesieveserver.xml
AL mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/domainlist.xml
AL mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/mailrepositorystore.xml
AL mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/recipientrewritetable.xml
B mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/keystore
AL mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/smtpserver.xml
AL mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/pop3server.xml
AL mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java
AL mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java
AL mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml
AL mpt/impl/smtp/jpa-pulsar/src/test/resources/dnsservice.xml
AL mpt/impl/smtp/jpa-pulsar/src/test/resources/mailetcontainer.xml
AL mpt/impl/smtp/jpa-pulsar/src/test/resources/domainlist.xml
AL mpt/impl/smtp/jpa-pulsar/src/test/resources/mailrepositorystore.xml
AL mpt/impl/smtp/jpa-pulsar/src/test/resources/usersrepository.xml
AL mpt/impl/smtp/jpa-pulsar/src/test/resources/recipientrewritetable.xml
B mpt/impl/smtp/jpa-pulsar/src/test/resources/keystore
AL mpt/impl/smtp/jpa-pulsar/src/test/resources/smtpserver.xml
AL mpt/impl/smtp/jpa-pulsar/src/test/java/org/apache/james/mpt/smtp/JpaPulsarForwardSmtpTest.java
AL mpt/impl/smtp/jpa-pulsar/src/test/java/org/apache/james/mpt/smtp/JpaPulsarSmtpStarttlsCommandTest.java
AL mpt/impl/smtp/jpa-pulsar/pom.xml
AL mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/host/FileHostSystem.java
AL mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/FileManageSieveMPTTest.java
AL mpt/impl/managesieve/file/pom.xml
AL mpt/impl/managesieve/pom.xml
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/deletescript.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/authenticate.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/noop.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/renamescript.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/authenticateBase64.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/unauthenticate.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/havespace.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/setactive.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/checkscript.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/capability.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/listscripts.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/starttls.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/logout.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/getscript.test
AL mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/putscript.test
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/ManageSieveMPTContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/SetActiveContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/PutScriptContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/HaveSpaceContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/DeleteScriptContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/StartTlsContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/AuthenticateContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/UnauthenticatedContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/NoopContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/CheckScriptContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/LogoutContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/GetScriptContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/RenameScriptContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/ListScriptsContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/CapabilityContract.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/HostSystemProvider.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveHostSystem.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/JamesManageSieveHostSystem.java
AL mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
AL mpt/impl/managesieve/core/pom.xml
AL mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/CassandraManageSieveMPTTest.java
AL mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
AL mpt/impl/managesieve/cassandra/pom.xml
AL mpt/impl/imap-mailbox/opensearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/OpenSearchUidSearchOnIndexTest.java
AL mpt/impl/imap-mailbox/opensearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/OpenSearchRecentTest.java
AL mpt/impl/imap-mailbox/opensearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/PublicTemporaryFolder.java
AL mpt/impl/imap-mailbox/opensearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/OpenSearchHostSystem.java
AL mpt/impl/imap-mailbox/opensearch/pom.xml
N mpt/impl/imap-mailbox/LICENSE.txt
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQSecurityTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQAuthenticatePlainTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQEventsTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQSelectedInboxTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQCondstoreTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQCopyTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQMailboxAnnotationTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQRenameTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQFetchHeadersTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQSelectedStateTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQUidSearchTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQFetchBodySectionTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQListingWithSharingTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQUserFlagsSupportTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQSelectTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/host/RabbitMQEventBusHostSystem.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/host/RabbitMQEventBusHostSystemExtension.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQConcurrentSessionsTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQAuthenticatedStateTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQPartialFetchTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQQuotaTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQListingTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQMoveTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQNonAuthenticatedStateTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQFetchTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQSearchTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQFetchBodyStructureTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQMailboxWithLongNameErrorTest.java
AL mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQObjectIdeTest.java
AL mpt/impl/imap-mailbox/rabbitmq/pom.xml
N mpt/impl/imap-mailbox/NOTICE.txt
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneMailboxWithLongNameErrorTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneMailboxAnnotationTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneSelectedStateTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneCondstoreTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneListingTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneSelectedInboxTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneNonAuthenticatedStateTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneUidSearchOnIndexTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneAuthenticatedStateTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneCopyTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneExpungeTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LucenePartialFetchTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneRenameTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneSecurityTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneMoveTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneEventsTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneAuthenticatePlainTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneQuotaTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneFetchTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneConcurrentSessionsTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneRecentTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneFetchHeadersTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneObjectIdTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneFetchBodySectionTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneUserFlagsSupportTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneFetchBodyStructureTest.java
AL mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneSelectTest.java
AL mpt/impl/imap-mailbox/lucenesearch/pom.xml
AL mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/CyrusACLIntegration.java
AL mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/MailboxMessageAppenderOnCyrusHost.java
AL mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/CyrusUserAdder.java
AL mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/Docker.java
AL mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/CyrusHostSystem.java
AL mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/GrantRightsOnCyrusHost.java
AL mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/CyrusACLCommands.java
AL mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/CyrusMailboxTestModule.java
AL mpt/impl/imap-mailbox/cyrus/src/reporting-site/site.xml
AL mpt/impl/imap-mailbox/cyrus/pom.xml
AL mpt/impl/imap-mailbox/external-james/src/test/resources/org/apache/james/imap/scripts/SelectThenFetchWithExistingMessages.test
AL mpt/impl/imap-mailbox/external-james/src/test/resources/org/apache/james/imap/scripts/ValidateDeployment.test
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerJamesRule.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/ExternalJamesModule.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationSpringJPATest.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ProvisioningAPI.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/SmtpHostSystem.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/NoopDomainsAndUserAdder.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesConfiguration.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesImapHostSystem.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesSmtpHostSystem.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesConfigurationEnvironnementVariables.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/docker/CliProvisioningAPI.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/StaticJamesConfiguration.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DeploymentValidation.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/ProvisioningException.java
AL mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationGuiceJPATest.java
AL mpt/impl/imap-mailbox/external-james/src/reporting-site/site.xml
AL mpt/impl/imap-mailbox/external-james/pom.xml
AL mpt/impl/imap-mailbox/pom.xml
N mpt/impl/imap-mailbox/core/LICENSE.txt
N mpt/impl/imap-mailbox/core/NOTICE.txt
AL mpt/impl/imap-mailbox/core/src/main/resources/log4j.properties
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-sender.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/multipart-alt.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-group-addresses.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-mixed.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/mime-plain-text.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/multipart-alt-translation.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-alt-reply.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/multipart-mixed.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-resent.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-trace.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-hello-world.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-alt-reply3.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-reply.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-alt-another-reply.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/multipart-mixed-complex.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/multipart-binary.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-example.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-mixed-alt.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-alt-reply4.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-multiple-addresses.mail
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectUnseen.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/HeaderPartialFetch.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Noop.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentFetchResponse.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/MetadataWithLimitation.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/UserFlagsSupport.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/NoCommand.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectedStateSetup.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SharingAccessLRTE.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SharingAccessLRA.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Quota.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Store.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Metadata.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListPlus.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Replace.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/RenameInbox.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/UidSearchAtomsIndexer.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SearchSaveDate.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ValidAuthenticated.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchNILSaveDate.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/InboxDeleteMessages.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Login.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentRenameSelected.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Uid.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/TextPartialFetch.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchEnvelope.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentDeleteSelected.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AppendExpunge.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/MimePartialFetch.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListSubscribed.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListSpecialChar.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SearchCombinations.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchPeek.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SharingAccessLR.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ComplexMail.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Rights.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/DeleteInbox.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/PeekMultipartMixedComplex.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListNamespace.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchMultipartAlternative.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectAppend.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Concurrent.todo.txt
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Create.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchBodyNoSection.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/RenameSharedMailbox.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/InboxAddMessages.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AuthenticatePlain.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchRFC822Header.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/XList.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/PeekMultipartAlternative.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListWithSharedMailbox.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Expunge.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListPercentWildcard.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchRFC822.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SharingAccessLRT.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Append.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/LoginThreeStrikes.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AppendToSelected.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Capability.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentExistsResponse.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectEmpty.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/CreateErrorWithLongName.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Delete.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectedStateCleanup.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SharingAccessLRW.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ValidSelected.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ExpungeBasics.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchRFC822Mixed.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Subscribe.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ACLCommandsOnOtherUser.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Namespace.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SharingAccessL.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentCrossExpunge.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/PeekMultipartMixed.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Id.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchMultipartBodyStructure.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Move.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/BadTag.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchSaveDate.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchSingleMessage.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Logout.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchStructureComplex.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/UidSearchCombinations.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SharingAccessLRK.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Authenticate.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Rename.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchStructureEmbedded.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectInbox.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/JustTag.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/NoTag.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightK.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightX.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightA.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyWithoutS.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightL.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyWithoutT.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyIS.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightE.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightW.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightL.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyIT.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightT.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyI.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightIS.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightA.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightK.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightIT.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightIW.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightR.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightS.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightRT.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightRW.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightI.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyWithoutW.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightX.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightI.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightRS.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightRE.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyWithoutI.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyIW.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightR.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListMailboxes.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListOnly.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/CondstoreDisable.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentAppendUIDToMSNMapping.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/BogusCommand.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentExpungeResponse.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/UidSearchAtoms.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Check.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchPartial.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Recent.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/MetadataWithBinaryData.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchRFC822Text.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SearchOptionSave.test
!????? mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListWithPercentWildcardInMailboxName.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchHeaderFieldsNot.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Copy.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SearchOptionAggregations.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ValidNonAuthenticated.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchMultipartMixedComplex.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ACLCommandsOnOwner.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentRenameSelectedSub.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ExamineEmpty.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AppendExamineInbox.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentExpungeUIDToMSNMapping.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/RenameSelected.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/MoveNoMSG.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchAllEmptyMailbox.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/StringArgs.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/RenameHierarchy.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchInternalDate.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SharingAccessLRS.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchHeaderFields.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/IllegalTag.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchMultipleMessages.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchText.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Search.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AppendSelectInbox.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SharingAccessLRI.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Status.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SharedMailbox.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Welcome.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SharingAccessLRX.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SearchAtoms.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchMultipartMixed.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/BodyPartialFetch.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchSimpleBodyStructure.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ObjectId.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/CondstoreEnable.test
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/mailboxmanager/testdata/DefaultMailboxManagerConf.xml
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/mailboxmanager/testdata/VirtualRepositoryMix.xml
AL mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/mailboxmanager/testdata/MixedMailstores.xml
!????? mpt/impl/imap-mailbox/core/src/main/resources/logback.xml
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/GrantRightsOnHost.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/UserFlagsSupport.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Condstore.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Events.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ACLCommands.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/MailboxWithLongNameError.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ListingWithRelaxedMailboxName.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Search.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/PartialFetch.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ConcurrentSessions.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/SelectedState.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/FetchHeaders.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/AuthenticatedState.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Security.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/AuthenticatePlain.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/SelectedInbox.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ObjectId.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ACLIntegration.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ListingWithSharingTest.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ACLScriptedTestProtocol.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/FetchBodySection.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Expunge.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Rename.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Listing.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/UidSearch.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/UidSearchOnIndex.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/base/BasicImapCommands.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/MailboxAnnotation.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Copy.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Fetch.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/NonAuthenticatedState.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/FetchBodyStructure.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/IMAPSharingAccessTest.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Select.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Move.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Recent.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/QuotaTest.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/ImapTestConstants.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/MailboxMessageAppender.java
AL mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
AL mpt/impl/imap-mailbox/core/src/reporting-site/site.xml
AL mpt/impl/imap-mailbox/core/pom.xml
N mpt/impl/imap-mailbox/inmemory/LICENSE.txt
N mpt/impl/imap-mailbox/inmemory/NOTICE.txt
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryQuotaTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemorySecurityTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryRecentTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryCondstoreTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryMailboxAnnotationTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryExpungeTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryAuthenticatePlainTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryNonAuthenticatedStateTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryPartialFetchTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryCopyTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryObjectIdTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryFetchHeadersTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryListingWithSharingTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryUserFlagsSupportTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryConcurrentSessionsTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryRenameTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryListingWithRelaxedMailboxNameTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemorySelectedStateTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemorySearchTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryUidSearchTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryMailboxWithLongNameErrorTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemorySelectedInboxTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryFetchBodySectionTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryMoveTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryIMAPSharingAccessTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryAuthenticatedStateTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryFetchBodyStructureTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryEventsTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryUidSearchOnIndexTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemorySelectTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryListingTest.java
AL mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryFetchTest.java
AL mpt/impl/imap-mailbox/inmemory/src/reporting-site/site.xml
AL mpt/impl/imap-mailbox/inmemory/pom.xml
N mpt/impl/imap-mailbox/jpa/LICENSE.txt
N mpt/impl/imap-mailbox/jpa/NOTICE.txt
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaUidSearchTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaEventsTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaSecurityTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaFetchBodySectionTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaFetchBodyStructureTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaMailboxWithLongNameErrorTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaPartialFetchTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaCondstoreTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaAuthenticatePlainTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaSelectTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaMoveTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaNonAuthenticatedStateTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaUserFlagsSupportTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaQuotaTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaCopyTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaExpungeTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaSelectedInboxTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaAuthenticatedStateTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaRenameTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaListingTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaConcurrentSessionsTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaFetchHeadersTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaUidSearchOnIndexTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystemExtension.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaFetchTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaSearchTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaMailboxAnnotationTest.java
AL mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaSelectedStateTest.java
AL mpt/impl/imap-mailbox/jpa/src/reporting-site/site.xml
AL mpt/impl/imap-mailbox/jpa/pom.xml
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresSelectTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresMailboxAnnotationTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresSelectedStateTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresConcurrentSessionsTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresSecurityTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresExpungeTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresFetchTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresFetchHeadersTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresCondstoreTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresMoveTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresRenameTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresMailboxWithLongNameErrorTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresSearchTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresListingTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresEventsTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresCopyTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresNonAuthenticatedStateTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresUserFlagsSupportTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresQuotaTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresUidSearchOnIndexTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresAuthenticatedStateTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresPartialFetchTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/host/PostgresHostSystem.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/host/PostgresHostSystemExtension.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresFetchBodySectionTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresFetchBodyStructureTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresUidSearchTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresAuthenticatePlainTest.java
AL mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/PostgresSelectedInboxTest.java
AL mpt/impl/imap-mailbox/postgres/pom.xml
!????? mpt/impl/imap-mailbox/cassandra/src/test/resources/cassandra-driver.conf
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraCondstoreTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraSecurityTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraMailboxAnnotationTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraRenameTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraUidSearchTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraUidSearchOnIndexTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraFetchBodyStructureTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraMoveTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraQuotaTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraListingWithSharingTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraObjectIdTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraConcurrentSessionsTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraMailboxWithLongNameErrorTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraExpungeTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraNonAuthenticatedStateTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraAuthenticatePlainTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraPartialFetchTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraUserFlagsSupportTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraFetchHeadersTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystemExtension.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraEventsTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraAuthenticatedStateTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraSearchTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraFetchBodySectionTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraSelectedStateTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraFetchTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraCopyTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraListingTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraSelectedInboxTest.java
AL mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraSelectTest.java
AL mpt/impl/imap-mailbox/cassandra/src/reporting-site/site.xml
AL mpt/impl/imap-mailbox/cassandra/pom.xml
B mpt/app/src/site/resources/images/asf-logo-reduced.gif
B mpt/app/src/site/resources/images/james-mpt-logo.gif
AL mpt/app/src/site/xdoc/index.xml
AL mpt/app/src/site/site.xml
AL mpt/app/src/main/java/org/apache/james/mpt/app/RunScript.java
AL mpt/app/src/main/java/org/apache/james/mpt/app/Main.java
AL mpt/app/src/reporting-site/site.xml
AL mpt/app/pom.xml
AL mpt/src/reporting-site/site.xml
AL mpt/pom.xml
B mpt/core/src/site/resources/images/asf-logo-reduced.gif
B mpt/core/src/site/resources/images/james-mpt-logo.gif
AL mpt/core/src/site/xdoc/index.xml
AL mpt/core/src/site/site.xml
AL mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSession.java
AL mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSessionFactory.java
AL mpt/core/src/main/java/org/apache/james/mpt/script/SimpleScriptedTestProtocol.java
AL mpt/core/src/main/java/org/apache/james/mpt/script/ImapScriptedTestProtocol.java
AL mpt/core/src/main/java/org/apache/james/mpt/script/GenericSimpleScriptedTestProtocol.java
AL mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java
AL mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java
AL mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
AL mpt/core/src/main/java/org/apache/james/mpt/api/SessionFactory.java
AL mpt/core/src/main/java/org/apache/james/mpt/api/Continuation.java
AL mpt/core/src/main/java/org/apache/james/mpt/api/Monitor.java
AL mpt/core/src/main/java/org/apache/james/mpt/api/DomainAdder.java
AL mpt/core/src/main/java/org/apache/james/mpt/api/ImapFeatures.java
AL mpt/core/src/main/java/org/apache/james/mpt/api/ImapHostSystem.java
AL mpt/core/src/main/java/org/apache/james/mpt/api/UserAdder.java
AL mpt/core/src/main/java/org/apache/james/mpt/api/ProtocolInteractor.java
AL mpt/core/src/main/java/org/apache/james/mpt/api/HostSystem.java
AL mpt/core/src/main/java/org/apache/james/mpt/api/Session.java
AL mpt/core/src/main/java/org/apache/james/mpt/exception/InvalidServerResponseException.java
AL mpt/core/src/main/java/org/apache/james/mpt/monitor/NullMonitor.java
AL mpt/core/src/main/java/org/apache/james/mpt/monitor/SystemLoggingMonitor.java
AL mpt/core/src/main/java/org/apache/james/mpt/user/ScriptedUserAdder.java
AL mpt/core/src/main/java/org/apache/james/mpt/helper/ByteBufferOutputStream.java
AL mpt/core/src/main/java/org/apache/james/mpt/helper/ScriptBuilder.java
AL mpt/core/src/main/java/org/apache/james/mpt/helper/CreateScript.java
AL mpt/core/src/main/java/org/apache/james/mpt/helper/ByteBufferInputStream.java
AL mpt/core/src/main/java/org/apache/james/mpt/host/ExternalHostSystem.java
AL mpt/core/src/main/java/org/apache/james/mpt/Runner.java
AL mpt/core/src/test/java/org/apache/james/mpt/DiscardProtocolTest.java
AL mpt/core/src/test/java/org/apache/james/mpt/TestExternalHostSystem.java
AL mpt/core/src/test/java/org/apache/james/mpt/api/ImapFeaturesTest.java
AL mpt/core/src/test/java/org/apache/james/mpt/TestFileProtocolSessionBuilder.java
AL mpt/core/src/test/java/org/apache/james/mpt/TestScriptedUserAdder.java
AL mpt/core/src/test/java/org/apache/james/mpt/DiscardProtocol.java
AL mpt/core/src/reporting-site/site.xml
AL mpt/core/pom.xml
!????? upgrade-instructions.md
!????? code-coverage-report/pom.xml
!????? CHANGELOG.md
!????? third-party/rspamd/docker-compose-rspamd-with-redis-sentinel.yml
!????? third-party/rspamd/docker-compose.yml
!????? third-party/rspamd/docker-compose-rspamd-with-kvrocks-standalone.yml
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/module/RspamdModule.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/module/RspamdTaskExtensionModule.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/RspamdListener.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedHamToRspamdTask.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/task/GetMailboxMessagesService.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskDTO.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskDTO.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskAdditionalInformationDTO.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedSpamToRspamdTask.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/task/RunningOptions.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskAdditionalInformationDTO.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/model/AnalysisResult.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/model/AnalysisResultDeserializer.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/route/FeedMessageRoute.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/exception/UnauthorizedException.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/exception/RspamdUnexpectedException.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/client/RspamdHttpClient.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/client/RspamdClientConfiguration.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/RspamdScanner.java
AL third-party/rspamd/src/main/java/org/apache/james/rspamd/healthcheck/RspamdHealthCheck.java
B third-party/rspamd/src/test/resources/json/feedSpamEmptyRspamdTimeout.additionalInformation.json
B third-party/rspamd/src/test/resources/json/feedHamClassifiedAsHam.additionalInformation.json
B third-party/rspamd/src/test/resources/json/feedHamNonEmptyRspamdTimeout.additionalInformation.json
B third-party/rspamd/src/test/resources/json/feedSpamNonEmptyRspamdTimeout.additionalInformation.json
B third-party/rspamd/src/test/resources/json/feedHamNonEmptyPeriod.additionalInformation.json
B third-party/rspamd/src/test/resources/json/feedSpamEmptyPeriod.additionalInformation.json
B third-party/rspamd/src/test/resources/json/feedSpamNonEmptyPeriod.additionalInformation.json
B third-party/rspamd/src/test/resources/json/feedSpamClassifiedAsHam.additionalInformation.json
B third-party/rspamd/src/test/resources/json/feedHamEmptyRspamdTimeout.additionalInformation.json
B third-party/rspamd/src/test/resources/json/feedHamEmptyPeriod.additionalInformation.json
!????? third-party/rspamd/src/test/resources/rspamd-config/actions.conf
!????? third-party/rspamd/src/test/resources/rspamd-config/worker-controller.inc
!????? third-party/rspamd/src/test/resources/rspamd-config/antivirus.conf
!????? third-party/rspamd/src/test/resources/rspamd-config/redis.conf
!????? third-party/rspamd/src/test/resources/rspamd-config/statistic.conf
!????? third-party/rspamd/src/test/resources/mail/ham/ham1.eml
!????? third-party/rspamd/src/test/resources/mail/attachment/inlineVirusTextAttachment.eml
!????? third-party/rspamd/src/test/resources/mail/attachment/inlineNonVirusTextAttachment.eml
!????? third-party/rspamd/src/test/resources/mail/spam/phishing.eml
!????? third-party/rspamd/src/test/resources/mail/spam/spam8.eml
AL third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskAdditionalInformationDTOTest.java
AL third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskAdditionalInformationDTOTest.java
AL third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java
AL third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskTest.java
AL third-party/rspamd/src/test/java/org/apache/james/rspamd/RspamdScannerTest.java
AL third-party/rspamd/src/test/java/org/apache/james/rspamd/DockerRspamdExtensionTest.java
AL third-party/rspamd/src/test/java/org/apache/james/rspamd/model/AnalysisResultDeserializationTest.java
AL third-party/rspamd/src/test/java/org/apache/james/rspamd/route/FeedMessageRouteTest.java
AL third-party/rspamd/src/test/java/org/apache/james/rspamd/client/RspamdHttpClientTest.java
AL third-party/rspamd/src/test/java/org/apache/james/rspamd/RspamdExtension.java
AL third-party/rspamd/src/test/java/org/apache/james/rspamd/healthcheck/RspamdHealthcheckTest.java
AL third-party/rspamd/src/test/java/org/apache/james/rspamd/RspamdListenerTest.java
AL third-party/rspamd/pom.xml
!????? third-party/rspamd/README.md
AL third-party/rspamd/sample-configuration/webadmin.properties
AL third-party/rspamd/sample-configuration/listeners.xml
!????? third-party/rspamd/sample-configuration/extensions.properties
!????? third-party/rspamd/sample-configuration/kvrocks/standalone/kvrocks.conf
!????? third-party/rspamd/sample-configuration/kvrocks/sentinel/master-node/kvrocks.conf
!????? third-party/rspamd/sample-configuration/kvrocks/sentinel/sentinel-node/docker-entrypoint-sentinel.sh
!????? third-party/rspamd/sample-configuration/kvrocks/sentinel/sentinel-node/sentinel.conf.template
!????? third-party/rspamd/sample-configuration/kvrocks/sentinel/replica-node/kvrocks.conf
!????? third-party/rspamd/sample-configuration/rspamd-redis-sentinel.conf
!????? third-party/rspamd/sample-configuration/redis/replica/redis.conf.template
!????? third-party/rspamd/sample-configuration/redis/replica/docker-entrypoint-replica.sh
!????? third-party/rspamd/sample-configuration/redis/sentinel/docker-entrypoint-sentinel.sh
!????? third-party/rspamd/sample-configuration/redis/sentinel/sentinel.conf.template
!????? third-party/rspamd/sample-configuration/redis/master/redis.conf.template
!????? third-party/rspamd/sample-configuration/redis/master/docker-entrypoint-master.sh
!????? third-party/rspamd/sample-configuration/worker-controller.inc
!????? third-party/rspamd/sample-configuration/antivirus.conf
!????? third-party/rspamd/sample-configuration/classifier-bayes.conf
AL third-party/rspamd/sample-configuration/mailetcontainer_distributed.xml
AL third-party/rspamd/sample-configuration/mailetcontainer_memory.xml
!????? third-party/rspamd/sample-configuration/redis.conf
!????? third-party/rspamd/sample-configuration/redis-shake/shake.toml
!????? third-party/rspamd/sample-configuration/statistic.conf
AL third-party/rspamd/sample-configuration/healthcheck.properties
!????? third-party/rspamd/sample-configuration/rspamd-kvrocks-sentinel.conf
!????? third-party/rspamd/sample-configuration/rspamd.properties
!????? third-party/rspamd/docker-compose-distributed.yml
!????? third-party/rspamd/docker-compose-rspamd-with-kvrocks-sentinel.yml
!????? third-party/elasticsearch/docker-compose.yml
AL third-party/elasticsearch/src/main/java/org/apache/james/metrics/es/v7/ESReporterConfiguration.java
AL third-party/elasticsearch/src/main/java/org/apache/james/metrics/es/v7/ESMetricReporterModule.java
AL third-party/elasticsearch/src/main/java/org/apache/james/metrics/es/v7/ESMetricReporter.java
AL third-party/elasticsearch/src/test/java/org/apache/james/metric/es/v7/ESReporterContract.java
AL third-party/elasticsearch/src/test/java/org/apache/james/metric/es/v7/ES2ReporterTest.java
AL third-party/elasticsearch/src/test/java/org/apache/james/metric/es/v7/ES7ReporterTest.java
AL third-party/elasticsearch/src/test/java/org/apache/james/metric/es/v7/ESReportedConfigurationTest.java
AL third-party/elasticsearch/src/test/java/org/apache/james/metric/es/v7/ES6ReporterTest.java
AL third-party/elasticsearch/src/test/java/org/apache/james/metric/es/v7/DockerElasticSearchExtension.java
AL third-party/elasticsearch/pom.xml
!????? third-party/elasticsearch/conf/extensions.properties
!????? third-party/elasticsearch/conf/elasticsearch.properties
!????? third-party/elasticsearch/README.md
!????? third-party/clamav/docker-compose.yml
AL third-party/clamav/src/main/java/org/apache/james/clamav/ClamAVScan.java
!????? third-party/clamav/src/test/resources/attachment/inlineVirusTextAttachment.eml
!????? third-party/clamav/src/test/resources/attachment/inlineNonVirusTextAttachment.eml
AL third-party/clamav/src/test/java/org/apache/james/clamav/DockerClamAV.java
AL third-party/clamav/src/test/java/org/apache/james/clamav/ClamAVScanTest.java
AL third-party/clamav/pom.xml
!????? third-party/clamav/README.md
AL third-party/clamav/sample-configuration/mailetcontainer.xml
!????? third-party/crowdsec/Dockerfile
!????? third-party/crowdsec/docker-compose.yml
AL third-party/crowdsec/src/main/java/org/apache/james/crowdsec/module/CrowdsecModule.java
AL third-party/crowdsec/src/main/java/org/apache/james/crowdsec/CrowdsecSMTPConnectHandler.java
AL third-party/crowdsec/src/main/java/org/apache/james/crowdsec/CrowdsecService.java
AL third-party/crowdsec/src/main/java/org/apache/james/crowdsec/model/CrowdsecDecision.java
AL third-party/crowdsec/src/main/java/org/apache/james/crowdsec/model/CrowdsecDecisionDeserializer.java
AL third-party/crowdsec/src/main/java/org/apache/james/crowdsec/CrowdsecEhloHook.java
AL third-party/crowdsec/src/main/java/org/apache/james/crowdsec/CrowdsecPOP3CheckHandler.java
AL third-party/crowdsec/src/main/java/org/apache/james/crowdsec/exception/CrowdsecException.java
AL third-party/crowdsec/src/main/java/org/apache/james/crowdsec/client/CrowdsecClientConfiguration.java
AL third-party/crowdsec/src/main/java/org/apache/james/crowdsec/client/CrowdsecHttpClient.java
AL third-party/crowdsec/src/main/java/org/apache/james/crowdsec/CrowdsecImapConnectionCheck.java
AL third-party/crowdsec/src/main/java/org/apache/james/crowdsec/CrowdsecUtils.java
AL third-party/crowdsec/src/test/resources/logback-test.xml
AL third-party/crowdsec/src/test/resources/listeners.xml
AL third-party/crowdsec/src/test/resources/mailetcontainer.xml
!????? third-party/crowdsec/src/test/resources/crowdsec/collections/james.yaml
!????? third-party/crowdsec/src/test/resources/crowdsec/parsers/james-dictionary-attack.yaml
!????? third-party/crowdsec/src/test/resources/crowdsec/parsers/syslog-logs.yaml
!????? third-party/crowdsec/src/test/resources/crowdsec/parsers/james-auth.yaml
!????? third-party/crowdsec/src/test/resources/crowdsec/acquis.yaml
!????? third-party/crowdsec/src/test/resources/crowdsec/scenarios/james-bf-auth.yaml
!????? third-party/crowdsec/src/test/resources/crowdsec/scenarios/james-dictionary-attack.yaml
!????? third-party/crowdsec/src/test/resources/haproxy.cfg
AL third-party/crowdsec/src/test/resources/imapserver.xml
AL third-party/crowdsec/src/test/resources/usersrepository.xml
!????? third-party/crowdsec/src/test/resources/log/james.log
AL third-party/crowdsec/src/test/resources/smtpserver.xml
AL third-party/crowdsec/src/test/resources/pop3server.xml
AL third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecEhloHookTest.java
AL third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecDecisionDeserializerTest.java
AL third-party/crowdsec/src/test/java/org/apache/james/crowdsec/DockerCrowdsecExtensionTest.java
AL third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecImapConnectionCheckTest.java
AL third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecHttpClientTest.java
AL third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecServiceTest.java
AL third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecExtension.java
AL third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecIntegrationTest.java
AL third-party/crowdsec/src/test/java/org/apache/james/crowdsec/HAProxyExtension.java
AL third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecSMTPConnectHandlerTest.java
AL third-party/crowdsec/pom.xml
!????? third-party/crowdsec/README.md
!????? third-party/crowdsec/sample-configuration/collections/james.yaml
!????? third-party/crowdsec/sample-configuration/parsers/james-dictionary-attack.yaml
!????? third-party/crowdsec/sample-configuration/parsers/syslog-logs.yaml
!????? third-party/crowdsec/sample-configuration/parsers/james-auth.yaml
!????? third-party/crowdsec/sample-configuration/extensions.properties
!????? third-party/crowdsec/sample-configuration/acquis.yaml
!????? third-party/crowdsec/sample-configuration/scenarios/james-bf-auth.yaml
!????? third-party/crowdsec/sample-configuration/scenarios/james-dictionary-attack.yaml
!????? third-party/crowdsec/sample-configuration/crowdsec.properties
AL third-party/crowdsec/sample-configuration/imapserver.xml
AL third-party/crowdsec/sample-configuration/logback.xml
AL third-party/crowdsec/sample-configuration/smtpserver.xml
AL third-party/crowdsec/sample-configuration/pop3server.xml
!????? third-party/spamassassin/docker-compose.yml
AL third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinHandler.java
AL third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinInvoker.java
AL third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinListener.java
AL third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinLearner.java
AL third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinModule.java
AL third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinResult.java
AL third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinConfiguration.java
AL third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassin.java
AL third-party/spamassassin/src/test/resources/listeners.xml
AL third-party/spamassassin/src/test/resources/mailetcontainer.xml
!????? third-party/spamassassin/src/test/resources/eml/spam.eml
!????? third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham1
!????? third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham3
!????? third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham2
!????? third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam2
!????? third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam3
!????? third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam1
AL third-party/spamassassin/src/test/resources/smtpserver.xml
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/module/SpamAssassinTestModule.java
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/module/SpamAssassinModuleExtension.java
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinExtension.java
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinTest.java
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/mock/MockSpamdExtension.java
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/mock/MockSpamd.java
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinHandlerTest.java
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinIntegrationTest.java
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/MemorySpamAssassinTest.java
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinInvokerTest.java
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinContract.java
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinResultTest.java
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinListenerTest.java
AL third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinConfigurationTest.java
AL third-party/spamassassin/pom.xml
AL third-party/spamassassin/sample-configuration/listeners.xml
!????? third-party/spamassassin/sample-configuration/extensions.properties
AL third-party/spamassassin/sample-configuration/mailetcontainer.xml
!????? third-party/spamassassin/sample-configuration/spamassassin.properties
AL third-party/spamassassin/sample-configuration/smtpserver.xml
AL third-party/pom.xml
AL javax-mail-extension/src/main/java/org/apache/james/javax/AddressHelper.java
AL javax-mail-extension/src/main/java/org/apache/james/javax/MimeMultipartReport.java
AL javax-mail-extension/src/main/java/org/apache/james/javax/MultipartUtil.java
AL javax-mail-extension/pom.xml
AL checkstyle.xml
AL event-sourcing/event-sourcing-core/src/main/scala/org/apache/james/eventsourcing/EventBus.scala
AL event-sourcing/event-sourcing-core/src/main/scala/org/apache/james/eventsourcing/EventSourcingSystem.scala
AL event-sourcing/event-sourcing-core/src/main/scala/org/apache/james/eventsourcing/Subscriber.scala
AL event-sourcing/event-sourcing-core/src/main/scala/org/apache/james/eventsourcing/CommandDispatcher.scala
AL event-sourcing/event-sourcing-core/src/main/java/org/apache/james/eventsourcing/CommandHandler.java
AL event-sourcing/event-sourcing-core/src/test/scala/org/apache/james/eventsourcing/EventSourcingSystemTest.scala
AL event-sourcing/event-sourcing-core/src/test/scala/org/apache/james/eventsourcing/DataCollectorSubscriber.scala
AL event-sourcing/event-sourcing-core/pom.xml
AL event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreDataDefinition.scala
AL event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStore.scala
AL event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/EventStoreDao.scala
AL event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreTable.scala
AL event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/JsonEventSerializerTest.scala
AL event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreExtensionForTestEvents.scala
AL event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreTest.scala
AL event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventSourcingSystemTest.scala
AL event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreExtension.scala
AL event-sourcing/event-store-cassandra/pom.xml
AL event-sourcing/event-store-jpa/src/main/java/org/apache/james/eventsourcing/eventstore/jpa/JPAEventStore.java
AL event-sourcing/event-store-jpa/src/main/java/org/apache/james/eventsourcing/eventstore/jpa/model/JPAEvent.java
AL event-sourcing/event-store-jpa/src/test/resources/persistence.xml
AL event-sourcing/event-store-jpa/src/test/java/org/apache/james/eventsourcing/eventstore/jpa/model/JPAEventTest.java
AL event-sourcing/event-store-jpa/src/test/java/org/apache/james/eventsourcing/eventstore/jpa/JPAEventStoreTest.java
AL event-sourcing/event-store-jpa/src/test/java/org/apache/james/eventsourcing/eventstore/jpa/JPAEventSourcingSystemTest.java
AL event-sourcing/event-store-jpa/src/test/java/org/apache/james/eventsourcing/eventstore/jpa/JPAEventStoreExtension.java
AL event-sourcing/event-store-jpa/pom.xml
AL event-sourcing/event-sourcing-pojo/src/main/scala/org/apache/james/eventsourcing/EventId.scala
AL event-sourcing/event-sourcing-pojo/src/main/scala/org/apache/james/eventsourcing/Event.scala
AL event-sourcing/event-sourcing-pojo/src/main/scala/org/apache/james/eventsourcing/AggregateId.scala
AL event-sourcing/event-sourcing-pojo/src/main/scala/org/apache/james/eventsourcing/Command.scala
AL event-sourcing/event-sourcing-pojo/src/test/scala/org/apache/james/eventsourcing/TestAggregateId.scala
AL event-sourcing/event-sourcing-pojo/src/test/scala/org/apache/james/eventsourcing/TestEvent.scala
AL event-sourcing/event-sourcing-pojo/src/test/scala/org/apache/james/eventsourcing/EventIdTest.scala
AL event-sourcing/event-sourcing-pojo/pom.xml
AL event-sourcing/event-store-postgres/src/main/java/org/apache/james/eventsourcing/eventstore/postgres/PostgresEventStoreDAO.java
AL event-sourcing/event-store-postgres/src/main/java/org/apache/james/eventsourcing/eventstore/postgres/PostgresEventStore.java
AL event-sourcing/event-store-postgres/src/main/java/org/apache/james/eventsourcing/eventstore/postgres/PostgresEventStoreDataDefinition.java
AL event-sourcing/event-store-postgres/src/test/java/org/apache/james/eventsourcing/eventstore/postgres/PostgresEventStoreExtensionForTestEvents.java
AL event-sourcing/event-store-postgres/src/test/java/org/apache/james/eventsourcing/eventstore/postgres/PostgresEventStoreExtension.java
AL event-sourcing/event-store-postgres/src/test/java/org/apache/james/eventsourcing/eventstore/postgres/PostgresEventStoreTest.java
AL event-sourcing/event-store-postgres/src/test/java/org/apache/james/eventsourcing/eventstore/postgres/PostgresEventSourcingSystemTest.java
AL event-sourcing/event-store-postgres/pom.xml
AL event-sourcing/pom.xml
AL event-sourcing/event-store-memory/src/main/scala/org/apache/james/eventsourcing/eventstore/memory/InMemoryEventStore.scala
AL event-sourcing/event-store-memory/src/test/scala/org/apache/james/eventsourcing/eventstore/memory/InMemoryEventStoreExtension.scala
AL event-sourcing/event-store-memory/src/test/scala/org/apache/james/eventsourcing/eventstore/memory/InMemoryEventSourcingSystemTest.scala
AL event-sourcing/event-store-memory/src/test/scala/org/apache/james/eventsourcing/eventstore/memory/InMemoryEventStoreTest.scala
AL event-sourcing/event-store-memory/pom.xml
AL event-sourcing/event-store-api/src/main/scala/org/apache/james/eventsourcing/eventstore/EventStoreFailedException.scala
AL event-sourcing/event-store-api/src/main/scala/org/apache/james/eventsourcing/eventstore/JsonEventSerializer.scala
AL event-sourcing/event-store-api/src/main/scala/org/apache/james/eventsourcing/eventstore/History.scala
AL event-sourcing/event-store-api/src/main/scala/org/apache/james/eventsourcing/eventstore/EventStore.scala
AL event-sourcing/event-store-api/src/main/scala/org/apache/james/eventsourcing/eventstore/dto/EventDTOModule.scala
AL event-sourcing/event-store-api/src/main/scala/org/apache/james/eventsourcing/eventstore/dto/EventDTO.scala
AL event-sourcing/event-store-api/src/main/java/org/apache/james/eventsourcing/eventstore/EventNestedTypes.java
AL event-sourcing/event-store-api/src/test/scala/org/apache/james/eventsourcing/eventstore/HistoryTest.scala
AL event-sourcing/event-store-api/src/test/scala/org/apache/james/eventsourcing/eventstore/EventStoreContract.scala
AL event-sourcing/event-store-api/src/test/scala/org/apache/james/eventsourcing/eventstore/dto/TestEventDTOModules.scala
AL event-sourcing/event-store-api/src/test/scala/org/apache/james/eventsourcing/eventstore/dto/OtherTestEventDTO.scala
AL event-sourcing/event-store-api/src/test/scala/org/apache/james/eventsourcing/eventstore/dto/OtherEvent.scala
AL event-sourcing/event-store-api/src/test/scala/org/apache/james/eventsourcing/eventstore/dto/SnapshotEvent.scala
AL event-sourcing/event-store-api/src/test/scala/org/apache/james/eventsourcing/eventstore/dto/SnapshotEventDTO.scala
AL event-sourcing/event-store-api/src/test/scala/org/apache/james/eventsourcing/eventstore/dto/TestEventDTO.scala
AL event-sourcing/event-store-api/pom.xml
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ReadAliasName.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/OpenSearchIndexer.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/DocumentId.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/DeleteByQueryPerformer.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/AliasName.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ClientProvider.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/search/ScrolledSearch.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/IndexCreationFactory.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/OpenSearchHealthCheck.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/RoutingKey.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/OpenSearchConfiguration.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/WriteAliasName.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ReactorOpenSearchClient.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/IndexName.java
AL backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/UpdatedRepresentation.java
!????? backends-common/opensearch/src/test/resources/auth-es/nginx-conf/reverse_elasticsearch.conf
!????? backends-common/opensearch/src/test/resources/auth-es/nginx-conf/passwd
!????? backends-common/opensearch/src/test/resources/auth-es/NginxDockerfile
!????? backends-common/opensearch/src/test/resources/auth-es/README.md
!????? backends-common/opensearch/src/test/resources/auth-es/default.key
!????? backends-common/opensearch/src/test/resources/auth-es/default.crt
B backends-common/opensearch/src/test/resources/auth-es/server.jks
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/OpenSearchClusterExtension.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderTest.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/IndexCreationFactoryTest.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionAuthESOverrideTrustStoreTest.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/OpenSearchIndexerTest.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionContract.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerAuthOpenSearchSingleton.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionAuthESIgnoreSSLCheckTest.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerOpenSearchExtension.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/OpenSearchConfigurationTest.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/RoutingKeyTest.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/search/ScrolledSearchTest.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/OpenSearchHealthCheckConnectionTest.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerOpenSearch.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/AliasNameTest.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerOpenSearchSingleton.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/OpenSearchHealthCheckTest.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionNoAuthESTest.java
AL backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DocumentIdTest.java
AL backends-common/opensearch/pom.xml
AL backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/SimpleConnectionPool.java
AL backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQConfiguration.java
AL backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReceiverProvider.java
AL backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQServerVersion.java
AL backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/QueueArguments.java
AL backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
AL backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQConnectionFactory.java
AL backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/Constants.java
AL backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheck.java
AL backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQManagementAPI.java
B backends-common/rabbitmq/src/test/resources/test-keystore-password-password
B backends-common/rabbitmq/src/test/resources/test-truststore-password-password
!????? backends-common/rabbitmq/src/test/resources/empty-store
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQClusterTest.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQServerVersionTest.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQTest.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQWaitStrategy.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQConfigurationTest.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/DockerRabbitMQSingleton.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQExtension.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQConnectionFactoryTest.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/DockerRabbitMQ.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/ChannelPoolContract.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/InMemoryConsumer.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQFixture.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/DockerClusterRabbitMQExtension.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/ConstantsTest.java
AL backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPoolTest.java
AL backends-common/rabbitmq/pom.xml
AL backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisHealthCheck.scala
AL backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisClientFactory.scala
AL backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisConfiguration.scala
!????? backends-common/redis/src/test/resources/kvrocks/replica/kvrocks.conf
!????? backends-common/redis/src/test/resources/kvrocks/sentinel/sentinel.conf
!????? backends-common/redis/src/test/resources/kvrocks/master/kvrocks.conf
!????? backends-common/redis/src/test/resources/sentinel_tls.conf
!????? backends-common/redis/src/test/resources/sentinel.conf
B backends-common/redis/src/test/resources/keystore.p12
!????? backends-common/redis/src/test/resources/redis_cluster.conf
!????? backends-common/redis/src/test/resources/private.key
!????? backends-common/redis/src/test/resources/rootCA.crt
!????? backends-common/redis/src/test/resources/certificate.crt
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisSentinelExtension.java
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisTLSExtension.java
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/KvrocksSentinelExtension.java
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/KvrocksExtensionTest.java
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisHealthCheckTest.java
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisMasterReplicaExtension.java
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisSentinelHealthCheckTest.scala
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisConfigurationTest.scala
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisClusterHealthCheckTest.scala
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisExtensionTest.java
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisTLSStandaloneHealthCheckTest.scala
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/DockerKvrocks.java
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisStandaloneHealthCheckTest.scala
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisClusterExtension.java
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/DockerRedis.java
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/KvrocksExtension.java
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisExtension.java
AL backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisMasterReplicaHealthCheckTest.scala
!????? backends-common/redis/pom.xml
!????? backends-common/README.adoc
AL backends-common/pom.xml
AL backends-common/pulsar/src/main/scala/org/apache/james/backends/pulsar/PulsarConfiguration.scala
AL backends-common/pulsar/src/main/scala/org/apache/james/backends/pulsar/PulsarClients.scala
AL backends-common/pulsar/src/main/scala/org/apache/james/backends/pulsar/PulsarReader.scala
AL backends-common/pulsar/src/test/java/org/apache/james/backends/pulsar/PulsarConfigurationTest.java
AL backends-common/pulsar/src/test/java/org/apache/james/backends/pulsar/TestPulsarModule.java
AL backends-common/pulsar/src/test/java/org/apache/james/backends/pulsar/DockerPulsarExtension.java
AL backends-common/pulsar/src/test/java/org/apache/james/backends/pulsar/PulsarReaderTest.scala
AL backends-common/pulsar/pom.xml
AL backends-common/jpa/src/main/java/org/apache/james/backends/jpa/EntityManagerUtils.java
AL backends-common/jpa/src/main/java/org/apache/james/backends/jpa/TransactionRunner.java
AL backends-common/jpa/src/main/java/org/apache/james/backends/jpa/JPAConfiguration.java
AL backends-common/jpa/src/test/java/org/apache/james/backends/jpa/JpaTestCluster.java
AL backends-common/jpa/src/test/java/org/apache/james/backends/jpa/JPAConfigurationTest.java
AL backends-common/jpa/pom.xml
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresIndex.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresConfiguration.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresTable.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/quota/PostgresQuotaCurrentValueDAO.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/quota/PostgresQuotaDataDefinition.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/quota/PostgresQuotaLimitDAO.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/RowLevelSecurity.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/PostgresExecutor.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/PostgresConnectionClosure.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/PostgresUtils.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/JamesPostgresConnectionFactory.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/PostgresHealthCheck.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/PoolBackedPostgresConnectionFactory.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresTableManager.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresCommons.java
AL backends-common/postgres/src/main/java/org/apache/james/backends/postgres/PostgresDataDefinition.java
AL backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PoolBackedPostgresConnectionFactoryTest.java
AL backends-common/postgres/src/test/java/org/apache/james/backends/postgres/JamesPostgresConnectionFactoryTest.java
AL backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresFixture.java
AL backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresConfigurationTest.java
AL backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresTableManagerTest.java
AL backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresExecutorThreadSafetyTest.java
AL backends-common/postgres/src/test/java/org/apache/james/backends/postgres/quota/PostgresQuotaCurrentValueDAOTest.java
AL backends-common/postgres/src/test/java/org/apache/james/backends/postgres/quota/PostgresQuotaLimitDaoTest.java
AL backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresExtension.java
AL backends-common/postgres/src/test/java/org/apache/james/backends/postgres/PostgresExtensionTest.java
AL backends-common/postgres/src/test/java/org/apache/james/backends/postgres/utils/PostgresHealthCheckTest.java
AL backends-common/postgres/src/test/java/org/apache/james/backends/postgres/DockerPostgresSingleton.java
AL backends-common/postgres/pom.xml
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraType.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraQuotaLimitTable.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraTable.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraDataDefinition.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraQuotaCurrentValueTable.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraMutualizedQuotaDataDefinition.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraQuotaCurrentValueDao.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraQuotaLimitDao.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionDataDefinition.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/table/CassandraSchemaVersionTable.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/SchemaTransition.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionDAO.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManager.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/SchemaVersion.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/Migration.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTaskAdditionalInformationDTO.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/CassandraSchemaTransitions.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/CassandraMigrationService.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTaskDTO.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTask.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationException.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/LockLessConcurrencyLimitingRequestThrottler.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraHealthCheck.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraConstants.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraAsyncExecutor.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/ZonedDateTimeRepresentation.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/LightweightTransactionException.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/KeyspaceFactory.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraZonedDateTimeDataDefinition.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/KeyspaceConfiguration.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/ClusterConfiguration.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/CassandraConfiguration.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/InjectionNames.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/JamesExecutionProfiles.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterFactory.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTableManager.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraSessionConfiguration.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactory.java
AL backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ResilientClusterProvider.java
!????? backends-common/cassandra/src/test/resources/cassandra-driver.conf
!????? backends-common/cassandra/src/test/resources/configuration-reader-test/cassandra.properties
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/components/CassandraTableTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/components/CassandraTypeTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/TestingSession.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/SchemaTransitionTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionDAOTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/SchemaVersionTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManagerTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandra.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraClusterExtension.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/StatementRecorder.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraWaitStrategy.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraExtension.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/migration/MigrationTaskSerializationTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/migration/CassandraMigrationServiceTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/quota/CassandraQuotaCurrentValueDaoTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/quota/CassandraQuotaLimitDaoTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/TestingSessionTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraSingleton.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/Scenario.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/PaggingTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CassandraHealthCheckTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/ZonedDateTimeRepresentationTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/ResilientClusterProviderTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraConfigurationReadingTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactoryTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraTableManagerTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraTypeProviderTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraTableManagerConcurrentTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraConfigurationTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraTypesCreatorTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/ClusterFactoryTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/ScenarioTest.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
AL backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraClusterTest.java
AL backends-common/cassandra/pom.xml
!????? README.adoc
AL src/site/resources/downloads/codetemplates.xml
AL src/site/resources/css/site.css
B src/site/resources/favicon.ico
B src/site/resources/images/asf-logo-reduced.gif
B src/site/resources/images/james-logo.png
B src/site/resources/images/james-schema-subprojects.png
B src/site/resources/images/linagora.png
B src/site/resources/images/james-logo-square.png
B src/site/resources/protocols/images/void.gif
B src/site/resources/protocols/images/uml/org.apache.james.imap-withtest-package.png
B src/site/resources/protocols/images/uml/org.apache.james.imap.api.png
B src/site/resources/protocols/images/uml/org.apache.james.protocols-package.png
B src/site/resources/protocols/images/uml/org.apache.james.imap-package.png
AL src/site/resources/server/css/site.css
B src/site/resources/server/images/intellij-idea/intellij-import-layout-java.png
B src/site/resources/server/images/intellij-idea/intellij-checkstyle-scan.png
B src/site/resources/server/images/intellij-idea/intellij-james-zip.png
B src/site/resources/server/images/intellij-idea/intellij-import-layout-scala.png
B src/site/resources/server/images/intellij-idea/intellij-mvn.png
B src/site/resources/server/images/intellij-idea/intellij-checkstyle-setting.png
B src/site/resources/server/images/intellij-idea/intellij-james-project.png
B src/site/resources/server/images/intellij-idea/intellij-new-project.png
B src/site/resources/server/images/jmx-monitoring/jmx-org.apache.james.smtpserver.JamesDataCmdHandler.png
B src/site/resources/server/images/jmx-monitoring/jmx-current-connections.png
B src/site/resources/server/images/jmx-monitoring/jmx-gc.png
B src/site/resources/server/images/jmx-monitoring/jmx-memory.png
B src/site/resources/server/images/jmx-monitoring/jmx-process-root.png
B src/site/resources/server/images/eclipse/eclipse-run-james.gif
B src/site/resources/server/images/eclipse/eclipse-m2eclipse-projects.gif
B src/site/resources/server/images/eclipse/eclipse-import-maven-view-1.gif
B src/site/resources/server/images/eclipse/eclipse-m2eclipse-project-dependencies.gif
B src/site/resources/server/images/eclipse/eclipse-import-maven-view-2.gif
B src/site/resources/server/images/dns-mx/james-config-smart-host.png
B src/site/resources/server/images/dns-mx/james-config-secondary.png
B src/site/resources/server/images/dns-mx/james-config-load-balance.png
B src/site/resources/server/images/conf/config-example.png
B src/site/resources/server/images/performances/gatling_1.png
B src/site/resources/server/images/performances/metrics.png
B src/site/resources/server/images/performances/gatling_2.png
B src/site/resources/server/images/void.gif
B src/site/resources/server/images/netbeans/james-build-dir.png
B src/site/resources/server/images/netbeans/netbeans-james-project.png
B src/site/resources/server/images/netbeans/netbeans-svn-checkout2.png
B src/site/resources/server/images/netbeans/netbeans-svn-checkout1.png
B src/site/resources/server/images/netbeans/netbeans-svn-checkout-browse.png
B src/site/resources/server/images/uml/org.apache.james-package_large.png
B src/site/resources/server/images/uml/org.apache.james-package-large.png
B src/site/resources/server/images/uml/org.apache.james-package-details.png
B src/site/resources/server/images/uml/org.apache.james.server-package.png
B src/site/resources/server/images/uml/org.apache.james.container-package.png
B src/site/resources/server/images/uml/org.apache.james-package-detail_small.png
B src/site/resources/server/images/uml/org.apache.james-package-detail_large.png
B src/site/resources/server/images/uml/org.apache.james-package-small.png
B src/site/resources/server/images/uml/org.apache.james-package.png
B src/site/resources/server/images/uml/org.apache.james-package_small.png
B src/site/resources/server/images/uml/org.apache.james.management-package.png
B src/site/resources/server/images/jmx-management/jmx-domainlist.png
B src/site/resources/server/images/jmx-management/jmx-user-part.png
B src/site/resources/server/images/jmx-management/jmx-user.png
B src/site/resources/server/images/database/james-database-schema-derby_1000.png
B src/site/resources/server/images/database/james-database-schema-derby.png
AL src/site/resources/server/js/dev.js
AL src/site/resources/server/js/index.js
!????? src/site/resources/server/rfclist/smtp/rfc1985.txt
!????? src/site/resources/server/rfclist/smtp/rfc2554.txt
!????? src/site/resources/server/rfclist/smtp/rfc1652.txt
!????? src/site/resources/server/rfclist/smtp/rfc1830.txt
!????? src/site/resources/server/rfclist/smtp/rfc2142.txt
!????? src/site/resources/server/rfclist/smtp/rfc2034.txt
!????? src/site/resources/server/rfclist/smtp/rfc1891.txt
!????? src/site/resources/server/rfclist/smtp/rfc0974.txt
!????? src/site/resources/server/rfclist/smtp/rfc2821.txt
!????? src/site/resources/server/rfclist/smtp/rfc1870.txt
!????? src/site/resources/server/rfclist/smtp/rfc2197.txt
!????? src/site/resources/server/rfclist/smtp/rfc0821.txt
!????? src/site/resources/server/rfclist/smtp/rfc1869.txt
!????? src/site/resources/server/rfclist/smtp/rfc1893.txt
!????? src/site/resources/server/rfclist/smtp/rfc6710.txt
!????? src/site/resources/server/rfclist/lmtp/rfc2033.txt
!????? src/site/resources/server/rfclist/imap4/rfc2087.txt
!????? src/site/resources/server/rfclist/imap4/rfc2221.txt
!????? src/site/resources/server/rfclist/imap4/rfc2193.txt
!????? src/site/resources/server/rfclist/imap4/rfc2192.txt
!????? src/site/resources/server/rfclist/imap4/rfc2088.txt
!????? src/site/resources/server/rfclist/imap4/rfc2060.txt
!????? src/site/resources/server/rfclist/imap4/rfc2086.txt
!????? src/site/resources/server/rfclist/imap4/rfc2342.txt
!????? src/site/resources/server/rfclist/imap4/rfc2595.txt
!????? src/site/resources/server/rfclist/imap4/rfc2195.txt
!????? src/site/resources/server/rfclist/imap4/rfc2180.txt
!????? src/site/resources/server/rfclist/imap4/rfc5256.txt
!????? src/site/resources/server/rfclist/imap4/rfc2177.txt
!????? src/site/resources/server/rfclist/imap4/rfc2683.txt
!????? src/site/resources/server/rfclist/imap4/rfc2359.txt
!????? src/site/resources/server/rfclist/imap4/rfc1731.txt
!????? src/site/resources/server/rfclist/pop3/rfc1725.txt
!????? src/site/resources/server/rfclist/pop3/rfc1939.txt
!????? src/site/resources/server/rfclist/pop3/rfc1734.txt
!????? src/site/resources/server/rfclist/ldap/rfc2830.txt
!????? src/site/resources/server/rfclist/ldap/rfc2255.txt
!????? src/site/resources/server/rfclist/ldap/rfc2252.txt
!????? src/site/resources/server/rfclist/ldap/rfc3377.txt
!????? src/site/resources/server/rfclist/ldap/rfc2256.txt
!????? src/site/resources/server/rfclist/ldap/rfc2253.txt
!????? src/site/resources/server/rfclist/ldap/rfc2829.txt
!????? src/site/resources/server/rfclist/ldap/rfc2254.txt
!????? src/site/resources/server/rfclist/ldap/rfc2251.txt
!????? src/site/resources/server/rfclist/basic/rfc0822.txt
!????? src/site/resources/server/rfclist/basic/rfc2046.txt
!????? src/site/resources/server/rfclist/basic/rfc2822.txt
!????? src/site/resources/server/rfclist/basic/rfc1123.txt
!????? src/site/resources/server/rfclist/basic/rfc2045.txt
AL src/site/resources/mailet/css/site.css
AL src/site/resources/js/james/index.js
AL src/site/resources/js/james/functions.js
B src/site/resources/mailbox/images/james-server-logo.gif
B src/site/resources/mailbox/images/void.gif
B src/site/resources/mailbox/images/uml/org-apache-james-mailbox-maildir-managers.png
B src/site/resources/mailbox/images/uml/org-apache-james-mailbox-api-mailboxsession.png
B src/site/resources/mailbox/images/uml/org-apache-james-mailbox-api-messagemanager.png
B src/site/resources/mailbox/images/uml/org-apache-james-mailbox-package.png
B src/site/resources/mailbox/images/uml/org-apache-james-mailbox-api-mailboxmanager.png
B src/site/resources/mailbox/images/uml/org-apache-james-mailbox-store-mailboxmanager.png
B src/site/resources/mailbox/images/uml/org-apache-james-mailbox-memory-managers.png
B src/site/resources/mailbox/images/uml/org-apache-james-mailbox-store-model.png
B src/site/resources/mailbox/images/uml/org-apache-james-mailbox-api-subscriptionmanager.png
B src/site/resources/mailbox/images/uml/org-apache-james-mailbox-store-subscriptionmanager.png
B src/site/resources/mailbox/images/uml/org-apache-james-mailbox-jpa-managers.png
B src/site/resources/mailbox/images/uml/org-apache-james-mailbox-store-messagemanager.png
B src/site/resources/mailbox/images/uml/org-apache-james-mailbox-api-msc.png
!????? src/site/markdown/server/manage-guice-distributed-james.md
!????? src/site/markdown/server/manage-cli.md
!????? src/site/markdown/server/install/guice-cassandra-rabbitmq-s3.md
!????? src/site/markdown/server/install/guice-cassandra.md
!????? src/site/markdown/server/install/guice-jpa.md
!????? src/site/markdown/server/install/guice-jpa-smtp.md
!????? src/site/markdown/server/manage-webadmin.md
!????? src/site/markdown/mailet/release-notes.md
!????? src/site/markdown/mailet/quickstart.md
AL src/site/custom/project-info-report.properties
AL src/site/xdoc/mpt/index.xml
AL src/site/xdoc/mail.xml
AL src/site/xdoc/download.xml
AL src/site/xdoc/contribute.xml
AL src/site/xdoc/thanks.xml
AL src/site/xdoc/documentation.xml
AL src/site/xdoc/support.xml
AL src/site/xdoc/protocols/index.xml
AL src/site/xdoc/protocols/pop3.xml
AL src/site/xdoc/protocols/smtp.xml
AL src/site/xdoc/protocols/changes.xml
AL src/site/xdoc/protocols/source-code.xml
AL src/site/xdoc/protocols/imap4.xml
AL src/site/xdoc/server/upgrade.xml
AL src/site/xdoc/server/feature-performance.xml
AL src/site/xdoc/server/feature-queue-priority.xml
AL src/site/xdoc/server/objectives.xml
AL src/site/xdoc/server/index.xml
AL src/site/xdoc/server/monitor-logging.xml
AL src/site/xdoc/server/dev-extend-smtp-hook.xml
AL src/site/xdoc/server/feature-protocols.xml
AL src/site/xdoc/server/dev-extend-matcher.xml
AL src/site/xdoc/server/feature-mailetcontainer.xml
AL src/site/xdoc/server/features.xml
AL src/site/xdoc/server/feature-persistence.xml
AL src/site/xdoc/server/packaging.xml
AL src/site/xdoc/server/config-blobstore.xml
AL src/site/xdoc/server/config-listeners.xml
AL src/site/xdoc/server/config-vault.xml
AL src/site/xdoc/server/dev-provided.xml
AL src/site/xdoc/server/config-ssl-tls.xml
AL src/site/xdoc/server/advantages.xml
AL src/site/xdoc/server/config-recipientrewritetable.xml
AL src/site/xdoc/server/metrics.xml
AL src/site/xdoc/server/config-spring-jpa-postgres.xml
AL src/site/xdoc/server/dev-extend-mailet.xml
AL src/site/xdoc/server/config-blob-export.xml
AL src/site/xdoc/server/quick-start.xml
AL src/site/xdoc/server/config-redis.xml
AL src/site/xdoc/server/config-smtp-lmtp.xml
AL src/site/xdoc/server/config-mailetcontainer.xml
AL src/site/xdoc/server/config-pop3.xml
AL src/site/xdoc/server/config-domainlist.xml
AL src/site/xdoc/server/feature-smtp-hooks.xml
AL src/site/xdoc/server/dev-provided-smtp-hooks.xml
AL src/site/xdoc/server/manage.xml
AL src/site/xdoc/server/config-quota.xml
AL src/site/xdoc/server/config-mailbox.xml
AL src/site/xdoc/server/dev-build.xml
AL src/site/xdoc/server/config-activemq.xml
AL src/site/xdoc/server/config-cassandra.xml
AL src/site/xdoc/server/dev-database-schema.xml
AL src/site/xdoc/server/config-system.xml
AL src/site/xdoc/server/config-jmap.xml
AL src/site/xdoc/server/archive/architecture_v1_2.xml
AL src/site/xdoc/server/archive/document_archive.xml
AL src/site/xdoc/server/archive/usingTLS_v1_2.xml
AL src/site/xdoc/server/archive/architecture_v2_0.xml
AL src/site/xdoc/server/archive/usingLDAP_v1_2.xml
AL src/site/xdoc/server/archive/configuration_v2_0.xml
AL src/site/xdoc/server/archive/install.xml
AL src/site/xdoc/server/archive/announcement_2_1.xml
AL src/site/xdoc/server/archive/usingJDBC_v2.0.xml
AL src/site/xdoc/server/config-healthcheck.xml
AL src/site/xdoc/server/feature-security.xml
AL src/site/xdoc/server/config-users.xml
AL src/site/xdoc/server/config-antispam.xml
AL src/site/xdoc/server/quick-start-cassandra.xml
AL src/site/xdoc/server/rfcs.xml
AL src/site/xdoc/server/dev-extend.xml
AL src/site/xdoc/server/manage-jmx.xml
AL src/site/xdoc/server/config-rabbitmq.xml
AL src/site/xdoc/server/config-fetchmail.xml
AL src/site/xdoc/server/upgrade-2.3.xml
AL src/site/xdoc/server/config-mailrepositorystore.xml
AL src/site/xdoc/server/install.xml
AL src/site/xdoc/server/monitor-jmx.xml
AL src/site/xdoc/server/config-dnsservice.xml
AL src/site/xdoc/server/dev-activemq.xml
AL src/site/xdoc/server/config-opensearch.xml
AL src/site/xdoc/server/dev.xml
AL src/site/xdoc/server/monitor-folders.xml
AL src/site/xdoc/server/config-guice.xml
AL src/site/xdoc/server/config-imap4.xml
AL src/site/xdoc/server/release-notes.xml
AL src/site/xdoc/server/config-sieve.xml
AL src/site/xdoc/server/monitor.xml
AL src/site/xdoc/server/config-webadmin.xml
AL src/site/xdoc/server/config.xml
AL src/site/xdoc/mailet/index.xml
AL src/site/xdoc/mailet/standard/index.xml
AL src/site/xdoc/mailet/standard/conf.xml
AL src/site/xdoc/mailet/conf.xml
AL src/site/xdoc/mailet/stylesheets/site.xsl
AL src/site/xdoc/mailet/stylesheets/project.xml
AL src/site/xdoc/mailet/ai/index.xml
AL src/site/xdoc/mailet/api/index.xml
AL src/site/xdoc/mailet/base/index.xml
AL src/site/xdoc/mailet/mailetdocs-maven-plugin/index.xml
AL src/site/xdoc/mailet/crypto/index.xml
AL src/site/xdoc/mailet/crypto/conf.xml
AL src/site/xdoc/mailbox/index.xml
AL src/site/xdoc/mailbox/mailbox-tool.xml
AL src/site/xdoc/mailbox/mailbox-jpa.xml
AL src/site/xdoc/mailbox/source-code.xml
AL src/site/xdoc/mailbox/mailbox-store.xml
AL src/site/xdoc/mailbox/mailbox-spring.xml
AL src/site/xdoc/mailbox/mailbox-cassandra.xml
AL src/site/xdoc/mailbox/mailbox-memory.xml
AL src/site/xdoc/mailbox/mailbox-api.xml
AL src/site/xdoc/guidelines.xml
AL src/site/site.xml
AL src/site/apt/mpt/release-notes.apt
AL src/site/apt/mailet/release-notes-old.apt
AL src/site/apt/mailet/usage.apt
AL src/site/apt/mailet/examples/standard.apt
AL src/homepage/Gemfile
!????? src/homepage/about.md
AL src/homepage/feed.xml
AL src/homepage/_layouts/post.html
AL src/homepage/_layouts/default.html
AL src/homepage/_layouts/howTo.html
AL src/homepage/howTo/custom-smtp-hooks.html
AL src/homepage/howTo/deleted-messages-vault.html
AL src/homepage/howTo/mail-processing.html
AL src/homepage/howTo/spf.html
AL src/homepage/howTo/index.html
AL src/homepage/howTo/custom-listeners.html
AL src/homepage/howTo/custom-james-assembly.html
AL src/homepage/howTo/dkim.html
AL src/homepage/howTo/custom-webadmin-routes.html
AL src/homepage/howTo/custom-healthchecks.html
AL src/homepage/howTo/imap-server.html
AL src/homepage/howTo/custom-smtp-commands.html
B src/homepage/images/tb3.png
B src/homepage/images/james-general-architecture.png
B src/homepage/images/openpaas.png
B src/homepage/images/tb1.png
B src/homepage/images/tb4.png
!????? src/homepage/images/james-alt.svg
B src/homepage/images/james-logo.png
B src/homepage/images/linagora.png
B src/homepage/images/hactoberfest.png
B src/homepage/images/guice-jpa-architecture-overview.png
!????? src/homepage/images/james.svg
B src/homepage/images/james-smtp-relay.png
B src/homepage/images/tb3-5.png
B src/homepage/images/tb2.png
B src/homepage/images/james-imap-server.png
AL src/homepage/elements.html
AL src/homepage/index.html
AL src/homepage/posts.html
AL src/homepage/_includes/header.html
AL src/homepage/_includes/footer.html
!????? src/homepage/_posts/2007-09-16-jspf-0.9.5.markdown
!????? src/homepage/_posts/2019-03-26-james-3.3.0.markdown
!????? src/homepage/_posts/2022-01-26-james-3.6.2.markdown
!????? src/homepage/_posts/2011-12-07-protocols-1.6.0-RC1.markdown
!????? src/homepage/_posts/2009-07-17-jMPT-0.1.markdown
!????? src/homepage/_posts/2023-06-20-fail2ban.markdown
!????? src/homepage/_posts/2007-04-05-JAMES-2.3.1-RC1.markdown
!????? src/homepage/_posts/2022-08-26-james-3.7.1.markdown
!????? src/homepage/_posts/2006-09-03-JSPF-0.9-b3.markdown
!????? src/homepage/_posts/2022-10-28-jspf-1.0.2.markdown
!????? src/homepage/_posts/2011-02-06-protocols-1.5.markdown
!????? src/homepage/_posts/2009-05-16-Mailet-crypto-0.1.markdown
!????? src/homepage/_posts/2012-01-07-mime4j-0.7.2.markdown
!????? src/homepage/_posts/2024-03-05-mime4j-0.8.11.markdown
!????? src/homepage/_posts/2007-04-15-JAMES-2.3.1.markdown
!????? src/homepage/_posts/2010-06-02-mailet-base-1.1.markdown
!????? src/homepage/_posts/2016-01-08-module-merge.markdown
!????? src/homepage/_posts/2016-02-08-moving-to-git.markdown
!????? src/homepage/_posts/2025-09-25-james-3.9.0.markdown
!????? src/homepage/_posts/2022-03-01-james-3.7.0.markdown
!????? src/homepage/_posts/2016-10-19-james-3.0.markdown
!????? src/homepage/_posts/2017-06-23-jsieve-0.7.markdown
!????? src/homepage/_posts/2024-06-07-jspf-1.0.4.markdown
!????? src/homepage/_posts/2018-05-07-mime4j-0.8.2.markdown
!????? src/homepage/_posts/2012-04-08-James-3.0-beta4.markdown
!????? src/homepage/_posts/2007-01-03-Mailet-api.markdown
!????? src/homepage/_posts/2025-03-03-jspf-1.0.5.markdown
!????? src/homepage/_posts/2007-05-15-mailet-api-lives.markdown
!????? src/homepage/_posts/2009-06-16-jsieve-03.markdown
!????? src/homepage/_posts/2016-11-19-james-3.0.markdown
!????? src/homepage/_posts/2019-08-30-latest-image-changes.markdown
!????? src/homepage/_posts/2015-10-08-james-2.3.1.markdown
!????? src/homepage/_posts/2011-01-06-imap-mailbox-0.2.markdown
!????? src/homepage/_posts/2011-11-07-jspf-1.0.0.markdown
!????? src/homepage/_posts/2021-12-02-james-3.6.1.markdown
!????? src/homepage/_posts/2021-09-21-james-joinsapachecon.markdown
!????? src/homepage/_posts/2017-10-02-BlogPostInstallingJames.markdown
!????? src/homepage/_posts/2022-10-07-jdkim-0.3.markdown
!????? src/homepage/_posts/2011-10-07-mime4j-0.7.1.markdown
!????? src/homepage/_posts/2010-05-01-mailet-1.0.markdown
!????? src/homepage/_posts/2019-03-19-mime4j-0.8.3.markdown
!????? src/homepage/_posts/2016-05-09-jmap.markdown
!????? src/homepage/_posts/2009-01-16-MAILET-2.4.markdown
!????? src/homepage/_posts/2006-10-03-JAMES-2.3.markdown
!????? src/homepage/_posts/2012-01-08-protocols-1.6.1.markdown
!????? src/homepage/_posts/2019-09-05-james-3.4.0.markdown
!????? src/homepage/_posts/2007-02-04-JSPF-0.9-beta4.markdown
!????? src/homepage/_posts/2009-10-17-jdkim.markdown
!????? src/homepage/_posts/2007-05-16-mime4j-0.3.markdown
!????? src/homepage/_posts/2020-07-16-james-3.5.0.markdown
!????? src/homepage/_posts/2011-03-06-jspf-0.9.9.markdown
!????? src/homepage/_posts/2009-03-16-Mime4j-0.6.markdown
!????? src/homepage/_posts/2010-05-02-jsieve-0.4.markdown
!????? src/homepage/_posts/2018-06-06-linagora-june-nl.markdown
!????? src/homepage/_posts/2024-01-08-mime4j-0.8.10.markdown
!????? src/homepage/_posts/2007-02-03-feathercast-fetures.markdown
!????? src/homepage/_posts/2018-11-14-james-3.2.0.markdown
!????? src/homepage/_posts/2010-12-06-protocols-1.2.markdown
!????? src/homepage/_posts/2025-01-29-james-3.7.6.markdown
!????? src/homepage/_posts/2010-11-06-james-3.0-M2.markdown
!????? src/homepage/_posts/2023-05-17-james-3.8.0.markdown
!????? src/homepage/_posts/2017-10-03-Hacktoberfest.markdown
!????? src/homepage/_posts/2016-07-09-jmap.markdown
!????? src/homepage/_posts/2008-10-16-mime4j-0.5.markdown
!????? src/homepage/_posts/2022-10-06-james-3.7.2.markdown
!????? src/homepage/_posts/2007-04-04-james-commiters-guidelines.markdown
!????? src/homepage/_posts/2022-12-30-james-3.7.3.markdown
!????? src/homepage/_posts/2009-02-16-MAILET-docs-plugin-0.1.markdown
!????? src/homepage/_posts/2015-09-08-james-2.3.1.markdown
!????? src/homepage/_posts/2020-10-29-testing-james-with-jmeter.markdown
!????? src/homepage/_posts/2009-06-17-jspf-0.9.7.markdown
!????? src/homepage/_posts/2010-09-04-imap-0.2-M1.markdown
!????? src/homepage/_posts/2023-03-20-james-3.7.4.markdown
!????? src/homepage/_posts/2009-08-17-james-2.3.2.markdown
!????? src/homepage/_posts/2018-01-26-admin-features.markdown
!????? src/homepage/_posts/2011-04-06-mime4J-0.7.markdown
!????? src/homepage/_posts/2017-07-20-james-3.0.markdown
!????? src/homepage/_posts/2017-05-16-mime4j-0.8.1.markdown
!????? src/homepage/_posts/2008-08-17-JSIEVE-0.2.markdown
!????? src/homepage/_posts/2010-11-05-james-3.0-M1.markdown
!????? src/homepage/_posts/2021-04-21-mime4j-0.8.4.markdown
!????? src/homepage/_posts/2022-12-30-mime4j-0.8.9.markdown
!????? src/homepage/_posts/2011-08-06-james-beta3.markdown
!????? src/homepage/_posts/2018-02-12-gsoc-2018.markdown
!????? src/homepage/_posts/2021-09-26-mime4j-0.8.6.markdown
!????? src/homepage/_posts/2025-07-18-mime4j-0.8.13.markdown
!????? src/homepage/_posts/2016-07-19-jmap.markdown
!????? src/homepage/_posts/2008-03-16-gsoc-2008.markdown
!????? src/homepage/_posts/2019-11-19-apache-con-eu.markdown
!????? src/homepage/_posts/2011-05-06-jdKim0.2.markdown
!????? src/homepage/_posts/2009-09-17-hupa.markdown
!????? src/homepage/_posts/2010-06-03-jspf-0.9.8.markdown
!????? src/homepage/_posts/2022-10-28-mime4j-0.8.8.markdown
!????? src/homepage/_posts/2010-09-03-protocols-1.2-M2.markdown
!????? src/homepage/_posts/2021-03-16-james-3.6.0.markdown
!????? src/homepage/_posts/2016-09-19-james-3.0.markdown
!????? src/homepage/_posts/2022-04-01-mime4j-0.8.7.markdown
!????? src/homepage/_posts/2022-10-28-jsieve-0.8.markdown
!????? src/homepage/_posts/2009-04-16-Mailet-base-0.1.markdown
!????? src/homepage/_posts/2018-07-31-james-3.1.0.markdown
!????? src/homepage/_posts/2025-05-21-jdKim0.5.markdown
!????? src/homepage/_posts/2006-08-02-james-website-updates.markdown
!????? src/homepage/_posts/2008-08-16-mime4j-0.4.markdown
!????? src/homepage/_posts/2012-06-08-hupa-0.2.markdown
!????? src/homepage/_posts/2024-01-09-james-3.7.5.markdown
!????? src/homepage/_posts/2016-02-09-jmap.markdown
!????? src/homepage/_posts/2024-12-23-mime4j-0.8.12.markdown
!????? src/homepage/_posts/2024-01-09-james-3.8.1.markdown
!????? src/homepage/_posts/2012-01-07-protocols-1.6.0.markdown
!????? src/homepage/_posts/2021-07-02-mime4j-0.8.5.markdown
!????? src/homepage/_posts/2006-08-03-2.3.0-RC3.markdown
!????? src/homepage/_posts/2011-10-06-protocols-1.6-beta2.markdown
!????? src/homepage/_posts/2017-10-20-james-3.0.1.markdown
!????? src/homepage/_posts/2025-03-04-jdKim0.4.markdown
!????? src/homepage/_posts/2017-05-16-james-3.0.0-rc1.markdown
!????? src/homepage/_posts/2008-04-16-jspf-0.9.6.markdown
!????? src/homepage/_posts/2025-01-29-james-3.8.2.markdown
!????? src/homepage/_posts/2012-12-08-mailet-2.5.0.markdown
!????? src/homepage/_posts/2006-07-02-2.3.0on-the-way.markdown
!????? src/homepage/_config.yml
!????? src/homepage/assets/css/font-awesome.min.css
!????? src/homepage/assets/css/main.css
!????? src/homepage/assets/css/lity.min.css
!????? src/homepage/assets/css/ie8.css
!????? src/homepage/assets/css/ie9.css
B src/homepage/assets/css/images/background.jpg
B src/homepage/assets/css/images/overlay.png
!????? src/homepage/assets/css/test.html
!????? src/homepage/assets/css/lightbox.css
B src/homepage/assets/images/prev.png
B src/homepage/assets/images/close.png
B src/homepage/assets/images/next.png
B src/homepage/assets/images/gsoc.png
B src/homepage/assets/images/loading.gif
B src/homepage/assets/fonts/FontAwesome.otf
B src/homepage/assets/fonts/fontawesome-webfont.eot
B src/homepage/assets/fonts/fontawesome-webfont.woff2
B src/homepage/assets/fonts/fontawesome-webfont.woff
B src/homepage/assets/fonts/fontawesome-webfont.ttf
!????? src/homepage/assets/fonts/fontawesome-webfont.svg
!????? src/homepage/assets/js/main.js
!????? src/homepage/assets/js/github-fetch.js
!????? src/homepage/assets/js/jquery.min.js
!????? src/homepage/assets/js/lightbox.js
!????? src/homepage/assets/js/ie/PIE.htc
!????? src/homepage/assets/js/ie/respond.min.js
!????? src/homepage/assets/js/ie/html5shiv.js
!????? src/homepage/assets/js/jquery.scrolly.min.js
!????? src/homepage/assets/js/skel.min.js
!????? src/homepage/assets/js/lity.min.js
!????? src/homepage/assets/js/util.js
!????? src/homepage/assets/js/jquery.scrollex.min.js
!????? src/homepage-docker/Dockerfile
!????? src/homepage-docker/compile.sh
!????? src/site-docker/Dockerfile
!????? src/site-docker/compile.sh
!????? src/adr/0026-removing-configured-additional-mailboxListeners.md
!????? src/adr/0032-distributed-mail-queue-cleanup.md
!????? src/adr/0007-distributed-task-cancellation.md
!????? src/adr/0043-avoid-elasticsearch-on-critical-reads.md
!????? src/adr/0068-mutualize-cassandra-storge-for-quota.md
!????? src/adr/0066-modular-user-data-deletion.md
!????? src/adr/0039-distributed-blob-garbage-collector.md
!????? src/adr/0030-separate-attachment-content-and-metadata.md
!????? src/adr/0055-rspamd-spam-filtering.md
!????? src/adr/0044-against-the-use-of-cassandra-lightweight-transactions.md
!????? src/adr/0050-jmap-web-push.md
!????? src/adr/0002-make-taskmanager-distributed.md
!????? src/adr/0012-jmap-partial-reads.md
!????? src/adr/0038-distributed-eventbus.md
!????? src/adr/0031-distributed-mail-queue.md
!????? src/adr/0004-distributed-tasks-listing.md
!????? src/adr/0027-eventBus-error-handling-upon-dispatch.md
!????? src/adr/0021-cassandra-acl-inconsistency.md
!????? src/adr/0023-cassandra-mailbox-counters-inconsistencies.md
!????? src/adr/0063-temporary-file-leaks.md
!????? src/adr/0069-crowdsec-IP-filtering.md
!????? src/adr/0037-eventbus.md
!????? src/adr/0049-deduplicated-blobs-gs-with-bloom-filters.md
!????? src/adr/0024-polyglot-strategy.md
!????? src/adr/0060-adopt-bounded-elastic.md
!????? src/adr/0058-upgrade-to-netty-4.md
!????? src/adr/0042-applicative-read-repairs.md
!????? src/adr/0048-cleanup-jmap-uploads.md
!????? src/adr/0072-postgresql-flags-update-concurrency-control.md
!????? src/adr/0015-objectstorage-blobid-list.md
!????? src/adr/0017-file-mail-queue-deprecation.md
!????? src/adr/0020-cassandra-mailbox-object-consistency.md
!????? src/adr/0047-jmap-push-over-websockets.md
!????? src/adr/0009-disable-elasticsearch-dynamic-mapping.md
!????? src/adr/0006-task-serialization.md
!????? src/adr/0057-reactive-imap.md
!????? src/adr/0051-oidc.md
!????? src/adr/0019-reactor-netty-adoption.md
!????? src/adr/0054-elasticsearch-search-overrides.md
!????? src/adr/0040-quality-levels-definitions.md
!????? src/adr/0056-opensearch-migration.md
!????? src/adr/0042-james-cli-based-on-webadmin.md
!????? src/adr/0003-distributed-workqueue.md
!????? src/adr/0009-java-11-migration.md
!????? src/adr/0065-changing-username.md
!????? src/adr/0025-cassandra-blob-store-cache.md
!????? src/adr/0029-Cassandra-mailbox-deletion-cleanup.md
!????? src/adr/0064-account-delegation.md
!????? src/adr/0046-generalize-event-bus.md
!????? src/adr/0001-record-architecture-decisions.md
!????? src/adr/0034-mailbox-api-visibility-and-usage.md
!????? src/adr/0018-jmap-new-specs.md
!????? src/adr/0035-distributed-listeners-configuration.md
!????? src/adr/0062-oidc-token-introspection.md
!????? src/adr/0041-replace-jcloud-with-s3.md
!????? src/adr/0036-against-use-of-conditional-statements-in-guice-modules.md
!????? src/adr/0011-remove-elasticsearch-document-source.md
!????? src/adr/0059-upgrade-to-cassadra-driver-4.md
!????? src/adr/0071-postgresql-mailbox-tables-structure.md
!????? src/adr/0016-distributed-workqueue.md
!????? src/adr/0052-pulsar-mailqueue.md
!????? src/adr/0014-blobstore-storage-policies.md
!????? src/adr/0008-distributed-task-await.md
B src/adr/img/adr-69-scenario-diagram.png
B src/adr/img/adr-71-mailbox-tables-diagram.png
B src/adr/img/adr-68-architecture-diagram.png
!????? src/adr/0053-email-rate-limiting.md
!????? src/adr/0013-precompute-jmap-preview.md
!????? src/adr/0067-quota-for-jmap-uploads.md
!????? src/adr/0028-Recompute-mailbox-quotas.md
!????? src/adr/0070-postgresql-adoption.md
!????? src/adr/0022-cassandra-message-inconsistency.md
!????? src/adr/0005-distributed-task-termination-ackowledgement.md
!????? src/adr/0033-use-scala-in-event-sourcing-modules.md
!????? src/adr/0061-delegation.md
!????? src/adr/0071-objectstorage-sse-c.md
!????? src/adr/0045-support-jmap-push-with-mailbox-changes-implementation.md
!????? src/adr/0010-enable-elasticsearch-routing.md
AL src/reporting-site/site.xml
B james-logo.png
GEN pom.xml
AL core/src/main/java/org/apache/james/util/Port.java
AL core/src/main/java/org/apache/james/util/Host.java
AL core/src/main/java/org/apache/james/core/MaybeSender.java
AL core/src/main/java/org/apache/james/core/ConnectionDescription.java
AL core/src/main/java/org/apache/james/core/Domain.java
AL core/src/main/java/org/apache/james/core/MailAddress.java
AL core/src/main/java/org/apache/james/core/Username.java
AL core/src/main/java/org/apache/james/core/builder/MimeMessageBuilder.java
AL core/src/main/java/org/apache/james/core/builder/MimeMessageWrapper.java
AL core/src/main/java/org/apache/james/core/quota/QuotaSizeUsage.java
AL core/src/main/java/org/apache/james/core/quota/QuotaLimitValue.java
AL core/src/main/java/org/apache/james/core/quota/QuotaComponent.java
AL core/src/main/java/org/apache/james/core/quota/QuotaType.java
AL core/src/main/java/org/apache/james/core/quota/QuotaCountLimit.java
AL core/src/main/java/org/apache/james/core/quota/QuotaScope.java
AL core/src/main/java/org/apache/james/core/quota/QuotaUsageValue.java
AL core/src/main/java/org/apache/james/core/quota/QuotaCountUsage.java
AL core/src/main/java/org/apache/james/core/quota/QuotaSizeLimit.java
AL core/src/main/java/org/apache/james/core/quota/QuotaCurrentValue.java
AL core/src/main/java/org/apache/james/core/quota/QuotaLimit.java
AL core/src/main/java/org/apache/james/core/Disconnector.java
AL core/src/main/java/org/apache/james/core/ConnectionDescriptionSupplier.java
AL core/src/main/java/org/apache/james/core/healthcheck/HealthCheck.java
AL core/src/main/java/org/apache/james/core/healthcheck/Result.java
AL core/src/main/java/org/apache/james/core/healthcheck/ComponentName.java
AL core/src/main/java/org/apache/james/core/healthcheck/ResultStatus.java
AL core/src/test/java/org/apache/james/util/PortTest.java
AL core/src/test/java/org/apache/james/util/HostTest.java
AL core/src/test/java/org/apache/james/domainlist/api/DomainTest.java
AL core/src/test/java/org/apache/james/core/CoreFixture.java
AL core/src/test/java/org/apache/james/core/MaybeSenderTest.java
AL core/src/test/java/org/apache/james/core/builder/MimeMessageBuilderTest.java
AL core/src/test/java/org/apache/james/core/builder/MimeMessageWrapperTest.java
AL core/src/test/java/org/apache/james/core/UsernameTest.java
AL core/src/test/java/org/apache/james/core/quota/QuotaCountLimitTest.java
AL core/src/test/java/org/apache/james/core/quota/QuotaSizeLimitTest.java
AL core/src/test/java/org/apache/james/core/quota/QuotaUsageValueTest.java
AL core/src/test/java/org/apache/james/core/quota/QuotaLimitValueTest.java
AL core/src/test/java/org/apache/james/core/quota/QuotaCountUsageTest.java
AL core/src/test/java/org/apache/james/core/quota/QuotaSizeUsageTest.java
AL core/src/test/java/org/apache/james/core/quota/QuotaLimitTest.java
AL core/src/test/java/org/apache/james/core/quota/QuotaCurrentValueTest.java
AL core/src/test/java/org/apache/james/core/MailAddressTest.java
AL core/src/test/java/org/apache/james/core/healthcheck/ResultTest.java
AL core/src/test/java/org/apache/james/core/healthcheck/ResultStatusTest.java
AL core/src/test/java/org/apache/james/core/healthcheck/ComponentNameTest.java
AL core/pom.xml
AL mdn/src/main/scala/org/apache/james/mdn/MDNReportParser.scala
AL mdn/src/main/java/org/apache/james/mdn/sending/mode/DispositionSendingMode.java
AL mdn/src/main/java/org/apache/james/mdn/type/DispositionType.java
AL mdn/src/main/java/org/apache/james/mdn/action/mode/DispositionActionMode.java
AL mdn/src/main/java/org/apache/james/mdn/MDNReport.java
AL mdn/src/main/java/org/apache/james/mdn/MDN.java
AL mdn/src/main/java/org/apache/james/mdn/fields/Error.java
AL mdn/src/main/java/org/apache/james/mdn/fields/AddressType.java
AL mdn/src/main/java/org/apache/james/mdn/fields/OriginalMessageId.java
AL mdn/src/main/java/org/apache/james/mdn/fields/Text.java
AL mdn/src/main/java/org/apache/james/mdn/fields/Field.java
AL mdn/src/main/java/org/apache/james/mdn/fields/Disposition.java
AL mdn/src/main/java/org/apache/james/mdn/fields/OriginalRecipient.java
AL mdn/src/main/java/org/apache/james/mdn/fields/Gateway.java
AL mdn/src/main/java/org/apache/james/mdn/fields/ReportingUserAgent.java
AL mdn/src/main/java/org/apache/james/mdn/fields/ExtensionField.java
AL mdn/src/main/java/org/apache/james/mdn/fields/FinalRecipient.java
AL mdn/src/main/java/org/apache/james/mdn/modifier/DispositionModifier.java
AL mdn/src/test/scala/org/apache/james/mdn/MDNReportParserTest.scala
AL mdn/src/test/java/org/apache/james/mdn/sending/mode/DispositionSendingModeTest.java
AL mdn/src/test/java/org/apache/james/mdn/type/DispositionTypeTest.java
AL mdn/src/test/java/org/apache/james/mdn/action/mode/DispositionActionModeTest.java
AL mdn/src/test/java/org/apache/james/mdn/MDNTest.java
AL mdn/src/test/java/org/apache/james/mdn/MDNReportFormattingTest.java
AL mdn/src/test/java/org/apache/james/mdn/fields/OriginalRecipientTest.java
AL mdn/src/test/java/org/apache/james/mdn/fields/GatewayTest.java
AL mdn/src/test/java/org/apache/james/mdn/fields/DispositionTest.java
AL mdn/src/test/java/org/apache/james/mdn/fields/OriginalMessageIdTest.java
AL mdn/src/test/java/org/apache/james/mdn/fields/AddressTypeTest.java
AL mdn/src/test/java/org/apache/james/mdn/fields/ExtensionFieldTest.java
AL mdn/src/test/java/org/apache/james/mdn/fields/FinalRecipientTest.java
AL mdn/src/test/java/org/apache/james/mdn/fields/ErrorTest.java
AL mdn/src/test/java/org/apache/james/mdn/fields/ReportingUserAgentTest.java
AL mdn/src/test/java/org/apache/james/mdn/fields/TextTest.java
AL mdn/src/test/java/org/apache/james/mdn/modifier/DispositionModifierTest.java
AL mdn/src/test/java/org/apache/james/mdn/MDNReportTest.java
AL mdn/pom.xml
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/MailEnvelope.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPStartTlsResponse.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/dsn/DSNStatus.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfiguration.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/MailAddressException.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPSessionImpl.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPSession.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/MailAddress.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfigurationImpl.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPResponse.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/RcptCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AcceptRecipientIfRelayingIsAllowed.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/NoopCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/RsetCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/QuitCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/HeloCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/PostmasterAbuseRcptHook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractAuthRequiredToRelayRcptHook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/WelcomeMessageHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractHookableCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/HelpCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/UnknownCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineFilter.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/ReceivedHeaderGenerator.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/log/HookResultLogger.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SMTPMDCContextFactory.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/ExpnCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/EhloExtension.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/StartTlsCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/MailSizeEsmtpExtension.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/MailCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/VrfyCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SeparatingDataLineFilter.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractSenderAuthIdentifyVerificationHook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/ReverseEqualsEhloHeloHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractValidRcptHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractGreylistHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/ValidSenderDomainHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/MaxRcptHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/SpamTrapHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/ResolvableEhloHeloHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/SupressDuplicateRcptHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandler.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/ReceivedDataLineFilter.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/MailEnvelopeImpl.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResult.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/AuthHook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HeloHook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/QuitHook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/SimpleHook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/MailHook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/MailParametersHook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResultHook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/RcptHook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/MessageHook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/Hook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookReturnCode.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/UnknownHook.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPServerMBean.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPProtocolHandlerChain.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPProtocol.java
AL protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPRetCode.java
!????? protocols/smtp/src/test/resources/a50.eml
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPSServerTest.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettyStartTlsSMTPServerTest.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPServerTest.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettyProxySMTPServerTest.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPSServerTest.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/ValidSenderDomainHandlerTest.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandlerTest.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/MaxRcptHandlerTest.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/ResolvableEhloHeloHandlerTest.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandlerTest.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/SpamTrapHandlerTest.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/utils/BaseFakeSMTPSession.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/utils/TestMessageHook.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/hook/HookResultTest.java
AL protocols/smtp/src/test/java/org/apache/james/protocols/smtp/SMTPStartTlsResponseTest.java
AL protocols/smtp/src/reporting-site/site.xml
AL protocols/smtp/pom.xml
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/util/SettableSession.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ManageSieveProcessor.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/NotEnoughDataException.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/AuthenticationProcessor.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/SieveParser.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/SessionTerminatedException.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/AuthenticationException.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/UnknownSaslMechanism.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/ManageSieveException.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/StartTLS.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/ListScripts.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Noop.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/CoreCommands.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Unauthenticate.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Authenticate.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/CheckScript.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Logout.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Capability.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/HaveSpace.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/RenameScript.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/PutScript.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/GetScript.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/LineCommands.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/SetActive.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/DeleteScript.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/CapabilityAdvertiser.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/AuthenticationRequiredException.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/ArgumentException.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/SyntaxException.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/api/Session.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java
AL protocols/managesieve/src/main/java/org/apache/james/managesieve/core/PlainAuthenticationProcessor.java
AL protocols/managesieve/src/test/java/org/apache/james/managesieve/util/ParserUtilsTest.java
AL protocols/managesieve/pom.xml
AL protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/LMTPMultiResponse.java
AL protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/LMTPConfiguration.java
AL protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/core/DataLineMessageHookHandler.java
AL protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/core/WelcomeMessageHandler.java
AL protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/core/LhloCmdHandler.java
AL protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/core/ReceivedDataLineFilter.java
AL protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/hook/DeliverToRecipientHook.java
AL protocols/lmtp/src/main/reporting-site/site.xml
AL protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/LMTPProtocolHandlerChain.java
AL protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/AbstractLMTPSServerTest.java
AL protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPServerTest.java
AL protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPSServerTest.java
AL protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/LMTPConfigurationImpl.java
AL protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/AbstractLMTPServerTest.java
AL protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/LMTPClient.java
AL protocols/lmtp/pom.xml
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/NettyProtocolTransport.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractSSLAwareChannelPipelineFactory.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/Encryption.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/HandlerConstants.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/ConnectionPerIpLimitUpstreamHandler.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContextFactory.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/TimeoutHandler.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/LineHandlerAware.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractAsyncServer.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/CommandInjectionDetectedException.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/LineHandlerUpstreamHandler.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelInboundHandler.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/LineDelimiterBasedChannelHandlerFactory.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/AllButStartTlsLineChannelHandlerFactory.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/AllButStartTlsLineBasedChannelHandler.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/ConnectionLimitUpstreamHandler.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractChannelPipelineFactory.java
AL protocols/netty/src/main/java/org/apache/james/protocols/netty/ChannelHandlerFactory.java
AL protocols/netty/src/test/java/org/apache/james/protocols/netty/NettyServerTest.java
AL protocols/netty/src/reporting-site/site.xml
AL protocols/netty/pom.xml
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3Configuration.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3Session.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3StartTlsResponse.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3Protocol.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3StreamResponse.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractPOP3CommandHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/ExtraDotInputStream.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/POP3MessageCommandArguments.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/WelcomeMessageHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UnknownCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractPassCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CRLFTerminatedInputStream.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCapability.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/POP3MessageCommandDelegate.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractApopCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/MDCConstants.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3SessionImpl.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/mailbox/ImapMailbox.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/mailbox/Mailbox.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/mailbox/MessageMetaData.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/mailbox/ImapMessageMetaData.java
AL protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3Response.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractPOP3ServerTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3ServerTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3SServerTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyStartTlsPOP3ServerTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractStartTlsPOP3ServerTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/ListCmdHandlerTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/CRLFTerminatedInputStreamTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/UidlCmdHandlerTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/TopCmdHandlerTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/POP3MessageCommandDelegateTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/AbstractInputStreamTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/POP3MessageCommandArgumentsTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/DeleCmdHandlerTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/RetrCmdHandlerTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/ExtraDotInputStreamTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/POP3ProtocolHandlerChain.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractPOP3SServerTest.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/utils/TestPassCmdHandler.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/utils/MockMailbox.java
AL protocols/pop3/src/test/java/org/apache/james/protocols/pop3/POP3StartTlsResponseTest.java
AL protocols/pop3/pom.xml
AL protocols/src/site/site.xml
AL protocols/src/reporting-site/site.xml
AL protocols/api/src/main/java/org/apache/james/protocols/api/ClientAuth.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/Protocol.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolConfiguration.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/Response.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/StreamResponse.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/BaseRequest.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/Request.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolServer.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolConfigurationImpl.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/AbstractResponse.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/CommandDetectionSession.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolTransport.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/AbstractProtocolTransport.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/ProtocolHandlerChain.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/ProtocolHandlerResultHandler.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/ConnectHandler.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/ExtensibleHandler.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/UnknownCommandHandler.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/CommandHandler.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/CommandHandlerResultLogger.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/LineHandler.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/ProtocolHandlerChainImpl.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/DisconnectHandler.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/AbstractProtocolHandlerChain.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/ProtocolHandler.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/WiringException.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/StartTlsResponse.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/OidcSASLConfiguration.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolSessionImpl.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolSession.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolImpl.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/ProxyInformation.java
AL protocols/api/src/main/java/org/apache/james/protocols/api/OIDCSASLParser.java
B protocols/api/src/test/resources/boguskeystore
AL protocols/api/src/test/java/org/apache/james/protocols/api/AbstractProtocolTransportTest.java
AL protocols/api/src/test/java/org/apache/james/protocols/api/ProtocolSessionTest.java
AL protocols/api/src/test/java/org/apache/james/protocols/api/OIDCSASLHelper.java
AL protocols/api/src/test/java/org/apache/james/protocols/api/utils/BogusSSLSocketFactory.java
AL protocols/api/src/test/java/org/apache/james/protocols/api/utils/ProtocolServerUtils.java
AL protocols/api/src/test/java/org/apache/james/protocols/api/utils/BogusSslContextFactory.java
AL protocols/api/src/test/java/org/apache/james/protocols/api/utils/BogusKeyStore.java
AL protocols/api/src/test/java/org/apache/james/protocols/api/utils/BogusTrustManagerFactory.java
AL protocols/api/src/test/java/org/apache/james/protocols/api/OIDCSASLParserTest.java
AL protocols/api/src/test/java/org/apache/james/protocols/api/ProxyInformationTest.java
AL protocols/api/src/reporting-site/site.xml
AL protocols/api/pom.xml
AL protocols/pom.xml
AL protocols/imap/src/main/java/org/apache/james/imap/encode/ImapResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/VanishedResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/XListResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/NamespaceResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/main/DefaultImapEncoderFactory.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/main/DefaultLocalizer.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/EncoderUtils.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/CapabilityResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/ListResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/ImapEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/ACLResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/AuthenticateResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/ImapResponseComposer.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/EnableResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/ExpungeResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/FlagsResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/QuotaRootResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/ImapEncoderFactory.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/MailboxStatusResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/MetadataResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/RecentResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/ImapResponseWriter.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/ContinuationResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/ESearchResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/StatusResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/FetchResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/base/ImapResponseComposerImpl.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/base/EndImapEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/ListingEncodingUtils.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/QuotaResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/MyRightsResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/SearchResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/FakeImapSession.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/ExistsResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/ListRightsResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/LSubResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/encode/IdResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/LSubProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/CloseProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/SystemMessageProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/CheckProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/LogoutProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/ContentBodyElement.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/EnvelopeImpl.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/EmptyContent.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/EnvelopeBuilder.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/MimeDescriptorStructure.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/AddressImpl.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/MimeBodyElement.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/PartialFetchBodyElement.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchDataConverter.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/HeadersBodyElement.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/HeaderBodyElement.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/MessageResultUtils.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMessageRangeProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/NamespaceSupplier.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/ReplaceProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/UnselectProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/SetQuotaProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityImplementingProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/SetMetadataProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSubscriptionProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/GetMetadataProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/NoopProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/CompressProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/IdProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/base/AbstractProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/base/UnknownRequestProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/base/ImapResponseMessageProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/base/UidMsnConverter.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/PermitEnableCapabilityProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/EnableProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/main/PathConverter.java
AL protocols/imap/src/main/java/org/apache/james/imap/main/ResponseEncoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/main/AbstractImapRequestHandler.java
AL protocols/imap/src/main/java/org/apache/james/imap/main/DeniedAccessOnSharedMailboxException.java
AL protocols/imap/src/main/java/org/apache/james/imap/main/DefaultImapDecoderFactory.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/ImapRequestStreamLineReader.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/DecoderUtils.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/main/OutputStreamImapResponseWriter.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/main/DefaultImapDecoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/main/ImapRequestStreamHandler.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/ImapDecoderFactory.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/ImapCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/DecodingException.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/FetchPartPathDecoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/ImapDecoder.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/ImapCommandParserFactory.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ReplaceCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/LsubCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AuthenticateCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ImapParserFactory.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/IdleCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/MoveCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaRootCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ExamineCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/NamespaceCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/UnselectCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/CapabilityCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/MyRightsCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/CreateCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/DeleteACLCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StatusCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SelectCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/RenameCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractMessageRangeCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/FetchCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ExpungeCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/CopyCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SearchCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetACLCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractUidCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/UidCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/CloseCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/GetACLCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ListRightsCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/UnsubscribeCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StartTLSCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractSelectionCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetQuotaCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/GetMetadataCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/LoginCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/IDCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ListCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/DeleteCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/NoopCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/XListCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SubscribeCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AppendCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/LogoutCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/CompressCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/CheckCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/decode/parser/EnableCommandParser.java
AL protocols/imap/src/main/java/org/apache/james/imap/ImapSuite.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/ConnectionCheck.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/ImapSessionState.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/Tag.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/DefaultConnectionCheckFactory.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/ImapConstants.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/ConnectionCheckFactory.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/display/ModifiedUtf7.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/display/Localizer.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/display/Locales.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/ImapMessage.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/process/SearchResUtil.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/process/MailboxTyper.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/process/DefaultMailboxTyper.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/process/ImapLineHandler.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/process/SelectedMailbox.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/process/ImapSession.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/process/ImapProcessor.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/process/MailboxType.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/ImapConfiguration.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/PartialRange.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/SectionType.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchKey.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchResultOption.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/request/DayMonthYear.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/request/ImapRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchOperation.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/UidRange.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/FetchData.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/MessageFlags.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/BodyFetchElement.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/Capability.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/StatusDataItems.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/IdRange.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/response/ImapResponseMessage.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/response/StatusResponseFactory.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/message/response/StatusResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/api/ImapCommand.java
AL protocols/imap/src/main/java/org/apache/james/imap/utils/EolInputStream.java
AL protocols/imap/src/main/java/org/apache/james/imap/utils/FastByteArrayOutputStream.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/BytesBackedLiteral.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/SetQuotaRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/DeleteRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/IRAuthenticateRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/ExpungeRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/ReplaceRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/ListRightsRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/AbstractImapRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/SelectRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/SubscribeRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/AbstractMessageRangeRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/NamespaceRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/MyRightsRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/AppendRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/CloseRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/FetchRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/SetMetadataRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/NoopRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/IDRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/LogoutRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/SetACLRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/IdleRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/CopyRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/GetQuotaRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/LsubRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/DeleteACLRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/UnsubscribeRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/UnselectRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/XListRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/CheckRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/GetMetadataRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/AbstractMailboxSelectionRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/CapabilityRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/LoginRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/StartTLSRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/ListRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/StoreRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/SearchRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/GetQuotaRootRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/EnableRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/StatusRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/SystemMessage.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/MoveRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/GetACLRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/CompressRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/AuthenticateRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/RenameRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/CreateRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/request/ExamineRequest.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/Literal.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/MailboxName.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/QuotaRootResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/SearchResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/RecentResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/MetadataResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/FlagsResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/ImmutableStatusResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/ListResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/ESearchResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/AbstractStatusResponseFactory.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/MailboxStatusResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/FetchResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/XListResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/AuthenticateResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/QuotaResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/IdResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/ContinuationResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/EnableResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/NamespaceResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/VanishedResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/ACLResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/AbstractListingResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/ExpungeResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/ListRightsResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/ExistsResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/CapabilityResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/UnpooledStatusResponseFactory.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/MyRightsResponse.java
AL protocols/imap/src/main/java/org/apache/james/imap/message/response/LSubResponse.java
AL protocols/imap/src/main/java/org/apache/james/mailbox/MessageSequenceNumber.java
AL protocols/imap/src/main/java/org/apache/james/mailbox/NullableMessageSequenceNumber.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/main/DefaultImapEncoderFactoryTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/EncoderUtilsTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderNoExtensionsTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/EncoderUtilsDateTimeLocaleTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/XListResponseEncoderTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/QuotaResponseEncoderTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/MetadataResponseEncoderTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/ImapResponseComposerImplTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/QuotaRootResponseEncoderTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/base/ByteImapResponseWriter.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/NamespaceResponseEncoderTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/ListResponseEncoderTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/ListingEncodingUtilsTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderEnvelopeTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/encode/MailboxStatusResponseEncoderTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/SetQuotaProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/StatusResponseTypeMatcher.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/fetch/PartialFetchBodyElementTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/fetch/MailboxMessageResultUtilsTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/fetch/FetchDataConverterTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/SetACLProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/DeleteACLProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/SelectProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaRootProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/SetMetadataProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/AbstractSelectionProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/GetAnnotationProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/base/UidMsnConverterTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/CapabilityProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaProcessorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/main/PathConverterBasicContract.java
AL protocols/imap/src/test/java/org/apache/james/imap/main/DefaultImapDecoderFactoryTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/main/ImapRequestHandlerAdandonConnectionTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/main/DefaultPathConverterTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/FetchPartPathDecoderTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/main/IdRangeParseTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/DecoderUtilsLocaleDateTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/StringMatcherCharacterValidatorTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/ImapRequestLineReaderTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/DecoderUtilsTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserAndParenthesesTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserCharsetTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/GetMetadataCommandParserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/CreateCommandParserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/MoveParserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/StatusCommandParserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserQuotedCharsetTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SelectParserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SetQuotaCommandParserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/FetchCommandParserPartialFetchTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaParserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserNotTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SelectCommandParserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserOrTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserTopLevelAndTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/AppendCommandParserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserSearchKeyTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaRootParserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/NioUtils.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/CopyParserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserSearchKeySequenceSetTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/decode/parser/StoreCommandParserTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/api/ImapSessionTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/api/ImapConfigurationTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/api/IdRangeTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/api/ImapCommandTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/api/message/request/SearchKeyTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/api/message/UidRangeTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/api/message/CapabilityTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/api/message/BodyFetchElementTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/api/message/response/AbstractStatusResponseFactoryTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/api/message/response/StatusResponseTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/api/TagTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/ImapFixture.java
AL protocols/imap/src/test/java/org/apache/james/imap/message/request/AbstractMailboxSelectionRequestTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/message/response/UnpooledStatusResponseFactoryTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/message/response/ListRightsResponseTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/message/response/FlagsResponseTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/message/response/NamespaceResponseTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/message/response/ACLResponseTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/message/response/QuotaResponseTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/message/response/MyRightsResponseTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/message/response/QuotaRootResponseTest.java
AL protocols/imap/src/test/java/org/apache/james/imap/message/response/SearchResponseTest.java
AL protocols/imap/src/test/java/org/apache/james/mailbox/MessageSequenceNumberTest.java
AL protocols/imap/src/test/java/org/apache/james/mailbox/NullableMessageSequenceNumberTest.java
AL protocols/imap/pom.xml
!????? server/README.crypto
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/HeadersDto.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReferenceDTO.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueue.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReferenceSerializer.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailQueueName.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/EnqueuedItem.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueManagement.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/EnqueueId.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailWithEnqueueId.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueDeadLetterQueueHealthCheck.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConsumerHealthCheck.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailLoader.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Enqueuer.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReference.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/RabbitMQMailQueueConfiguration.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/api/FakeMailQueueView.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/api/DeleteCondition.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/api/MailQueueView.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewDataDefinition.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/EnqueuedMailsDAO.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewStartUpCheck.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/ConfigurationAggregate.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/CassandraMailQueueViewConfiguration.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/RegisterConfigurationCommandHandler.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/ConfigurationChanged.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/EventsourcingConfigurationManagement.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/RegisterConfigurationCommand.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/CassandraMailQueueViewConfigurationModule.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/ConfigurationChangedDTO.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/model/BucketedSlices.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/model/EnqueuedItemWithSlicingContext.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/BrowseStartDAO.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/MailQueueViewBlobReferenceSource.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueBrowser.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/DeletedMailsDAO.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/EnqueuedMailsDaoUtil.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/BrowseStartHealthCheck.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueMailStore.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueMailDelete.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueView.java
AL server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/ContentStartDAO.java
B server/queue/queue-rabbitmq/src/test/resources/json/mail1-legacy.json
B server/queue/queue-rabbitmq/src/test/resources/json/mail1.json
B server/queue/queue-rabbitmq/src/test/resources/json/mailqueueview/configuration/configuration_changed.json
B server/queue/queue-rabbitmq/src/test/resources/json/mail_min.json
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/MailDTOTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/MailLoaderTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueDeadLetterQueueHealthCheckTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/EnqueuedItemTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/MailQueueNameTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/api/DeleteConditionTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/RabbitMQMailQueueConfigurationTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/ContentStartDAOTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/EnqueuedMailsDaoTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/BrowseStartHealthCheckTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/RegisterConfigurationCommandTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/ConfigurationChangedDTOTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/EventsourcingConfigurationManagementTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/DTOTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/CassandraMailQueueViewConfigurationTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/model/BucketedSlicesTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/model/EnqueuedItemWithSlicingContextTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/model/EnqueueIdTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/EnqueuedMailsDaoUtilTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewTestFactory.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/BrowseStartDAOTest.java
AL server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/DeletedMailsDAOTest.java
AL server/queue/queue-rabbitmq/pom.xml
!????? server/queue/queue-pulsar/README.adoc
AL server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/Filter.scala
AL server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/Header.scala
AL server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/PulsarMailQueue.scala
AL server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/FilterStage.scala
AL server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/PulsarMailQueueFactory.scala
AL server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/PulsarMailQueueConfiguration.scala
AL server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/MailMetadata.scala
AL server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/EnqueueId.scala
AL server/queue/queue-pulsar/src/test/scala/org/apache/james/queue/pulsar/JavaClient.scala
AL server/queue/queue-pulsar/src/test/java/org/apache/james/queue/pulsar/PulsarMailQueueTest.java
AL server/queue/queue-pulsar/src/test/java/org/apache/james/queue/pulsar/PulsarMailQueueFactoryTest.java
AL server/queue/queue-pulsar/pom.xml
AL server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/EmbeddedActiveMQ.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobStrategy.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQConfiguration.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobTransferPolicy.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQSupport.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/MimeMessageBlobMessageSource.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQHealthCheck.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/metric/ActiveMQMetricCollector.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/metric/ActiveMQMetricCollectorImpl.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/metric/ActiveMQMetricCollectorNoop.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/metric/ActiveMQMetricConfiguration.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/metric/ActiveMQMetrics.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueItem.java
AL server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQCacheableMailQueue.java
AL server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java
AL server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
AL server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactoryTest.java
AL server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQHealthCheckTest.java
AL server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/metric/ActiveMQMetricConfigurationTest.java
AL server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/metric/ActiveMQMetricCollectorTest.java
AL server/queue/queue-activemq/src/reporting-site/site.xml
AL server/queue/queue-activemq/pom.xml
AL server/queue/queue-api/src/main/java/org/apache/james/queue/api/RawMailQueueItem.java
AL server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueManagementMBean.java
AL server/queue/queue-api/src/main/java/org/apache/james/queue/api/ManageableMailQueue.java
AL server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueName.java
AL server/queue/queue-api/src/main/java/org/apache/james/queue/api/RawMailQueueItemDecoratorFactory.java
AL server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueItemDecoratorFactory.java
AL server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueue.java
AL server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueFactory.java
AL server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailPrioritySupport.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueContract.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/DelayedMailQueueContract.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/Mails.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueFactoryContract.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueFactoryContract.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/DelayedPriorityMailQueueContract.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/DelayedManageableMailQueueContract.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/PriorityMailQueueContract.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueFactoryTest.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueMetricExtension.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueNameTest.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/PriorityManageableMailQueueContract.java
AL server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueMetricContract.java
AL server/queue/queue-api/src/reporting-site/site.xml
AL server/queue/queue-api/pom.xml
AL server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java
AL server/queue/queue-jms/src/main/java/org/apache/james/queue/library/AbstractMailQueueFactory.java
AL server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueItem.java
AL server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/MimeMessageObjectMessageSource.java
AL server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
AL server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSSupport.java
AL server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSCacheableMailQueue.java
AL server/queue/queue-jms/src/test/java/org/apache/james/queue/library/AbstractMailQueueFactoryTest.java
AL server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/BrokerExtension.java
AL server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSCacheableMailQueueFactoryTest.java
AL server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSCacheableMailQueueTest.java
AL server/queue/queue-jms/src/reporting-site/site.xml
AL server/queue/queue-jms/pom.xml
AL server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java
AL server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryCacheableMailQueueTest.java
AL server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryCacheableMailQueueFactoryTest.java
!????? server/queue/queue-memory/pom.xml
AL server/apps/memory-app/docker-configuration/webadmin.properties
!????? server/apps/memory-app/docker-configuration/logback-cli.xml
!????? server/apps/memory-app/src/main/extensions-jars/README.md
AL server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java
AL server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesConfiguration.java
B server/apps/memory-app/src/main/glowroot/admin.json
B server/apps/memory-app/src/main/glowroot/plugins/smtp.json
B server/apps/memory-app/src/main/glowroot/plugins/task.json
B server/apps/memory-app/src/main/glowroot/plugins/mailboxListener.json
B server/apps/memory-app/src/main/glowroot/plugins/pop3.json
B server/apps/memory-app/src/main/glowroot/plugins/spooler.json
B server/apps/memory-app/src/main/glowroot/plugins/jmap.json
B server/apps/memory-app/src/main/glowroot/plugins/imap.json
!????? server/apps/memory-app/src/main/scripts/james-cli
AL server/apps/memory-app/src/test/resources/smtpserver2.xml
AL server/apps/memory-app/src/test/resources/listeners.xml
!????? server/apps/memory-app/src/test/resources/jwt_publickey
AL server/apps/memory-app/src/test/resources/dnsservice.xml
AL server/apps/memory-app/src/test/resources/lmtpserver.xml
AL server/apps/memory-app/src/test/resources/mailetcontainer.xml
!????? server/apps/memory-app/src/test/resources/eml/otherDomainDkimLocalFrom.eml
!????? server/apps/memory-app/src/test/resources/eml/otherDomainDkim.eml
!????? server/apps/memory-app/src/test/resources/eml/badDkim.eml
!????? server/apps/memory-app/src/test/resources/eml/goodDkim.eml
AL server/apps/memory-app/src/test/resources/imapserver.xml
AL server/apps/memory-app/src/test/resources/managesieveserver.xml
AL server/apps/memory-app/src/test/resources/domainlist.xml
AL server/apps/memory-app/src/test/resources/mailrepositorystore.xml
AL server/apps/memory-app/src/test/resources/usersrepository.xml
B server/apps/memory-app/src/test/resources/keystore2
B server/apps/memory-app/src/test/resources/keystore
B server/apps/memory-app/src/test/resources/badAliasKeystore
AL server/apps/memory-app/src/test/resources/imapserver2.xml
AL server/apps/memory-app/src/test/resources/smtpserver.xml
AL server/apps/memory-app/src/test/resources/pop3server.xml
AL server/apps/memory-app/src/test/java/org/apache/james/MemoryJamesServerTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/ErrorMailet.java
AL server/apps/memory-app/src/test/java/org/apache/james/WebAdminRoutesExtensionTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/MyRoute.java
AL server/apps/memory-app/src/test/java/org/apache/james/HealthCheckExtensionTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/MyStartable.java
AL server/apps/memory-app/src/test/java/org/apache/james/GuiceJamesServerTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/StartSequenceTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/UserStartableExtensionTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/DefaultMemoryJamesServerTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/DisabledSpoolerTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/MemoryLdapLocalPartLoginIntegrationTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/GuiceLifecycleHeathCheckTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/DisabledGroupExecutionTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/DomainAutodetectionTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/DKIMHookIntegrationTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/MemoryJmapTestRule.java
AL server/apps/memory-app/src/test/java/org/apache/james/IMAPIntegrationTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/MyHealthCheck.java
AL server/apps/memory-app/src/test/java/org/apache/james/CertificateReloadTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/RCPTCaseSensitivityTest.java
AL server/apps/memory-app/src/test/java/org/apache/james/LmtpIntegrationTest.java
AL server/apps/memory-app/src/assemble/app.xml
MIT server/apps/memory-app/src/assemble/license-for-binary.txt
!????? server/apps/memory-app/src/assemble/README.adoc
!????? server/apps/memory-app/src/assemble/extensions-jars.txt
AL server/apps/memory-app/pom.xml
!????? server/apps/memory-app/README.md
AL server/apps/memory-app/sample-configuration/webadmin.properties
AL server/apps/memory-app/sample-configuration/listeners.xml
!????? server/apps/memory-app/sample-configuration/extensions.properties
AL server/apps/memory-app/sample-configuration/dnsservice.xml
!????? server/apps/memory-app/sample-configuration/deletedMessageVault.properties
AL server/apps/memory-app/sample-configuration/mailetcontainer.xml
AL server/apps/memory-app/sample-configuration/imapserver.xml
AL server/apps/memory-app/sample-configuration/managesieveserver.xml
AL server/apps/memory-app/sample-configuration/domainlist.xml
AL server/apps/memory-app/sample-configuration/mailrepositorystore.xml
!????? server/apps/memory-app/sample-configuration/jvm.properties
AL server/apps/memory-app/sample-configuration/usersrepository.xml
AL server/apps/memory-app/sample-configuration/recipientrewritetable.xml
AL server/apps/memory-app/sample-configuration/logback.xml
!????? server/apps/memory-app/sample-configuration/jmap.properties
AL server/apps/memory-app/sample-configuration/jmx.properties
AL server/apps/memory-app/sample-configuration/smtpserver.xml
AL server/apps/memory-app/sample-configuration/pop3server.xml
!????? server/apps/memory-app/sample-configuration/droplists.properties
AL server/apps/memory-app/sample-configuration/healthcheck.properties
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/WebAdminHTTPClientUtil.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/WebAdminCli.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/DomainDeleteCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/DomainCreateCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/DomainCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/DomainListCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/AddDomainAliasCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/DomainExistCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/ListDomainAliasCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/RemoveDomainAliasCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/GlobalQuotaCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/SetGlobalQuotaCountCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/GlobalQuotaCountCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/DeleteGlobalQuotaCountCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/DeleteGlobalQuotaSizeCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/GetGlobalQuotaSizeCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/QuotaCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/SetGlobalQuotaSizeCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/GetGlobalQuotaCountCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/GlobalQuotaSizeCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/user/UserExistCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/user/UserCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/user/UserCreateCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/user/UserDeleteCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/user/UserListCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxDeleteCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxListCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxCreateCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxDeleteAllCommand.java
AL server/apps/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxExistCommand.java
AL server/apps/webadmin-cli/src/test/resources/webadmin.properties
AL server/apps/webadmin-cli/src/test/resources/listeners.xml
!????? server/apps/webadmin-cli/src/test/resources/jwt_publickey
AL server/apps/webadmin-cli/src/test/resources/dnsservice.xml
AL server/apps/webadmin-cli/src/test/resources/lmtpserver.xml
AL server/apps/webadmin-cli/src/test/resources/mailetcontainer.xml
AL server/apps/webadmin-cli/src/test/resources/imapserver.xml
AL server/apps/webadmin-cli/src/test/resources/managesieveserver.xml
!????? server/apps/webadmin-cli/src/test/resources/valid_token_admin_false.jwt
AL server/apps/webadmin-cli/src/test/resources/domainlist.xml
AL server/apps/webadmin-cli/src/test/resources/mailrepositorystore.xml
AL server/apps/webadmin-cli/src/test/resources/usersrepository.xml
!????? server/apps/webadmin-cli/src/test/resources/valid_token_admin_true.jwt
B server/apps/webadmin-cli/src/test/resources/keystore
AL server/apps/webadmin-cli/src/test/resources/smtpserver.xml
AL server/apps/webadmin-cli/src/test/resources/pop3server.xml
AL server/apps/webadmin-cli/src/test/java/org/apache/james/cli/JwtOptionTest.java
AL server/apps/webadmin-cli/src/test/java/org/apache/james/cli/MailboxManageTest.java
AL server/apps/webadmin-cli/src/test/java/org/apache/james/cli/HelpVersionCommandTest.java
AL server/apps/webadmin-cli/src/test/java/org/apache/james/cli/DomainManageTest.java
AL server/apps/webadmin-cli/src/test/java/org/apache/james/cli/UserManageTest.java
AL server/apps/webadmin-cli/src/test/java/org/apache/james/cli/QuotaManageTest.java
AL server/apps/webadmin-cli/pom.xml
!????? server/apps/webadmin-cli/README.md
!????? server/apps/webadmin-cli/james-cli
!????? server/apps/scaling-pulsar-smtp/docker-compose.yml
!????? server/apps/scaling-pulsar-smtp/README.adoc
AL server/apps/scaling-pulsar-smtp/src/main/resources/META-INF/persistence.xml
AL server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/Main.java
AL server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/SMTPRelayConfiguration.java
AL server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/MailStoreRepositoryModule.java
!????? server/apps/scaling-pulsar-smtp/src/main/scripts/james-cli
AL server/apps/scaling-pulsar-smtp/src/test/resources/listeners.xml
AL server/apps/scaling-pulsar-smtp/src/test/resources/dnsservice.xml
AL server/apps/scaling-pulsar-smtp/src/test/resources/mailetcontainer.xml
AL server/apps/scaling-pulsar-smtp/src/test/resources/domainlist.xml
AL server/apps/scaling-pulsar-smtp/src/test/resources/backmailrepositorystore.xml
B server/apps/scaling-pulsar-smtp/src/test/resources/keystore
AL server/apps/scaling-pulsar-smtp/src/test/resources/smtpserver.xml
AL server/apps/scaling-pulsar-smtp/src/test/resources/fakemailrepositorystore.xml
AL server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/PulsarExtension.java
AL server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/SMTPJamesServerTest.java
AL server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/AwsS3BlobStoreExtension.java
AL server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/TestingSmtpRelayJamesServerBuilder.java
AL server/apps/scaling-pulsar-smtp/pom.xml
AL server/apps/scaling-pulsar-smtp/sample-configuration/webadmin.properties
!????? server/apps/scaling-pulsar-smtp/sample-configuration/extensions.properties
AL server/apps/scaling-pulsar-smtp/sample-configuration/dnsservice.xml
AL server/apps/scaling-pulsar-smtp/sample-configuration/mailetcontainer.xml
!????? server/apps/scaling-pulsar-smtp/sample-configuration/pulsar.properties
!????? server/apps/scaling-pulsar-smtp/sample-configuration/scriptFile.scala
AL server/apps/scaling-pulsar-smtp/sample-configuration/domainlist.xml
AL server/apps/scaling-pulsar-smtp/sample-configuration/mailrepositorystore.xml
!????? server/apps/scaling-pulsar-smtp/sample-configuration/jvm.properties
AL server/apps/scaling-pulsar-smtp/sample-configuration/usersrepository.xml
AL server/apps/scaling-pulsar-smtp/sample-configuration/recipientrewritetable.xml
!????? server/apps/scaling-pulsar-smtp/sample-configuration/postgres.properties
B server/apps/scaling-pulsar-smtp/sample-configuration/keystore
!????? server/apps/scaling-pulsar-smtp/sample-configuration/logback.xml
AL server/apps/scaling-pulsar-smtp/sample-configuration/jmx.properties
AL server/apps/scaling-pulsar-smtp/sample-configuration/smtpserver.xml
!????? server/apps/scaling-pulsar-smtp/sample-configuration/blob.properties
AL server/apps/scaling-pulsar-smtp/sample-configuration/healthcheck.properties
!????? server/apps/spring-app/README.crypto
AL server/apps/spring-app/src/main/resources/META-INF/persistence-template.xml
AL server/apps/spring-app/src/main/resources/META-INF/persistence.xml
AL server/apps/spring-app/src/main/resources/META-INF/jpa-mappings-template.xml
AL server/apps/spring-app/src/main/resources/dnsservice.xml
AL server/apps/spring-app/src/main/resources/lmtpserver.xml
AL server/apps/spring-app/src/main/resources/mailetcontainer.xml
AL server/apps/spring-app/src/main/resources/sieverepository.xml
AL server/apps/spring-app/src/main/resources/quota.xml
AL server/apps/spring-app/src/main/resources/sqlResources.xml
AL server/apps/spring-app/src/main/resources/imapserver.xml
AL server/apps/spring-app/src/main/resources/managesieveserver.xml
AL server/apps/spring-app/src/main/resources/indexer.xml
AL server/apps/spring-app/src/main/resources/domainlist.xml
AL server/apps/spring-app/src/main/resources/mailrepositorystore.xml
AL server/apps/spring-app/src/main/resources/mailbox.xml
!????? server/apps/spring-app/src/main/resources/log4j2.xml
AL server/apps/spring-app/src/main/resources/fetchmail.xml
AL server/apps/spring-app/src/main/resources/usersrepository.xml
AL server/apps/spring-app/src/main/resources/recipientrewritetable.xml
!????? server/apps/spring-app/src/main/resources/jmxremote.access
AL server/apps/spring-app/src/main/resources/setenv.sh
AL server/apps/spring-app/src/main/resources/james-database.properties
AL server/apps/spring-app/src/main/resources/jmx.properties
AL server/apps/spring-app/src/main/resources/smtpserver.xml
AL server/apps/spring-app/src/main/resources/pop3server.xml
!????? server/apps/spring-app/src/main/resources/jmxremote.password
N server/apps/spring-app/src/main/resources/lib/README.txt
N server/apps/spring-app/src/main/app/sieve/README.txt
AL server/apps/spring-app/src/main/app/bin/setenv.bat
AL server/apps/spring-app/src/main/app/bin/setenv.sh
AL server/apps/spring-app/src/main/appended-resources/supplemental-models.xml
AL server/apps/spring-app/src/main/java/org/apache/james/app/spring/JamesAppSpringMain.java
AL server/apps/spring-app/src/main/webapp/WEB-INF/web.xml
!????? server/apps/spring-app/src/main/licensing/app/notice-for-binary.txt
MIT server/apps/spring-app/src/main/licensing/app/license-for-binary.txt
AL server/apps/spring-app/src/main/licensing/app/licensing.xml
N server/apps/spring-app/src/main/licensing/war/NOTICE
AL server/apps/spring-app/src/main/licensing/war/licensing.xml
N server/apps/spring-app/src/main/licensing/war/LICENSE
AL server/apps/spring-app/src/test/resources/quota.xml
AL server/apps/spring-app/src/test/resources/imapserver.xml
AL server/apps/spring-app/src/test/resources/managesieveserver.xml
AL server/apps/spring-app/src/test/resources/smtpserver.xml
AL server/apps/spring-app/src/test/resources/pop3server.xml
AL server/apps/spring-app/src/test/java/org/apache/james/app/spring/JamesAppSpringMainTest.java
AL server/apps/spring-app/src/test/java/org/apache/james/app/spring/JamesSpringContextTest.java
AL server/apps/spring-app/src/assemble/app.xml
AL server/apps/spring-app/src/reporting-site/site.xml
N server/apps/spring-app/src/debian/control/copyright
!????? server/apps/spring-app/src/debian/control/control
AL server/apps/spring-app/pom.xml
N server/apps/spring-app/NOTICE
N server/apps/spring-app/LICENSE
AL server/apps/distributed-pop3-app/docker-configuration/webadmin.properties
!????? server/apps/distributed-pop3-app/docker-configuration/jvm.properties
!????? server/apps/distributed-pop3-app/docker-configuration/logback-cli.xml
!????? server/apps/distributed-pop3-app/docker-compose.yml
!????? server/apps/distributed-pop3-app/README.adoc
!????? server/apps/distributed-pop3-app/src/main/extensions-jars/README.md
AL server/apps/distributed-pop3-app/src/main/java/org/apache/james/modules/Pop3FixInconsistenciesTaskSerializationModule.java
AL server/apps/distributed-pop3-app/src/main/java/org/apache/james/modules/DistributedPop3Module.java
AL server/apps/distributed-pop3-app/src/main/java/org/apache/james/modules/Pop3FixInconsistenciesWebAdminModule.java
AL server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesConfiguration.java
AL server/apps/distributed-pop3-app/src/main/java/org/apache/james/mailbox/RandomUidProvider.java
AL server/apps/distributed-pop3-app/src/main/java/org/apache/james/mailbox/NoACLMapper.java
AL server/apps/distributed-pop3-app/src/main/java/org/apache/james/mailbox/RandomModSeqProvider.java
AL server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java
B server/apps/distributed-pop3-app/src/main/glowroot/admin.json
B server/apps/distributed-pop3-app/src/main/glowroot/plugins/blobstore.json
B server/apps/distributed-pop3-app/src/main/glowroot/plugins/smtp.json
B server/apps/distributed-pop3-app/src/main/glowroot/plugins/task.json
B server/apps/distributed-pop3-app/src/main/glowroot/plugins/mailboxListener.json
B server/apps/distributed-pop3-app/src/main/glowroot/plugins/pop3.json
B server/apps/distributed-pop3-app/src/main/glowroot/plugins/spooler.json
!????? server/apps/distributed-pop3-app/src/main/scripts/james-cli
!????? server/apps/distributed-pop3-app/src/test/resources/attachment.eml
AL server/apps/distributed-pop3-app/src/test/resources/listeners.xml
AL server/apps/distributed-pop3-app/src/test/resources/dnsservice.xml
AL server/apps/distributed-pop3-app/src/test/resources/lmtpserver.xml
AL server/apps/distributed-pop3-app/src/test/resources/mailetcontainer.xml
!????? server/apps/distributed-pop3-app/src/test/resources/big.eml
AL server/apps/distributed-pop3-app/src/test/resources/domainlist.xml
AL server/apps/distributed-pop3-app/src/test/resources/mailrepositorystore.xml
B server/apps/distributed-pop3-app/src/test/resources/keystore
!????? server/apps/distributed-pop3-app/src/test/resources/batchsizes.properties
AL server/apps/distributed-pop3-app/src/test/resources/smtpserver.xml
AL server/apps/distributed-pop3-app/src/test/resources/pop3server.xml
!????? server/apps/distributed-pop3-app/src/test/resources/rabbitmq.properties
AL server/apps/distributed-pop3-app/src/test/java/org/apache/james/Pop3ServerContract.java
AL server/apps/distributed-pop3-app/src/test/java/org/apache/james/DistributedPOP3ServerTest.java
AL server/apps/distributed-pop3-app/pom.xml
AL server/apps/distributed-pop3-app/sample-configuration/webadmin.properties
AL server/apps/distributed-pop3-app/sample-configuration/listeners.xml
!????? server/apps/distributed-pop3-app/sample-configuration/extensions.properties
AL server/apps/distributed-pop3-app/sample-configuration/dnsservice.xml
!????? server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties
AL server/apps/distributed-pop3-app/sample-configuration/lmtpserver.xml
AL server/apps/distributed-pop3-app/sample-configuration/mailetcontainer.xml
AL server/apps/distributed-pop3-app/sample-configuration/opensearch.properties
AL server/apps/distributed-pop3-app/sample-configuration/domainlist.xml
AL server/apps/distributed-pop3-app/sample-configuration/mailrepositorystore.xml
!????? server/apps/distributed-pop3-app/sample-configuration/jvm.properties
AL server/apps/distributed-pop3-app/sample-configuration/usersrepository.xml
AL server/apps/distributed-pop3-app/sample-configuration/recipientrewritetable.xml
!????? server/apps/distributed-pop3-app/sample-configuration/logback.xml
AL server/apps/distributed-pop3-app/sample-configuration/tika.properties
!????? server/apps/distributed-pop3-app/sample-configuration/cassandra-driver.conf
!????? server/apps/distributed-pop3-app/sample-configuration/batchsizes.properties
AL server/apps/distributed-pop3-app/sample-configuration/jmx.properties
AL server/apps/distributed-pop3-app/sample-configuration/smtpserver.xml
AL server/apps/distributed-pop3-app/sample-configuration/pop3server.xml
!????? server/apps/distributed-pop3-app/sample-configuration/blob.properties
!????? server/apps/distributed-pop3-app/sample-configuration/cassandra.properties
AL server/apps/distributed-pop3-app/sample-configuration/healthcheck.properties
!????? server/apps/distributed-pop3-app/sample-configuration/rabbitmq.properties
!????? server/apps/migration/core-data-jpa-to-pg/README.adoc
AL server/apps/migration/core-data-jpa-to-pg/src/main/resources/META-INF/persistence.xml
AL server/apps/migration/core-data-jpa-to-pg/src/main/java/org/apache/james/MigrationConfiguration.java
AL server/apps/migration/core-data-jpa-to-pg/src/main/java/org/apache/james/JpaToPgCoreDataMigration.java
!????? server/apps/migration/core-data-jpa-to-pg/src/main/scripts/james-migration
AL server/apps/migration/core-data-jpa-to-pg/src/test/java/org/apache/james/JpaToPgCoreDataMigrationTest.java
AL server/apps/migration/core-data-jpa-to-pg/src/test/java/org/apache/james/MariaDBExtension.java
AL server/apps/migration/core-data-jpa-to-pg/src/assemble/app.xml
MIT server/apps/migration/core-data-jpa-to-pg/src/assemble/license-for-binary.txt
!????? server/apps/migration/core-data-jpa-to-pg/src/assemble/README.adoc
!????? server/apps/migration/core-data-jpa-to-pg/src/assemble/extensions-jars.txt
AL server/apps/migration/core-data-jpa-to-pg/pom.xml
!????? server/apps/migration/core-data-jpa-to-pg/sample-configuration/postgres.properties
!????? server/apps/migration/core-data-jpa-to-pg/sample-configuration/logback.xml
AL server/apps/migration/core-data-jpa-to-pg/sample-configuration/james-database.properties
!????? server/apps/migration/core-data-jpa-to-pg/sample-configuration/blob.properties
AL server/apps/jpa-smtp-app/docker-configuration/webadmin.properties
!????? server/apps/jpa-smtp-app/docker-configuration/logback-cli.xml
!????? server/apps/jpa-smtp-app/docker-compose.yml
!????? server/apps/jpa-smtp-app/README.adoc
!????? server/apps/jpa-smtp-app/src/main/extensions-jars/README.md
AL server/apps/jpa-smtp-app/src/main/resources/META-INF/persistence.xml
AL server/apps/jpa-smtp-app/src/main/resources/defaultMailetContainer.xml
AL server/apps/jpa-smtp-app/src/main/java/org/apache/james/JPAJamesConfiguration.java
AL server/apps/jpa-smtp-app/src/main/java/org/apache/james/JPAJamesServerMain.java
B server/apps/jpa-smtp-app/src/main/glowroot/admin.json
B server/apps/jpa-smtp-app/src/main/glowroot/plugins/smtp.json
B server/apps/jpa-smtp-app/src/main/glowroot/plugins/task.json
B server/apps/jpa-smtp-app/src/main/glowroot/plugins/mailboxListener.json
B server/apps/jpa-smtp-app/src/main/glowroot/plugins/pop3.json
B server/apps/jpa-smtp-app/src/main/glowroot/plugins/spooler.json
B server/apps/jpa-smtp-app/src/main/glowroot/plugins/jmap.json
B server/apps/jpa-smtp-app/src/main/glowroot/plugins/imap.json
!????? server/apps/jpa-smtp-app/src/main/scripts/james-cli
AL server/apps/jpa-smtp-app/src/test/resources/dnsservice.xml
AL server/apps/jpa-smtp-app/src/test/resources/mailetcontainer.xml
AL server/apps/jpa-smtp-app/src/test/resources/managesieveserver.xml
AL server/apps/jpa-smtp-app/src/test/resources/domainlist.xml
AL server/apps/jpa-smtp-app/src/test/resources/mailrepositorystore.xml
B server/apps/jpa-smtp-app/src/test/resources/keystore
AL server/apps/jpa-smtp-app/src/test/resources/smtpserver.xml
AL server/apps/jpa-smtp-app/src/test/resources/fakemailrepositorystore.xml
AL server/apps/jpa-smtp-app/src/test/java/org/apache/james/JPAJamesServerTest.java
AL server/apps/jpa-smtp-app/src/test/java/org/apache/james/mariadb/JPAMariaDBJamesServerTest.java
AL server/apps/jpa-smtp-app/src/test/java/org/apache/james/mariadb/TestJPAMariaDBConfigurationModule.java
AL server/apps/jpa-smtp-app/src/assemble/app.xml
MIT server/apps/jpa-smtp-app/src/assemble/license-for-binary.txt
!????? server/apps/jpa-smtp-app/src/assemble/extensions-jars.txt
AL server/apps/jpa-smtp-app/pom.xml
AL server/apps/jpa-smtp-app/sample-configuration/webadmin.properties
!????? server/apps/jpa-smtp-app/sample-configuration/extensions.properties
AL server/apps/jpa-smtp-app/sample-configuration/james-database-mariadb.properties
AL server/apps/jpa-smtp-app/sample-configuration/dnsservice.xml
AL server/apps/jpa-smtp-app/sample-configuration/mailetcontainer.xml
AL server/apps/jpa-smtp-app/sample-configuration/domainlist.xml
AL server/apps/jpa-smtp-app/sample-configuration/mailrepositorystore.xml
!????? server/apps/jpa-smtp-app/sample-configuration/jvm.properties
AL server/apps/jpa-smtp-app/sample-configuration/usersrepository.xml
AL server/apps/jpa-smtp-app/sample-configuration/recipientrewritetable.xml
!????? server/apps/jpa-smtp-app/sample-configuration/logback.xml
AL server/apps/jpa-smtp-app/sample-configuration/james-database.properties
AL server/apps/jpa-smtp-app/sample-configuration/jmx.properties
AL server/apps/jpa-smtp-app/sample-configuration/smtpserver.xml
AL server/apps/jpa-smtp-app/sample-configuration/healthcheck.properties
!????? server/apps/postgres-app/clean_up.sql
!????? server/apps/postgres-app/sample-configuration-single/search.properties
AL server/apps/postgres-app/docker-configuration/webadmin.properties
!????? server/apps/postgres-app/docker-compose.yml
!????? server/apps/postgres-app/README.adoc
AL server/apps/postgres-app/sample-configuration-distributed/opensearch.properties
!????? server/apps/postgres-app/sample-configuration-distributed/blob.properties
!????? server/apps/postgres-app/sample-configuration-distributed/rabbitmq.properties
!????? server/apps/postgres-app/src/main/extensions-jars/README.md
AL server/apps/postgres-app/src/main/resources/defaultMailetContainer.xml
AL server/apps/postgres-app/src/main/java/org/apache/james/PostgresJamesServerMain.java
AL server/apps/postgres-app/src/main/java/org/apache/james/modules/task/DistributedTaskManagerModule.java
AL server/apps/postgres-app/src/main/java/org/apache/james/modules/data/PostgresDLPConfigurationStoreModule.java
AL server/apps/postgres-app/src/main/java/org/apache/james/PostgresJmapModule.java
AL server/apps/postgres-app/src/main/java/org/apache/james/PostgresJamesConfiguration.java
B server/apps/postgres-app/src/main/glowroot/admin.json
B server/apps/postgres-app/src/main/glowroot/plugins/smtp.json
B server/apps/postgres-app/src/main/glowroot/plugins/task.json
B server/apps/postgres-app/src/main/glowroot/plugins/mailboxListener.json
B server/apps/postgres-app/src/main/glowroot/plugins/pop3.json
B server/apps/postgres-app/src/main/glowroot/plugins/spooler.json
B server/apps/postgres-app/src/main/glowroot/plugins/jmap.json
B server/apps/postgres-app/src/main/glowroot/plugins/imap.json
!????? server/apps/postgres-app/src/main/scripts/james-cli
AL server/apps/postgres-app/src/test/resources/webadmin.properties
AL server/apps/postgres-app/src/test/resources/dnsservice.xml
AL server/apps/postgres-app/src/test/resources/lmtpserver.xml
AL server/apps/postgres-app/src/test/resources/mailetcontainer.xml
!????? server/apps/postgres-app/src/test/resources/eml/htmlMail.eml
AL server/apps/postgres-app/src/test/resources/imapserver.xml
AL server/apps/postgres-app/src/test/resources/managesieveserver.xml
AL server/apps/postgres-app/src/test/resources/domainlist.xml
AL server/apps/postgres-app/src/test/resources/mailrepositorystore.xml
AL server/apps/postgres-app/src/test/resources/usersrepository.xml
B server/apps/postgres-app/src/test/resources/keystore
AL server/apps/postgres-app/src/test/resources/smtpserver.xml
AL server/apps/postgres-app/src/test/resources/pop3server.xml
AL server/apps/postgres-app/src/test/resources/fakemailrepositorystore.xml
AL server/apps/postgres-app/src/test/java/org/apache/james/PostgresWithTikaTest.java
AL server/apps/postgres-app/src/test/java/org/apache/james/PostgresJmapJamesServerTest.java
AL server/apps/postgres-app/src/test/java/org/apache/james/DistributedPostgresJamesServerTest.java
AL server/apps/postgres-app/src/test/java/org/apache/james/JamesServerConcreteContract.java
AL server/apps/postgres-app/src/test/java/org/apache/james/PostgresJamesServerTest.java
AL server/apps/postgres-app/src/test/java/org/apache/james/PostgresBlobStoreIntegrationTest.java
AL server/apps/postgres-app/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
AL server/apps/postgres-app/src/test/java/org/apache/james/PostgresWithScanningSearchTest.java
AL server/apps/postgres-app/src/test/java/org/apache/james/PostgresWithOpenSearchDisabledTest.java
AL server/apps/postgres-app/src/test/java/org/apache/james/PostgresWithLDAPJamesServerTest.java
AL server/apps/postgres-app/src/test/java/org/apache/james/BodyDeduplicationIntegrationTest.java
AL server/apps/postgres-app/src/assemble/app.xml
MIT server/apps/postgres-app/src/assemble/license-for-binary.txt
!????? server/apps/postgres-app/src/assemble/extensions-jars.txt
AL server/apps/postgres-app/pom.xml
!????? server/apps/postgres-app/provision.sh
!????? server/apps/postgres-app/imap-provision-conf/provisioning.properties
AL server/apps/postgres-app/sample-configuration/webadmin.properties
AL server/apps/postgres-app/sample-configuration/listeners.xml
!????? server/apps/postgres-app/sample-configuration/extensions.properties
!????? server/apps/postgres-app/sample-configuration/jwt_publickey
AL server/apps/postgres-app/sample-configuration/dnsservice.xml
!????? server/apps/postgres-app/sample-configuration/deletedMessageVault.properties
AL server/apps/postgres-app/sample-configuration/lmtpserver.xml
AL server/apps/postgres-app/sample-configuration/mailetcontainer.xml
AL server/apps/postgres-app/sample-configuration/imapserver.xml
AL server/apps/postgres-app/sample-configuration/managesieveserver.xml
AL server/apps/postgres-app/sample-configuration/domainlist.xml
AL server/apps/postgres-app/sample-configuration/mailrepositorystore.xml
!????? server/apps/postgres-app/sample-configuration/jvm.properties
AL server/apps/postgres-app/sample-configuration/usersrepository.xml
AL server/apps/postgres-app/sample-configuration/recipientrewritetable.xml
!????? server/apps/postgres-app/sample-configuration/postgres.properties
!????? server/apps/postgres-app/sample-configuration/logback.xml
!????? server/apps/postgres-app/sample-configuration/jmap.properties
AL server/apps/postgres-app/sample-configuration/jmx.properties
AL server/apps/postgres-app/sample-configuration/smtpserver.xml
AL server/apps/postgres-app/sample-configuration/pop3server.xml
!????? server/apps/postgres-app/sample-configuration/droplists.properties
!????? server/apps/postgres-app/sample-configuration/blob.properties
AL server/apps/postgres-app/sample-configuration/healthcheck.properties
!????? server/apps/postgres-app/docker-compose-distributed.yml
!????? server/apps/postgres-app/performance-test.md
!????? server/apps/demo/initialdata.sh
!????? server/apps/demo/Dockerfile
AL server/apps/demo/imapserver.xml
!????? server/apps/demo/startup.sh
AL server/apps/demo/smtpserver.xml
AL server/apps/demo/pop3server.xml
!????? server/apps/cli/README.adoc
AL server/apps/cli/src/main/java/org/apache/james/cli/ServerCmd.java
AL server/apps/cli/src/main/java/org/apache/james/cli/type/CmdType.java
AL server/apps/cli/src/main/java/org/apache/james/cli/exceptions/MissingCommandException.java
AL server/apps/cli/src/main/java/org/apache/james/cli/exceptions/InvalidArgumentNumberException.java
AL server/apps/cli/src/main/java/org/apache/james/cli/exceptions/UnrecognizedCommandException.java
AL server/apps/cli/src/main/java/org/apache/james/cli/exceptions/JamesCliException.java
AL server/apps/cli/src/main/java/org/apache/james/cli/probe/impl/JmxConnection.java
AL server/apps/cli/src/main/java/org/apache/james/cli/probe/impl/JmxSieveProbe.java
AL server/apps/cli/src/main/java/org/apache/james/cli/probe/impl/JmxMailboxProbe.java
AL server/apps/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java
AL server/apps/cli/src/main/java/org/apache/james/cli/probe/impl/JmxQuotaProbe.java
AL server/apps/cli/src/main/java/org/apache/james/cli/probe/impl/JmxProbe.java
AL server/apps/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDropListProbe.java
AL server/apps/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java
AL server/apps/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
AL server/apps/cli/src/assemble/app.xml
MIT server/apps/cli/src/assemble/license-for-binary.txt
AL server/apps/cli/src/reporting-site/site.xml
AL server/apps/cli/pom.xml
AL server/apps/distributed-app/docker-configuration/webadmin.properties
!????? server/apps/distributed-app/docker-configuration/jvm.properties
!????? server/apps/distributed-app/docker-configuration/logback-cli.xml
!????? server/apps/distributed-app/docker-compose.yml
!????? server/apps/distributed-app/helm-chart/james/templates/secrets.yaml
!????? server/apps/distributed-app/helm-chart/james/templates/servicemonitor.yaml
!????? server/apps/distributed-app/helm-chart/james/templates/james-admin-ingress.yaml
!????? server/apps/distributed-app/helm-chart/james/templates/_docker-secrets.tpl
!????? server/apps/distributed-app/helm-chart/james/templates/_helpers.tpl
!????? server/apps/distributed-app/helm-chart/james/templates/jmap-ingress.yaml
!????? server/apps/distributed-app/helm-chart/james/templates/deployment.yaml
!????? server/apps/distributed-app/helm-chart/james/templates/service.yaml
!????? server/apps/distributed-app/helm-chart/james/templates/_urls.tpl
!????? server/apps/distributed-app/helm-chart/james/templates/configmaps.yaml
!????? server/apps/distributed-app/helm-chart/james/secrets.sample.yaml
!????? server/apps/distributed-app/helm-chart/james/Chart.yaml
!????? server/apps/distributed-app/helm-chart/james/values.yaml
B server/apps/distributed-app/helm-chart/james/values.schema.json
!????? server/apps/distributed-app/helm-chart/james/configs/webadmin.properties
AL server/apps/distributed-app/helm-chart/james/configs/listeners.xml
AL server/apps/distributed-app/helm-chart/james/configs/dnsservice.xml
AL server/apps/distributed-app/helm-chart/james/configs/imapserver.xml
AL server/apps/distributed-app/helm-chart/james/configs/opensearch.properties
AL server/apps/distributed-app/helm-chart/james/configs/domainlist.xml
AL server/apps/distributed-app/helm-chart/james/configs/mailrepositorystore.xml
AL server/apps/distributed-app/helm-chart/james/configs/usersrepository.xml
AL server/apps/distributed-app/helm-chart/james/configs/recipientrewritetable.xml
AL server/apps/distributed-app/helm-chart/james/configs/logback.xml
!????? server/apps/distributed-app/helm-chart/james/configs/jmap.properties
!????? server/apps/distributed-app/helm-chart/james/configs/batchsizes.properties
AL server/apps/distributed-app/helm-chart/james/configs/jmx.properties
AL server/apps/distributed-app/helm-chart/james/configs/smtpserver.xml
!????? server/apps/distributed-app/helm-chart/james/configs/blob.properties
!????? server/apps/distributed-app/helm-chart/james/configs/cassandra.properties
!????? server/apps/distributed-app/helm-chart/james/configs/rabbitmq.properties
!????? server/apps/distributed-app/helm-chart/README.md
!????? server/apps/distributed-app/docker-compose-with-pulsar.yml
!????? server/apps/distributed-app/README.adoc
!????? server/apps/distributed-app/src/main/extensions-jars/README.md
AL server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesConfiguration.java
AL server/apps/distributed-app/src/main/java/org/apache/james/MailQueueChoice.java
AL server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
B server/apps/distributed-app/src/main/glowroot/admin.json
B server/apps/distributed-app/src/main/glowroot/plugins/blobstore.json
B server/apps/distributed-app/src/main/glowroot/plugins/smtp.json
B server/apps/distributed-app/src/main/glowroot/plugins/task.json
B server/apps/distributed-app/src/main/glowroot/plugins/mailboxListener.json
B server/apps/distributed-app/src/main/glowroot/plugins/pop3.json
B server/apps/distributed-app/src/main/glowroot/plugins/spooler.json
B server/apps/distributed-app/src/main/glowroot/plugins/jmap.json
B server/apps/distributed-app/src/main/glowroot/plugins/imap.json
!????? server/apps/distributed-app/src/main/scripts/james-cli
AL server/apps/distributed-app/src/test/resources/listeners.xml
AL server/apps/distributed-app/src/test/resources/dnsservice.xml
AL server/apps/distributed-app/src/test/resources/lmtpserver.xml
AL server/apps/distributed-app/src/test/resources/mailetcontainer.xml
!????? server/apps/distributed-app/src/test/resources/eml/htmlMail.eml
AL server/apps/distributed-app/src/test/resources/imapserver.xml
AL server/apps/distributed-app/src/test/resources/managesieveserver.xml
AL server/apps/distributed-app/src/test/resources/domainlist.xml
AL server/apps/distributed-app/src/test/resources/mailrepositorystore.xml
B server/apps/distributed-app/src/test/resources/keystore
!????? server/apps/distributed-app/src/test/resources/batchsizes.properties
AL server/apps/distributed-app/src/test/resources/smtpserver.xml
AL server/apps/distributed-app/src/test/resources/pop3server.xml
!????? server/apps/distributed-app/src/test/resources/rabbitmq.properties
AL server/apps/distributed-app/src/test/java/org/apache/james/CassandraRabbitMQJamesConfigurationTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/WithEncryptedBlobStoreTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java
AL server/apps/distributed-app/src/test/java/org/apache/james/JamesServerConcreteContract.java
AL server/apps/distributed-app/src/test/java/org/apache/james/DistributedJamesWithTikaTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/WithScanningSearchTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/WithDefaultAwsS3Test.java
AL server/apps/distributed-app/src/test/java/org/apache/james/MailsShouldBeWellReceivedConcreteContract.java
AL server/apps/distributed-app/src/test/java/org/apache/james/RabbitMQJamesServerReprocessingTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/CassandraMessageOperationsContract.java
AL server/apps/distributed-app/src/test/java/org/apache/james/modules/S3SSECBlobStoreExtension.java
AL server/apps/distributed-app/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationValidationStartUpCheckTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/NamespaceConfigurationTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/RabbitMQJamesServerWithRetryConnectionTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/RabbitMQDisabledTasksTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/CassandraCacheQueryTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/CassandraPulsarJamesServerTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/WithCacheTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/WithS3SSECTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/WithoutMailQueueViewTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/WithCassandraPassThroughBlobStoreTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/cassandra/KeyspaceCreationTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/cassandra/CacheSessionTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/cassandra/CassandraSchemaVersionStartUpCheckTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/cassandra/CassandraWithOpenSearchDisabled.java
AL server/apps/distributed-app/src/test/java/org/apache/james/cassandra/AuthenticatedCassandraJamesServerTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/cassandra/CassandraWithTikaTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/cassandra/TestingDistributedJamesServerBuilder.java
AL server/apps/distributed-app/src/test/java/org/apache/james/cassandra/CassandraNodeConfTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/cassandra/JamesWithNonCompatibleElasticSearchServerTest.java
AL server/apps/distributed-app/src/test/java/org/apache/james/cassandra/JamesServerWithRetryConnectionTest.java
AL server/apps/distributed-app/src/assemble/app.xml
MIT server/apps/distributed-app/src/assemble/license-for-binary.txt
!????? server/apps/distributed-app/src/assemble/extensions-jars.txt
AL server/apps/distributed-app/pom.xml
AL server/apps/distributed-app/sample-configuration/webadmin.properties
AL server/apps/distributed-app/sample-configuration/listeners.xml
!????? server/apps/distributed-app/sample-configuration/extensions.properties
AL server/apps/distributed-app/sample-configuration/dnsservice.xml
!????? server/apps/distributed-app/sample-configuration/deletedMessageVault.properties
AL server/apps/distributed-app/sample-configuration/lmtpserver.xml
AL server/apps/distributed-app/sample-configuration/mailetcontainer.xml
!????? server/apps/distributed-app/sample-configuration/queue-pulsar.properties
!????? server/apps/distributed-app/sample-configuration/pulsar.properties
AL server/apps/distributed-app/sample-configuration/imapserver.xml
AL server/apps/distributed-app/sample-configuration/managesieveserver.xml
AL server/apps/distributed-app/sample-configuration/opensearch.properties
AL server/apps/distributed-app/sample-configuration/domainlist.xml
AL server/apps/distributed-app/sample-configuration/mailrepositorystore.xml
!????? server/apps/distributed-app/sample-configuration/jvm.properties
AL server/apps/distributed-app/sample-configuration/usersrepository.xml
!????? server/apps/distributed-app/sample-configuration/queue.properties
AL server/apps/distributed-app/sample-configuration/recipientrewritetable.xml
!????? server/apps/distributed-app/sample-configuration/logback.xml
AL server/apps/distributed-app/sample-configuration/tika.properties
!????? server/apps/distributed-app/sample-configuration/jmap.properties
!????? server/apps/distributed-app/sample-configuration/cassandra-driver.conf
!????? server/apps/distributed-app/sample-configuration/batchsizes.properties
AL server/apps/distributed-app/sample-configuration/jmx.properties
AL server/apps/distributed-app/sample-configuration/smtpserver.xml
AL server/apps/distributed-app/sample-configuration/pop3server.xml
!????? server/apps/distributed-app/sample-configuration/droplists.properties
!????? server/apps/distributed-app/sample-configuration/blob.properties
!????? server/apps/distributed-app/sample-configuration/cassandra.properties
AL server/apps/distributed-app/sample-configuration/healthcheck.properties
!????? server/apps/distributed-app/sample-configuration/rabbitmq.properties
!????? server/apps/distributed-app/docs/Dockerfile
!????? server/apps/distributed-app/docs/ui-overrides/partials/header-content.hbs
!????? server/apps/distributed-app/docs/ui-overrides/img/james.svg
!????? server/apps/distributed-app/docs/modules/ROOT/nav.adoc
!????? server/apps/distributed-app/docs/modules/ROOT/pages/index.adoc
!????? server/apps/distributed-app/docs/README.md
!????? server/apps/distributed-app/docs/antora-playbook-local.yml
!????? server/apps/distributed-app/docs/antora.yml
!????? server/apps/cli-integration-tests/src/test/resources/jwt_publickey
AL server/apps/cli-integration-tests/src/test/resources/dnsservice.xml
AL server/apps/cli-integration-tests/src/test/resources/lmtpserver.xml
AL server/apps/cli-integration-tests/src/test/resources/mailetcontainer.xml
AL server/apps/cli-integration-tests/src/test/resources/imapserver.xml
AL server/apps/cli-integration-tests/src/test/resources/managesieveserver.xml
AL server/apps/cli-integration-tests/src/test/resources/mailrepositorystore.xml
AL server/apps/cli-integration-tests/src/test/resources/usersrepository.xml
AL server/apps/cli-integration-tests/src/test/resources/conf/jmx.properties
AL server/apps/cli-integration-tests/src/test/resources/smtpserver.xml
AL server/apps/cli-integration-tests/src/test/resources/pop3server.xml
AL server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/DropListCommandsIntegrationTest.java
AL server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/MailboxCommandsIntegrationTest.java
AL server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java
AL server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/util/OutputCapture.java
AL server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/util/OutputCaptureTest.java
AL server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/ReindexCommandIntegrationTest.java
AL server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/DataCommandsIntegrationTest.java
AL server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/SieveQuotaCommandsIntegrationTest.java
AL server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/JmxSecurityServerIntegrationTest.java
AL server/apps/cli-integration-tests/pom.xml
AL server/apps/jpa-app/docker-configuration/webadmin.properties
!????? server/apps/jpa-app/docker-configuration/logback-cli.xml
!????? server/apps/jpa-app/docker-compose.yml
!????? server/apps/jpa-app/README.adoc
!????? server/apps/jpa-app/src/main/extensions-jars/README.md
AL server/apps/jpa-app/src/main/resources/META-INF/persistence.xml
AL server/apps/jpa-app/src/main/resources/defaultMailetContainer.xml
AL server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesConfiguration.java
AL server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java
B server/apps/jpa-app/src/main/glowroot/admin.json
B server/apps/jpa-app/src/main/glowroot/plugins/smtp.json
B server/apps/jpa-app/src/main/glowroot/plugins/task.json
B server/apps/jpa-app/src/main/glowroot/plugins/mailboxListener.json
B server/apps/jpa-app/src/main/glowroot/plugins/pop3.json
B server/apps/jpa-app/src/main/glowroot/plugins/spooler.json
B server/apps/jpa-app/src/main/glowroot/plugins/jmap.json
B server/apps/jpa-app/src/main/glowroot/plugins/imap.json
!????? server/apps/jpa-app/src/main/scripts/james-cli
AL server/apps/jpa-app/src/test/resources/dnsservice.xml
AL server/apps/jpa-app/src/test/resources/lmtpserver.xml
AL server/apps/jpa-app/src/test/resources/mailetcontainer.xml
AL server/apps/jpa-app/src/test/resources/imapserver.xml
AL server/apps/jpa-app/src/test/resources/managesieveserver.xml
AL server/apps/jpa-app/src/test/resources/domainlist.xml
AL server/apps/jpa-app/src/test/resources/mailrepositorystore.xml
B server/apps/jpa-app/src/test/resources/keystore
AL server/apps/jpa-app/src/test/resources/smtpserver.xml
AL server/apps/jpa-app/src/test/resources/pop3server.xml
AL server/apps/jpa-app/src/test/resources/fakemailrepositorystore.xml
AL server/apps/jpa-app/src/test/java/org/apache/james/JamesServerConcreteContract.java
AL server/apps/jpa-app/src/test/java/org/apache/james/JPAJamesServerWithNoDatabaseAuthenticaticationSqlValidationTest.java
AL server/apps/jpa-app/src/test/java/org/apache/james/JPAJamesServerWithAuthenticatedDatabaseSqlValidationTest.java
AL server/apps/jpa-app/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
AL server/apps/jpa-app/src/test/java/org/apache/james/JPAJamesServerTest.java
AL server/apps/jpa-app/src/test/java/org/apache/james/JPAWithLDAPJamesServerTest.java
AL server/apps/jpa-app/src/assemble/app.xml
MIT server/apps/jpa-app/src/assemble/license-for-binary.txt
!????? server/apps/jpa-app/src/assemble/extensions-jars.txt
AL server/apps/jpa-app/pom.xml
AL server/apps/jpa-app/sample-configuration/webadmin.properties
AL server/apps/jpa-app/sample-configuration/listeners.xml
!????? server/apps/jpa-app/sample-configuration/extensions.properties
AL server/apps/jpa-app/sample-configuration/james-database-mariadb.properties
!????? server/apps/jpa-app/sample-configuration/jwt_publickey
AL server/apps/jpa-app/sample-configuration/dnsservice.xml
AL server/apps/jpa-app/sample-configuration/lmtpserver.xml
AL server/apps/jpa-app/sample-configuration/mailetcontainer.xml
AL server/apps/jpa-app/sample-configuration/imapserver.xml
AL server/apps/jpa-app/sample-configuration/managesieveserver.xml
AL server/apps/jpa-app/sample-configuration/domainlist.xml
AL server/apps/jpa-app/sample-configuration/mailrepositorystore.xml
!????? server/apps/jpa-app/sample-configuration/jvm.properties
AL server/apps/jpa-app/sample-configuration/usersrepository.xml
AL server/apps/jpa-app/sample-configuration/recipientrewritetable.xml
!????? server/apps/jpa-app/sample-configuration/logback.xml
AL server/apps/jpa-app/sample-configuration/james-database.properties
AL server/apps/jpa-app/sample-configuration/jmx.properties
AL server/apps/jpa-app/sample-configuration/smtpserver.xml
AL server/apps/jpa-app/sample-configuration/pop3server.xml
!????? server/apps/jpa-app/sample-configuration/droplists.properties
AL server/apps/jpa-app/sample-configuration/healthcheck.properties
AL server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStoreFactory.java
AL server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStoreDAO.java
AL server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStoreDAOTest.java
AL server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStoreTest.java
AL server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStorePassThroughTest.java
AL server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStoreGCAlgorithmTest.java
AL server/blob/blob-memory/pom.xml
AL server/blob/blob-common/src/main/java/org/apache/james/blob/api/Store.java
AL server/blob/blob-common/pom.xml
AL server/blob/blob-file/src/main/java/org/apache/james/blob/file/FileBlobStoreDAO.java
AL server/blob/blob-file/src/main/java/org/apache/james/blob/file/FileBlobStoreFactory.java
AL server/blob/blob-file/src/test/java/org/apache/james/blob/file/FileBlobStoreTest.java
AL server/blob/blob-file/src/test/java/org/apache/james/blob/file/FileBlobStorePassThroughTest.java
AL server/blob/blob-file/src/test/java/org/apache/james/blob/file/FileBlobStoreGCAlgorithmTest.java
AL server/blob/blob-file/src/test/java/org/apache/james/blob/file/FileBlobStoreDAOTest.java
AL server/blob/blob-file/pom.xml
AL server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStoreDAO.java
AL server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobId.java
AL server/blob/blob-api/src/main/java/org/apache/james/blob/api/ObjectNotFoundException.java
AL server/blob/blob-api/src/main/java/org/apache/james/blob/api/ObjectStorageHealthCheck.java
AL server/blob/blob-api/src/main/java/org/apache/james/blob/api/PlainBlobId.java
AL server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobPartsId.java
AL server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobReferenceSource.java
AL server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobType.java
AL server/blob/blob-api/src/main/java/org/apache/james/blob/api/ObjectStoreIOException.java
AL server/blob/blob-api/src/main/java/org/apache/james/blob/api/ObjectStoreException.java
AL server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java
AL server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java
AL server/blob/blob-api/src/main/java/org/apache/james/blob/api/BucketName.java
B server/blob/blob-api/src/test/resources/shattered-2.pdf
B server/blob/blob-api/src/test/resources/shattered-1.pdf
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobTypeTest.java
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/DeleteBlobStoreDAOContract.java
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/TestBlobId.java
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/MetricableBlobStoreContract.java
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/BucketNameTest.java
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreDAOContract.java
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/DeduplicationBlobStoreContract.java
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/BucketBlobStoreContract.java
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/PlainBlobIdTest.java
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/BucketBlobStoreDAOContract.java
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/DeleteBlobStoreContract.java
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreContract.java
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/ReadSaveBlobStoreDAOContract.java
AL server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreDAOFixture.java
AL server/blob/blob-api/pom.xml
AL server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java
AL server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanismTest.java
AL server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/FileSystemExtensionTest.java
AL server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/FileSystemExtension.java
AL server/blob/blob-export-file/pom.xml
AL server/blob/pom.xml
AL server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraDefaultBucketDAO.java
AL server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreDAO.java
AL server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBucketDAO.java
AL server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobDataDefinition.java
AL server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/BlobTables.java
AL server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobCacheDataDefinition.java
AL server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraCacheConfiguration.java
AL server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/BlobStoreCache.java
AL server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CachedBlobStore.java
AL server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCache.java
AL server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java
!????? server/blob/blob-cassandra/src/test/resources/cassandra-driver.conf
AL server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBucketDAOTest.java
AL server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreClOneTest.java
AL server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraDefaultBucketDAOTest.java
AL server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreContract.java
AL server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreDAOTest.java
AL server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraPassTroughBlobStoreTest.java
AL server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java
AL server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CassandraCacheConfigurationTest.java
AL server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/BlobStoreCacheContract.java
AL server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCacheTest.java
AL server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreFixture.java
AL server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreTest.java
AL server/blob/blob-cassandra/pom.xml
AL server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/PassThroughBlobStore.scala
AL server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/DeDuplicationBlobStore.scala
AL server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/MinIOGenerationAwareBlobId.java
AL server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/GenerationAwareBlobId.java
AL server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BlobReferenceAggregate.java
AL server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/GenerationAware.java
AL server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BloomFilterGCAlgorithm.java
AL server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/StorageStrategy.java
AL server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BlobGCTaskAdditionalInformationDTO.java
AL server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BlobGCTaskDTO.java
AL server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BlobGCTask.java
AL server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BlobStoreFactory.java
B server/blob/blob-storage-strategy/src/test/resources/json/blobGC-legacy.task.json
B server/blob/blob-storage-strategy/src/test/resources/json/blobGC.additionalInformation.json
B server/blob/blob-storage-strategy/src/test/resources/json/blobGC.task.json
B server/blob/blob-storage-strategy/src/test/resources/json/blobGC-legacy.additionalInformation.json
AL server/blob/blob-storage-strategy/src/test/java/org/apache/james/server/blob/deduplication/BlobGCTaskSerializationTest.java
AL server/blob/blob-storage-strategy/src/test/java/org/apache/james/server/blob/deduplication/BloomFilterGCAlgorithmContract.java
AL server/blob/blob-storage-strategy/src/test/java/org/apache/james/server/blob/deduplication/GenerationAwareBlobIdTest.java
AL server/blob/blob-storage-strategy/src/test/java/org/apache/james/server/blob/deduplication/BlobGCTaskAdditionalInformationDTOTest.java
AL server/blob/blob-storage-strategy/src/test/java/org/apache/james/server/blob/deduplication/MinIOGenerationAwareBlobIdTest.java
AL server/blob/blob-storage-strategy/pom.xml
AL server/blob/mail-store/src/main/java/org/apache/james/blob/mail/MimeMessagePartsId.java
AL server/blob/mail-store/src/main/java/org/apache/james/blob/mail/MimeMessageStore.java
AL server/blob/mail-store/src/test/java/org/apache/james/blob/mail/MimeMessageStoreTest.java
AL server/blob/mail-store/src/test/java/org/apache/james/blob/mail/MimeMessagePartsIdTest.java
AL server/blob/mail-store/pom.xml
AL server/blob/blob-postgres/src/main/java/org/apache/james/blob/postgres/PostgresBlobStoreDAO.java
AL server/blob/blob-postgres/src/main/java/org/apache/james/blob/postgres/PostgresBlobStorageDataDefinition.java
AL server/blob/blob-postgres/src/test/java/org/apache/james/blob/postgres/PostgresBlobStoreDAOTest.java
AL server/blob/blob-postgres/src/test/java/org/apache/james/blob/postgres/PostgresBlobStoreGCAlgorithmTest.java
AL server/blob/blob-postgres/pom.xml
AL server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/S3RequestOption.java
AL server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3AuthConfiguration.java
AL server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/sse/S3SSECustomerKeyFactory.java
AL server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/sse/S3SSECustomerKeyGenerator.java
AL server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/sse/S3SSECConfiguration.java
AL server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/Region.java
AL server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreConfiguration.java
AL server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/BucketNameResolver.java
AL server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/JamesS3MetricPublisher.java
AL server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/S3ClientFactory.java
AL server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/MinimalCopyBytesResponseTransformer.java
AL server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreDAO.java
!????? server/blob/blob-s3/src/test/resources/minio/public.crt
!????? server/blob/blob-s3/src/test/resources/minio/private.key
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3HealthCheckTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3PrefixAndNamespaceTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/BucketNameResolverTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3WithMinIOGenerationAwareBlobIdTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/sse/S3SSECContract.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/sse/S3SSECustomerKeyGeneratorTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/sse/S3BlobStoreDAOWithSSECTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/sse/SingleCustomerKeyFactoryTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioDocker.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3PrefixTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/RegionTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Singleton.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioBlobStoreGCAlgorithmTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3AuthConfigurationTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3NamespaceTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreDAOTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Extension.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreConfigurationTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3DeDuplicationBlobStoreTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3PassThroughBlobStoreTest.java
AL server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioExtension.java
AL server/blob/blob-s3/pom.xml
AL server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoConfig.java
AL server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/PBKDF2StreamingAeadFactory.java
AL server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoConfigBuilder.java
AL server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/AESBlobStoreDAO.java
AL server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoException.java
AL server/blob/blob-aes/src/test/java/org/apache/james/blob/aes/AESBlobStoreDAOTest.java
AL server/blob/blob-aes/pom.xml
AL server/blob/blob-export-api/src/main/java/org/apache/james/blob/export/api/FileExtension.java
AL server/blob/blob-export-api/src/main/java/org/apache/james/blob/export/api/BlobExportMechanism.java
AL server/blob/blob-export-api/src/main/java/org/apache/james/blob/export/api/ExportedFileNamesGenerator.java
AL server/blob/blob-export-api/src/test/java/org/apache/james/blob/export/api/ExportedFileNamesGeneratorTest.java
AL server/blob/blob-export-api/src/test/java/org/apache/james/blob/export/api/FileExtensionTest.java
AL server/blob/blob-export-api/pom.xml
AL server/task/task-api/src/main/scala/org/apache/james/task/TaskExecutionDetails.scala
AL server/task/task-api/src/main/scala/org/apache/james/task/Hostname.scala
AL server/task/task-api/src/main/java/org/apache/james/task/TaskNotFoundException.java
AL server/task/task-api/src/main/java/org/apache/james/task/Task.java
AL server/task/task-api/src/main/java/org/apache/james/task/TaskType.java
AL server/task/task-api/src/main/java/org/apache/james/task/TaskManager.java
AL server/task/task-api/src/main/java/org/apache/james/task/TaskId.java
AL server/task/task-api/src/main/java/org/apache/james/task/AsyncSafeTask.java
AL server/task/task-api/src/test/java/org/apache/james/task/ThrowingTask.java
AL server/task/task-api/src/test/java/org/apache/james/task/MemoryReferenceTask.java
AL server/task/task-api/src/test/java/org/apache/james/task/TaskIdTest.java
AL server/task/task-api/src/test/java/org/apache/james/task/TaskTypeTest.java
AL server/task/task-api/src/test/java/org/apache/james/task/TaskTest.java
AL server/task/task-api/src/test/java/org/apache/james/task/CompletedTask.java
AL server/task/task-api/src/test/java/org/apache/james/task/FailsDeserializationTask.java
AL server/task/task-api/src/test/java/org/apache/james/task/FailedTask.java
AL server/task/task-api/src/test/java/org/apache/james/task/TaskManagerContract.java
AL server/task/task-api/src/test/java/org/apache/james/task/MemoryReferenceWithCounterTask.java
AL server/task/task-api/pom.xml
AL server/task/task-postgres/src/main/scala/org/apache/james/task/eventsourcing/postgres/PostgresTaskExecutionDetailsProjection.scala
AL server/task/task-postgres/src/main/scala/org/apache/james/task/eventsourcing/postgres/PostgresTaskExecutionDetailsProjectionDataDefinition.scala
AL server/task/task-postgres/src/main/scala/org/apache/james/task/eventsourcing/postgres/PostgresTaskExecutionDetailsProjectionDAO.scala
AL server/task/task-postgres/src/test/java/org/apache/james/task/eventsourcing/postgres/PostgresTaskExecutionDetailsProjectionDAOTest.java
AL server/task/task-postgres/src/test/java/org/apache/james/task/eventsourcing/postgres/PostgresTaskExecutionDetailsProjectionTest.java
!????? server/task/task-postgres/pom.xml
AL server/task/task-json/src/main/java/org/apache/james/server/task/json/TaskModuleInjectionKeys.java
AL server/task/task-json/src/main/java/org/apache/james/server/task/json/TaskExtensionModule.java
AL server/task/task-json/src/main/java/org/apache/james/server/task/json/JsonTaskSerializer.java
AL server/task/task-json/src/main/java/org/apache/james/server/task/json/JsonTaskAdditionalInformationSerializer.java
AL server/task/task-json/src/main/java/org/apache/james/server/task/json/dto/TaskDTO.java
AL server/task/task-json/src/main/java/org/apache/james/server/task/json/dto/AdditionalInformationDTO.java
AL server/task/task-json/src/main/java/org/apache/james/server/task/json/dto/TaskDTOModule.java
AL server/task/task-json/src/main/java/org/apache/james/server/task/json/dto/AdditionalInformationDTOModule.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/TaskDeserializerTest.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializerTest.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/FailedTaskDTO.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTOModules.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceWithCounterTaskStore.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceTaskStore.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/FailsDeserializationTaskDTO.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/ThrowingTaskDTO.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceWithCounterTaskDTO.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceWithCounterTaskAdditionalInformationDTO.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/CompletedTaskDTO.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceTaskDTO.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/TestTask.java
AL server/task/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java
AL server/task/task-json/pom.xml
AL server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueueSupplier.scala
AL server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueueConfiguration.scala
AL server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/distributed/TaskEventDTO.scala
AL server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionModule.scala
AL server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionDAO.scala
AL server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjection.scala
AL server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/DistributedTaskManagerHealthCheck.java
AL server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueueReconnectionHandler.java
AL server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/TerminationReconnectionHandler.java
AL server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueue.java
AL server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/RabbitMQTerminationSubscriber.java
AL server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/TasksSerializationModule.java
AL server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/TerminationQueueName.java
AL server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/CancelRequestQueueName.java
AL server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueuePersistenceTest.java
AL server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQTerminationSubscriberTest.java
AL server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/DistributedTaskManagerTest.java
AL server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/DistributedTaskManagerWithQuorumQueueTest.java
AL server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueueTest.java
AL server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/ImmediateWorker.java
AL server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/TaskEventsSerializationTest.java
AL server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionTest.java
AL server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionDAOTest.java
AL server/task/task-distributed/pom.xml
AL server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/TaskExecutionDetailsProjection.scala
AL server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/Events.scala
AL server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/DecisionProjection.scala
AL server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/WorkerStatusListener.scala
AL server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/TaskAggregate.scala
AL server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/TaskAggregateId.scala
AL server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/WorkQueueSupplier.scala
AL server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/CommandHandlers.scala
AL server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/TaskCommand.scala
AL server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/EventSourcingTaskManager.scala
AL server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/TerminationSubscriber.scala
AL server/task/task-memory/src/main/java/org/apache/james/task/WorkQueue.java
AL server/task/task-memory/src/main/java/org/apache/james/task/SerialTaskManagerWorker.java
AL server/task/task-memory/src/main/java/org/apache/james/task/MemoryWorkQueue.java
AL server/task/task-memory/src/main/java/org/apache/james/task/MemoryTaskManager.java
AL server/task/task-memory/src/main/java/org/apache/james/task/TaskWithId.java
AL server/task/task-memory/src/main/java/org/apache/james/task/TaskExecutionDetailsUpdater.java
AL server/task/task-memory/src/main/java/org/apache/james/task/TaskManagerWorker.java
AL server/task/task-memory/src/test/scala/org/apache/james/task/TaskExecutionDetailsFixture.scala
AL server/task/task-memory/src/test/java/org/apache/james/task/TaskWithIdTest.java
AL server/task/task-memory/src/test/java/org/apache/james/task/SerialTaskManagerWorkerTest.java
AL server/task/task-memory/src/test/java/org/apache/james/task/eventsourcing/MemoryTaskExecutionDetailsProjectionTest.java
AL server/task/task-memory/src/test/java/org/apache/james/task/eventsourcing/TaskAggregateTest.java
AL server/task/task-memory/src/test/java/org/apache/james/task/eventsourcing/EventSourcingTaskManagerTest.java
AL server/task/task-memory/src/test/java/org/apache/james/task/eventsourcing/TerminationSubscriberContract.java
AL server/task/task-memory/src/test/java/org/apache/james/task/eventsourcing/TaskExecutionDetailsProjectionContract.java
AL server/task/task-memory/src/test/java/org/apache/james/task/eventsourcing/MemoryTerminationSubscriberTest.java
AL server/task/task-memory/src/test/java/org/apache/james/task/MemoryTaskManagerTest.java
AL server/task/task-memory/src/test/java/org/apache/james/task/CountDownLatchExtension.java
AL server/task/task-memory/pom.xml
AL server/src/main/appended-resources/supplemental-models.xml
AL server/src/reporting-site/site.xml
AL server/pom.xml
AL server/dns-service/dnsservice-dnsjava/src/main/resources/META-INF/spring/dns-context.xml
AL server/dns-service/dnsservice-dnsjava/src/main/java/org/apache/james/dnsservice/dnsjava/DNSJavaService.java
AL server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/test-zone.com.zone
AL server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/three-mx.bar.zone
AL server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/two-mx.sameprio.zone
AL server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/pippo.com.zone
AL server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/brandilyncollins.com.zone
AL server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/dnstest.com.zone
AL server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/one-mx.bar.zone
AL server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/two-mx.differentprio.zone
AL server/dns-service/dnsservice-dnsjava/src/test/java/org/apache/james/dnsservice/dnsjava/ZoneCacheLookupRecordsAnswer.java
AL server/dns-service/dnsservice-dnsjava/src/test/java/org/apache/james/dnsservice/dnsjava/DNSJavaServiceTest.java
AL server/dns-service/dnsservice-dnsjava/src/reporting-site/site.xml
AL server/dns-service/dnsservice-dnsjava/pom.xml
AL server/dns-service/dnsservice-library/src/main/java/org/apache/james/dnsservice/library/MXHostAddressIterator.java
AL server/dns-service/dnsservice-library/src/main/java/org/apache/james/dnsservice/library/inetnetwork/model/Inet4Network.java
AL server/dns-service/dnsservice-library/src/main/java/org/apache/james/dnsservice/library/inetnetwork/model/Inet6Network.java
AL server/dns-service/dnsservice-library/src/main/java/org/apache/james/dnsservice/library/inetnetwork/model/InetNetwork.java
AL server/dns-service/dnsservice-library/src/main/java/org/apache/james/dnsservice/library/inetnetwork/InetNetworkBuilder.java
AL server/dns-service/dnsservice-library/src/main/java/org/apache/james/dnsservice/library/netmatcher/NetMatcher.java
AL server/dns-service/dnsservice-library/src/test/java/org/apache/james/dnsservice/library/inetnetwork/model/InetNetworkTest.java
AL server/dns-service/dnsservice-library/src/test/java/org/apache/james/dnsservice/library/inetnetwork/InetNetworkBuilderTest.java
AL server/dns-service/dnsservice-library/src/test/java/org/apache/james/dnsservice/library/netmatcher/NetMatcherTest.java
AL server/dns-service/dnsservice-library/src/test/java/org/apache/james/dnsservice/library/MXHostAddressIteratorTest.java
AL server/dns-service/dnsservice-library/src/reporting-site/site.xml
AL server/dns-service/dnsservice-library/pom.xml
AL server/dns-service/dnsservice-api/src/main/resources/dnsservice.xml
AL server/dns-service/dnsservice-api/src/main/java/org/apache/james/dnsservice/api/DNSService.java
AL server/dns-service/dnsservice-api/src/main/java/org/apache/james/dnsservice/api/TemporaryResolutionException.java
AL server/dns-service/dnsservice-api/src/main/java/org/apache/james/dnsservice/api/DNSServiceMBean.java
AL server/dns-service/dnsservice-api/src/reporting-site/site.xml
AL server/dns-service/dnsservice-api/pom.xml
AL server/dns-service/dnsservice-test/src/main/java/org/apache/james/dnsservice/api/InMemoryDNSService.java
AL server/dns-service/dnsservice-test/src/main/java/org/apache/james/dnsservice/api/mock/DNSFixture.java
AL server/dns-service/dnsservice-test/src/main/java/org/apache/james/dnsservice/api/mock/MockDNSService.java
AL server/dns-service/dnsservice-test/src/main/java/org/apache/james/dnsservice/api/AbstractDNSServiceTest.java
AL server/dns-service/dnsservice-test/pom.xml
AL server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/PopulateMetadataStoreListener.java
AL server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesDTO.java
AL server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesTask.java
AL server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesService.java
AL server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesAdditionalInformationDTO.java
AL server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/task/MessageInconsistenciesEntry.java
AL server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/MemoryPop3MetadataStore.java
AL server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/CassandraPop3MetadataStore.java
AL server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/Pop3MetadataDataDefinition.java
AL server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/Pop3MetadataStore.java
AL server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/DistributedMailboxAdapter.java
B server/protocols/protocols-pop3-distributed/src/test/resources/keystore
!????? server/protocols/protocols-pop3-distributed/src/test/resources/pop3server.xml
AL server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesDTOTest.java
AL server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesAdditionalInformationDTOTest.java
AL server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesServiceTest.java
AL server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/CassandraPop3MetadataStoreTest.java
AL server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/Pop3MetadataStoreContract.java
AL server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/MemoryPop3MetadataStoreTest.java
AL server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/DistributedPop3ServerTest.java
AL server/protocols/protocols-pop3-distributed/pom.xml
AL server/protocols/webadmin/webadmin-dropwizard-metrics/src/main/java/org/apache/james/webadmin/dropwizard/MetricsRoutes.java
AL server/protocols/webadmin/webadmin-dropwizard-metrics/src/test/java/org/apache/james/webadmin/dropwizard/MetricsRoutesTest.java
AL server/protocols/webadmin/webadmin-dropwizard-metrics/pom.xml
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/UploadRepositoryCleanupTask.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxTaskDTO.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/PopulateFilteringProjectionTask.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/JmapUploadRoutes.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/PopulateEmailQueryViewRequestToTask.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxService.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxTask.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/MessageFastViewProjectionCorrector.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTask.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxRoutes.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/EmailQueryViewPopulator.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunningOptionsDTO.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/PopulateFilteringProjectionRequestToTask.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/PopulateEmailQueryViewTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/UploadCleanupTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunningOptionsParser.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/UserIdentityRoutes.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/PopulateFilteringProjectionTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTask.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/UploadCleanupTaskDTO.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsRequestToTask.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunningOptions.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/dto/UserIdentity.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/Constants.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsRequestToTask.java
AL server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/PopulateEmailQueryViewTask.java
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.additionalInformation.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/populateAll.additionalInformation.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/runRulesOnMailbox.task.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.task.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.task.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/cleanUpload.task.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/populateAll.task.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.additionalInformation.legacy.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/populateFilters.additionalInformation.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/cleanUpload.additionalInformation.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.additionalInformation.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/populateFilters.task.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/runRulesOnMailbox.additionalInformation.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.task.legacy.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.task.legacy.json
B server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.additionalInformation.legacy.json
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/UploadCleanupTaskAdditionalInformationDTOTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/PopulateFilteringProjectionItemsTaskAdditionalInformationDTOTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsRequestToTaskTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/UserIdentitiesRoutesTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTaskAdditionalInformationDTOTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxRoutesTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/UploadCleanupTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsRequestToTaskTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/PopulateEmailQueryViewTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/JmapUploadRoutesTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/PopulateFilteringProjectionRequestToTaskTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/PopulateEmailQueryViewProjectionItemsTaskAdditionalInformationDTOTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTaskAdditionalInformationDTOTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/PopulateEmailQueryViewRequestToTaskTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/PopulateFilteringProjectionTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxTaskAdditionalInformationDTOTest.java
AL server/protocols/webadmin/webadmin-jmap/pom.xml
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTaskDTO.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTask.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTaskDTO.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTask.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTask.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/WebAdminClearMailRepositoryTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTaskDTO.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/HeadersDto.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/SingleMailRepositoryResponse.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/InaccessibleFieldException.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailRepositoryResponse.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/ExtendedMailRepositoryResponse.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailKeyDTO.java
AL server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java
!????? server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mail.eml
AL server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingAllMailsTaskTest.java
AL server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingServiceTest.java
AL server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
AL server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/WebAdminClearMailRepositoryTaskDTOTest.java
AL server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingOneMailTaskTest.java
AL server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ClearMailRepositoryTaskTest.java
AL server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
AL server/protocols/webadmin/webadmin-mailrepository/pom.xml
AL server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTask.java
AL server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/ClearMailQueueTaskDTO.java
AL server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskDTO.java
AL server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/ClearMailQueueTask.java
AL server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/WebAdminDeleteMailsFromMailQueueTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/ClearMailQueueTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java
AL server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueDTO.java
AL server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java
AL server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/ForceDelivery.java
AL server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskTest.java
AL server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/ClearMailQueueTaskTest.java
AL server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/WebAdminDeleteMailsFromMailQueueTaskAdditionalInformationDTOTest.java
AL server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesUnitTest.java
AL server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java
AL server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueDTOTest.java
AL server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java
AL server/protocols/webadmin/webadmin-mailqueue/pom.xml
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/validation/Quotas.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/validation/MailboxName.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/validation/QuotaDTOValidator.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/jackson/QuotaModule.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/MailboxesExportTask.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverAllTask.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliveryTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/CreateMissingParentsTask.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ClearMailboxContentTaskDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/MailboxesExportTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExpireMailboxTask.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserMailboxesService.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/GlobalQuotaService.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/CreateMissingParentsRequestToTask.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverGroupTask.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverOneTask.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverOneTaskDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/SubscribeAllTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverGroupTaskDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/CreateMissingParentsTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverAllTaskDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExportService.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExpireMailboxService.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ClearMailboxContentTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/MailboxesExportRequestToTask.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExpireMailboxAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/SubscribeAllTaskDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliveryTaskAdditionalInformation.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverService.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/DomainQuotaService.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserQuotaService.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventRetriever.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/SubscribeAllRequestToTask.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersService.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ClearMailboxContentTask.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/SubscribeAllTask.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExpireMailboxDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/PreviousReIndexingService.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/utils/MailboxHaveChildrenException.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/GlobalQuotaRoutes.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/DomainQuotaRoutes.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/MessagesRoutes.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRunningOptionsParser.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserMailboxesRoutes.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/MailboxesRoutes.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/EventDeadLettersRoutes.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/QuotaDetailsDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/OccupationDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/QuotaValueDeserializer.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminIndexationContextInformationDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminUserReindexingTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/MailboxResponse.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/QuotaDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/ValidatedQuotaDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/SerializableReIndexingExecutionFailures.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/OccupationRatioDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/UsersQuotaDetailsDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/QuotaDomainDTO.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/QuotaValueSerializer.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/condition/user/HasNoMailboxesCondition.java
AL server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/condition/user/HasNotAllSystemMailboxesCondition.java
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/subscribeAll.additionalInformation.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/mailboxesExport.task.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/expireMailbox.header.task.v2.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/subscribeAll.task.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/createMissingParents.task.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/mailboxesExport.additionalInformation.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/clearMailboxContent.additionalInformation.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/clearMailboxContent.task.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/expireMailbox.additionalInformation.v2.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/expireMailbox.additionalInformation.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/expireMailbox.age.task.v2.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/expireMailbox.age.task.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/createMissingParents.additionalInformation.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/expireMailbox.header.task.json
B server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/expireMailbox.additionalInformation.v2.1.json
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/validation/QuotaLimitValueTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/CreateMissingParentsRequestToTaskTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExpireMailboxTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverTaskTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExpireMailboxServiceTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/SubscribeAllTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/MailboxesExportRequestToTaskTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/SubscribeAllRequestToTaskTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExpireMailboxTaskAdditionalInformationDTOTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/CreateMissingParentsTaskAdditionalInformationDTOTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/SubscribeAllTaskAdditionalInformationDTOTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ClearMailboxContentTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/MailboxesExportTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/MailboxesExportTaskAdditionalInformationDTOTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTestSystem.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ClearMailboxContentTaskAdditionalInformationDTOTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/CreateMissingParentsTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/WebAdminQuotaSearchTestSystem.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesNoVirtualHostingTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MessageRoutesExpireTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserRoutesWithMailboxParamTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MessageRoutesTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ScanningQuotaSearchExtension.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesNoTasksTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/EventDeadLettersRoutesTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesNoIndexationTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MalformedUrlRoutesTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/SerializableReIndexingExecutionFailuresTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/UsersQuotaDetailsDTOTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminIndexationContextInformationDTOTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminUserReIndexingDTOTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxIndexingDTOTest.java
AL server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/QuotaLimitValueDeserializerTest.java
AL server/protocols/webadmin/webadmin-mailbox/pom.xml
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UsernameChangeService.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UsernameChangeTask.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUsersDataOfDomainTask.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUsersDataOfDomainTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UsernameChangeTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UsernameChangeTaskDTO.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UserService.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUserDataTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DomainAliasService.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUserDataTaskDTO.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUsersDataOfDomainTaskDTO.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUserDataService.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUserDataTask.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/UserRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DeleteUserDataRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/BlobRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DLPConfigurationRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/MailAddressParser.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/UsernameChangeRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/SieveScriptRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainsRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/RegexMappingRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainMappingsRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/SieveQuotaRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AddressMappingRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DropListRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/MappingRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/UserCreationRequestLogger.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/VacationRoutes.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/UserResponse.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/ForwardDestinationResponse.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/MappingsModule.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/VerifyUserRequest.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/DLPConfigurationDTO.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/DomainAliasResponse.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/AliasSourcesResponse.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/VacationDTO.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/DLPConfigurationItemDTO.java
AL server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/AddUserRequest.java
!????? server/protocols/webadmin/webadmin-data/src/test/resources/sieve/my_sieve
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/service/DeleteUsersDataOfDomainTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/service/DeleteUsersDataOfDomainTaskTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/service/UsernameChangeTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/service/DeleteUserDataTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/BlobRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AddressMappingRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/VacationRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UserRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsernameChangeRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveScriptRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/MappingRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DLPConfigurationRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DropListRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainMappingsRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DeleteUserDataRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveQuotaRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/RegexMappingRoutesTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/dto/DomainAliasResponseTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/dto/DLPConfigurationItemDTOTest.java
AL server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/dto/VacationDTOTest.java
AL server/protocols/webadmin/webadmin-data/pom.xml
AL server/protocols/webadmin/webadmin-pop3/src/main/java/org/apache/james/pop3/webadmin/Pop3MetaDataFixInconsistenciesTaskRegistration.java
AL server/protocols/webadmin/webadmin-pop3/src/test/java/org/apache/james/pop3/webadmin/Pop3MetaDataFixInconsistenciesRoutesTest.java
AL server/protocols/webadmin/webadmin-pop3/pom.xml
!????? server/protocols/webadmin/webadmin-pop3/README.md
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/UserClient.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/model/UserPassword.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/model/UserName.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/model/DomainAlias.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/model/MailboxName.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/MailboxClient.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/WebAdminHTTPClientFactory.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/QuotaClient.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/DomainClient.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/feign/DomainFeignClient.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/feign/UserFeignClient.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/feign/JamesFeignException.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/feign/MailboxFeignClient.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/feign/QuotaFeignClient.java
AL server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/FeignHelper.java
AL server/protocols/webadmin/webadmin-http-client/src/test/java/org/apache/james/webadmin/httpclient/MailboxClientTest.java
AL server/protocols/webadmin/webadmin-http-client/src/test/java/org/apache/james/webadmin/httpclient/DomainClientTest.java
AL server/protocols/webadmin/webadmin-http-client/src/test/java/org/apache/james/webadmin/httpclient/UserClientTest.java
AL server/protocols/webadmin/webadmin-http-client/src/test/java/org/apache/james/webadmin/httpclient/QuotaClientTest.java
AL server/protocols/webadmin/webadmin-http-client/pom.xml
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/services/TasksCleanupService.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/tasks/TasksCleanupTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/tasks/TasksCleanupTaskDTO.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/tasks/TasksCleanupTask.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/TasksCleanupRoutes.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/CassandraMailboxMergingRoutes.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/SolveMailboxInconsistenciesRequestToTask.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/RecomputeMailboxCountersRequestToTask.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/RunningOptionsParser.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/CassandraMigrationRoutes.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/SolveMessageRecentInconsistenciesRequestToTask.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/SolveMessageDeletedInconsistenciesRequestToTask.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/SolveMessageInconsistenciesRequestToTask.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/dto/CassandraVersionRequest.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/dto/WebAdminMigrationTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/dto/CassandraVersionResponse.java
AL server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/dto/MailboxMergingRequest.java
AL server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
AL server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/SolveMessageInconsistenciesRequestToTaskTest.java
AL server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/SolveMailboxInconsistenciesRequestToTaskTest.java
AL server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/TasksCleanupRoutesTest.java
AL server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/RecomputeMailboxCountersRequestToTaskTest.java
AL server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/dto/VersionRequestTest.java
AL server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/dto/WebAdminMigrationTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-cassandra/pom.xml
AL server/protocols/webadmin/pom.xml
AL server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/service/CassandraMappingsSolveInconsistenciesTask.java
AL server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/service/CassandraMappingsService.java
AL server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/routes/CassandraMappingsRoutes.java
AL server/protocols/webadmin/webadmin-cassandra-data/src/test/java/org/apache/james/webadmin/service/CassandraMappingsSolveInconsistenciesTaskTest.java
AL server/protocols/webadmin/webadmin-cassandra-data/src/test/java/org/apache/james/webadmin/routes/CassandraMappingsRoutesTest.java
AL server/protocols/webadmin/webadmin-cassandra-data/pom.xml
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/authentication/AuthenticationFilter.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/authentication/JwtFilter.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/authentication/PasswordFilter.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/authentication/NoAuthenticationFilter.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/PublicRoutes.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/FixedPortSupplier.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/UserCondition.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminConfiguration.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/tasks/TaskFromRequestRegistry.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/tasks/TaskFromRequest.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/tasks/TaskRegistrationKey.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/tasks/TaskIdDto.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/TlsConfiguration.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/jettyserver/EmbeddedJettyServer.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/jettyserver/JettyServer.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/jettyserver/SocketConnectorFactory.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/jettyserver/EmbeddedJettyFactory.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/RequestLogger.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingRequestFilter.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/MDCFilter.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/MDCCleanupFilter.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingResponseFilter.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/RequestId.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/JsonTransformer.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/JsonTransformerModule.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/ParametersExtractor.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/ErrorResponder.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/JsonExtractor.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/Responses.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/JsonExtractException.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/PortSupplier.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/CORSRoute.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/TasksRoutes.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/ExecutionDetailsDto.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/HealthCheckExecutionResultDto.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/HealthCheckDto.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/DTOModuleInjections.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/HeathCheckAggregationExecutionResultDto.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/Constants.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/RandomPortSupplier.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/CORSFilter.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/metric/MetricPreFilter.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/metric/MetricPostFilter.java
AL server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/Routes.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/authentication/PasswordFilterTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/authentication/JwtFilterTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/tasks/TaskFromRequestRegistryTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/tasks/TaskFromRequestTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/tasks/TaskRegistrationKeyTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/FixedPortSupplierTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/mdc/RequestIdTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtilsTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/utils/ParametersExtractorTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/utils/ErrorResponderTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/utils/JsonExtractorTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminServerTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminConfigurationTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/HealthCheckRoutesTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/ErrorRoutes.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/ErrorRoutesTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/RandomPortSupplierTest.java
AL server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/TlsConfigurationTest.java
AL server/protocols/webadmin/webadmin-core/pom.xml
AL server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/service/RepublishNotProcessedMailsTaskDTO.java
AL server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/service/BrowseStartUpdateTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/service/RepublishNotProcessedMailsTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/service/BrowseStartUpdateTaskDTO.java
AL server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/service/BrowseStartUpdateTask.java
AL server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/service/RepublishNotprocessedMailsTask.java
AL server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/routes/BrowseStartUpdateTaskRegistration.java
AL server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/routes/RabbitMQMailQueuesRoutes.java
AL server/protocols/webadmin/webadmin-rabbitmq/src/test/java/org/apache/james/webadmin/service/RepublishNotprocessedMailsTaskTest.java
AL server/protocols/webadmin/webadmin-rabbitmq/src/test/java/org/apache/james/webadmin/routes/RabbitMQMailQueuesRoutesTest.java
AL server/protocols/webadmin/webadmin-rabbitmq/pom.xml
AL server/protocols/webadmin/webadmin-protocols/src/main/java/org/apache/james/protocols/webadmin/ProtocolServerRoutes.java
AL server/protocols/webadmin/webadmin-protocols/pom.xml
AL server/protocols/webadmin/webadmin-mail-over-web/src/main/java/org/apache/james/webadmin/routes/TransferEmailRoutes.java
!????? server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message.eml
!????? server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message-without-from.eml
!????? server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message-without-tos.eml
AL server/protocols/webadmin/webadmin-mail-over-web/src/test/java/org/apache/james/routes/TransferEmailRoutesTest.java
AL server/protocols/webadmin/webadmin-mail-over-web/pom.xml
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskDTO.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/WebAdminDeletedMessagesVaultRestoreTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTask.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTask.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskDTO.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/ExportService.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/RestoreService.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/WebAdminDeletedMessagesVaultDeleteTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTaskDTO.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTask.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTaskAdditionalInformationDTO.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskAdditionalInformationDTO.java
B server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/has_no_attachment.json
B server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/string_equals.json
B server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/string_equals_ignore_case.json
B server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/zoned_date_time_before_or_equals.json
B server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/string_contains.json
B server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/has_sender.json
B server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/zoned_date_time_after_or_equals.json
B server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/contains_origin_mailbox.json
B server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/has_attachment.json
B server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/contains_recipient.json
B server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/string_contains_ignore_case.json
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/WebadminApiQuerySerializationContractTest.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/WebAdminDeletedMessagesVaultDeleteTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/WebAdminDeletedMessagesVaultRestoreTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
AL server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/pom.xml
!????? server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/BlobId.java
!????? server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMessageListMethod.java
!????? server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/BlobManagerImpl.java
!????? server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactoryTest.java
!????? server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java
!????? server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java
!????? server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
!????? server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/BlobManagerImplTest.java
!????? server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/MIMEMessageConverterTest.java
!????? server/protocols/jmap-rfc-8621/doc/specs/rfc/src/jmap.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/rfc/src/quotas.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/rfc/src/mail.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/README.md
AL server/protocols/jmap-rfc-8621/doc/specs/LICENSE.md
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/message.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/mailbox.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/identity.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/identitySortOrder.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/messagesubmission.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/rights.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/securityconsiderations.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/thread.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/ianaconsiderations.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/searchsnippet.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/vacationresponse.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/delegation.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/intro.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/custom-quotas/quotas.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/securityconsiderations.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/ianaconsiderations.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/quota.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/intro.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/push.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/securityconsiderations.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/session.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/ianaconsiderations.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/binary.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/api.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/intro.mdown
!????? server/protocols/jmap-rfc-8621/doc/specs/spec/authentication.mdown
!????? server/protocols/jmap-rfc-8621/doc/README.md
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/metrics/HttpClientMetrics.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/EmailQuerySerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/SearchSnippetSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/PushSubscriptionSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/VacationSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/QuotaSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/MailboxSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/PushSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/package.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/EmailSetSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/MailboxQuerySerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ThreadSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/IdentitySerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/BackReferenceDeserializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/EmailGetSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/UploadSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/EmailSubmissionSetSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/DelegationSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/MDNSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/highlight/SearchSnippetGetRequest.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxFactory.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/IdentitySet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxGet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailGet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailAddressGroup.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Keywords.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailQuery.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailSubmissionSet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/BlobId.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxQuery.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MinimalEmailBodyPart.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Mailbox.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailBodyPart.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/IdentityGet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailSet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Thread.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailBodyValue.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Rights.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MDN.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/IdentityChanges.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailHeader.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Email.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MDNSend.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxQueryChanges.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/KeywordsCombiner.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailParse.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxSet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailImport.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Keyword.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxNamespace.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MDNParse.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Quotas.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/pushsubscription/WebPushClient.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/pushsubscription/PushRequest.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/pushsubscription/PushListener.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateGetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetCreatePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegatedAccountDeletePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentityChangesMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaChangesMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadChangesMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/CoreEchoMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetUpdatePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetDeletePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionUpdatePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetCreatePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadGetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetCreatePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSubmissionSetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetDeletePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryChangesMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionGetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaQueryMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetDeletePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentityGetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNParseMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/Method.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetDeletePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetCreatePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/package.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegatedAccountGetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala
!????? server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetCreatePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/SearchSnippetGetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetDeletePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaGetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailImportMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegatedAccountSetMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetUpdatePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailParseMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetUpdatePerformer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailChangesMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNSendMethod.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/vacation/VacationResponseSet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/vacation/VacationResponseGet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/vacation/VacationResponse.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/SessionTranslator.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Session.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Invocation.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/RequestLevelErrorType.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/SetError.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Id.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Query.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/PushSubscriptionSet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/UTCDate.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Capabilities.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/ProblemDetails.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/PushSubscriptionGet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/UnsignedInt.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/RequestObject.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/ResponseObject.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/WebSocketTransport.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Properties.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/JmapRfc8621Configuration.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Capability.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/DelegateSet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/Delegation.scala
!????? server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/DelegatedAccountSet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/DelegateGet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/DelegatedAccountGet.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/http/MailboxesProvisioner.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/http/UserProvisioning.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/http/BasicAuthenticationStrategy.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/utils/quotas/QuotaReader.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/utils/quotas/QuotaLoaderWithPreloadedDefault.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/utils/quotas/QuotaLoader.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/utils/search/MailboxFilter.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/JMAPApiRoutes.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/SessionRoutes.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/DownloadRoutes.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/SessionSupplier.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/JmapApi.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/WebSocketRoutes.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/ProcessingContext.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/UploadRoutes.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/EventSourceRoutes.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/change/AccountIdRegistrationKey.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/change/EventDTOModule.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/change/JmapEventSerializer.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/change/StateChangeListener.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/change/MailboxChangeListener.scala
AL server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/change/StateChange.scala
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListener.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/send/MailMetadata.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/send/MailShouldBeInOutboxException.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/send/PostDequeueDecoratorFactory.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mime4j/JamesBodyDescriptorBuilder.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mime4j/MaximalBodyDescriptor.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mailet/TextCalendarBodyToAttachment.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mailet/ExtractMDNOriginalJMAPMessageId.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mailet/filter/ContentMatcher.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mailet/filter/RuleMatcher.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mailet/filter/MailMatcher.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mailet/filter/ActionApplier.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mailet/filter/HeaderExtractor.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mailet/filter/FilteringHeaders.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mailet/filter/JMAPFiltering.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mailet/SentByJmap.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/http/rfc8621/InjectionKeys.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/utils/AccountIdUtil.java
AL server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/utils/JsoupHtmlTextExtractor.java
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/EmailSubmissionSetSerializerTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/ResponseObjectSerializationTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/JsErrorSerializationTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/MailboxSerializationTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/VacationResponseSerializationTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/RequestObjectSerializationTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/SearchSnippetSerializerTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/PushSerializerTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/BackReferenceTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/VacationResponseGetSerializationTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/MDNSerializationTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/MailboxGetSerializationTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/SessionSerializationTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/Fixture.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/EmailSetSerializerTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/PushSubscriptionSerializerTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/QuotaSerializerTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/mail/RightsTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/mail/MailboxTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/pushsubscription/PushSubscriptionSetCreateProcessorTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/pushsubscription/PushServerExtension.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/pushsubscription/PushRequestTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/pushsubscription/SafeWebPushClientContract.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/pushsubscription/PushListenerTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/pushsubscription/WebPushClientContract.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/method/CoreEchoMethodTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/core/UTCDateTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/core/KeywordsTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/core/JmapUrlEndpointResolverTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/core/KeywordsCombinerTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/core/MailboxValidationTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/core/KeywordTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/http/UserProvisioningTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/http/MailboxesProvisionerTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/http/UserCredentialParserTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/SessionRoutesTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/SessionSupplierTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/JMAPApiRoutesTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/TypeStateFactoryTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/MailboxChangeListenerTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/AccountIdRegistrationKeyTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/StateChangeEventSerializerTest.scala
AL server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/StateChangeListenerTest.scala
!????? server/protocols/jmap-rfc-8621/src/test/resources/spamMail.eml
!????? server/protocols/jmap-rfc-8621/src/test/resources/fullMessage.eml
!????? server/protocols/jmap-rfc-8621/src/test/resources/example.html
!????? server/protocols/jmap-rfc-8621/src/test/resources/emptyBodyMessageWithOneAttachment.eml
!????? server/protocols/jmap-rfc-8621/src/test/resources/calendar.eml
AL server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java
AL server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/event/PopulateEmailQueryViewListenerTest.java
AL server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
AL server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/pushsubscription/DefaultWebPushClientTest.java
AL server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/pushsubscription/DefaultWebPushClientServerSideForgeryTest.java
AL server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/send/MailMetadataTest.java
AL server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java
AL server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/mailet/TextCalendarBodyToAttachmentTest.java
AL server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/mailet/SentByJmapTest.java
AL server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringFixture.java
AL server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringExtension.java
AL server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringTest.java
AL server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/utils/JsoupHtmlTextExtractorTest.java
AL server/protocols/jmap-rfc-8621/pom.xml
AL server/protocols/protocols-smtp/src/main/resources/META-INF/spring/smtpserver-context.xml
AL server/protocols/protocols-smtp/src/main/resources/smtpserver.xml
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/priority/SmtpMtPriorityEhloHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/priority/SmtpMtPriorityParameterHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/priority/SmtpMtPriorityParameters.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/priority/SmtpMtPriorityMessageHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/MailPriorityHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/futurerelease/FutureReleaseParameters.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/futurerelease/FutureReleaseMailParameterHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/futurerelease/FutureReleaseEHLOHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/tls/EnforceMtaSts.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/tls/SmtpRequireTlsEhloHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/tls/SmtpRequireTlsParameterHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/tls/TestMtaSts.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/tls/SmtpRequireTlsMessageHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesDataCmdHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/smtputf8/SmtpUtf8RcptHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/smtputf8/SmtpUtf8MailHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/dsn/DSNMessageHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/dsn/DSNEhloHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/dsn/DSNMailParameterHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/dsn/DSNRcptParameterHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SetMailAttributeMessageHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SenderAuthIdentifyVerificationHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SendMailHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/POP3BeforeSMTPHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesWelcomeMessageHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesRcptCmdHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SmtpMetrics.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServerFactory.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SmtpMetricsImpl.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/MaxConnectionLifespanHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServerMBean.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelInboundHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStats.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/CommandHandlerResultJMXMonitor.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStatsMBean.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/HookStatsMBean.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/JMXHandlersLoader.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/ConnectHandlerResultJMXMonitor.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/LineHandlerResultJMXMonitor.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/HookResultJMXMonitor.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/HookStats.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/CoreCmdHandlerLoader.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/ExtendedSMTPSession.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SetMimeHeaderHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/model/ProtocolMailAddressAdapter.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/AddDefaultAttributesMessageHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/AuthRequiredToRelayRcptHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SMTPConstants.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/ConfigurationAuthHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/TLDLookup.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/NoAuthCmdHandlerLoader.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/UsersRepositoryAuthHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesMailCmdHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/EnforceHeaderLimitationsMessageHook.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/DNSRBLHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ReverseEqualsEhloHeloHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/URIScanner.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ValidRcptMX.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/JDBCGreylistHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ValidSenderDomainHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/MaxRcptHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/URIRBLHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/SpamTrapHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/SPFHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ValidRcptHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ResolvableEhloHeloHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/MaxUnknownCmdHandler.java
AL server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesMessageHook.java
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-requireSSL.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-disabled-feature.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-no-plain.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-utf8.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-mtPriority.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-noauth.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-proxy.xml
!????? server/protocols/protocols-smtp/src/test/resources/smtpserver-requireTls.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-tls.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-dsn.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-logout.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-authAnnounceSometimeNotMatching.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-futurerelease.xml
B server/protocols/protocols-smtp/src/test/resources/keystore
!????? server/protocols/protocols-smtp/src/test/resources/log4j.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-EnforceHeader.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-disabled-auth.xml
B server/protocols/protocols-smtp/src/test/resources/test_keystore
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-authAnnounceAlways.xml
!????? server/protocols/protocols-smtp/src/test/resources/smtpserver-advancedSecurity.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-configured-auth.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-authAnnounceNever.xml
AL server/protocols/protocols-smtp/src/test/resources/smtpserver-authAnnounceSometimeMatching.xml
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/priority/SmtpMtPriorityParametersTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTestSystem.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/futurerelease/FutureReleaseParametersTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ConfiguredAuthTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPProxyProtocolTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/EnforcedHeaderLimitationHookIntegrationTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/DSNTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/NoAuthTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SmtpMtPriorityMessageHookTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPSaslTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/DisableFeatureTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/FutureReleaseTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ValidRcptHandlerTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SmtpUtf8AnnounceTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/MaxConnectionLifespanHandlerTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SPFHandlerTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SmtpRequireTlsMessageHookTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPSTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SetMimeHeaderHandlerTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/POP3BeforeSMTPHandlerTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ValidRcptMXTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/URIRBLHandlerTest.java
AL server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/AuthAnnounceTest.java
AL server/protocols/protocols-smtp/src/reporting-site/site.xml
AL server/protocols/protocols-smtp/pom.xml
!????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
!????? server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/LegacyJavaEncryptionFactory.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/POP3BeforeSMTPHelper.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractProtocolAsyncServer.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/CertificateReloadable.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractServerFactory.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/AbstractLineHandlerResultJMXMonitor.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/ServerMBean.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/CommandHandlerStatsMBean.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/LineHandlerStats.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/HandlerStatsMBean.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/AbstractConnectHandlerResultJMXMonitor.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/ConnectHandlerStats.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/AbstractCommandHandlerResultJMXMonitor.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/AbstractCommandHandlerStats.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/handler/ProtocolHandlerLoader.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/handler/HandlersPackage.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/SslConfig.java
AL server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/ProtocolHandlerChainImpl.java
!????? server/protocols/protocols-library/src/test/resources/testServerTLSDefaultAuth.xml
!????? server/protocols/protocols-library/src/test/resources/testServerDisabled.xml
!????? server/protocols/protocols-library/src/test/resources/testServerStartTLS.xml
!????? server/protocols/protocols-library/src/test/resources/testServerTLSNeedAuth.xml
!????? server/protocols/protocols-library/src/test/resources/testServerDefaults.xml
B server/protocols/protocols-library/src/test/resources/keystore
!????? server/protocols/protocols-library/src/test/resources/testServerPlain.xml
!????? server/protocols/protocols-library/src/test/resources/testServerTLS.xml
AL server/protocols/protocols-library/src/test/java/org/apache/james/protocols/lib/mock/ConfigLoader.java
AL server/protocols/protocols-library/src/test/java/org/apache/james/protocols/lib/mock/MockProtocolHandlerLoader.java
AL server/protocols/protocols-library/src/test/java/org/apache/james/protocols/lib/AbstractConfigurableAsyncServerTest.java
AL server/protocols/protocols-library/src/reporting-site/site.xml
AL server/protocols/protocols-library/pom.xml
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPUrls.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/Endpoint.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPRoutesHandler.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/UnauthorizedException.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/NoAuthorizationSuppliedException.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/VersionParser.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/HttpConstants.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/Version.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPConfiguration.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/http/AuthenticationStrategy.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/http/AuthenticationScheme.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/http/AuthenticationChallenge.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/http/Authenticator.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/http/AuthenticateHeader.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/http/XUserAuthenticationStrategy.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/http/JWTAuthenticationStrategy.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/UriMatcher.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServer.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPRoute.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPRoutes.java
AL server/protocols/jmap/src/main/java/org/apache/james/jmap/InjectionKeys.java
AL server/protocols/jmap/src/test/java/org/apache/james/jmap/FixedUriMatcherTest.java
AL server/protocols/jmap/src/test/java/org/apache/james/jmap/EndpointTest.java
AL server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPServerTest.java
AL server/protocols/jmap/src/test/java/org/apache/james/jmap/VersionTest.java
AL server/protocols/jmap/src/test/java/org/apache/james/jmap/VersionParserTest.java
AL server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPConfigurationTest.java
AL server/protocols/jmap/pom.xml
AL server/protocols/protocols-managesieve/src/main/resources/META-INF/spring/managesieveserver-context.xml
AL server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveMDCContext.java
AL server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/NettyConstants.java
AL server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerFactory.java
AL server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerMBean.java
AL server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
AL server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServer.java
AL server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ChannelManageSieveResponseWriter.java
!????? server/protocols/protocols-managesieve/pom.xml
AL server/protocols/protocols-lmtp/src/main/resources/META-INF/spring/lmtpserver-context.xml
AL server/protocols/protocols-lmtp/src/main/resources/lmtpserver.xml
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServerFactory.java
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPMetricsImpl.java
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServerMBean.java
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/jmx/CommandHandlerResultJMXMonitor.java
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/jmx/JMXHandlersLoader.java
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/jmx/ConnectHandlerResultJMXMonitor.java
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/jmx/LineHandlerResultJMXMonitor.java
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/CoreCmdHandlerLoader.java
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/MailetContainerHandler.java
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/DataLineLMTPHandler.java
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/MailetContainerCmdHandlerLoader.java
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/hook/MailboxDeliverToRecipientHandler.java
AL server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/NoopJamesMessageHook.java
AL server/protocols/protocols-lmtp/src/test/resources/lmtp.xml
AL server/protocols/protocols-lmtp/src/test/resources/lmtpnormaldsn.xml
AL server/protocols/protocols-lmtp/src/test/resources/lmtpdsn.xml
AL server/protocols/protocols-lmtp/src/test/resources/lmtpmailet.xml
AL server/protocols/protocols-lmtp/src/test/java/org/apache/james/lmtpserver/LmtpServerTest.java
AL server/protocols/protocols-lmtp/src/reporting-site/site.xml
AL server/protocols/protocols-lmtp/pom.xml
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/webadmin.properties
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/listeners.xml
!????? server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/jwt_publickey
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/dnsservice.xml
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/lmtpserver.xml
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/mailetcontainer.xml
!????? server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/eml/emailWithOnlyAttachment.eml
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/imapserver.xml
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/managesieveserver.xml
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/domainlist.xml
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/mailrepositorystore.xml
B server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/keystore
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/smtpserver.xml
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/pop3server.xml
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/MailReceptionCheckIntegrationTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationImmutableTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/WorkQueueEnabledDeletedMessageVaultIntegrationTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerBlobGCIntegrationTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQQuotaSearchIntegrationTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java
AL server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationImmutableTest.java
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/AuthorizedEndpointsTest.java
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/vault/ExportRequest.java
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/vault/DeletedMessagesVaultRequests.java
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/vault/DeletedMessageVaultIntegrationTest.java
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/JwtFilterIntegrationTest.java
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/UnauthorizedModule.java
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/FastViewProjectionHealthCheckIntegrationContract.java
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/ForwardIntegrationTest.java
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/QuotaSearchIntegrationTest.java
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/UnauthorizedEndpointsTest.java
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/TestFixture.java
AL server/protocols/webadmin-integration-test/webadmin-integration-test-common/pom.xml
AL server/protocols/webadmin-integration-test/pom.xml
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/webadmin.properties
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/listeners.xml
!????? server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/jwt_publickey
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/dnsservice.xml
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/lmtpserver.xml
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/mailetcontainer.xml
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/imapserver.xml
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/managesieveserver.xml
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/domainlist.xml
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/mailrepositorystore.xml
B server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/keystore
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/smtpserver.xml
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/pop3server.xml
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryWebAdminServerIntegrationImmutableTest.java
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUnauthorizedEndpointsTest.java
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/vault/MemoryDeletedMessageVaultIntegrationTest.java
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryFastViewProjectionHealthCheckIntegrationTest.java
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/DisabledMetricsTest.java
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryAuthorizedEndpointsTest.java
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUsernameChangeIntegrationTest.java
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryWebAdminServerIntegrationTest.java
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryQuotaSearchIntegrationTest.java
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryJwtFilterIntegrationTest.java
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryForwardIntegrationTest.java
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUserDeletionIntegrationTest.java
AL server/protocols/webadmin-integration-test/memory-webadmin-integration-test/pom.xml
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/webadmin.properties
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/listeners.xml
!????? server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/jwt_publickey
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/dnsservice.xml
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/lmtpserver.xml
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/mailetcontainer.xml
!????? server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/eml/emailWithOnlyAttachment.eml
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/imapserver.xml
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/managesieveserver.xml
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/domainlist.xml
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/mailrepositorystore.xml
B server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/keystore
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/smtpserver.xml
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/pop3server.xml
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/vault/PostgresDeletedMessageVaultIntegrationTest.java
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/postgres/PostgresJwtFilterIntegrationTest.java
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/postgres/PostgresUnauthorizedEndpointsTest.java
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/postgres/PostgresWebAdminServerBlobGCIntegrationTest.java
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/postgres/PostgresAuthorizedEndpointsTest.java
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/postgres/PostgresPopulateEmailQueryViewTaskIntegrationTest.java
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/postgres/PostgresWebAdminServerIntegrationTest.java
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/postgres/PostgresFastViewProjectionHealthCheckIntegrationTest.java
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/postgres/PostgresQuotaSearchIntegrationTest.java
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/postgres/PostgresForwardIntegrationTest.java
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/postgres/PostgresWebAdminServerIntegrationImmutableTest.java
AL server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/pom.xml
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/listeners.xml
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/dnsservice.xml
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/mailetcontainer.xml
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/imapserver.xml
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/managesieveserver.xml
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/domainlist.xml
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/mailrepositorystore.xml
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/usersrepository.xml
B server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/keystore
!????? server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/smtpserver.xml
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/pop3server.xml
!????? server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/rabbitmq.properties
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresPushSubscriptionSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresEmailGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresEmailQueryMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresEmailSubmissionSetMethodFutureReleaseTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresUploadTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresVacationResponseSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresCustomMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresEmailSubmissionSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresQuotaGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresJmapPreviewTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresMDNSendMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresThreadGetTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresDownloadTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresMailboxChangesMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresWebSocketTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresQuotaChangesMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresIdentityGetTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresVacationResponseGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresMailboxGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresEchoMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresAuthenticationTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresWebPushTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresProvisioningTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresDelegatedAccountSetTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresDelegatedAccountGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresEmailSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresMailboxQueryMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresMailboxQueryChangesTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresQuotaQueryMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresIdentitySetTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresEmailChangesMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresBase.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresSessionRoutesTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresCustomNamespaceTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresMDNParseMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresMailboxSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/pom.xml
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/DelegatedAccountSetContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailSetMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/VacationRelayIntegrationTest.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/UploadContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailGetMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ImapKeywordsConsistencyContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxQueryChangesContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailParseMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/DelegatedAccountGetMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EchoMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaQueryMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/DelegateSetContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaChangesMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MDNParseMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/SessionRoutesContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/VacationResponseGetMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailQueryMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/WebSocketWithPingIntervalContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EventSourceContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/JmapRequests.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailChangesMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/BackReferenceContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaGetMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/VacationResponseSetMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxGetMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/JmapPreviewContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/PushSubscriptionSetMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/tags/CategoryTags.java
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/IdentityChangesContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ProvisioningContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailSubmissionSetMethodFutureReleaseContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/PushServerExtension.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/CorsHeaderAPITest.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailImportContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/probe/DelegationProbe.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/probe/TypeStateProbe.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/AuthenticationContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ThreadChangesContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/custom/authentication/strategy/DenyAuthenticationStrategy.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/custom/authentication/strategy/ModularizeJmapRFC8621AuthenticationStrategyContract.java
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/custom/authentication/strategy/AllowAuthenticationStrategy.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/IdentitySetContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/WebPushContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailSubmissionSetMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/CustomMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/SearchSnippetGetMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/package.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxQueryMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ImapSetMessagesMailboxesUpdatesCompatibilityContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ThreadGetContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/CustomNamespaceContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/DownloadContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/DelegateGetMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/IdentityGetContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaMailingTest.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/Fixture.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/DisabledCapabilityContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/VacationIntegrationTest.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MDNSendMethodContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/WebSocketContract.scala
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxChangesMethodContract.scala
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/inlined-single-attachment.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_complex.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/related_in_alternative_multipart.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/alternative.cal.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/html.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/inlined-mixed.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_simple.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_simple.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_complex.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_relate_original_message.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/attachment-filename-in-content-type.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/html_body.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/simple-inlined-attachment.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/alternative.eml
!????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested2.eml
AL server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/pom.xml
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/listeners.xml
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/dnsservice.xml
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/lmtpserver.xml
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/mailetcontainer.xml
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/imapserver.xml
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/managesieveserver.xml
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/domainlist.xml
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/mailrepositorystore.xml
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/usersrepository.xml
B server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/keystore
!????? server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/smtpserver.xml
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/pop3server.xml
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryCorsHeaderAPITest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryDownloadTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEventSourceTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaMailingTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMDNSendMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailSubmissionSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaQueryMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaChangesMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryVacationRelayIntegrationTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailChangesMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryVacationResponseSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryAuthenticationTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryDisabledCapabilityTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryThreadGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryIdentityGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryModularizeJmapRFC8621AuthenticationStrategyContract.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailImportTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryIMAPKeywordsInconsistenciesTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryIdentitySetMethodTests.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryIdentityChangesMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemorySearchSnippetGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryDelegatedAccountGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryWebSocketTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryVacationResponseGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryIMAPSetMessagesCompatibilityTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryDelegateSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryProvisioningTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailParseMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEchoMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryDelegatedAccountSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailQueryMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemorySessionRouteTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryPushSubscriptionSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxQueryMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryBackReferenceTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailSubmissionSetMethodFutureReleaseTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailQueryMethodNoViewTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryWebSocketWithPingIntervalTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryBase.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryCustomNamespaceTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxQueryChangesMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMDNParseMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryThreadChangesMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryCustomMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryWebPushTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryDelegateGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryUploadTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryVacationIntegrationTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/pom.xml
AL server/protocols/jmap-rfc-8621-integration-tests/pom.xml
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/listeners.xml
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/dnsservice.xml
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/lmtpserver.xml
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/mailetcontainer.xml
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/imapserver.xml
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/domainlist.xml
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/mailrepositorystore.xml
B server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/keystore
!????? server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/smtpserver.xml
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/pop3server.xml
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedWebSocketTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodNoViewTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDownloadTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationIntegrationTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedIMAPSetMessagesCompatibilityTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedThreadGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxQueryChangesMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedJmapPreviewTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMDNParseMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedCustomNamespaceTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedIdentitySetTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaMailingTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/ReadLevelTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSubmissionSetMethodtest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDelegateSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxQueryMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedIdentityGetTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedUploadTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailChangeMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedBase.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDelegatedAccountSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedWebPushTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaQueryMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaChangesMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedPushSubscriptionSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxChangeMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMDNSendMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationRelayIntegrationTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDelegateGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedCorsHeaderAPITest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSubmissionSetMethodFutureReleaseTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSearchSnippetGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDelegatedAccountGetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedCustomMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java
AL server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/PublicKeyProvider.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/JwksPublicKeyProvider.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/DefaultPublicKeyProvider.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/JwtConfiguration.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/JwtTokenVerifier.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/introspection/TokenIntrospectionResponse.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/introspection/TokenIntrospectionException.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/introspection/IntrospectionEndpoint.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/PublicKeyReader.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/userinfo/UserinfoResponse.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/userinfo/UserInfoCheckException.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/CheckTokenClient.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/DefaultCheckTokenClient.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/OidcJwtTokenVerifier.java
AL server/protocols/jwt/src/main/java/org/apache/james/jwt/MissingOrInvalidKeyException.java
AL server/protocols/jwt/src/test/java/org/apache/james/jwt/OidcJwtTokenVerifierTest.java
AL server/protocols/jwt/src/test/java/org/apache/james/jwt/JwksPublicKeyProviderTest.java
AL server/protocols/jwt/src/test/java/org/apache/james/jwt/OidcTokenFixture.java
AL server/protocols/jwt/src/test/java/org/apache/james/jwt/introspection/DefaultCheckTokenClientTest.java
AL server/protocols/jwt/src/test/java/org/apache/james/jwt/JwtConfigurationTest.java
AL server/protocols/jwt/src/test/java/org/apache/james/jwt/JwtTokenVerifierTest.java
AL server/protocols/jwt/src/test/java/org/apache/james/jwt/DefaultPublicKeyProviderTest.java
AL server/protocols/jwt/src/test/java/org/apache/james/jwt/PublicKeyReaderTest.java
AL server/protocols/jwt/pom.xml
AL server/protocols/protocols-pop3/src/main/resources/META-INF/spring/pop3server-context.xml
AL server/protocols/protocols-pop3/src/main/resources/pop3server.xml
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3ServerMBean.java
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3ServerFactory.java
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/jmx/CommandHandlerResultJMXMonitor.java
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStatsMBean.java
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStats.java
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/jmx/JMXHandlersLoader.java
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/jmx/ConnectHandlerResultJMXMonitor.java
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/jmx/LineHandlerResultJMXMonitor.java
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/core/CoreCmdHandlerLoader.java
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/mailbox/DefaultMailboxAdapterFactory.java
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/mailbox/MailboxAdapter.java
AL server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/mailbox/MailboxAdapterFactory.java
B server/protocols/protocols-pop3/src/test/resources/keystore
!????? server/protocols/protocols-pop3/src/test/resources/pop3server.xml
AL server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
AL server/protocols/protocols-pop3/src/reporting-site/site.xml
AL server/protocols/protocols-pop3/pom.xml
AL server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml
AL server/protocols/protocols-imap4/src/main/resources/imapserver.xml
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapMetrics.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPCommandsThrottler.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyConstants.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPHealthCheck.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/TrafficShapingConfiguration.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapHeartbeatHandler.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ChannelImapResponseWriter.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyStreamImapRequestLineReader.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapRequestLineReader.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapIdleStateHandler.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPMDCContext.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapLineHandlerAdapter.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ReactiveThrottler.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapSession.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/SwitchableLineBasedFrameDecoderFactory.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/AbstractNettyImapRequestLineReader.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServerFactory.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/SwitchableLineBasedFrameDecoder.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/HAProxyMessageHandler.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServerMBean.java
AL server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSslJKSNotFound.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPEM.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthAllowed.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSSLCompress.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSslDefaultJKS.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthEnabledWithoutRequireSSL.xml
!????? server/protocols/protocols-imap4/src/test/resources/oauth.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsTrueAndStartSSLIsFalse.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthDisabled.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMBadPass.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerProxy.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSSL.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMNoPass.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerCompress.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerImapConnectCheck.xml
B server/protocols/protocols-imap4/src/test/resources/keystore.p12
!????? server/protocols/protocols-imap4/src/test/resources/private.nopass.key
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12MissingPassword.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServer.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSslJKSBadPassword.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMExtraPass.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerNoLimits.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSslNoKeys.xml
B server/protocols/protocols-imap4/src/test/resources/keystore
!????? server/protocols/protocols-imap4/src/test/resources/imapSSL.xml
!????? server/protocols/protocols-imap4/src/test/resources/private.key
!????? server/protocols/protocols-imap4/src/test/resources/imapServerHealthCheck.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerIdCommandResponseFields.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsFalseAndStartSSLIsTrue.xml
!????? server/protocols/protocols-imap4/src/test/resources/commandsThrottling.xml
B server/protocols/protocols-imap4/src/test/resources/keystore.jks
!????? server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsTrueAndStartSSLIsTrue.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthDisallowed.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerStartTLS.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSslJKS.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMMissingPass.xml
!????? server/protocols/protocols-imap4/src/test/resources/certs.csr
!????? server/protocols/protocols-imap4/src/test/resources/certs.self-signed.csr
!????? server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsFalseAndStartSSLIsFalse.xml
!????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12WrongPassword.xml
AL server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/ReactiveThrottlerTest.java
AL server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java
AL server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPHealthCheckTest.java
AL server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IpConnectionCheck.java
AL server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerConfigurationTest.java
AL server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPCommandsThrottlerTest.java
AL server/protocols/protocols-imap4/src/reporting-site/site.xml
AL server/protocols/protocols-imap4/pom.xml
AL server/protocols/fetchmail/src/main/resources/META-INF/spring/fetchmail-context.xml
AL server/protocols/fetchmail/src/main/resources/fetchmail.xml
AL server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java
AL server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/ParsedConfiguration.java
AL server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/FetchMail.java
AL server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/FetchSchedulerMBean.java
AL server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/DynamicAccount.java
AL server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/Account.java
AL server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/ProcessorAbstract.java
AL server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/FetchScheduler.java
AL server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/FolderProcessor.java
AL server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/StoreProcessor.java
AL server/protocols/fetchmail/src/test/java/org/apache/james/fetchmail/FetchMailTest.java
AL server/protocols/fetchmail/src/reporting-site/site.xml
AL server/protocols/fetchmail/pom.xml
AL server/protocols/protocols-smtp-dkim/src/main/java/org/apache/james/smtpserver/DKIMHook.java
AL server/protocols/protocols-smtp-dkim/src/test/java/org/apache/james/smtpserver/DKIMHookTest.java
AL server/protocols/protocols-smtp-dkim/pom.xml
!????? server/Overview.md
!????? server/mailet/rate-limiter-redis/redis.properties
!????? server/mailet/rate-limiter-redis/docker-compose-sample/redis.properties
!????? server/mailet/rate-limiter-redis/docker-compose-sample/docker-compose-with-redis-sentinel.yml
!????? server/mailet/rate-limiter-redis/docker-compose-sample/README.md
!????? server/mailet/rate-limiter-redis/docker-compose-sample/config-template/replica/redis.conf.template
!????? server/mailet/rate-limiter-redis/docker-compose-sample/config-template/replica/docker-entrypoint-replica.sh
!????? server/mailet/rate-limiter-redis/docker-compose-sample/config-template/sentinel/docker-entrypoint-sentinel.sh
!????? server/mailet/rate-limiter-redis/docker-compose-sample/config-template/sentinel/sentinel.conf.template
!????? server/mailet/rate-limiter-redis/docker-compose-sample/config-template/master/redis.conf.template
!????? server/mailet/rate-limiter-redis/docker-compose-sample/config-template/master/docker-entrypoint-master.sh
!????? server/mailet/rate-limiter-redis/extensions.properties
AL server/mailet/rate-limiter-redis/mailetcontainer.xml
!????? server/mailet/rate-limiter-redis/docker-compose.yml
!????? server/mailet/rate-limiter-redis/README.adoc
AL server/mailet/rate-limiter-redis/src/main/scala/org/apache/james/rate/limiter/redis/RedisRateLimiter.scala
AL server/mailet/rate-limiter-redis/src/main/java/org/apache/james/rate/limiter/redis/RedisClusterRateLimiterFactory.java
AL server/mailet/rate-limiter-redis/src/main/java/org/apache/james/rate/limiter/redis/RedisMasterReplicaRateLimiterFactory.java
B server/mailet/rate-limiter-redis/src/test/resources/keystore.p12
AL server/mailet/rate-limiter-redis/src/test/java/org/apache/james/rate/limiter/KvrocksRateLimiterTest.scala
AL server/mailet/rate-limiter-redis/src/test/java/org/apache/james/rate/limiter/TopologyRedisRateLimiterTest.scala
AL server/mailet/rate-limiter-redis/src/test/java/org/apache/james/rate/limiter/RedisRateLimiterTest.scala
AL server/mailet/rate-limiter-redis/src/test/java/org/apache/james/rate/limiter/RedisRateLimiterWithSentinelTest.scala
AL server/mailet/rate-limiter-redis/src/test/java/org/apache/james/rate/limiter/KvrocksSentinelRateLimiterTest.scala
AL server/mailet/rate-limiter-redis/src/test/java/org/apache/james/rate/limiter/RedisRateLimiterWithMasterReplicaTopologyTest.scala
AL server/mailet/rate-limiter-redis/pom.xml
!????? server/mailet/rate-limiter-redis/healthcheck.properties
AL server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/EncapsulatedDKIMVerifier.java
AL server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/MockPublicKeyRecordRetriever.java
AL server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/ConvertTo7Bit.java
AL server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java
AL server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/CRLFInputStream.java
AL server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java
AL server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/CRLFOutputStream.java
AL server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/EncapsulatedDKIMSign.java
AL server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/DKIMVerifier.java
AL server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/MimeMessageHeaders.java
AL server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/HeaderSkippingOutputStream.java
B server/mailet/dkim/src/test/resources/test-dkim-pkcs8.pem
B server/mailet/dkim/src/test/resources/test-dkim-pkcs1.pem
!????? server/mailet/dkim/src/test/resources/long-multipart.msg
AL server/mailet/dkim/src/test/java/org/apache/james/jdkim/mailets/EncapsulatedDKIMSignTest.java
AL server/mailet/dkim/src/test/java/org/apache/james/jdkim/mailets/CRLFInputStreamBenchmark.java
AL server/mailet/dkim/src/test/java/org/apache/james/jdkim/mailets/DKIMVerifyTest.java
AL server/mailet/dkim/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java
AL server/mailet/dkim/src/test/java/org/apache/james/jdkim/mailets/CRLFInputStreamTest.java
AL server/mailet/dkim/pom.xml
AL server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/smtp/priority/SmtpMtPriorityRelayTest.java
AL server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/smtp/tls/SmtpRequireTlsRelayTest.java
AL server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNRemoteIntegrationTest.java
AL server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNRelayTest.java
AL server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNLocalIntegrationTest.java
AL server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryForwardIntegrationTest.java
AL server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryDKIMIntegrationTest.java
AL server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryOnSuccessTest.java
AL server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java
AL server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorHandlingTest.java
AL server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/SubAddressingRelayTest.java
AL server/mailet/remote-delivery-integration-testing/pom.xml
AL server/mailet/integration-testing/src/main/resources/dnsservice.xml
B server/mailet/integration-testing/src/main/resources/trusted_cert_keystore
AL server/mailet/integration-testing/src/main/resources/lmtpserver.xml
!????? server/mailet/integration-testing/src/main/resources/eml/message-multipart-8bit.eml
!????? server/mailet/integration-testing/src/main/resources/eml/mail_with_no_signature.eml
!????? server/mailet/integration-testing/src/main/resources/eml/crypted.eml
!????? server/mailet/integration-testing/src/main/resources/eml/mail_with_bad_signature.eml
!????? server/mailet/integration-testing/src/main/resources/eml/non_smime_mail.eml
!????? server/mailet/integration-testing/src/main/resources/eml/message-multipart-7bit.eml
!????? server/mailet/integration-testing/src/main/resources/eml/dlp_read_mail_with_attachment.eml
!????? server/mailet/integration-testing/src/main/resources/eml/message-text-only-8bit.eml
!????? server/mailet/integration-testing/src/main/resources/eml/crypted_with_attachment.eml
!????? server/mailet/integration-testing/src/main/resources/eml/message-text-only-7bit.eml
!????? server/mailet/integration-testing/src/main/resources/eml/calendar.eml
!????? server/mailet/integration-testing/src/main/resources/eml/bad_crypted.eml
!????? server/mailet/integration-testing/src/main/resources/eml/yahooInvitation.eml
!????? server/mailet/integration-testing/src/main/resources/smime-test-resource-set/instruction.md
!????? server/mailet/integration-testing/src/main/resources/smime-test-resource-set/rootCA.srl
!????? server/mailet/integration-testing/src/main/resources/smime-test-resource-set/mail_with_signature.eml
!????? server/mailet/integration-testing/src/main/resources/smime-test-resource-set/rootCA.private.key
!????? server/mailet/integration-testing/src/main/resources/smime-test-resource-set/mail_with_signature_and_content_type_xpkcs7mime.eml
!????? server/mailet/integration-testing/src/main/resources/smime-test-resource-set/private.key
!????? server/mailet/integration-testing/src/main/resources/smime-test-resource-set/rootCA.crt
!????? server/mailet/integration-testing/src/main/resources/smime-test-resource-set/request.csr
!????? server/mailet/integration-testing/src/main/resources/smime-test-resource-set/mail-with-signature-and-multi-certs.eml
!????? server/mailet/integration-testing/src/main/resources/smime-test-resource-set/certificate.crt
AL server/mailet/integration-testing/src/main/resources/imapserver.xml
AL server/mailet/integration-testing/src/main/resources/managesieveserver.xml
AL server/mailet/integration-testing/src/main/resources/domainlist.xml
AL server/mailet/integration-testing/src/main/resources/mailrepositorystore.xml
AL server/mailet/integration-testing/src/main/resources/usersrepository.xml
AL server/mailet/integration-testing/src/main/resources/recipientrewritetable.xml
B server/mailet/integration-testing/src/main/resources/keystore
B server/mailet/integration-testing/src/main/resources/trusted_certificate.pem
B server/mailet/integration-testing/src/main/resources/smime.p12
AL server/mailet/integration-testing/src/main/resources/smtpserver.xml
AL server/mailet/integration-testing/src/main/resources/pop3server.xml
AL server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/SerializableAsXml.java
AL server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/SmtpConfiguration.java
AL server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/MailetConfiguration.java
AL server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/ProcessorConfiguration.java
AL server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/CommonProcessors.java
AL server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/Constants.java
AL server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/MailetContainer.java
AL server/mailet/integration-testing/src/main/java/org/apache/james/mailets/TemporaryJamesServer.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpContentTypeTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpNullSenderTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/StaticInputChecker.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/SMTPHeloHooksTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/hooks/DeclinedHeloHook.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/hooks/OkHeloHook.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/hooks/DenyHeloHook.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/hooks/RecordingHeloHook.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/hooks/DenySoftHeloHook.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpRandomStoringTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpIdentityVerificationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpMaxRcptHandlerTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpBracketEnforcementTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/NoopMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/NoClassDefFoundErrorMatcher.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ErrorMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/OneRuntimeErrorMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ErrorMatcher.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/OneRuntimeExceptionMatcher.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/PerSenderRateLimitIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/RequeueThrottlingIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/NoClassDefFoundErrorMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/OneRuntimeExceptionMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ExtractAttributeStub.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/MailReprocessingIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/DomainMappingTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/RuntimeExceptionMatcher.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/DlpIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/RuntimeErrorMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GlobalRateLimitIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/amqp/AmqpExtension.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/RuntimeExceptionMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttributeIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/OneThreadSuicideMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/PerRecipientRateLimitMailetIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/CommonMailetConfigurationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DKIMIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/CountingExecutionMailetBis.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/FirstRecipientCountingExecutions.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/CountingExecutionMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/CollectMailAttributeMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/ShutDownIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/CollectingExecutionMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/NoneWithNull.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/CountingExecutionTerminatingMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/None.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/CollectingExecutionMailetBis.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/AddRecipient.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/PauseThenCountingExecutionMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/ClearRecipientsMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/ExecutionFlowTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/EnsureNotDisposed.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/WithStorageDirectiveIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SieveDelivery.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/MailetConfigurationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfigurationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SPFIntegrationTests.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/ForwardLoopIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/AddDeliveredToHeaderTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/FilterIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SubAddressingTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SenderIsLocalIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/ForwardIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SizeGreaterThanIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MissingProcessorTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/ForwardBounceLoopIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MailetErrorsTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DKIMHookIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/BounceIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/NoSuchMethodErrorMailet.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/NetworkMatcherIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SmtpAuthIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMECheckSignatureWithPemFileIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMECheckSignatureWithKeyStoreFileIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java
AL server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMECheckSignatureIntegrationTest.java
AL server/mailet/integration-testing/pom.xml
AL server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/CacheSettings.java
AL server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/HasLDAPAttribute.java
AL server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/AttributeUtils.java
AL server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/SenderIsInLDAPGroup.java
AL server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/SenderHasLDAPAttribute.java
AL server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/IsInLDAPGroup.java
!????? server/mailet/ldap/src/test/resources/ldif-files/populate.ldif
AL server/mailet/ldap/src/test/java/org/apache/james/transport/matchers/SenderHasLDAPAttributeTest.java
AL server/mailet/ldap/src/test/java/org/apache/james/transport/matchers/CacheSettingsTest.java
AL server/mailet/ldap/src/test/java/org/apache/james/transport/matchers/IsInLDAPGroupTest.java
AL server/mailet/ldap/src/test/java/org/apache/james/transport/matchers/SenderIsInLDAPGroupTest.java
AL server/mailet/ldap/src/test/java/org/apache/james/transport/matchers/HasLDAPAttributeTest.java
AL server/mailet/ldap/pom.xml
!????? server/mailet/ldap/README.md
!????? server/mailet/rate-limiter/extensions.properties
AL server/mailet/rate-limiter/mailetcontainer.xml
!????? server/mailet/rate-limiter/docker-compose.yml
!????? server/mailet/rate-limiter/README.adoc
AL server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala
AL server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/GlobalRateLimit.scala
AL server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerRecipientRateLimit.scala
AL server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerSenderRateLimit.scala
AL server/mailet/rate-limiter/src/main/scala/org/apache/james/rate/limiter/memory/MemoryRateLimiter.scala
AL server/mailet/rate-limiter/src/main/scala/org/apache/james/rate/limiter/api/RateLimiter.scala
AL server/mailet/rate-limiter/src/test/scala/org/apache/james/transport/mailets/GlobalRateLimitTest.scala
AL server/mailet/rate-limiter/src/test/scala/org/apache/james/transport/mailets/PerSenderRateLimitTest.scala
AL server/mailet/rate-limiter/src/test/scala/org/apache/james/transport/mailets/PerRecipientRateLimitTest.scala
AL server/mailet/rate-limiter/src/test/scala/org/apache/james/rate/limiter/memory/MemoryRateLimiterTest.scala
AL server/mailet/rate-limiter/src/test/scala/org/apache/james/rate/limiter/api/RateLimiterContract.scala
AL server/mailet/rate-limiter/pom.xml
AL server/mailet/mailets/src/main/scala/org/apache/james/transport/mailets/XOriginatingIpInNetwork.scala
AL server/mailet/mailets/src/main/resources/sieveConfig.xml
!????? server/mailet/mailets/src/main/resources/managesieve.help.txt
AL server/mailet/mailets/src/main/java/org/apache/james/transport/util/MimeMessageBodyGenerator.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/util/SenderUtils.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/util/RecipientsUtils.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/util/SizeUtils.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/util/SpecialAddressesUtils.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/util/Patterns.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/util/MailAddressUtils.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/util/ReplyToUtils.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/util/TosUtils.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/RemoteDeliveryFailedWithSMTPCode.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/package.html
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsSenderInRRTLoop.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/DSNSuccessRequested.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsRemoteDeliveryPermanentError.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsOverQuota.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsInDropList.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/SenderHasMXRecord.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/RemoteAddrInNetwork.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/DSNFailureRequested.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractNetworkMatcher.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/HasPriority.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpRulesLoader.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/Dlp.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpDomainRules.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/DSNDelayRequested.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AtLeastPriority.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/InSpammerBlacklist.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/SenderInFakeDomain.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/RecipientHasMXRecord.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsMarkedAsSpam.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/RemoteAddrNotInNetwork.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsRemoteDeliveryTemporaryError.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AtMostPriority.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractPriorityMatcher.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/managesieve/transcode/MessageToCoreToMessage.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailet.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/RedirectNotify.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/AddressExtractor.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/MessageAlteringUtils.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/SpecialAddress.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetInitParameters.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/InitParameters.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessage.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/LoadedOnceInitParameters.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/RedirectMailetInitParameters.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/TypeCode.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/SpecialAddressKind.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/MailModifier.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/InitParametersSerializer.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionDispatcher.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/MailAction.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/FileIntoAction.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/DiscardAction.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionContext.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionUtils.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveFailureMessageComposer.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/Poster.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ResourceLocator.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/KeepAction.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Bounce.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/MailToAllUsers.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/package.html
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DeconnectionRight.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToPlainText.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SplitMail.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RandomStoring.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToRepository.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Redirect.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DnsHelper.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrerToHost.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MessageComposer.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Delay.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/ExecutionResult.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/HeloNameProvider.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/EnhancedMessagingException.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRunnable.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Repeat.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DelaysAndMaxRetry.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRetriesHelper.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/InternetAddressConverter.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryConfiguration.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrer.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/AddressesArrayToMailAddressListConverter.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Sieve.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/NotifySender.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WithStorageDirective.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Forward.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppenderImpl.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStore.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailStore.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/MetricsMailet.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/VacationMailet.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Resend.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WithPriority.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/FromRepository.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SubAddressing.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Requeue.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderDomainRepository.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/NotifyPostmaster.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTable.java
AL server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/VacationReply.java
AL server/mailet/mailets/src/test/scala/org/apache/james/transport/mailets/XOriginatingIpInNetworkSpec.scala
!????? server/mailet/mailets/src/test/resources/noReplyTo.eml
!????? server/mailet/mailets/src/test/resources/brokenReplyTo.eml
!????? server/mailet/mailets/src/test/resources/spamMail.eml
!????? server/mailet/mailets/src/test/resources/eml/gmail.eml
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/envelopeFromOtherSender.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/headerEncodedFolded.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllResend-From.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllFrom.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/discard.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/true.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/vacationDaysReason.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/allofAllTrue.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/stop.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/vacationMime.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/vacationSubjectFromReason.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressDomain.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/redirect.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/reject.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/keep.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyRawInvalid.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyTextMatch.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyContentMatch.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressLocalPart.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/envelopeFrom.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllSender.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/exists.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/false.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllBcc.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllCc.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllResend-To.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyTextInvalid.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/envelopeTo.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/anyofOneFalse.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllTo.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/sizeOver.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyContentInvalid.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/notFalse.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/allofOneFalse.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/envelopeToOtherReceiver.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/vacationReasonAndFileInto.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/header.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyContentWrongContentType.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/allofAllFalse.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/doubleVacation.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/vacationDaysAddressesReason.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/notTrue.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/anyofAllFalse.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyRawMatch.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/sizeUnder.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/vacationReason.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/fileinto.script
AL server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/anyofAllTrue.script
AL server/mailet/mailets/src/test/java/org/apache/james/transport/util/TosUtilsTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/util/SenderUtilsTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/util/SizeUtilsTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/util/RecipientsUtilsTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/util/MailAddressUtilsTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/util/MimeMessageBodyGeneratorTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/util/ReplyToUtilsTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/util/SpecialAddressesUtilsTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/InSpammerBlacklistTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/AtMostPriorityTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/RemoteAddrNotInNetworkTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/DSNDelayRequestedTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsMarkedAsSpamTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/DSNFailureRequestedTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/SenderHasMXRecordTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/RemoteAddrInNetworkTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/DSNSuccessRequestedTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/AtLeastPriorityTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsInDropListTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/dlp/DlpTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/dlp/DlpDomainRulesTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/RemoteDeliveryFailedWithSMTPCodeTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/HasPriorityTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsRemoteDeliveryPermanentErrorTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsSenderInRRTLoopTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsRemoteDeliveryTemporaryErrorTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/RecipientHasMXRecordTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ForwardTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/LoadedOnceInitParametersTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/AddressExtractorTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessageTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/RedirectMailetInitParametersTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/MessageAlteringUtilsTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/MailModifierTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/SpecialAddressTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/NotifyMailetInitParametersTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutorTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/jsieve/DiscardActionTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/NotifyPostmasterTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/DeconnectionRightTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/VacationReplyTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/MetricsMailetTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/DelaysAndMaxRetryTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrerTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/InternetAddressConverterTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryRunningTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RepeatTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRetryHelperTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRunnableTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/DelayTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/BouncerTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/AddressesArrayToMailAddressListConverterTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryConfigurationTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/HeloNameProviderTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/WithPriorityTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RequeueTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ResendTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/VacationMailetTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RedirectTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/NotifySenderTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SPFTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailboxAppenderImplTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/DSNBounceTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SubAddressingTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToPlainTextTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessorTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/MailToAllUsersTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ResourceLocatorTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/WithStorageDirectiveTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SplitMailTest.java
AL server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/HelloWorldMailet.java
AL server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/InstrumentationMailet.java
AL server/mailet/mailets/src/reporting-site/site.xml
AL server/mailet/mailets/pom.xml
AL server/mailet/mailetcontainer-impl/src/main/resources/META-INF/spring/mailetcontainer-context.xml
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/MatcherConfigImpl.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/ProcessorUtil.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/CompositeProcessorImpl.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/MatcherMailetPair.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/MatcherSplitter.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/LocalResourcesImpl.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/jmx/JMXStateMailetProcessorListener.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/jmx/JMXStateCompositeProcessorListener.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/jmx/MailProcessorManagement.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/jmx/MatcherManagement.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/jmx/MailetManagement.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailSpooler.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/matchers/Not.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/matchers/CompositeMatcher.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/matchers/Or.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/matchers/And.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/matchers/Xor.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/matchers/GenericCompositeMatcher.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/MailetConfigImpl.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/MailetProcessorImpl.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/ProcessorImpl.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/AutomaticallySentMailDetectorImpl.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/lib/MailProcessingErrorHandlingConfiguration.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessor.java
AL server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessor.java
AL server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
AL server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/MailetProcessorImplTest.java
AL server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/matchers/XorTest.java
AL server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/matchers/InvertMatcherWithCompositeMatcherTest.java
AL server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/matchers/NotTest.java
AL server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/matchers/OrTest.java
AL server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/matchers/AndTest.java
AL server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/MailetConfigImplTest.java
AL server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/CompositeProcessorImplTest.java
AL server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextContract.java
AL server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/AutomaticallySentMailDetectorImplTest.java
AL server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessorTest.java
AL server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessorTest.java
AL server/mailet/mailetcontainer-impl/src/reporting-site/site.xml
AL server/mailet/mailetcontainer-impl/pom.xml
AL server/mailet/mailetcontainer-api/src/main/resources/mailetcontainer.xml
AL server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/MailProcessor.java
AL server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/jmx/MailetManagementMBean.java
AL server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/jmx/MailProcessorManagementMBean.java
AL server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/jmx/MailSpoolerMBean.java
AL server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/jmx/MatcherManagementMBean.java
AL server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/MailetLoader.java
AL server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/MatcherLoader.java
AL server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/LocalResources.java
AL server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/ExceptionThrowingMatcher.java
AL server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/MockMatcherLoader.java
AL server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/MockMatcher.java
AL server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/ExceptionThrowingMailet.java
AL server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/MockMailProcessor.java
AL server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/MockMailet.java
AL server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/MockMailetLoader.java
AL server/mailet/mailetcontainer-api/src/reporting-site/site.xml
AL server/mailet/mailetcontainer-api/pom.xml
!????? server/mailet/mock-smtp-server/README.adoc
!????? server/mailet/mock-smtp-server/src/main/jib/logback.xml
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/ExtendedEhloCommand.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/HTTPConfigurationServer.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/ExtendedRcptToCommand.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/ExtendedMailFromCommand.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockMessageHandler.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/MockSMTPBehavior.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/MockSmtpBehaviors.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Response.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Mails.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/SMTPCommand.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/SMTPExtensions.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Condition.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Mail.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Operator.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/SMTPExtension.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/MockSMTPBehaviorInformation.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPServerMain.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/jackson/MailAddressSerializer.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/jackson/MailAddressModule.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/jackson/MailAddressDeserializer.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPServer.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/ReceivedMailRepository.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/ConfigurationClient.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/SMTPBehaviorRepository.java
AL server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/testing/MockSmtpServerExtension.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPServerTest.java
!????? server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConfigurationClientTest.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPBehaviorRepositoryTest.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/HTTPConfigurationServerTest.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MailTest.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/ResponseTest.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MailsTest.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MockSMTPBehaviorTest.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/OperatorTest.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MockSmtpBehaviorsTest.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/ConditionTest.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MockSMTPBehaviorInformationTest.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ReceivedMailRepositoryTest.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/jackson/MailAddressModuleTest.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java
AL server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPCommandTest.java
AL server/mailet/mock-smtp-server/pom.xml
AL server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml
AL server/container/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-authenticator.xml
AL server/container/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-authorizator.xml
AL server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
N server/container/spring/src/main/resources/META-INF/org/apache/james/README
AL server/container/spring/src/main/appended-resources/supplemental-models.xml
AL server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurableBeanPostProcessor.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationProvider.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/AbstractLifecycleBeanPostProcessor.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationProviderImpl.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/resource/JamesResourceLoader.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/resource/SpringUserEntityValidator.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/resource/DefaultJamesResourceLoader.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/rmi/RmiRegistryFactoryBean.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/filesystem/FileSystemImpl.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/filesystem/ResourceLoaderFileSystem.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/mailbox/MaxQuotaConfigurationReader.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/mailbox/SpringResolver.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/context/web/JamesServerWebApplicationContext.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/context/JamesServerApplicationContext.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/protocols/ProtocolHandlerLoaderBeanFactory.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/AbstractBeanFactory.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailetcontainer/MailetLoaderBeanFactory.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailetcontainer/AbstractLoaderBeanFactory.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailetcontainer/MatcherLoaderBeanFactory.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/IndexerConfigurationBeanFactoryPostProcessor.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/FileSystemBeanFactoryPostProcessor.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/QuotaBeanFactoryPostProcessor.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/ConfigurationBeanFactoryPostProcessor.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/MailboxConfigurationBeanFactoryPostProcessor.java
AL server/container/spring/src/main/java/org/apache/james/container/spring/bean/AbstractBeanFactory.java
AL server/container/spring/src/test/java/org/apache/james/container/spring/filesystem/FileSystemImplTest.java
AL server/container/spring/src/reporting-site/site.xml
AL server/container/spring/pom.xml
AL server/container/filesystem-api/src/main/java/org/apache/james/filesystem/api/JamesDirectoriesProvider.java
AL server/container/filesystem-api/src/main/java/org/apache/james/filesystem/api/FileSystem.java
!????? server/container/filesystem-api/src/test/resources/classpathTest.txt
!????? server/container/filesystem-api/src/test/resources/class path Test.txt
AL server/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/AbstractFileSystemTest.java
AL server/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/FileSystemFixture.java
AL server/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/mock/MockFileSystem.java
AL server/container/filesystem-api/src/reporting-site/site.xml
AL server/container/filesystem-api/pom.xml
AL server/container/util/src/main/java/org/apache/james/util/io/InputStreamConsummer.java
AL server/container/util/src/main/java/org/apache/james/util/io/ZeroedInputStream.java
AL server/container/util/src/main/java/org/apache/james/util/io/CountDownConsumeInputStream.java
AL server/container/util/src/main/java/org/apache/james/util/io/CurrentPositionInputStream.java
AL server/container/util/src/main/java/org/apache/james/util/io/InputStreamUtils.java
AL server/container/util/src/main/java/org/apache/james/util/io/BodyOffsetInputStream.java
AL server/container/util/src/main/java/org/apache/james/util/FunctionalUtils.java
AL server/container/util/src/main/java/org/apache/james/util/RestrictingRMISocketFactory.java
AL server/container/util/src/main/java/org/apache/james/util/MDCStructuredLogger.java
AL server/container/util/src/main/java/org/apache/james/util/reactor/Constants.java
AL server/container/util/src/main/java/org/apache/james/util/ValuePatch.java
AL server/container/util/src/main/java/org/apache/james/util/ClassLoaderUtils.java
AL server/container/util/src/main/java/org/apache/james/util/GuavaUtils.java
AL server/container/util/src/main/java/org/apache/james/util/DurationParser.java
AL server/container/util/src/main/java/org/apache/james/util/UnitParser.java
AL server/container/util/src/main/java/org/apache/james/util/Runnables.java
AL server/container/util/src/main/java/org/apache/james/util/streams/Offset.java
AL server/container/util/src/main/java/org/apache/james/util/streams/Iterables.java
AL server/container/util/src/main/java/org/apache/james/util/streams/Iterators.java
AL server/container/util/src/main/java/org/apache/james/util/streams/Limit.java
AL server/container/util/src/main/java/org/apache/james/util/LoggingLevel.java
AL server/container/util/src/main/java/org/apache/james/util/IteratorWrapper.java
AL server/container/util/src/main/java/org/apache/james/util/StructuredLogger.java
AL server/container/util/src/main/java/org/apache/james/util/AuditTrail.java
AL server/container/util/src/main/java/org/apache/james/util/Size.java
AL server/container/util/src/main/java/org/apache/james/util/mime/MessageContentExtractor.java
AL server/container/util/src/main/java/org/apache/james/util/MemoizedSupplier.java
AL server/container/util/src/main/java/org/apache/james/util/ReactorUtils.java
AL server/container/util/src/main/java/org/apache/james/util/html/HtmlTextExtractor.java
AL server/container/util/src/main/java/org/apache/james/util/StreamUtils.java
AL server/container/util/src/main/java/org/apache/james/util/DataChunker.java
AL server/container/util/src/main/java/org/apache/james/util/date/ZonedDateTimeProvider.java
AL server/container/util/src/main/java/org/apache/james/util/date/DefaultZonedDateTimeProvider.java
AL server/container/util/src/main/java/org/apache/james/util/date/ImapDateTimeFormatter.java
AL server/container/util/src/main/java/org/apache/james/util/MimeMessageUtil.java
AL server/container/util/src/main/java/org/apache/james/util/SizeFormat.java
AL server/container/util/src/main/java/org/apache/james/util/concurrent/JMXEnabledScheduledThreadPoolExecutor.java
AL server/container/util/src/main/java/org/apache/james/util/concurrent/JMXEnabledScheduledThreadPoolExecutorMBean.java
AL server/container/util/src/main/java/org/apache/james/util/concurrent/NamedThreadFactory.java
AL server/container/util/src/main/java/org/apache/james/util/concurrent/JMXEnabledThreadPoolExecutorMBean.java
AL server/container/util/src/main/java/org/apache/james/util/OptionalUtils.java
AL server/container/util/src/main/java/org/apache/james/util/MDCBuilder.java
AL server/container/util/src/main/java/org/apache/james/util/sql/JDBCUtil.java
AL server/container/util/src/main/java/org/apache/james/util/sql/SqlResources.java
AL server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java
AL server/container/util/src/test/java/org/apache/james/util/AuditTrailTest.java
AL server/container/util/src/test/java/org/apache/james/util/DataChunkerTest.java
AL server/container/util/src/test/java/org/apache/james/util/io/CurrentPositionInputStreamTest.java
AL server/container/util/src/test/java/org/apache/james/util/ReactorUtilsTest.java
AL server/container/util/src/test/java/org/apache/james/util/BodyOffsetInputStreamTest.java
AL server/container/util/src/test/java/org/apache/james/util/DurationParserTest.java
AL server/container/util/src/test/java/org/apache/james/util/RunnablesTest.java
AL server/container/util/src/test/java/org/apache/james/util/FunctionalUtilsTest.java
AL server/container/util/src/test/java/org/apache/james/util/IteratorWrapperTest.java
AL server/container/util/src/test/java/org/apache/james/util/OptionalUtilsTest.java
AL server/container/util/src/test/java/org/apache/james/util/streams/OffsetTest.java
AL server/container/util/src/test/java/org/apache/james/util/streams/IteratorsTest.java
AL server/container/util/src/test/java/org/apache/james/util/streams/ImmutableCollectorsTest.java
AL server/container/util/src/test/java/org/apache/james/util/streams/LimitTest.java
AL server/container/util/src/test/java/org/apache/james/util/MemoizedSupplierTest.java
AL server/container/util/src/test/java/org/apache/james/util/CommutativityCheckerTest.java
AL server/container/util/src/test/java/org/apache/james/util/StreamUtilsTest.java
AL server/container/util/src/test/java/org/apache/james/util/InputStreamUtilsTest.java
AL server/container/util/src/test/java/org/apache/james/util/SizeTest.java
AL server/container/util/src/test/java/org/apache/james/util/mime/MessageContentExtractorTest.java
AL server/container/util/src/test/java/org/apache/james/util/MDCBuilderTest.java
AL server/container/util/src/test/java/org/apache/james/util/date/ImapDateTimeFormatterTest.java
AL server/container/util/src/test/java/org/apache/james/util/LoggingLevelTest.java
AL server/container/util/src/test/java/org/apache/james/util/CommutativityChecker.java
AL server/container/util/src/test/java/org/apache/james/util/SizeFormatTest.java
AL server/container/util/src/test/java/org/apache/james/util/GuavaUtilsTest.java
AL server/container/util/src/test/java/org/apache/james/util/concurrency/ConcurrentTestRunnerTest.java
AL server/container/util/src/test/java/org/apache/james/util/ValuePatchTest.java
AL server/container/util/src/reporting-site/site.xml
AL server/container/util/pom.xml
AL server/container/feature-checks/src/main/java/org/apache/james/healthcheck/MailReceptionCheck.java
AL server/container/feature-checks/pom.xml
AL server/container/core/src/main/resources/jmx.properties
AL server/container/core/src/main/java/org/apache/james/server/core/package.html
AL server/container/core/src/main/java/org/apache/james/server/core/ContentTypeCleaner.java
AL server/container/core/src/main/java/org/apache/james/server/core/MimeMessageSource.java
AL server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java
AL server/container/core/src/main/java/org/apache/james/server/core/configuration/ConfigurationProvider.java
AL server/container/core/src/main/java/org/apache/james/server/core/configuration/Configuration.java
AL server/container/core/src/main/java/org/apache/james/server/core/MimeMessageInputStream.java
AL server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
AL server/container/core/src/main/java/org/apache/james/server/core/MissingArgumentException.java
AL server/container/core/src/main/java/org/apache/james/server/core/MailHeaders.java
AL server/container/core/src/main/java/org/apache/james/server/core/JamesServerResourceLoader.java
AL server/container/core/src/main/java/org/apache/james/server/core/InternetHeadersInputStream.java
AL server/container/core/src/main/java/org/apache/james/server/core/filesystem/FileSystemResource.java
AL server/container/core/src/main/java/org/apache/james/server/core/filesystem/UrlResource.java
AL server/container/core/src/main/java/org/apache/james/server/core/filesystem/Resource.java
AL server/container/core/src/main/java/org/apache/james/server/core/filesystem/ResourceUtils.java
AL server/container/core/src/main/java/org/apache/james/server/core/filesystem/ResourceFactory.java
AL server/container/core/src/main/java/org/apache/james/server/core/filesystem/FileSystemImpl.java
AL server/container/core/src/main/java/org/apache/james/server/core/filesystem/ClassPathResource.java
AL server/container/core/src/main/java/org/apache/james/server/core/filesystem/SimpleUrl.java
AL server/container/core/src/main/java/org/apache/james/server/core/MimeMessageInputStreamSource.java
AL server/container/core/src/main/java/org/apache/james/server/core/MimeMessageUtil.java
AL server/container/core/src/main/java/org/apache/james/server/core/Envelope.java
AL server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java
AL server/container/core/src/main/java/org/apache/james/server/core/BufferedDeferredFileOutputStream.java
!????? server/container/core/src/test/resources/JAMES-1593.eml
!????? server/container/core/src/test/resources/invalid.eml
!????? server/container/core/src/test/resources/mail-containing-unicode-characters.eml
AL server/container/core/src/test/java/org/apache/james/server/core/MimeMessageFromStreamTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/MimeMessageTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/MailHeadersTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/ContentTypeCleanerTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/BufferedDeferredFileOutputStreamTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/configuration/BasicConfigurationTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/MimeMessageInputStreamSourceTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/filesystem/FileSystemImplTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/filesystem/SimpleUrlTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/MimeMessageWrapperTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/MimeMessageFromSharedStreamTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/MimeMessageUtilTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/EnvelopeTest.java
AL server/container/core/src/test/java/org/apache/james/server/core/MimeMessageFromMimeMessageTest.java
AL server/container/core/src/reporting-site/site.xml
AL server/container/core/pom.xml
AL server/container/mailbox-adapter/src/main/resources/mailbox.xml
AL server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/DelegationStoreAuthorizator.java
AL server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/UsersRepositoryUsernameSupplier.java
AL server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/QuotaUsernameChangeTaskStep.java
AL server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ACLUsernameChangeTaskStep.java
AL server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/UserRepositoryAuthenticator.java
AL server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/MailboxUserDeletionTaskStep.java
AL server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/UserRepositoryAuthorizator.java
AL server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/MailboxUsernameChangeTaskStep.java
AL server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/QuotaUsernameChangeTaskStepTest.java
AL server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/UserRepositoryAuthenticatorTest.java
AL server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/DelegationStoreAuthorizatorTest.java
AL server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxUsernameChangeTaskStepTest.java
AL server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/UserRepositoryAuthorizatorTest.java
AL server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxUserDeletionTaskStepTest.java
AL server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/ACLUsernameChangeTaskStepTest.java
AL server/container/mailbox-adapter/src/reporting-site/site.xml
AL server/container/mailbox-adapter/pom.xml
AL server/container/guice/distributed/src/main/java/org/apache/james/modules/event/JMAPEventBusModule.java
AL server/container/guice/distributed/src/main/java/org/apache/james/modules/event/MailboxEventBusModule.java
AL server/container/guice/distributed/src/main/java/org/apache/james/modules/DistributedTaskManagerModule.java
AL server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java
AL server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooser.java
AL server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java
AL server/container/guice/distributed/src/main/java/org/apache/james/modules/mailbox/DistributedDeletedMessageVaultModule.java
AL server/container/guice/distributed/src/main/java/org/apache/james/modules/mailbox/DeletedMessageVaultWorkQueueReconnectionHandler.java
AL server/container/guice/distributed/src/main/java/org/apache/james/modules/mailbox/DistributedDeletedMessageVaultDeletionCallback.java
AL server/container/guice/distributed/src/main/java/org/apache/james/modules/DistributedTaskSerializationModule.java
AL server/container/guice/distributed/src/main/java/org/apache/james/modules/plugins/QuotaMailingModule.java
AL server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java
AL server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreModulesChooserTest.java
AL server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java
AL server/container/guice/distributed/pom.xml
AL server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
AL server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
AL server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
AL server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraDelegationStoreModule.java
AL server/container/guice/data-cassandra/pom.xml
AL server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPADomainListModule.java
AL server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPADataModule.java
AL server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAEntityManagerModule.java
AL server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPADropListsModule.java
AL server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAMailRepositoryModule.java
AL server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAAuthorizatorModule.java
AL server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
AL server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java
AL server/container/guice/jpa-common/src/test/java/org/apache/james/TestJPAConfigurationModule.java
AL server/container/guice/jpa-common/src/test/java/org/apache/james/TestJPAConfigurationModuleWithSqlValidation.java
AL server/container/guice/jpa-common/pom.xml
AL server/container/guice/opensearch/src/main/java/org/apache/james/SearchModuleChooser.java
AL server/container/guice/opensearch/src/main/java/org/apache/james/SearchConfiguration.java
AL server/container/guice/opensearch/src/main/java/org/apache/james/OpenSearchHighlightModule.java
AL server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchDisabledModule.java
AL server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchQuotaSearcherModule.java
AL server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchStartUpCheck.java
AL server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchClientModule.java
AL server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchMailboxConfigurationModule.java
AL server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/TikaConfigurationReader.java
AL server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/TikaMailboxModule.java
AL server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchMailboxMappingModule.java
AL server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchMailboxModule.java
AL server/container/guice/opensearch/src/test/java/org/apache/james/TikaExtension.java
AL server/container/guice/opensearch/src/test/java/org/apache/james/DockerOpenSearchExtension.java
AL server/container/guice/opensearch/src/test/java/org/apache/james/modules/TestTikaModule.java
AL server/container/guice/opensearch/src/test/java/org/apache/james/modules/mailbox/SearchOverrideA.java
AL server/container/guice/opensearch/src/test/java/org/apache/james/modules/mailbox/TestDockerOpenSearchModule.java
AL server/container/guice/opensearch/src/test/java/org/apache/james/modules/mailbox/SearchOverrideB.java
AL server/container/guice/opensearch/src/test/java/org/apache/james/modules/mailbox/TikaConfigurationReaderTest.java
AL server/container/guice/opensearch/src/test/java/org/apache/james/modules/mailbox/OpenSearchMailboxModuleTest.java
AL server/container/guice/opensearch/src/test/java/org/apache/james/SearchConfigurationTest.java
AL server/container/guice/opensearch/src/test/java/org/apache/james/DockerOpenSearchRule.java
AL server/container/guice/opensearch/pom.xml
AL server/container/guice/memory/src/main/java/org/apache/james/FakeMessageSearchIndex.java
AL server/container/guice/memory/src/main/java/org/apache/james/modules/eventstore/MemoryEventStoreModule.java
AL server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java
AL server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
AL server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaSearchModule.java
AL server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryDataModule.java
AL server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryUsersRepositoryModule.java
AL server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryDataJmapModule.java
AL server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryDelegationStoreModule.java
AL server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryDropListsModule.java
AL server/container/guice/memory/src/main/java/org/apache/james/FakeSearchMailboxModule.java
AL server/container/guice/memory/pom.xml
!????? server/container/guice/memory/README.md
AL server/container/guice/queue/memory/src/main/java/org/apache/james/modules/queue/memory/MemoryMailQueueModule.java
AL server/container/guice/queue/memory/pom.xml
AL server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/RabbitMQMailQueueModule.java
AL server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/SpoolerReconnectionHandler.java
AL server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/RabbitMQModule.java
AL server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/FakeMailQueueViewModule.java
AL server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/MailQueueViewChoice.java
AL server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/CassandraMailQueueViewModule.java
AL server/container/guice/queue/rabbitmq/src/test/java/org/apache/james/modules/DockerRabbitMQRule.java
AL server/container/guice/queue/rabbitmq/src/test/java/org/apache/james/modules/TestRabbitMQModule.java
AL server/container/guice/queue/rabbitmq/src/test/java/org/apache/james/modules/RabbitMQExtension.java
AL server/container/guice/queue/rabbitmq/pom.xml
AL server/container/guice/queue/activemq/src/main/java/org/apache/james/modules/queue/activemq/ActiveMQQueueModule.java
AL server/container/guice/queue/activemq/pom.xml
AL server/container/guice/queue/pulsar/src/main/java/org/apache/james/queue/pulsar/module/PulsarQueueModule.java
AL server/container/guice/queue/pulsar/src/main/java/org/apache/james/queue/pulsar/module/PulsarMailQueueViewModule.java
AL server/container/guice/queue/pulsar/pom.xml
AL server/container/guice/blob/s3/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java
AL server/container/guice/blob/s3/src/main/java/org/apache/james/modules/objectstorage/S3BlobStoreModule.java
AL server/container/guice/blob/s3/src/main/java/org/apache/james/modules/objectstorage/S3BucketModule.java
AL server/container/guice/blob/s3/src/main/java/org/apache/james/modules/objectstorage/S3BlobStoreConfigurationReader.java
AL server/container/guice/blob/s3/src/test/java/org/apache/james/modules/AwsS3BlobStoreExtension.java
AL server/container/guice/blob/s3/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
AL server/container/guice/blob/s3/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java
AL server/container/guice/blob/s3/pom.xml
AL server/container/guice/blob/memory/src/main/java/org/apache/james/modules/BlobMemoryModule.java
AL server/container/guice/blob/memory/pom.xml
AL server/container/guice/blob/export/src/main/java/org/apache/james/modules/BlobExportImplChoice.java
AL server/container/guice/blob/export/src/main/java/org/apache/james/modules/BlobExportMechanismModule.java
AL server/container/guice/blob/export/src/main/java/org/apache/james/modules/LocalFileBlobExportMechanismModule.java
AL server/container/guice/blob/export/src/test/java/org/apache/james/modules/BlobExportMechanismModuleTest.java
AL server/container/guice/blob/export/src/test/java/org/apache/james/modules/BlobExportImplChoiceTest.java
AL server/container/guice/blob/export/pom.xml
AL server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/StoragePolicyConfigurationSanityEnforcementModule.java
AL server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/StorageStrategyModule.java
AL server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/StorageStrategyAggregate.java
AL server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/RegisterStorageStrategy.java
AL server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/EventsourcingStorageStrategy.java
AL server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/StorageStrategyChangedDTO.java
AL server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/StorageStrategyChanged.java
AL server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/RegisterStorageStrategyCommandHandler.java
AL server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/BlobStoreConfigurationValidationStartUpCheck.java
AL server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystem.java
AL server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/BlobDeduplicationGCModule.java
AL server/container/guice/blob/deduplication-gc/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java
AL server/container/guice/blob/deduplication-gc/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyChangedDTOTest.java
AL server/container/guice/blob/deduplication-gc/pom.xml
AL server/container/guice/blob/api/src/main/java/org/apache/james/modules/mailbox/BlobStoreAPIModule.java
AL server/container/guice/blob/api/src/main/java/org/apache/james/modules/mailbox/ConfigurationComponent.java
AL server/container/guice/blob/api/pom.xml
AL server/container/guice/blob/postgres/src/main/java/modules/BlobPostgresModule.java
AL server/container/guice/blob/postgres/pom.xml
AL server/container/guice/data-ldap/src/main/java/org/apache/james/data/UsersRepositoryModuleChooser.java
AL server/container/guice/data-ldap/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
AL server/container/guice/data-ldap/src/test/java/org/apache/james/data/DockerLdapRule.java
AL server/container/guice/data-ldap/src/test/java/org/apache/james/data/LdapTestExtension.java
AL server/container/guice/data-ldap/pom.xml
AL server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAQuotaSearchModule.java
AL server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java
AL server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
AL server/container/guice/mailbox-jpa/pom.xml
AL server/container/guice/sieve-jpa/src/main/java/org/apache/james/modules/data/SieveJPARepositoryModules.java
AL server/container/guice/sieve-jpa/pom.xml
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/task/PostgresTaskExecutionDetailsProjectionGuiceModule.java
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/events/PostgresDeadLetterModule.java
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresEventStoreModule.java
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresMailRepositoryModule.java
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresDomainListModule.java
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresUsersRepositoryModule.java
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresDropListsModule.java
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresDelegationStoreModule.java
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresDataJmapModule.java
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresDataModule.java
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresRecipientRewriteTableModule.java
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresCommonModule.java
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresVacationModule.java
AL server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresQuotaGuiceModule.java
AL server/container/guice/postgres-common/pom.xml
AL server/container/guice/configuration/src/main/java/org/apache/james/utils/InitilizationOperationBuilder.java
AL server/container/guice/configuration/src/main/java/org/apache/james/utils/UserDefinedStartable.java
AL server/container/guice/configuration/src/main/java/org/apache/james/utils/PropertiesProvider.java
AL server/container/guice/configuration/src/main/java/org/apache/james/utils/GuiceProbe.java
AL server/container/guice/configuration/src/main/java/org/apache/james/utils/KeystoreCreator.java
AL server/container/guice/configuration/src/main/java/org/apache/james/utils/InitializationOperation.java
AL server/container/guice/configuration/src/main/java/org/apache/james/utils/DelegatedPropertiesConfiguration.java
!????? server/container/guice/configuration/src/test/resources/b.properties
!????? server/container/guice/configuration/src/test/resources/a.properties
!????? server/container/guice/configuration/src/test/resources/env.properties
AL server/container/guice/configuration/src/test/java/org/apache/james/utils/PropertiesProviderTest.java
AL server/container/guice/configuration/src/test/java/org/apache/james/utils/PropertiesProviderFromEnvVariablesTest.java
AL server/container/guice/configuration/pom.xml
AL server/container/guice/common/src/main/java/org/apache/james/PeriodicalHealthChecks.java
AL server/container/guice/common/src/main/java/org/apache/james/NaiveDelegationStoreModule.java
AL server/container/guice/common/src/main/java/org/apache/james/IsStartedProbe.java
AL server/container/guice/common/src/main/java/org/apache/james/ConfigurationSanitizingPerformer.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/CommonServicesModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/StartUpChecksModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/RunArgumentsModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/ClockModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/MailetProcessingModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/StartablesModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/PeriodicalHealthChecksModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/protocols/ProtocolHandlerModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/ErrorMailRepositoryEmptyHealthCheckModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/server/DefaultProcessorsConfigurationProviderModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/server/DropWizardMetricsModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/server/TaskManagerModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/server/HostnameModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/server/RawPostDequeueDecoratorModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/server/TaskSerializationModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/server/LoggingMetricsModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/CleanupTaskModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/MimeMessageModule.java
AL server/container/guice/common/src/main/java/org/apache/james/modules/IsStartedProbeModule.java
AL server/container/guice/common/src/main/java/org/apache/james/CoreDataModule.java
AL server/container/guice/common/src/main/java/org/apache/james/TemporaryJamesServer.java
AL server/container/guice/common/src/main/java/org/apache/james/GuiceLifecycleHealthCheck.java
AL server/container/guice/common/src/main/java/org/apache/james/JamesServerMain.java
AL server/container/guice/common/src/main/java/org/apache/james/ProtocolConfigurationSanitizer.java
AL server/container/guice/common/src/main/java/org/apache/james/utils/InitializationOperations.java
AL server/container/guice/common/src/main/java/org/apache/james/utils/MailboxManagerDefinition.java
AL server/container/guice/common/src/main/java/org/apache/james/utils/Startables.java
AL server/container/guice/common/src/main/java/org/apache/james/utils/DataProbeImpl.java
AL server/container/guice/common/src/main/java/org/apache/james/utils/MailRepositoryProbeImpl.java
AL server/container/guice/common/src/main/java/org/apache/james/utils/GuiceProbeProvider.java
AL server/container/guice/common/src/main/java/org/apache/james/utils/GuiceProtocolHandlerLoader.java
AL server/container/guice/common/src/main/java/org/apache/james/utils/DropListProbeImpl.java
AL server/container/guice/common/src/main/java/org/apache/james/ExtraProperties.java
AL server/container/guice/common/src/main/java/org/apache/james/StartUpChecksPerformer.java
AL server/container/guice/common/src/main/java/org/apache/james/PeriodicalHealthChecksConfiguration.java
AL server/container/guice/common/src/main/java/org/apache/james/GuiceJamesServer.java
AL server/container/guice/common/src/main/java/org/apache/james/RunArguments.java
AL server/container/guice/common/src/main/java/org/apache/james/CleanupTasksPerformer.java
!????? server/container/guice/common/src/test/resources/eml/mail-containing-unicode-characters.eml
AL server/container/guice/common/src/test/resources/test.xml
!????? server/container/guice/common/src/test/resources/test.properties
AL server/container/guice/common/src/test/java/org/apache/james/AggregateJunitExtension.java
AL server/container/guice/common/src/test/java/org/apache/james/GuiceModuleTestExtension.java
AL server/container/guice/common/src/test/java/org/apache/james/JamesServerContract.java
AL server/container/guice/common/src/test/java/org/apache/james/MailsShouldBeWellReceived.java
AL server/container/guice/common/src/test/java/org/apache/james/PeriodicalHealthChecksConfigurationTest.java
AL server/container/guice/common/src/test/java/org/apache/james/modules/InitializationOperationsTest.java
AL server/container/guice/common/src/test/java/org/apache/james/GuiceModuleTestRule.java
AL server/container/guice/common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java
AL server/container/guice/common/src/test/java/org/apache/james/JamesServerBuilder.java
AL server/container/guice/common/src/test/java/org/apache/james/TempFilesystemTestRule.java
AL server/container/guice/common/src/test/java/org/apache/james/RegistrableExtension.java
AL server/container/guice/common/src/test/java/org/apache/james/utils/FileConfigurationProviderTest.java
AL server/container/guice/common/src/test/java/org/apache/james/utils/FailingPropertiesProvider.java
AL server/container/guice/common/src/test/java/org/apache/james/utils/ConfigurablesTest.java
AL server/container/guice/common/src/test/java/org/apache/james/utils/GuiceProbeProviderTest.java
AL server/container/guice/common/src/test/java/org/apache/james/TemporaryFolderRegistrableExtension.java
AL server/container/guice/common/src/test/java/org/apache/james/ClockExtension.java
AL server/container/guice/common/src/test/java/org/apache/james/JamesServerExtension.java
AL server/container/guice/common/src/test/java/org/apache/james/StartUpChecksPerformerTest.java
AL server/container/guice/common/src/test/java/org/apache/james/FakePropertiesProvider.java
AL server/container/guice/common/src/test/java/org/apache/james/AggregateGuiceModuleTestRule.java
AL server/container/guice/common/pom.xml
AL server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java
AL server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServerModule.java
AL server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JmxConfiguration.java
AL server/container/guice/jmx/src/main/java/org/apache/james/utils/GuiceMailboxManagerResolver.java
AL server/container/guice/jmx/src/test/java/org/apache/james/modules/server/JmxConfigurationTest.java
AL server/container/guice/jmx/pom.xml
AL server/container/guice/sieve-postgres/src/main/java/org/apache/james/modules/data/SievePostgresRepositoryModules.java
AL server/container/guice/sieve-postgres/pom.xml
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/LifeCycleStageModule.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/NoOpStageableTypeMapper.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/AbstractMethodTypeListener.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/StageHandler.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/NoOpStageHandler.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/StageableMethod.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/Stageable.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/AbstractStageable.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/AbstractBasicStageable.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/PreDestroyModule.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/LifeCycleModule.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/DefaultStager.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/DisposingStager.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/StageableTypeMapper.java
AL server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/Stager.java
AL server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/TestAnnotationB.java
AL server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/TestAnnotationA.java
AL server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/DefaultStagerTestCase.java
AL server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/StageObject2.java
AL server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/StageObject1.java
AL server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/StagingOrderTestCase.java
AL server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/MultiLifeCycleObject.java
AL server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/TestAnnotationC.java
AL server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/MultiLifeCycleTestCase.java
AL server/container/guice/onami/pom.xml
AL server/container/guice/sieve-file/src/main/java/org/apache/james/modules/data/SieveFileRepositoryModule.java
AL server/container/guice/sieve-file/pom.xml
AL server/container/guice/mailbox-postgres/src/main/java/org/apache/james/modules/mailbox/RLSSupportPostgresMailboxModule.java
AL server/container/guice/mailbox-postgres/src/main/java/org/apache/james/modules/mailbox/PostgresDeletedMessageVaultModule.java
AL server/container/guice/mailbox-postgres/src/main/java/org/apache/james/modules/mailbox/PostgresMailboxQuotaModule.java
AL server/container/guice/mailbox-postgres/src/main/java/org/apache/james/modules/mailbox/PostgresMailboxModule.java
AL server/container/guice/mailbox-postgres/pom.xml
AL server/container/guice/pom.xml
AL server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java
AL server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SmtpGuiceProbe.java
AL server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/JSPFModule.java
AL server/container/guice/protocols/smtp/pom.xml
AL server/container/guice/protocols/webadmin/src/main/java/org/apache/james/WebAdminServer.java
AL server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/TaskRoutesModule.java
AL server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/HealthCheckRoutesModule.java
AL server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/NoJwtModule.java
AL server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/ServerRouteModule.java
AL server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/WebAdminServerModule.java
AL server/container/guice/protocols/webadmin/src/main/java/org/apache/james/utils/WebAdminGuiceProbe.java
!????? server/container/guice/protocols/webadmin/src/test/resources/webadmin-two.properties
!????? server/container/guice/protocols/webadmin/src/test/resources/webadmin-one.properties
!????? server/container/guice/protocols/webadmin/src/test/resources/webadmin-empty.properties
!????? server/container/guice/protocols/webadmin/src/test/resources/webadmin-none.properties
AL server/container/guice/protocols/webadmin/src/test/java/org/apache/james/modules/server/WebAdminServerModuleTest.java
AL server/container/guice/protocols/webadmin/pom.xml
AL server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/UserIdentityModule.java
AL server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/JmapTasksModule.java
AL server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/JmapTaskSerializationModule.java
AL server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/JmapUploadCleanupModule.java
AL server/container/guice/protocols/webadmin-jmap/pom.xml
AL server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java
AL server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LmtpGuiceProbe.java
AL server/container/guice/protocols/lmtp/pom.xml
AL server/container/guice/protocols/webadmin-mailrepository/src/main/java/org/apache/james/modules/server/MailRepositoriesRoutesModule.java
AL server/container/guice/protocols/webadmin-mailrepository/src/main/java/org/apache/james/modules/server/MailRepositoryTaskSerializationModule.java
AL server/container/guice/protocols/webadmin-mailrepository/pom.xml
AL server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueTaskSerializationModule.java
AL server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueRoutesModule.java
AL server/container/guice/protocols/webadmin-mailqueue/pom.xml
AL server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesBackupModule.java
AL server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxExportTaskSerializationModule.java
AL server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/ReIndexingModule.java
AL server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesExportRoutesModule.java
AL server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
AL server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/InconsistencyQuotasSolvingRoutesModule.java
AL server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MessagesRoutesModule.java
AL server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxTaskSerializationModule.java
AL server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesRoutesModule.java
AL server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebAdminReIndexingTaskSerializationModule.java
AL server/container/guice/protocols/webadmin-mailbox/pom.xml
AL server/container/guice/protocols/netty/pom.xml
AL server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/VacationRoutesModule.java
AL server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/DLPRoutesModule.java
AL server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/DataRoutesModules.java
AL server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/SieveRoutesModule.java
AL server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/DropListsRoutesModule.java
AL server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/blobstore/server/BlobRoutesModules.java
AL server/container/guice/protocols/webadmin-data/pom.xml
AL server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/Pop3GuiceProbe.java
AL server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java
AL server/container/guice/protocols/pop/pom.xml
AL server/container/guice/protocols/jmap/src/main/resources/defaultJmapMailetContainer.xml
AL server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/MessageIdProbe.java
AL server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
AL server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/rfc8621/RFC8621MethodsModule.java
AL server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JmapGuiceProbe.java
AL server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPListenerModule.java
AL server/container/guice/protocols/jmap/src/main/java/org/apache/james/modules/protocols/JmapEventBusModule.java
AL server/container/guice/protocols/jmap/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java
AL server/container/guice/protocols/jmap/src/main/java/org/apache/james/utils/FilteringManagementProbeImpl.java
AL server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/JmapJamesServerContract.java
AL server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPModuleTest.java
AL server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/MailetPreconditionTest.java
AL server/container/guice/protocols/jmap/src/test/java/org/apache/james/modules/TestJMAPServerModule.java
AL server/container/guice/protocols/jmap/pom.xml
AL server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/ConnectionCheckFactoryImpl.java
AL server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/ImapPackage.java
AL server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
AL server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/ImapGuiceProbe.java
AL server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/DefaultImapPackage.java
AL server/container/guice/protocols/imap/pom.xml
AL server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java
AL server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/SieveProbeImpl.java
AL server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/SieveModule.java
AL server/container/guice/protocols/managedsieve/pom.xml
AL server/container/guice/protocols/webadmin-rabbitmq-mailqueue/src/main/java/org/apache/james/modules/server/RabbitMailQueueTaskSerializationModule.java
AL server/container/guice/protocols/webadmin-rabbitmq-mailqueue/src/main/java/org/apache/james/modules/server/RabbitMailQueueRoutesModule.java
AL server/container/guice/protocols/webadmin-rabbitmq-mailqueue/src/main/java/org/apache/james/modules/server/BrowseStartTaskModule.java
AL server/container/guice/protocols/webadmin-rabbitmq-mailqueue/pom.xml
AL server/container/guice/protocols/webadmin-mail-over-web/src/main/java/org/apache/james/modules/server/WebAdminMailOverWebModule.java
AL server/container/guice/protocols/webadmin-mail-over-web/pom.xml
AL server/container/guice/mailet/src/main/java/org/apache/james/modules/server/DKIMMailetModule.java
AL server/container/guice/mailet/src/main/java/org/apache/james/modules/server/MailetContainerModule.java
AL server/container/guice/mailet/src/main/java/org/apache/james/utils/MailetConfigurationOverride.java
AL server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceMatcherLoader.java
AL server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceMailetLoader.java
AL server/container/guice/mailet/src/main/java/org/apache/james/utils/SpoolerProbe.java
A server/container/guice/mailet/src/test/resources/recursive/extensions-jars/custom-mailets-implementation-3.9.0-SNAPSHOT.jar
A server/container/guice/mailet/src/test/resources/recursive/extensions-jars/james-server-guice-custom-mailets-3.9.0-SNAPSHOT-jar-with-dependencies.jar
AL server/container/guice/mailet/src/test/java/org/apache/james/transport/matchers/sub/TestMatcher.java
AL server/container/guice/mailet/src/test/java/org/apache/james/transport/mailets/sub/TestMailet.java
AL server/container/guice/mailet/src/test/java/org/apache/james/transport/mailets/sub/ConstructorBoundTestMailet.java
AL server/container/guice/mailet/src/test/java/org/apache/james/modules/server/MailetContainerModuleTest.java
AL server/container/guice/mailet/src/test/java/org/apache/james/utils/GuiceMatcherLoaderTest.java
AL server/container/guice/mailet/src/test/java/org/apache/james/utils/GuiceMailetLoaderTest.java
AL server/container/guice/mailet/pom.xml
AL server/container/guice/mailrepository-blob/src/main/java/org/apache/james/modules/mailrepository/BlobstoreMailRepositoryModule.java
AL server/container/guice/mailrepository-blob/pom.xml
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/Names.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/ConfigurationProbe.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/EventDeadLettersProbe.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxModule.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/FastRetryBackoffModule.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHookConfiguration.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenersConfiguration.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailReceptionHealthCheckModule.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHookLoaderImpl.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHooksConfiguration.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHookLoader.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ReIndexingTaskSerializationModule.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHookModule.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MemoryDeadLetterModule.java
AL server/container/guice/mailbox/src/main/java/org/apache/james/modules/ACLProbeImpl.java
AL server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHookConfigurationTest.java
AL server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
AL server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/NoopPreDeletionHook.java
AL server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
AL server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ConfiguredListener.java
AL server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHookLoaderImplTest.java
AL server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ReactiveNoopMailboxListener.java
AL server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
AL server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHooksConfigurationTest.java
AL server/container/guice/mailbox/pom.xml
AL server/container/guice/utils/src/main/java/org/apache/james/utils/ExtensionModule.java
AL server/container/guice/utils/src/main/java/org/apache/james/utils/UserStartables.java
AL server/container/guice/utils/src/main/java/org/apache/james/utils/ExtensionConfiguration.java
AL server/container/guice/utils/src/main/java/org/apache/james/utils/FullyQualifiedClassName.java
AL server/container/guice/utils/src/main/java/org/apache/james/utils/GuiceGenericLoader.java
AL server/container/guice/utils/src/main/java/org/apache/james/utils/NamingScheme.java
AL server/container/guice/utils/src/main/java/org/apache/james/utils/GuiceLoader.java
AL server/container/guice/utils/src/main/java/org/apache/james/utils/ExtendedClassLoader.java
AL server/container/guice/utils/src/main/java/org/apache/james/utils/ClassName.java
AL server/container/guice/utils/src/main/java/org/apache/james/utils/PackageName.java
!????? server/container/guice/utils/src/test/resources/extensions-empty.properties
!????? server/container/guice/utils/src/test/resources/extensions-two.properties
!????? server/container/guice/utils/src/test/resources/extensions-none.properties
!????? server/container/guice/utils/src/test/resources/extensions-one.properties
AL server/container/guice/utils/src/test/java/org/apache/james/utils/NamingSchemeTest.java
AL server/container/guice/utils/src/test/java/org/apache/james/utils/ExtensionConfigurationTest.java
AL server/container/guice/utils/src/test/java/org/apache/james/utils/ClassNameTest.java
AL server/container/guice/utils/src/test/java/org/apache/james/utils/PackageNameTest.java
AL server/container/guice/utils/src/test/java/org/apache/james/utils/FullyQualifiedClassNameTest.java
AL server/container/guice/utils/pom.xml
AL server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java
AL server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultConfigurationModule.java
AL server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/VaultTaskSerializationModule.java
AL server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultRoutesModule.java
AL server/container/guice/mailbox-plugin-deleted-messages-vault/src/test/java/org/apache/james/modules/vault/TestDeleteMessageVaultPreDeletionHookModule.java
AL server/container/guice/mailbox-plugin-deleted-messages-vault/pom.xml
AL server/container/guice/mailrepository-loaders/src/main/java/org/apache/james/modules/mailrepository/guice/GuiceMailRepositoryLoader.java
AL server/container/guice/mailrepository-loaders/src/main/java/org/apache/james/modules/mailrepository/guice/MultiBoundGuiceRepositoryLoader.java
AL server/container/guice/mailrepository-loaders/pom.xml
AL server/container/guice/mailrepository-cassandra/src/main/java/org/apache/james/modules/mailrepository/CassandraMailRepositoryModule.java
AL server/container/guice/mailrepository-cassandra/pom.xml
AL server/container/guice/lucene/src/main/java/org/apache/james/modules/mailbox/LuceneMemorySearchMailboxModule.java
AL server/container/guice/lucene/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
AL server/container/guice/lucene/pom.xml
AL server/container/guice/testing/dependency/src/main/java/org/apache/james/dependency/MyDependency.java
AL server/container/guice/testing/dependency/pom.xml
AL server/container/guice/testing/custom-mailets/src/main/java/com/custom/matchers/AnotherMatcher.java
AL server/container/guice/testing/custom-mailets/src/main/java/com/custom/mailets/AnotherMailet.java
AL server/container/guice/testing/custom-mailets/src/main/java/org/apache/james/transport/matchers/CustomMatcher.java
AL server/container/guice/testing/custom-mailets/src/main/java/org/apache/james/transport/mailets/CustomMailet.java
AL server/container/guice/testing/custom-mailets/src/main/java/org/apache/james/transport/mailets/CustomMailetWithCustomDependencyInConstructor.java
AL server/container/guice/testing/custom-mailets/src/main/java/org/apache/james/transport/mailets/MyGenericMailet.java
AL server/container/guice/testing/custom-mailets/src/main/java/org/apache/james/transport/mailets/MyInterface.java
AL server/container/guice/testing/custom-mailets/src/main/java/org/apache/james/transport/mailets/CustomMailetWithCustomDependencyInService.java
AL server/container/guice/testing/custom-mailets/pom.xml
!????? server/container/guice/testing/custom-mailets/README.md
AL server/container/guice/testing/pom.xml
AL server/container/guice/testing/custom-mailets-implementation/src/main/java/org/apache/james/transport/mailets/MyInterfaceImplementation.java
AL server/container/guice/testing/custom-mailets-implementation/src/main/java/org/apache/james/transport/mailets/MyExtensionModule.java
AL server/container/guice/testing/custom-mailets-implementation/pom.xml
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/metrics/CassandraMetricsModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/webadmin/InconsistencySolvingRoutesModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/webadmin/TasksCleanupRoutesModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/webadmin/CassandraRoutesModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/CassandraConsistencyTaskSerializationModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/eventstore/CassandraEventStoreModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/TasksCleanupTaskSerializationModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraDeadLetterModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/DefaultBucketModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraSchemaVersionStartUpCheck.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaMailingModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraThreadIdGuessingModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/KeyspacesConfiguration.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraCacheSessionModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraBlobStoreDependenciesModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxQuotaLegacyModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraDeletedMessageVaultModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxQuotaModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/data/CassandraSieveQuotaModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/data/CassandraVacationModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/data/CassandraDropListsModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/data/CassandraDLPConfigurationStoreModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/data/CassandraSieveQuotaLegacyModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/modules/data/CassandraSieveRepositoryModule.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/server/CassandraProbe.java
AL server/container/guice/cassandra/src/main/java/org/apache/james/server/CassandraTruncateTableTask.java
!????? server/container/guice/cassandra/src/test/resources/modules/mailbox/cassandra.properties
AL server/container/guice/cassandra/src/test/java/org/apache/james/modules/mailbox/KeyspacesConfigurationTest.java
AL server/container/guice/cassandra/src/test/java/org/apache/james/CassandraExtension.java
AL server/container/guice/cassandra/src/test/java/org/apache/james/DockerCassandraRule.java
AL server/container/guice/cassandra/pom.xml
AL server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerResolver.java
AL server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/QuotaManagement.java
AL server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagement.java
AL server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/MailboxCopierManagement.java
AL server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagementMBean.java
AL server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/MailboxCopierManagementMBean.java
AL server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagementMBean.java
AL server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/QuotaManagementMBean.java
AL server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerResolverException.java
AL server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagement.java
!????? server/container/mailbox-jmx/src/test/resources/eml/frnog.eml
AL server/container/mailbox-jmx/src/test/java/org/apache/james/adapter/mailbox/ReIndexerManagementTest.java
AL server/container/mailbox-jmx/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
AL server/container/mailbox-jmx/pom.xml
AL server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Startable.java
AL server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Configurable.java
AL server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/LifecycleUtil.java
AL server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Disposable.java
AL server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/ConfigurationSanitizer.java
AL server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/StartUpCheck.java
AL server/container/lifecycle-api/src/test/java/org/apache/james/lifecycle/api/StartUpCheckTest.java
AL server/container/lifecycle-api/src/test/java/org/apache/james/lifecycle/api/LeakAwareTest.java
AL server/container/lifecycle-api/src/reporting-site/site.xml
AL server/container/lifecycle-api/pom.xml
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOV1.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDataDefinition.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/tables/CassandraSieveSpaceTable.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/tables/CassandraSieveTable.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/tables/CassandraSieveActiveTable.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/tables/CassandraSieveQuotaTable.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/tables/CassandraSieveClusterQuotaTable.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/FakeSieveQuotaDAO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/SieveQuota.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/ActiveScriptInfo.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/Script.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveDAO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/migration/SieveQuotaMigration.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryDataDefinition.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOV2.java
AL server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraActiveScriptDAO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainListDataDefinition.java
AL server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/tables/CassandraDomainsTable.java
AL server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
AL server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraMappingsSourcesDAO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
AL server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/tables/CassandraRecipientRewriteTableTable.java
AL server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/tables/CassandraMappingsSourcesTable.java
AL server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRRTDataDefinition.java
AL server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigrationTaskAdditionalInformationDTO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigrationTaskDTO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigration.java
AL server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableDAO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraVacationRepository.java
AL server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/tables/CassandraNotificationTable.java
AL server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/tables/CassandraVacationTable.java
AL server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraNotificationRegistry.java
AL server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraNotificationRegistryDataDefinition.java
AL server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraVacationDAO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraNotificationRegistryDAO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraVacationDataDefinition.java
AL server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationModules.java
AL server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemsRemovedDTO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemAddedDTO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemDTO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/tables/CassandraUserTable.java
AL server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraRepositoryConfiguration.java
AL server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryDataDefinition.java
AL server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersDAO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraDelegationStore.java
AL server/data/data-cassandra/src/main/java/org/apache/james/droplists/cassandra/tables/CassandraDropListTable.java
AL server/data/data-cassandra/src/main/java/org/apache/james/droplists/cassandra/CassandraDropListDAO.java
AL server/data/data-cassandra/src/main/java/org/apache/james/droplists/cassandra/CassandraDropList.java
AL server/data/data-cassandra/src/main/java/org/apache/james/droplists/cassandra/CassandraDropListDataDefinition.java
B server/data/data-cassandra/src/test/resources/json/dlp/eventsourcing/items_added_event_2.json
B server/data/data-cassandra/src/test/resources/json/dlp/eventsourcing/items_removed_event_2.json
B server/data/data-cassandra/src/test/resources/json/dlp/eventsourcing/items_removed_event_1.json
B server/data/data-cassandra/src/test/resources/json/dlp/eventsourcing/configuration_item_1.json
B server/data/data-cassandra/src/test/resources/json/dlp/eventsourcing/items_added_event_1.json
AL server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveCurrentUploadUsageCalculatorTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOV1Test.java
AL server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/ScriptTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/SieveQuotaTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOContract.java
AL server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveDAOTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/migration/SieveQuotaMigrationTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraActiveScriptDAOTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOV2Test.java
AL server/data/data-cassandra/src/test/java/org/apache/james/domainlist/cassandra/CassandraDomainListTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/domainlist/cassandra/CacheDomainListTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableDAOTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigrationTaskSerializationTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigrationTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraMappingsSourcesDAOTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
AL server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/RewriteTablesTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/vacation/cassandra/CassandraVacationRepositoryTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/vacation/cassandra/CassandraNotificationRegistryTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/CassandraEventSourcingDLPConfigurationStoreTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/DTOTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/CassandraEventSourcingDLPConfigurationStoreExtension.java
AL server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraDelegationStoreTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java
AL server/data/data-cassandra/src/test/java/org/apache/james/droplists/cassandra/CassandraDropListTest.java
AL server/data/data-cassandra/pom.xml
AL server/data/data-library/src/main/resources/META-INF/spring/data-context.xml
AL server/data/data-library/src/main/java/org/apache/james/domainlist/lib/DomainListManagement.java
AL server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java
AL server/data/data-library/src/main/java/org/apache/james/domainlist/lib/EnvDetector.java
AL server/data/data-library/src/main/java/org/apache/james/domainlist/lib/DomainListConfiguration.java
AL server/data/data-library/src/main/java/org/apache/james/UserEntityValidator.java
AL server/data/data-library/src/main/java/org/apache/james/repository/file/AbstractFileRepository.java
AL server/data/data-library/src/main/java/org/apache/james/repository/file/ClassLoaderObjectInputStream.java
AL server/data/data-library/src/main/java/org/apache/james/repository/file/FilePersistentObjectRepository.java
AL server/data/data-library/src/main/java/org/apache/james/repository/file/ExtensionFileFilter.java
AL server/data/data-library/src/main/java/org/apache/james/repository/file/NumberedRepositoryFileFilter.java
AL server/data/data-library/src/main/java/org/apache/james/repository/file/FilePersistentStreamRepository.java
AL server/data/data-library/src/main/java/org/apache/james/repository/api/StreamRepository.java
AL server/data/data-library/src/main/java/org/apache/james/repository/api/ObjectRepository.java
AL server/data/data-library/src/main/java/org/apache/james/RecipientRewriteTableUserEntityValidator.java
AL server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableUtil.java
AL server/data/data-library/src/main/java/org/apache/james/rrt/lib/CanSendFromImpl.java
AL server/data/data-library/src/main/java/org/apache/james/rrt/lib/AliasReverseResolverImpl.java
AL server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableManagement.java
AL server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
AL server/data/data-library/src/main/java/org/apache/james/sieverepository/lib/SieveRepositoryManagement.java
AL server/data/data-library/src/main/java/org/apache/james/AggregateUserEntityValidator.java
AL server/data/data-library/src/main/java/org/apache/james/droplist/lib/DropListManagement.java
AL server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/events/ConfigurationItemsAdded.java
AL server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/events/ConfigurationItemsRemoved.java
AL server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/EventSourcingDLPConfigurationStore.java
AL server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/ClearCommandHandler.java
AL server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/StoreCommand.java
AL server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/StoreCommandHandler.java
AL server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/ClearCommand.java
AL server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPAggregateId.java
AL server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java
AL server/data/data-library/src/main/java/org/apache/james/DefaultVacationService.java
AL server/data/data-library/src/main/java/org/apache/james/user/lib/UsersRepositoryManagement.java
AL server/data/data-library/src/main/java/org/apache/james/user/lib/package.html
AL server/data/data-library/src/main/java/org/apache/james/user/lib/model/Algorithm.java
AL server/data/data-library/src/main/java/org/apache/james/user/lib/model/DefaultUser.java
AL server/data/data-library/src/main/java/org/apache/james/user/lib/UsersRepositoryImpl.java
AL server/data/data-library/src/main/java/org/apache/james/user/lib/UsersDAO.java
AL server/data/data-library/src/main/java/org/apache/james/DefaultUserEntityValidator.java
!????? server/data/data-library/src/test/resources/sieve/my_sieve
!????? server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature
AL server/data/data-library/src/test/java/org/apache/james/domainlist/api/mock/SimpleDomainList.java
AL server/data/data-library/src/test/java/org/apache/james/domainlist/lib/DomainListContract.java
AL server/data/data-library/src/test/java/org/apache/james/domainlist/lib/DomainListConfigurationTest.java
AL server/data/data-library/src/test/java/org/apache/james/domainlist/lib/AbstractDomainListPrivateMethodsTest.java
AL server/data/data-library/src/test/java/org/apache/james/rrt/lib/RecipientRewriteTableFixture.java
AL server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java
AL server/data/data-library/src/test/java/org/apache/james/rrt/lib/RecipientRewriteTableContract.java
AL server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingsImplTest.java
AL server/data/data-library/src/test/java/org/apache/james/sieverepository/lib/SieveRepositoryContract.java
AL server/data/data-library/src/test/java/org/apache/james/sieverepository/lib/SieveRepositoryManagementTest.java
AL server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/events/ConfigurationItemsAddedTest.java
AL server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/events/ConfigurationItemsRemovedTest.java
AL server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/commands/StoreCommandTest.java
AL server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/commands/ClearCommandTest.java
AL server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/aggregates/DLPAggregateIdTest.java
AL server/data/data-library/src/test/java/org/apache/james/user/lib/UsersRepositoryContract.java
AL server/data/data-library/src/test/java/org/apache/james/user/lib/model/AlgorithmTest.java
AL server/data/data-library/src/test/java/org/apache/james/user/lib/model/DefaultUserTest.java
AL server/data/data-library/src/test/java/org/apache/james/DefaultVacationServiceTest.java
AL server/data/data-library/src/reporting-site/site.xml
AL server/data/data-library/pom.xml
AL server/data/data-postgres/src/main/java/org/apache/james/sieve/postgres/PostgresSieveQuotaDAO.java
AL server/data/data-postgres/src/main/java/org/apache/james/sieve/postgres/PostgresSieveRepository.java
AL server/data/data-postgres/src/main/java/org/apache/james/sieve/postgres/model/PostgresSieveScriptId.java
AL server/data/data-postgres/src/main/java/org/apache/james/sieve/postgres/model/PostgresSieveScript.java
AL server/data/data-postgres/src/main/java/org/apache/james/sieve/postgres/PostgresSieveScriptDAO.java
AL server/data/data-postgres/src/main/java/org/apache/james/sieve/postgres/PostgresSieveDataDefinition.java
AL server/data/data-postgres/src/main/java/org/apache/james/domainlist/postgres/PostgresDomainDataDefinition.java
AL server/data/data-postgres/src/main/java/org/apache/james/domainlist/postgres/PostgresDomainList.java
AL server/data/data-postgres/src/main/java/org/apache/james/rrt/postgres/PostgresRecipientRewriteTableDataDefinition.java
AL server/data/data-postgres/src/main/java/org/apache/james/rrt/postgres/PostgresRecipientRewriteTableDAO.java
AL server/data/data-postgres/src/main/java/org/apache/james/rrt/postgres/PostgresRecipientRewriteTable.java
AL server/data/data-postgres/src/main/java/org/apache/james/vacation/postgres/PostgresNotificationRegistry.java
AL server/data/data-postgres/src/main/java/org/apache/james/vacation/postgres/PostgresVacationDataDefinition.java
AL server/data/data-postgres/src/main/java/org/apache/james/vacation/postgres/PostgresVacationRepository.java
AL server/data/data-postgres/src/main/java/org/apache/james/vacation/postgres/PostgresVacationResponseDAO.java
AL server/data/data-postgres/src/main/java/org/apache/james/vacation/postgres/PostgresNotificationRegistryDAO.java
AL server/data/data-postgres/src/main/java/org/apache/james/user/postgres/PostgresDelegationStore.java
AL server/data/data-postgres/src/main/java/org/apache/james/user/postgres/PostgresUsersRepositoryConfiguration.java
AL server/data/data-postgres/src/main/java/org/apache/james/user/postgres/PostgresUsersRepository.java
AL server/data/data-postgres/src/main/java/org/apache/james/user/postgres/PostgresUserDataDefinition.java
AL server/data/data-postgres/src/main/java/org/apache/james/user/postgres/PostgresUsersDAO.java
AL server/data/data-postgres/src/main/java/org/apache/james/droplists/postgres/PostgresDropList.java
AL server/data/data-postgres/src/main/java/org/apache/james/droplists/postgres/PostgresDropListDataDefinition.java
AL server/data/data-postgres/src/main/java/org/apache/james/mailrepository/postgres/PostgresMailRepositoryContentDAO.java
AL server/data/data-postgres/src/main/java/org/apache/james/mailrepository/postgres/PostgresMailRepository.java
AL server/data/data-postgres/src/main/java/org/apache/james/mailrepository/postgres/PostgresMailRepositoryFactory.java
AL server/data/data-postgres/src/main/java/org/apache/james/mailrepository/postgres/PostgresMailRepositoryBlobReferenceSource.java
AL server/data/data-postgres/src/main/java/org/apache/james/mailrepository/postgres/PostgresMailRepositoryDataDefinition.java
AL server/data/data-postgres/src/main/java/org/apache/james/mailrepository/postgres/PostgresMailRepositoryUrlStore.java
!????? server/data/data-postgres/src/test/resources/log4j.properties
AL server/data/data-postgres/src/test/java/org/apache/james/sieve/postgres/PostgresSieveQuotaDAOTest.java
AL server/data/data-postgres/src/test/java/org/apache/james/sieve/postgres/PostgresSieveRepositoryTest.java
AL server/data/data-postgres/src/test/java/org/apache/james/domainlist/postgres/PostgresDomainListTest.java
AL server/data/data-postgres/src/test/java/org/apache/james/rrt/postgres/PostgresStepdefs.java
AL server/data/data-postgres/src/test/java/org/apache/james/rrt/postgres/PostgresRecipientRewriteTableTest.java
AL server/data/data-postgres/src/test/java/org/apache/james/rrt/postgres/RewriteTablesTest.java
AL server/data/data-postgres/src/test/java/org/apache/james/vacation/postgres/PostgresVacationRepositoryTest.java
AL server/data/data-postgres/src/test/java/org/apache/james/vacation/postgres/PostgresNotificationRegistryTest.java
AL server/data/data-postgres/src/test/java/org/apache/james/user/postgres/PostgresDelegationStoreTest.java
AL server/data/data-postgres/src/test/java/org/apache/james/user/postgres/PostgresUsersRepositoryTest.java
AL server/data/data-postgres/src/test/java/org/apache/james/droplists/postgres/PostgresDropListsTest.java
AL server/data/data-postgres/src/test/java/org/apache/james/mailrepository/postgres/PostgresMailRepositoryBlobReferenceSourceTest.java
AL server/data/data-postgres/src/test/java/org/apache/james/mailrepository/postgres/PostgresMailRepositoryUrlStoreExtension.java
AL server/data/data-postgres/src/test/java/org/apache/james/mailrepository/postgres/PostgresMailRepositoryUrlStoreTest.java
AL server/data/data-postgres/src/test/java/org/apache/james/mailrepository/postgres/PostgresMailRepositoryTest.java
AL server/data/data-postgres/src/reporting-site/site.xml
!????? server/data/data-postgres/pom.xml
AL server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java
AL server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
AL server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapHealthCheck.java
AL server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUser.java
AL server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPGroupRestriction.java
AL server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java
AL server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LDAPConnectionFactory.java
!????? server/data/data-ldap/src/test/resources/usersrepository-enableVirtualHosting.xml
!????? server/data/data-ldap/src/test/resources/invalid/ldif-files/populate.ldif
!????? server/data/data-ldap/src/test/resources/localpartLogin/ldif-files/populate.ldif
!????? server/data/data-ldap/src/test/resources/ldif-files/populate.ldif
!????? server/data/data-ldap/src/test/resources/usersrepository-supportsVirtualHosting.xml
!????? server/data/data-ldap/src/test/resources/usersrepository-default.xml
AL server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLocalPartAsLoginNameTest.java
AL server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
AL server/data/data-ldap/src/test/java/org/apache/james/user/ldap/DockerLdapSingleton.java
AL server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java
AL server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryInvalidDnTest.java
AL server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapHealthCheckTest.java
AL server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapRepositoryConfigurationTest.java
AL server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapGenericContainer.java
AL server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryEmptyListTest.java
AL server/data/data-ldap/src/reporting-site/site.xml
AL server/data/data-ldap/pom.xml
AL server/data/data-api/src/main/java/org/apache/james/domainlist/api/DomainList.java
AL server/data/data-api/src/main/java/org/apache/james/domainlist/api/AutoDetectedDomainRemovalException.java
AL server/data/data-api/src/main/java/org/apache/james/domainlist/api/DomainListException.java
AL server/data/data-api/src/main/java/org/apache/james/domainlist/api/DomainListManagementMBean.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/ForwardUsernameChangeTaskStep.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/RecipientRewriteTableUserDeletionTaskStep.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/api/AliasReverseResolver.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/api/SourceDomainIsNotInDomainListException.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableManagementMBean.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableConfiguration.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/api/MappingConflictException.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/api/MappingAlreadyExistsException.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/api/LoopDetectedException.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/api/SameSourceAndDestinationException.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableException.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/api/CanSendFrom.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/api/InvalidRegexException.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/lib/SeparatorUtil.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/lib/SkipMappingProcessingException.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mappings.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingsImpl.java
AL server/data/data-api/src/main/java/org/apache/james/rrt/lib/UserRewritter.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/SieveRepository.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/ScriptSummary.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/SieveCurrentUploadUsageCalculator.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/IsActiveException.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/StorageException.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/QuotaExceededException.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/SieveRepositoryException.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/QuotaNotFoundException.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/ScriptNotFoundException.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/DuplicateException.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/SieveQuotaRepository.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/ScriptContent.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/SieveRepositoryManagementMBean.java
AL server/data/data-api/src/main/java/org/apache/james/sieverepository/api/ScriptName.java
AL server/data/data-api/src/main/java/org/apache/james/probe/SieveProbe.java
AL server/data/data-api/src/main/java/org/apache/james/probe/DropListProbe.java
AL server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java
AL server/data/data-api/src/main/java/org/apache/james/vacation/api/AccountId.java
AL server/data/data-api/src/main/java/org/apache/james/vacation/api/VacationService.java
AL server/data/data-api/src/main/java/org/apache/james/vacation/api/VacationPatch.java
AL server/data/data-api/src/main/java/org/apache/james/vacation/api/VacationRepository.java
AL server/data/data-api/src/main/java/org/apache/james/vacation/api/NotificationRegistry.java
AL server/data/data-api/src/main/java/org/apache/james/vacation/api/VacationDeleteUserTaskStep.java
AL server/data/data-api/src/main/java/org/apache/james/vacation/api/Vacation.java
AL server/data/data-api/src/main/java/org/apache/james/vacation/api/RecipientId.java
AL server/data/data-api/src/main/java/org/apache/james/DisconnectorNotifier.java
AL server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPRules.java
AL server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationStore.java
AL server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationItem.java
AL server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationLoader.java
AL server/data/data-api/src/main/java/org/apache/james/dlp/api/package-info.java
AL server/data/data-api/src/main/java/org/apache/james/user/api/DelegationUserDeletionTaskStep.java
AL server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepositoryManagementMBean.java
AL server/data/data-api/src/main/java/org/apache/james/user/api/DelegationUsernameChangeTaskStep.java
AL server/data/data-api/src/main/java/org/apache/james/user/api/AlreadyExistInUsersRepositoryException.java
AL server/data/data-api/src/main/java/org/apache/james/user/api/model/User.java
AL server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepositoryException.java
AL server/data/data-api/src/main/java/org/apache/james/user/api/DeleteUserDataTaskStep.java
AL server/data/data-api/src/main/java/org/apache/james/user/api/UsernameChangeTaskStep.java
AL server/data/data-api/src/main/java/org/apache/james/user/api/InvalidUsernameException.java
AL server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
AL server/data/data-api/src/main/java/org/apache/james/user/api/DelegationStore.java
AL server/data/data-api/src/main/java/org/apache/james/droplists/api/DropListEntry.java
AL server/data/data-api/src/main/java/org/apache/james/droplists/api/DropList.java
AL server/data/data-api/src/main/java/org/apache/james/droplists/api/DeniedEntityType.java
AL server/data/data-api/src/main/java/org/apache/james/droplists/api/OwnerScope.java
AL server/data/data-api/src/main/java/org/apache/james/droplists/api/DropListManagementMBean.java
AL server/data/data-api/src/test/resources/sieverepository.xml
AL server/data/data-api/src/test/resources/domainlist.xml
AL server/data/data-api/src/test/resources/mailrepositorystore.xml
AL server/data/data-api/src/test/resources/usersrepository.xml
AL server/data/data-api/src/test/resources/recipientrewritetable.xml
AL server/data/data-api/src/test/java/org/apache/james/rrt/api/RecipientRewriteTableConfigurationTest.java
AL server/data/data-api/src/test/java/org/apache/james/rrt/lib/MappingSourceTest.java
AL server/data/data-api/src/test/java/org/apache/james/rrt/lib/DomainRewriterTest.java
AL server/data/data-api/src/test/java/org/apache/james/rrt/lib/SeparatorUtilTest.java
AL server/data/data-api/src/test/java/org/apache/james/rrt/lib/ReplaceRewriterTest.java
AL server/data/data-api/src/test/java/org/apache/james/rrt/lib/ThrowingRewriterTest.java
AL server/data/data-api/src/test/java/org/apache/james/rrt/lib/MappingTest.java
AL server/data/data-api/src/test/java/org/apache/james/rrt/lib/AliasReverseResolverContract.java
AL server/data/data-api/src/test/java/org/apache/james/rrt/lib/CanSendFromContract.java
AL server/data/data-api/src/test/java/org/apache/james/rrt/lib/RegexRewriterTest.java
AL server/data/data-api/src/test/java/org/apache/james/sieverepository/api/SieveCurrentUploadUsageCalculatorContract.java
AL server/data/data-api/src/test/java/org/apache/james/sieverepository/api/ScriptSummaryTest.java
AL server/data/data-api/src/test/java/org/apache/james/sieverepository/api/ScriptNameTest.java
AL server/data/data-api/src/test/java/org/apache/james/vacation/api/AccountIdTest.java
AL server/data/data-api/src/test/java/org/apache/james/vacation/api/VacationPatchTest.java
AL server/data/data-api/src/test/java/org/apache/james/vacation/api/NotificationRegistryContract.java
AL server/data/data-api/src/test/java/org/apache/james/vacation/api/VacationTest.java
AL server/data/data-api/src/test/java/org/apache/james/vacation/api/VacationRepositoryContract.java
AL server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationItemTest.java
AL server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationStoreContract.java
AL server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPFixture.java
AL server/data/data-api/src/test/java/org/apache/james/user/api/DelegationStoreContract.java
AL server/data/data-api/src/test/java/org/apache/james/droplists/api/DropListContract.java
AL server/data/data-api/src/test/java/org/apache/james/droplists/api/DropListEntryTest.java
AL server/data/data-api/src/reporting-site/site.xml
AL server/data/data-api/pom.xml
AL server/data/data-memory/src/main/java/org/apache/james/domainlist/memory/MemoryDomainList.java
AL server/data/data-memory/src/main/java/org/apache/james/rrt/memory/MemoryRecipientRewriteTable.java
AL server/data/data-memory/src/main/java/org/apache/james/sieverepository/memory/InMemorySieveQuotaRepository.java
AL server/data/data-memory/src/main/java/org/apache/james/vacation/memory/MemoryVacationRepository.java
AL server/data/data-memory/src/main/java/org/apache/james/vacation/memory/MemoryNotificationRegistry.java
AL server/data/data-memory/src/main/java/org/apache/james/user/memory/NaiveDelegationStore.java
AL server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryDelegationStore.java
AL server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java
AL server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersDAO.java
AL server/data/data-memory/src/main/java/org/apache/james/droplists/memory/MemoryDropList.java
AL server/data/data-memory/src/test/resources/fakemailrepositorystore.xml
AL server/data/data-memory/src/test/java/org/apache/james/domainlist/memory/MemoryDomainListTest.java
AL server/data/data-memory/src/test/java/org/apache/james/rrt/memory/MemoryRecipientRewriteTableTest.java
AL server/data/data-memory/src/test/java/org/apache/james/rrt/memory/RecipientRewriteTableUserDeletionTaskStepTest.java
AL server/data/data-memory/src/test/java/org/apache/james/rrt/memory/InMemoryStepdefs.java
AL server/data/data-memory/src/test/java/org/apache/james/rrt/memory/ForwardUsernameChangeTaskStepTest.java
AL server/data/data-memory/src/test/java/org/apache/james/rrt/memory/RewriteTablesTest.java
AL server/data/data-memory/src/test/java/org/apache/james/rrt/lib/AliasReverseResolverImplTest.java
AL server/data/data-memory/src/test/java/org/apache/james/rrt/lib/CanSendFromImplTest.java
AL server/data/data-memory/src/test/java/org/apache/james/vacation/memory/VacationDeleteUserTaskStepTest.java
AL server/data/data-memory/src/test/java/org/apache/james/vacation/memory/MemoryNotificationRegistryTest.java
AL server/data/data-memory/src/test/java/org/apache/james/vacation/memory/MemoryVacationRepositoryTest.java
AL server/data/data-memory/src/test/java/org/apache/james/dlp/memory/EventSourcingDLPConfigurationStoreTest.java
AL server/data/data-memory/src/test/java/org/apache/james/dlp/memory/InMemoryEventSourcingDLPConfigurationStoreExtension.java
AL server/data/data-memory/src/test/java/org/apache/james/user/memory/MemoryUsersRepositoryTest.java
AL server/data/data-memory/src/test/java/org/apache/james/user/memory/DelegationUsernameChangeTaskStepTest.java
AL server/data/data-memory/src/test/java/org/apache/james/user/memory/MemoryDelegationStoreTest.java
AL server/data/data-memory/src/test/java/org/apache/james/user/memory/UsersRepositoryManagementTest.java
AL server/data/data-memory/src/test/java/org/apache/james/user/memory/DelegationUserDeletionTaskStepTest.java
AL server/data/data-memory/src/test/java/org/apache/james/droplists/memory/MemoryDropListTest.java
AL server/data/data-memory/pom.xml
AL server/data/data-jpa/src/main/java/org/apache/james/sieve/jpa/model/JPASieveScript.java
AL server/data/data-jpa/src/main/java/org/apache/james/sieve/jpa/model/JPASieveQuota.java
AL server/data/data-jpa/src/main/java/org/apache/james/sieve/jpa/JPASieveRepository.java
AL server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/JPADomainList.java
AL server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/model/JPADomain.java
AL server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
AL server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java
AL server/data/data-jpa/src/main/java/org/apache/james/user/jpa/JPAUsersDAO.java
AL server/data/data-jpa/src/main/java/org/apache/james/user/jpa/JPAUsersRepository.java
AL server/data/data-jpa/src/main/java/org/apache/james/user/jpa/model/JPAUser.java
AL server/data/data-jpa/src/main/java/org/apache/james/jpa/healthcheck/JPAHealthCheck.java
AL server/data/data-jpa/src/main/java/org/apache/james/droplists/jpa/model/JPADropListEntry.java
AL server/data/data-jpa/src/main/java/org/apache/james/droplists/jpa/JPADropList.java
AL server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStore.java
AL server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/model/JPAMail.java
AL server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/model/JPAUrl.java
AL server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/MimeMessageJPASource.java
AL server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryFactory.java
AL server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAMailRepository.java
!????? server/data/data-jpa/src/test/resources/log4j.properties
AL server/data/data-jpa/src/test/resources/persistence.xml
AL server/data/data-jpa/src/test/java/org/apache/james/sieve/jpa/JpaSieveRepositoryTest.java
AL server/data/data-jpa/src/test/java/org/apache/james/domainlist/jpa/JPADomainListTest.java
AL server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPAStepdefs.java
AL server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/RewriteTablesTest.java
AL server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPARecipientRewriteTableTest.java
AL server/data/data-jpa/src/test/java/org/apache/james/user/jpa/model/JPAUserTest.java
AL server/data/data-jpa/src/test/java/org/apache/james/user/jpa/JpaUsersRepositoryTest.java
AL server/data/data-jpa/src/test/java/org/apache/james/jpa/healthcheck/JPAHealthCheckTest.java
AL server/data/data-jpa/src/test/java/org/apache/james/droplists/jpa/JPADropListTest.java
AL server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreTest.java
AL server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreExtension.java
AL server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryTest.java
AL server/data/data-jpa/src/reporting-site/site.xml
AL server/data/data-jpa/pom.xml
AL server/data/data-file/src/main/java/org/apache/james/domainlist/xml/XMLDomainList.java
AL server/data/data-file/src/main/java/org/apache/james/rrt/file/XMLRecipientRewriteTable.java
AL server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
AL server/data/data-file/src/main/java/org/apache/james/mailrepository/file/Lock.java
AL server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java
AL server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MimeMessageStreamRepositorySource.java
!????? server/data/data-file/src/test/resources/org/apache/james/mailrepository/testdata/Inbox
AL server/data/data-file/src/test/java/org/apache/james/domainlist/xml/XMLDomainListTest.java
AL server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLStepdefs.java
AL server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLRecipientRewriteTableTest.java
AL server/data/data-file/src/test/java/org/apache/james/rrt/file/RewriteTablesTest.java
AL server/data/data-file/src/test/java/org/apache/james/sieverepository/file/SieveFileRepositoryTest.java
AL server/data/data-file/src/test/java/org/apache/james/mailrepository/FileMailRepositoryTest.java
AL server/data/data-file/src/reporting-site/site.xml
AL server/data/data-file/pom.xml
AL server/data/data-jmap-cassandra/src/main/scala/org/apache/james/jmap/cassandra/utils/EmailAddressTupleUtil.scala
AL server/data/data-jmap-cassandra/src/main/scala/org/apache/james/jmap/cassandra/identity/CassandraCustomIdentityDAO.scala
AL server/data/data-jmap-cassandra/src/main/scala/org/apache/james/jmap/cassandra/identity/tables/CassandraCustomIdentityTable.scala
AL server/data/data-jmap-cassandra/src/main/scala/org/apache/james/jmap/cassandra/identity/CassandraCustomIdentityDataDefinition.scala
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/pushsubscription/tables/CassandraPushSubscriptionTable.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/pushsubscription/CassandraPushSubscriptionDAO.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/pushsubscription/CassandraPushSubscriptionRepository.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/pushsubscription/CassandraPushSubscriptionDataDefinition.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryViewDataDefinition.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraEmailQueryViewTable.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessageFastViewProjectionTable.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjection.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionDeletionCallback.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionDataDefinition.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/UploadDataDefinition.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/UploadBucketName.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/CassandraUploadUsageRepository.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/CassandraUploadRepository.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/UploadDAO.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/CassandraFilteringProjectionDataDefinition.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/CassandraFilteringProjection.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeRepository.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/tables/CassandraMailboxChangeTable.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/tables/CassandraEmailChangeTable.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeDataDefinition.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/MailboxChangeRepositoryDAO.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/EmailChangeRepositoryDAO.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraChangesConfiguration.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraStateFactory.java
AL server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeDataDefinition.java
B server/data/data-jmap-cassandra/src/test/resources/json/event-v2.json
B server/data/data-jmap-cassandra/src/test/resources/json/eventComplex-v2.json
B server/data/data-jmap-cassandra/src/test/resources/json/increment-v4.json
B server/data/data-jmap-cassandra/src/test/resources/json/increment-v3.json
B server/data/data-jmap-cassandra/src/test/resources/json/event-v3.json
B server/data/data-jmap-cassandra/src/test/resources/json/eventComplex-v4.json
B server/data/data-jmap-cassandra/src/test/resources/json/event-v4.json
B server/data/data-jmap-cassandra/src/test/resources/json/increment-v2.json
B server/data/data-jmap-cassandra/src/test/resources/json/eventEmpty.json
B server/data/data-jmap-cassandra/src/test/resources/json/event.json
B server/data/data-jmap-cassandra/src/test/resources/json/eventComplex.json
B server/data/data-jmap-cassandra/src/test/resources/json/eventComplex-v3.json
B server/data/data-jmap-cassandra/src/test/resources/json/increment.json
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/pushsubscription/CassandraPushSubscriptionRepositoryTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryViewTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadServiceTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadRepositoryTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/UploadBucketNameTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraJMAPCurrentUploadUsageCalculatorTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadUsageRepositoryTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/CassandraEventSourcingFilteringManagementNoProjectionTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/DTOTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/CassandraEventSourcingFilteringManagementTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/identity/CassandraCustomIdentityTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraChangesConfigurationTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepositoryTest.java
AL server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeRepositoryTest.java
AL server/data/data-jmap-cassandra/pom.xml
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/PostgresDataJMapAggregateDataDefinition.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/pushsubscription/PostgresPushSubscriptionDAO.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/pushsubscription/PostgresPushSubscriptionRepository.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/pushsubscription/PostgresPushSubscriptionDataDefinition.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDataDefinition.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresMessageFastViewProjection.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryView.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewManager.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresMessageFastViewProjectionDataDefinition.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresMessageFastViewProjectionDeletionCallback.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDAO.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/upload/PostgresUploadUsageRepository.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/upload/PostgresUploadDataDefinition.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/upload/PostgresUploadRepository.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/upload/PostgresUploadDAO.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/filtering/PostgresFilteringProjectionDAO.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/filtering/PostgresFilteringProjection.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/filtering/PostgresFilteringProjectionDataDefinition.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/identity/PostgresCustomIdentityDataDefinition.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/identity/PostgresCustomIdentityDAO.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/change/PostgresMailboxChangeDAO.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/change/PostgresMailboxChangeDataDefinition.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/change/PostgresStateFactory.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/change/PostgresEmailChangeDataDefinition.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/change/PostgresMailboxChangeRepository.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/change/PostgresEmailChangeDAO.java
AL server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/change/PostgresEmailChangeRepository.java
AL server/data/data-jmap-postgres/src/test/java/org/apache/james/jmap/postgres/pushsubscription/PostgresPushSubscriptionRepositoryTest.java
AL server/data/data-jmap-postgres/src/test/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewTest.java
AL server/data/data-jmap-postgres/src/test/java/org/apache/james/jmap/postgres/projections/PostgresMessageFastViewProjectionTest.java
AL server/data/data-jmap-postgres/src/test/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewManagerRLSTest.java
AL server/data/data-jmap-postgres/src/test/java/org/apache/james/jmap/postgres/upload/PostgresUploadUsageRepositoryTest.java
AL server/data/data-jmap-postgres/src/test/java/org/apache/james/jmap/postgres/upload/PostgresUploadRepositoryTest.java
AL server/data/data-jmap-postgres/src/test/java/org/apache/james/jmap/postgres/upload/PostgresUploadServiceTest.java
AL server/data/data-jmap-postgres/src/test/java/org/apache/james/jmap/postgres/filtering/PostgresEventSourcingFilteringManagementTest.java
AL server/data/data-jmap-postgres/src/test/java/org/apache/james/jmap/postgres/filtering/PostgresEventSourcingFilteringManagementNoProjectionTest.java
AL server/data/data-jmap-postgres/src/test/java/org/apache/james/jmap/postgres/identity/PostgresCustomIdentityDAOTest.java
AL server/data/data-jmap-postgres/src/test/java/org/apache/james/jmap/postgres/change/PostgresMailboxChangeRepositoryTest.java
AL server/data/data-jmap-postgres/src/test/java/org/apache/james/jmap/postgres/change/PostgresEmailChangeRepositoryTest.java
AL server/data/data-jmap-postgres/pom.xml
AL server/data/data-jmap/src/main/scala/org/apache/james/jmap/memory/identity/MemoryCustomIdentityDAO.scala
AL server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/Identity.scala
AL server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/PushSubscription.scala
AL server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/State.scala
AL server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/TypeName.scala
AL server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/EmailAddress.scala
AL server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/identity/IdentityUserDeletionTaskStep.scala
AL server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/identity/CustomIdentityDAO.scala
AL server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/change/TypeStateFactory.scala
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionRepository.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionModule.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryEmailQueryView.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjection.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/upload/InMemoryUploadRepository.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/upload/InMemoryUploadUsageRepository.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryEmailChangeRepository.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/mime4j/SizeUtils.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/mime4j/AvoidBinaryBodyBufferingBodyFactory.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/mime4j/AvoidBinaryBodyReadingBodyFactory.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/mime4j/FakeBinaryBody.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/pushsubscription/PushSubscriptionRepository.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/pushsubscription/PushSubscriptionHelpers.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/pushsubscription/PushDeleteUserDataTaskStep.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/pushsubscription/PushSubscriptionDisconnector.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/EmailQueryView.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/EmailQueryViewManager.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjection.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheck.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/DefaultEmailQueryViewManager.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/Upload.scala
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/UploadId.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/AccountId.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/Preview.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/Size.scala
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/UploadService.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/UploadRepository.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/JMAPCurrentUploadUsageCalculator.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/RecomputeJMAPUploadCurrentQuotasService.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/UploadUsageRepository.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/UploadServiceDefaultImpl.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/JmapUploadQuotaConfiguration.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/RuleDTO.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/FilteringAggregate.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/DefineRulesCommand.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/RuleSetDefined.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/DefineRulesCommandHandler.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/FilteringAggregateId.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/FilterUsernameChangeTaskStep.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/IncrementalRuleChange.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FiltersDeleteUserDataTaskStep.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FilteringRuleSetDefineDTOModules.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/Version.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/Rule.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/Rules.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FilteringRuleSetDefinedDTO.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FilteringManagement.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FilteringIncrementalRuleChangeDTO.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/exception/ChangeNotFoundException.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/exception/StateMismatchException.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/JmapChange.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChange.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/CanNotCalculateChangesException.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxAndEmailChange.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/EmailChange.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/EmailChanges.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChanges.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/EmailChangeRepository.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/State.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/Limit.java
AL server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java
AL server/data/data-jmap/src/test/scala/org/apache/james/jmap/memory/identity/IdentityUserDeletionTaskStepTest.scala
AL server/data/data-jmap/src/test/scala/org/apache/james/jmap/memory/identity/MemoryCustomIdentityTest.scala
AL server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/pushsubscription/PushDeleteUserDataTaskStepTest.scala
AL server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/pushsubscription/PushSubscriptionRepositoryContract.scala
AL server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/upload/UploadServiceContract.scala
AL server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/identity/IdentityRepositoryTest.scala
AL server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/identity/CustomIdentityDAOContract.scala
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionRepositoryTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjectionTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/projections/MemoryEmailQueryViewTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/upload/InMemoryUploadRepositoryTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/upload/InMemoryJMAPCurrentUploadUsageCalculatorTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/upload/InMemoryUploadServiceTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/upload/InMemoryUploadUsageRepositoryTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryEmailChangeRepositoryTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepositoryTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/EmailQueryViewContract.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedPropertiesTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionContract.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheckTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/model/PreviewTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/JMAPCurrentUploadUsageCalculatorContract.scala
!????? server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/UploadUsageRepositoryContract.scala
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/UploadRepositoryContract.scala
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/RuleTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/FilteringAggregateIdTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/impl/FiltersDeleteUserDataTaskStepTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/impl/DefineRulesCommandTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/impl/IncrementalRuleChangeTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/impl/FilterUsernameChangeTaskStepTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/impl/InMemoryEventSourcingFilteringManagementTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/VersionTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/RuleFixture.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/RulesTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/FilteringManagementContract.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/EmailChangeTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/StateTest.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/EmailChangeRepositoryContract.java
AL server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/LimitTest.java
AL server/data/data-jmap/pom.xml
AL server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryFactory.java
AL server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
AL server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStore.java
AL server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfiguration.java
AL server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java
AL server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/SimpleMailRepositoryLoader.java
AL server/mailrepository/mailrepository-memory/src/test/resources/mailrepositorystore.xml
AL server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreTest.java
AL server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryTest.java
AL server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfigurationTest.java
AL server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryEmptyErrorMailRepositoryHealthCheckTest.java
AL server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreExtension.java
AL server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
AL server/mailrepository/mailrepository-memory/pom.xml
AL server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/Protocol.java
AL server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java
AL server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/Initializable.java
AL server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryLoader.java
AL server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
AL server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailKey.java
AL server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryUrlStore.java
AL server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryPath.java
AL server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/EmptyErrorMailRepositoryHealthCheck.java
AL server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/package-info.java
AL server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryFactory.java
AL server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryUrl.java
AL server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryUrlStoreContract.java
AL server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
AL server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/api/ProtocolTest.java
AL server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/api/MailRepositoryPathTest.java
AL server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/api/MailKeyTest.java
AL server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/api/EmptyErrorMailRepositoryHealthCheckContract.java
AL server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/api/MailRepositoryUrlTest.java
AL server/mailrepository/mailrepository-api/pom.xml
AL server/mailrepository/mailrepository-blob/src/main/scala/org/apache/james/mailrepository/blob/MailMetadata.scala
AL server/mailrepository/mailrepository-blob/src/main/scala/org/apache/james/mailrepository/blob/BlobMailRepository.scala
AL server/mailrepository/mailrepository-blob/src/main/scala/org/apache/james/mailrepository/blob/BlobMailRepositoryFactory.scala
AL server/mailrepository/mailrepository-blob/src/test/java/org/apache/james/mailrepository/blob/MailRepositoryBlobIdFactoryTest.java
AL server/mailrepository/mailrepository-blob/src/test/java/org/apache/james/mailrepository/blob/BlobMailRepositoryTest.java
AL server/mailrepository/mailrepository-blob/pom.xml
AL server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryKeysDAO.java
AL server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/UrlsTable.java
AL server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlDataDefinition.java
AL server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryFactory.java
AL server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryDataDefinition.java
AL server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/MailRepositoryTableV2.java
AL server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java
AL server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/MailRepositoryTable.java
AL server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStore.java
AL server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDaoV2.java
AL server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/MailRepositoryBlobReferenceSource.java
AL server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/UrlsDao.java
AL server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreTest.java
AL server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreExtension.java
AL server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryKeysDAOTest.java
AL server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java
AL server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
AL server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java
AL server/mailrepository/mailrepository-cassandra/pom.xml
AL server/testing/src/main/java/org/apache/james/util/docker/RateLimiters.java
AL server/testing/src/main/java/org/apache/james/util/docker/DockerContainer.java
AL server/testing/src/main/java/org/apache/james/util/docker/Images.java
AL server/testing/src/main/java/org/apache/james/jmap/LocalHostURIBuilder.java
AL server/testing/src/main/java/org/apache/james/jmap/JmapRFCCommonRequests.java
AL server/testing/src/main/java/org/apache/james/jmap/JMAPTestingConstants.java
AL server/testing/src/main/java/org/apache/james/utils/SMTPSendingException.java
AL server/testing/src/main/java/org/apache/james/utils/SMTPMessageSenderExtension.java
AL server/testing/src/main/java/org/apache/james/utils/TestIMAPClient.java
AL server/testing/src/main/java/org/apache/james/utils/SmtpSendingStep.java
AL server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java
AL server/testing/src/main/java/org/apache/james/utils/AllMatching.java
AL server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java
AL server/testing/src/main/java/org/apache/james/utils/UpdatableTickingClock.java
AL server/testing/src/main/java/org/apache/james/utils/DiscreteDistribution.java
AL server/testing/src/main/java/org/apache/james/junit/TemporaryFolderExtension.java
AL server/testing/src/main/java/org/apache/james/junit/categories/BasicFeature.java
AL server/testing/src/main/java/org/apache/james/junit/ExecutorExtension.java
AL server/testing/src/test/java/org/apache/james/utils/SMTPMessageSenderTest.java
AL server/testing/src/test/java/org/apache/james/utils/DiscreteDistributionTest.java
AL server/testing/src/test/java/org/apache/james/utils/TestIMAPClientTest.java
AL server/testing/pom.xml
B server/grafana-reporting/prometheus-datasource/James_JMAP_CountBoard.json
B server/grafana-reporting/prometheus-datasource/James_DNS_Dashboard.json
B server/grafana-reporting/prometheus-datasource/James_webAdmin.json
B server/grafana-reporting/prometheus-datasource/James_IMAP_CountBoard.json
B server/grafana-reporting/prometheus-datasource/James_BlobStore.json
B server/grafana-reporting/prometheus-datasource/James_MATCHER.json
B server/grafana-reporting/prometheus-datasource/James_MAILET.json
B server/grafana-reporting/prometheus-datasource/James_SMTP_CountBoard.json
B server/grafana-reporting/prometheus-datasource/James_MailQueue.json
!????? server/grafana-reporting/prometheus-datasource/README.md
B server/grafana-reporting/prometheus-datasource/James_IMAP_Board.json
B server/grafana-reporting/prometheus-datasource/James_JMAP_Board.json
B server/grafana-reporting/prometheus-datasource/James_JVM.json
B server/grafana-reporting/prometheus-datasource/James_SMTP_Board.json
B server/grafana-reporting/es-datasource/IMAP_count_board-1488774815587-dashboard.json
B server/grafana-reporting/es-datasource/JAMES_DNS_dashboard-1491268903944-dashboard.json
B server/grafana-reporting/es-datasource/DeletedMessagesVault-1563771591074-dashboard.json
B server/grafana-reporting/es-datasource/JMAP_board-1488774804236-dashboard.json
B server/grafana-reporting/es-datasource/CacheBlobStore-15911761170000-dashboard.json
B server/grafana-reporting/es-datasource/MATCHER-1490071813409-dashboard.json
B server/grafana-reporting/es-datasource/SMTP_count_board-1488774761350-dashboard.json
B server/grafana-reporting/es-datasource/SpamAssassin-1522226824255-dashboard.json
B server/grafana-reporting/es-datasource/Cassandra_driver-1504068385404-dashboard.json
B server/grafana-reporting/es-datasource/MailQueue-1490071879988-dashboard.json
B server/grafana-reporting/es-datasource/Miscalleneous-1490072265151-dashboard.json
B server/grafana-reporting/es-datasource/MAILET-1490071694187-dashboard.json
B server/grafana-reporting/es-datasource/MessageFastViewProjection-1575520507952.json
B server/grafana-reporting/es-datasource/BlobStore-1543222647953-dashboard.json
B server/grafana-reporting/es-datasource/James_JVM-1504068360629-dashboard.json
B server/grafana-reporting/es-datasource/JMAP_count_board-1488774795514-dashboard.json
!????? server/grafana-reporting/es-datasource/README.md
B server/grafana-reporting/es-datasource/SMTP_board-1488774774172-dashboard.json
B server/grafana-reporting/es-datasource/Tika-1522226794419-dashboard.json
B server/grafana-reporting/es-datasource/PreDeletionHooks-1553684324244-dashboard.json
B server/grafana-reporting/es-datasource/MailboxListeners rate-1552903378376.json
B server/grafana-reporting/es-datasource/MailboxListeners-1528958667486-dashboard.json
B server/grafana-reporting/es-datasource/IMAP_board-1488774825351-dashboard.json
AL mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICal4JConfigurator.java
AL mailet/icalendar/src/main/java/org/apache/james/transport/mailets/model/ICALAttributeDTO.java
AL mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToHeader.java
AL mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java
AL mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
AL mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICalendarParser.java
!????? mailet/icalendar/src/test/resources/ics_in_header.eml
!????? mailet/icalendar/src/test/resources/ics/no_event.ics
!????? mailet/icalendar/src/test/resources/ics/meeting_without_dtstamp.ics
!????? mailet/icalendar/src/test/resources/ics/ics_with_error.ics
!????? mailet/icalendar/src/test/resources/ics/meeting_without_sequence.ics
!????? mailet/icalendar/src/test/resources/ics/meeting_2.ics
!????? mailet/icalendar/src/test/resources/ics/meeting_without_uid.ics
!????? mailet/icalendar/src/test/resources/ics/meeting.ics
!????? mailet/icalendar/src/test/resources/ics/meeting_without_method.ics
AL mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICalendarParserTest.java
AL mailet/icalendar/src/test/java/org/apache/james/transport/mailets/model/ICALAttributeDTOTest.java
AL mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToJsonAttributeTest.java
AL mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToHeadersTest.java
AL mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICSSanitizerTest.java
AL mailet/icalendar/pom.xml
AL mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailContext.java
AL mailet/test/src/main/java/org/apache/mailet/base/test/FakeMatcherConfig.java
AL mailet/test/src/main/java/org/apache/mailet/base/test/MailUtil.java
AL mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailetConfig.java
AL mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
AL mailet/test/src/main/java/org/apache/mailet/base/MailAddressFixture.java
AL mailet/test/src/test/java/org/apache/mailet/base/test/FakeMailTest.java
AL mailet/test/pom.xml
N mailet/standard/LICENSE.txt
N mailet/standard/NOTICE.txt
AL mailet/standard/src/main/appended-resources/supplemental-models.xml
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/HasMimeType.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/HasHeaderWithPrefix.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/GenericRegexMatcher.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/package.html
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SMTPIsAuthNetwork.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/CompareNumericHeaderValue.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIs.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientIs.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIs.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsNull.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SMTPAuthUserIs.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderDomainIs.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/IsFromMailingList.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/HasMailAttributeWithValueRegex.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/HasMimeTypeAnySubPart.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientIsLocal.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/HasHeader.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/UserIs.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SentByMailet.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/HasException.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/AtMost.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientCountExceeds.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SubjectStartsWith.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/CommandListservMatcher.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/TooManyLines.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/PartHasContentType.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/CommandForListserv.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/All.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsLocal.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SubjectIs.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/NESSpamCheck.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/TooManyRecipients.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/HostIs.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/FileRegexMatcher.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/HasMailAttribute.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientDomainIs.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/FetchedFrom.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/HostIsLocal.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SMTPAuthSuccessful.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/IsSingleRecipient.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIsLocal.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsRegex.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/utils/MailAddressCollectionReader.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/utils/MimeWalk.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/HasMailAttributeWithValue.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientIsRegex.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/SizeGreaterThan.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/RelayLimit.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/AttachmentFileNameIs.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/HasMimeTypeParameter.java
AL mailet/standard/src/main/java/org/apache/james/transport/matchers/HasAttachment.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/SaveMailNameInHeaders.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/package.html
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/ToProcessor.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/Null.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/MimeDecodingMailet.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/SetErrorMessage.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/PropagateError.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/WrapText.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/RecoverAttachment.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/SetMimeHeader.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/ContentReplacer.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMimeHeader.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/SetMailAttribute.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveAllMailAttributes.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/HeadersToHTTP.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/MailAttributesListToMimeHeaders.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/MappingArgument.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/PatternExtractor.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/debug/package.html
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/debug/Counter.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/debug/Identity.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/debug/DumpSystemErr.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/debug/ExceptionThrowingMailet.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/MailAttributesToMimeHeaders.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/PostmasterAlias.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/FoldLongLines.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/LogMessage.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/Expires.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/RecipientToLowerCase.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/UnwrapText.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/AddDeliveredToHeader.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/MimeUtil.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/ReplaceConfig.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/SanitizeMimeMessageId.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/ReplacingPattern.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/UseHeaderRecipients.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/AddFooter.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMailAttribute.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMimeHeaderByPrefix.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/utils/MimeMessageModifier.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/utils/MimeMessageUtils.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/ReplaceContent.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/SerialiseToHTTP.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/ClassifyBounce.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/ServerTime.java
AL mailet/standard/src/main/java/org/apache/james/transport/mailets/OnlyText.java
A mailet/standard/src/test/resources/nested.zip
AL mailet/standard/src/test/resources/org/apache/james/mailet/standard/mailets/replaceSubject.patterns
!????? mailet/standard/src/test/resources/mime/sendToRemoteHttp.mime
!????? mailet/standard/src/test/resources/mime/gmail.mime
!????? mailet/standard/src/test/resources/mime/headerFolded.mime
!????? mailet/standard/src/test/resources/mime/space.eml
!????? mailet/standard/src/test/resources/mime/incorrect-headers.mime
A mailet/standard/src/test/resources/sonde.zip
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/TooManyLinesTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/TooManyRecipientsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SentByMailetTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SizeGreaterThanTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/AttachmentFileNameIsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/HasMailAttributeTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SMTPAuthSuccessfulTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderIsLocalTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/util/MailAddressCollectionReaderTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/FetchedFromTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SubjectStartsWithTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/HasMailAttributeWithValueTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/HasMimeTypeTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/AllTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderIsNullTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/RecipientIsRegexTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/UserIsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/HasMimeTypeParameterTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/HasMimeTypeAnySubPartTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderHostIsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/RecipientIsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SubjectIsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/RecipientDomainIsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderWithPrefixTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/RelayLimitTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/HostIsLocalTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderIsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderDomainIsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SMTPAuthUserIsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SMTPIsAuthNetworkTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/AbstractHasMailAttributeTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/IsSingleRecipientTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/AtMostTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/RecipientCountExceedsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderHostIsLocalTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/HasExceptionTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/utils/MimeWalkTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/RecipientIsLocalTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/PartHasContentTypeTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/HostIsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/HasMailAttributeWithValueRegexTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/NESSpamCheckTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/IsFromMailingListTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderIsRegexTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/matchers/HasAttachmentTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/FoldLongLinesTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/SetMailAttributeTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/SaveMailNameInHeadersTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/SerialiseToHTTPTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/RemoveMimeHeaderByPrefixTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/PostmasterAliasTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/PatternExtractorTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/OnlyTextTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/SetMimeHeaderTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/HeadersToHTTPTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/UnwrapTextTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/MimeDecodingMailetTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/SanitizeMimeMessageIdTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/AddDeliveredToHeaderTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/RecipientToLowerCaseTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/ReplaceContentTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/ToProcessorTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/MappingArgumentTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/RemoveMailAttributeTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/ContentReplacerTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/MailAttributesToMimeHeadersTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/UseHeaderRecipientsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/ExpiresTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/utils/MimeMessageUtilsTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/utils/MimeMessageModifierTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/RemoveMimeHeaderTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/NullTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/PropagateErrorTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/LogMessageTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/SetErrorMessageTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/MailAttributesListToMimeHeadersTest.java
AL mailet/standard/src/test/java/org/apache/james/transport/mailets/RemoveAllMailAttributesTest.java
AL mailet/standard/pom.xml
!????? mailet/standard/LICENSE.apache
!????? mailet/standard/LICENSE.activation
N mailet/standard/RELEASE_NOTES.txt
!????? mailet/standard/LICENSE.mail
N mailet/ai/LICENSE.txt
N mailet/ai/NOTICE.txt
N mailet/ai/BUILDING.txt
AL mailet/ai/src/main/java/org/apache/james/ai/classic/TokenProbabilityStrength.java
AL mailet/ai/src/main/java/org/apache/james/ai/classic/JDBCUtil.java
AL mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalysis.java
AL mailet/ai/src/main/java/org/apache/james/ai/classic/JDBCBayesianAnalyzer.java
AL mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalyzer.java
AL mailet/ai/src/main/java/org/apache/james/ai/classic/TokenCounter.java
AL mailet/ai/src/main/java/org/apache/james/ai/classic/SystemContext.java
AL mailet/ai/src/main/java/org/apache/james/ai/classic/Tokenizer.java
AL mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalysisFeeder.java
AL mailet/ai/src/main/java/org/apache/james/ai/classic/SqlResources.java
AL mailet/ai/src/main/java/org/apache/james/ai/classic/CorpusLoaderThread.java
AL mailet/ai/src/main/java/org/apache/james/ai/classic/TokenCollector.java
AL mailet/ai/pom.xml
AL mailet/src/reporting-site/site-standard.xml
AL mailet/src/reporting-site/site/site.xml
AL mailet/src/reporting-site/site-crypto.xml
AL mailet/src/reporting-site/site-base.xml
AL mailet/src/reporting-site/site.xml
AL mailet/src/reporting-site/site-mailetdoc.xml
AL mailet/api/src/main/java/org/apache/mailet/HostAddress.java
AL mailet/api/src/main/java/org/apache/mailet/package.html
AL mailet/api/src/main/java/org/apache/mailet/AttributeName.java
AL mailet/api/src/main/java/org/apache/mailet/TemporaryLookupException.java
AL mailet/api/src/main/java/org/apache/mailet/ArbitrarySerializable.java
AL mailet/api/src/main/java/org/apache/mailet/Matcher.java
AL mailet/api/src/main/java/org/apache/mailet/ExcludeFromDocumentation.java
AL mailet/api/src/main/java/org/apache/mailet/StorageDirective.java
AL mailet/api/src/main/java/org/apache/mailet/Mail.java
AL mailet/api/src/main/java/org/apache/mailet/MailAddress.java
AL mailet/api/src/main/java/org/apache/mailet/MailetConfig.java
AL mailet/api/src/main/java/org/apache/mailet/MatcherConfig.java
AL mailet/api/src/main/java/org/apache/mailet/Serializer.java
AL mailet/api/src/main/java/org/apache/mailet/Mailet.java
AL mailet/api/src/main/java/org/apache/mailet/LoopPrevention.java
AL mailet/api/src/main/java/org/apache/mailet/MailetContext.java
AL mailet/api/src/main/java/org/apache/mailet/Attribute.java
AL mailet/api/src/main/java/org/apache/mailet/LookupException.java
AL mailet/api/src/main/java/org/apache/mailet/AttributeValue.java
AL mailet/api/src/main/java/org/apache/mailet/Experimental.java
AL mailet/api/src/main/java/org/apache/mailet/PerRecipientHeaders.java
AL mailet/api/src/main/java/org/apache/mailet/MailetException.java
AL mailet/api/src/main/java/org/apache/mailet/DsnParameters.java
AL mailet/api/src/main/java/org/apache/mailet/AttributeUtils.java
AL mailet/api/src/main/java/org/apache/mailet/ProcessingState.java
AL mailet/api/src/test/java/org/apache/mailet/AttributeValueTest.java
AL mailet/api/src/test/java/org/apache/mailet/AttributeTest.java
AL mailet/api/src/test/java/org/apache/mailet/AttributeNameTest.java
AL mailet/api/src/test/java/org/apache/mailet/ContractMailTest.java
AL mailet/api/src/test/java/org/apache/mailet/DsnParametersTest.java
AL mailet/api/src/test/java/org/apache/mailet/LoopPreventionTest.java
AL mailet/api/pom.xml
N mailet/api/NOTICE
N mailet/api/RELEASE_NOTES.txt
N mailet/api/LICENSE
GEN mailet/pom.xml
AL mailet/amqp/src/main/java/org/apache/james/transport/mailets/AmqpForwardAttribute.java
AL mailet/amqp/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttributeTest.java
AL mailet/amqp/pom.xml
AL mailet/base/src/main/appended-resources/supplemental-models.xml
AL mailet/base/src/main/java/org/apache/mailet/base/AutomaticallySentMailDetector.java
AL mailet/base/src/main/java/org/apache/mailet/base/package.html
AL mailet/base/src/main/java/org/apache/mailet/base/RFC2822Headers.java
AL mailet/base/src/main/java/org/apache/mailet/base/GenericMatcher.java
AL mailet/base/src/main/java/org/apache/mailet/base/MailetUtil.java
AL mailet/base/src/main/java/org/apache/mailet/base/FlowedMessageUtils.java
AL mailet/base/src/main/java/org/apache/mailet/base/GenericMailet.java
AL mailet/base/src/main/java/org/apache/mailet/base/Converter7Bit.java
AL mailet/base/src/main/java/org/apache/mailet/base/StringUtils.java
AL mailet/base/src/main/java/org/apache/mailet/base/MailetPipelineLogging.java
AL mailet/base/src/main/java/org/apache/mailet/base/GenericRecipientMatcher.java
AL mailet/base/src/main/java/org/apache/mailet/base/DateFormats.java
AL mailet/base/src/main/java/org/apache/mailet/base/MatcherInverter.java
!????? mailet/base/src/test/resources/eml/text-only-7bit.eml
!????? mailet/base/src/test/resources/eml/multipart-7bit.eml
!????? mailet/base/src/test/resources/eml/multipart-7bit-attachment-content.txt
!????? mailet/base/src/test/resources/eml/multipart-8bit-attachment-content.txt
!????? mailet/base/src/test/resources/eml/multipart-8bit.eml
!????? mailet/base/src/test/resources/eml/text-only-8bit.eml
AL mailet/base/src/test/java/org/apache/mailet/base/MatcherInverterTest.java
AL mailet/base/src/test/java/org/apache/mailet/base/Converter7BitTest.java
AL mailet/base/src/test/java/org/apache/mailet/base/FlowedMessageUtilsTest.java
AL mailet/base/src/test/java/org/apache/mailet/base/GenericMailetTest.java
AL mailet/base/src/test/java/org/apache/mailet/base/MailetPipelineLoggingTest.java
AL mailet/base/src/test/java/org/apache/mailet/base/StringUtilsTest.java
AL mailet/base/src/test/java/org/apache/mailet/base/MailetUtilTest.java
AL mailet/base/pom.xml
N mailet/base/NOTICE
N mailet/base/RELEASE_NOTES.txt
N mailet/base/LICENSE
N mailet/mailetdocs-maven-plugin/LICENSE.txt
N mailet/mailetdocs-maven-plugin/NOTICE.txt
AL mailet/mailetdocs-maven-plugin/src/main/appended-resources/supplemental-models.xml
AL mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/MailetMatcherDescriptor.java
AL mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/AggregateMailetdocsReport.java
AL mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/MailetdocsReport.java
AL mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/AbstractMailetdocsReport.java
AL mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/DefaultDescriptorsExtractor.java
AL mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/MailetMatcherDescriptorTest.java
AL mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/excluded/ExcludedFromDocumentationMailet.java
AL mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/excluded/NotExcludedFromDocumentationMailet.java
AL mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/constructor/ConstructorMailet.java
AL mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/DefaultDescriptorsExtractorTest.java
AL mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/experimental/NonExperimentalMailet.java
AL mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/experimental/ExperimentalMailet.java
AL mailet/mailetdocs-maven-plugin/pom.xml
N mailet/mailetdocs-maven-plugin/RELEASE_NOTES.txt
N mailet/crypto/src/main/resources/META-INF/README.txt
AL mailet/crypto/src/main/appended-resources/supplemental-models.xml
AL mailet/crypto/src/main/java/org/apache/james/transport/KeyStoreHolderConfiguration.java
AL mailet/crypto/src/main/java/org/apache/james/transport/package.html
AL mailet/crypto/src/main/java/org/apache/james/transport/SMIMESignerInfo.java
AL mailet/crypto/src/main/java/org/apache/james/transport/PemReader.java
AL mailet/crypto/src/main/java/org/apache/james/transport/matcher/package.html
AL mailet/crypto/src/main/java/org/apache/james/transport/matcher/IsSMIMESigned.java
AL mailet/crypto/src/main/java/org/apache/james/transport/matcher/IsX509CertificateSubject.java
AL mailet/crypto/src/main/java/org/apache/james/transport/matcher/IsSMIMEEncrypted.java
AL mailet/crypto/src/main/java/org/apache/james/transport/KeyStoreHolder.java
AL mailet/crypto/src/main/java/org/apache/james/transport/KeyStoreHolderFactory.java
AL mailet/crypto/src/main/java/org/apache/james/transport/KeyHolder.java
AL mailet/crypto/src/main/java/org/apache/james/transport/SMIMEAttributeNames.java
AL mailet/crypto/src/main/java/org/apache/james/transport/InitJCE.java
AL mailet/crypto/src/main/java/org/apache/james/transport/KeyFileType.java
AL mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMEDecrypt.java
AL mailet/crypto/src/main/java/org/apache/james/transport/mailets/Sign.java
AL mailet/crypto/src/main/java/org/apache/james/transport/mailets/package.html
AL mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMESign.java
AL mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMECheckSignature.java
AL mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java
AL mailet/crypto/src/main/java/org/apache/james/transport/SMIMEKeyHolder.java
AL mailet/crypto/src/test/java/org/apache/james/transport/matcher/IsSMIMESignedTest.java
AL mailet/crypto/pom.xml
N mailet/crypto/NOTICE
N mailet/crypto/RELEASE_NOTES.txt
N mailet/crypto/README.txt
N mailet/crypto/LICENSE
AL event-bus/distributed/src/main/java/org/apache/james/events/RegistrationQueueName.java
AL event-bus/distributed/src/main/java/org/apache/james/events/RoutingKeyConverter.java
AL event-bus/distributed/src/main/java/org/apache/james/events/EventDispatcher.java
AL event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistrationHandler.java
AL event-bus/distributed/src/main/java/org/apache/james/events/RabbitMQMailboxEventBusDeadLetterQueueHealthCheck.java
AL event-bus/distributed/src/main/java/org/apache/james/events/ListenerExecutor.java
AL event-bus/distributed/src/main/java/org/apache/james/events/RabbitMQEventBus.java
AL event-bus/distributed/src/main/java/org/apache/james/events/NamingStrategy.java
AL event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistration.java
AL event-bus/distributed/src/main/java/org/apache/james/events/KeyReconnectionHandler.java
AL event-bus/distributed/src/main/java/org/apache/james/events/LocalListenerRegistry.java
AL event-bus/distributed/src/main/java/org/apache/james/events/WaitDelayGenerator.java
AL event-bus/distributed/src/main/java/org/apache/james/events/RabbitMQJmapEventBusDeadLetterQueueHealthCheck.java
AL event-bus/distributed/src/main/java/org/apache/james/events/KeyRegistrationHandler.java
AL event-bus/distributed/src/main/java/org/apache/james/events/KeyRegistration.java
AL event-bus/distributed/src/main/java/org/apache/james/events/GroupConsumerRetry.java
AL event-bus/distributed/src/main/java/org/apache/james/events/RegistrationBinder.java
AL event-bus/distributed/src/main/java/org/apache/james/events/EventBusReconnectionHandler.java
AL event-bus/distributed/src/main/java/org/apache/james/events/RabbitEventBusConsumerHealthCheck.java
AL event-bus/distributed/src/main/java/org/apache/james/events/EventBusId.java
AL event-bus/distributed/src/test/java/org/apache/james/events/EventBusIdTest.java
AL event-bus/distributed/src/test/java/org/apache/james/events/WaitDelayGeneratorTest.java
AL event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQJmapEventBusDeadLetterQueueHealthCheckTest.java
AL event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusTest.java
AL event-bus/distributed/src/test/java/org/apache/james/events/RoutingKeyConverterTest.java
AL event-bus/distributed/src/test/java/org/apache/james/events/LocalListenerRegistryTest.java
AL event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQMailboxEventBusDeadLetterQueueHealthCheckTest.java
AL event-bus/distributed/src/test/java/org/apache/james/events/NetworkErrorTest.java
AL event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusDeadLetterQueueUpgradeTest.java
AL event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusUsingQuorumQueueTest.java
AL event-bus/distributed/pom.xml
AL event-bus/api/src/main/java/org/apache/james/events/EventDeadLetters.java
AL event-bus/api/src/main/java/org/apache/james/events/EventListener.java
AL event-bus/api/src/main/java/org/apache/james/events/GroupAlreadyRegistered.java
AL event-bus/api/src/main/java/org/apache/james/events/GroupRegistrationNotFound.java
AL event-bus/api/src/main/java/org/apache/james/events/Group.java
AL event-bus/api/src/main/java/org/apache/james/events/Event.java
AL event-bus/api/src/main/java/org/apache/james/events/EventBus.java
AL event-bus/api/src/main/java/org/apache/james/events/RegistrationKey.java
AL event-bus/api/src/main/java/org/apache/james/events/RetryBackoffConfiguration.java
AL event-bus/api/src/main/java/org/apache/james/events/EventBusName.java
AL event-bus/api/src/main/java/org/apache/james/events/DispatchingFailureGroup.java
AL event-bus/api/src/main/java/org/apache/james/events/EventSerializersAggregator.java
AL event-bus/api/src/main/java/org/apache/james/events/Registration.java
AL event-bus/api/src/main/java/org/apache/james/events/EventSerializer.java
AL event-bus/api/src/main/java/org/apache/james/events/EventDeadLettersHealthCheck.java
AL event-bus/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java
AL event-bus/api/src/test/java/org/apache/james/events/RetryBackoffConfigurationTest.java
AL event-bus/api/src/test/java/org/apache/james/events/EventCollector.java
AL event-bus/api/src/test/java/org/apache/james/events/ErrorHandlingContract.java
AL event-bus/api/src/test/java/org/apache/james/events/KeyContract.java
AL event-bus/api/src/test/java/org/apache/james/events/EventBusContract.java
AL event-bus/api/src/test/java/org/apache/james/events/GroupContract.java
AL event-bus/api/src/test/java/org/apache/james/events/InsertionIdTest.java
AL event-bus/api/src/test/java/org/apache/james/events/EventBusTestFixture.java
AL event-bus/api/src/test/java/org/apache/james/events/DispatchingFailureGroupTest.java
AL event-bus/api/src/test/java/org/apache/james/events/EventDeadLettersHealthCheckContract.java
AL event-bus/api/src/test/java/org/apache/james/events/GroupTest.java
AL event-bus/api/src/test/java/org/apache/james/events/EventDeadLettersContract.java
AL event-bus/api/src/test/java/org/apache/james/events/EventBusConcurrentTestContract.java
AL event-bus/api/pom.xml
AL event-bus/pom.xml
AL event-bus/in-vm/src/main/java/org/apache/james/events/delivery/EventDelivery.java
AL event-bus/in-vm/src/main/java/org/apache/james/events/delivery/InVmEventDelivery.java
AL event-bus/in-vm/src/main/java/org/apache/james/events/InVMEventBus.java
AL event-bus/in-vm/src/main/java/org/apache/james/events/MemoryEventDeadLetters.java
AL event-bus/in-vm/src/test/java/org/apache/james/events/delivery/InVmEventDeliveryTest.java
AL event-bus/in-vm/src/test/java/org/apache/james/events/MemoryEventDeadLettersHealthCheckTest.java
AL event-bus/in-vm/src/test/java/org/apache/james/events/MemoryEventDeadLettersTest.java
AL event-bus/in-vm/src/test/java/org/apache/james/events/InVMEventBusTest.java
AL event-bus/in-vm/pom.xml
AL event-bus/postgres/src/main/java/org/apache/james/events/PostgresEventDeadLetters.java
AL event-bus/postgres/src/main/java/org/apache/james/events/PostgresEventDeadLettersDataDefinition.java
AL event-bus/postgres/src/test/java/org/apache/james/events/PostgresEventDeadLettersTest.java
AL event-bus/postgres/pom.xml
AL event-bus/cassandra/src/main/java/org/apache/james/events/CassandraEventDeadLetters.java
AL event-bus/cassandra/src/main/java/org/apache/james/events/tables/CassandraEventDeadLettersTable.java
AL event-bus/cassandra/src/main/java/org/apache/james/events/tables/CassandraEventDeadLettersGroupTable.java
AL event-bus/cassandra/src/main/java/org/apache/james/events/CassandraEventDeadLettersDAO.java
AL event-bus/cassandra/src/main/java/org/apache/james/events/CassandraEventDeadLettersGroupDAO.java
AL event-bus/cassandra/src/main/java/org/apache/james/events/CassandraEventDeadLettersDataDefinition.java
AL event-bus/cassandra/src/test/java/org/apache/james/events/CassandraEventDeadLettersGroupDAOTest.java
AL event-bus/cassandra/src/test/java/org/apache/james/events/CassandraEventDeadLettersDAOTest.java
AL event-bus/cassandra/src/test/java/org/apache/james/events/CassandraEventDeadLettersHealthCheckTest.java
AL event-bus/cassandra/src/test/java/org/apache/james/events/CassandraEventDeadLettersTest.java
AL event-bus/cassandra/pom.xml
AL examples/custom-webadmin-route/src/main/resources/webadmin.properties
AL examples/custom-webadmin-route/src/main/java/org/apache/james/examples/RouteA.java
AL examples/custom-webadmin-route/pom.xml
!????? examples/custom-webadmin-route/README.md
!????? examples/metrics-graphite/docker-compose.yml
!????? examples/metrics-graphite/james/extensions.properties
AL examples/metrics-graphite/src/main/java/org/apache/james/examples/GraphiteExporter.java
AL examples/metrics-graphite/pom.xml
!????? examples/metrics-graphite/README.md
B examples/metrics-graphite/image/metrics-graphite.png
AL examples/custom-smtp-hooks/src/main/resources/smtpserver.xml
AL examples/custom-smtp-hooks/src/main/java/org/apache/james/examples/LoggingRcptHook.java
AL examples/custom-smtp-hooks/pom.xml
!????? examples/custom-smtp-hooks/README.md
!????? examples/proxy-smtp/docker-compose.yml
!????? examples/proxy-smtp/haproxy.cfg
AL examples/proxy-smtp/imapserver.xml
!????? examples/proxy-smtp/README.md
AL examples/proxy-smtp/smtpserver.xml
AL examples/custom-smtp-command/src/main/resources/smtpserver.xml
AL examples/custom-smtp-command/src/main/java/org/apache/james/examples/MyNoopCmdHandler.java
AL examples/custom-smtp-command/src/main/java/org/apache/james/examples/MyCmdHandlerLoader.java
AL examples/custom-smtp-command/pom.xml
!????? examples/custom-smtp-command/README.md
AL examples/custom-listeners/src/main/resources/listeners.xml
AL examples/custom-listeners/src/main/java/org/apache/james/examples/custom/listeners/SetCustomFlagOnBigMessages.java
AL examples/custom-listeners/src/test/java/org/apache/james/examples/custom/listeners/SetCustomFlagOnBigMessagesTest.java
AL examples/custom-listeners/pom.xml
!????? examples/custom-listeners/README.md
!????? examples/custom-imap/docker-compose.yml
AL examples/custom-imap/src/main/resources/imapserver.xml
AL examples/custom-imap/src/main/java/org/apache/james/examples/imap/PingCommandParser.java
AL examples/custom-imap/src/main/java/org/apache/james/examples/imap/PingProcessor.java
AL examples/custom-imap/src/main/java/org/apache/james/examples/imap/PingImapPackages.java
AL examples/custom-imap/src/main/java/org/apache/james/examples/imap/PingResponseEncoder.java
AL examples/custom-imap/src/test/resources/listeners.xml
AL examples/custom-imap/src/test/resources/dnsservice.xml
AL examples/custom-imap/src/test/resources/lmtpserver.xml
AL examples/custom-imap/src/test/resources/mailetcontainer.xml
AL examples/custom-imap/src/test/resources/managesieveserver.xml
AL examples/custom-imap/src/test/resources/domainlist.xml
AL examples/custom-imap/src/test/resources/mailrepositorystore.xml
AL examples/custom-imap/src/test/resources/usersrepository.xml
B examples/custom-imap/src/test/resources/keystore
AL examples/custom-imap/src/test/resources/smtpserver.xml
AL examples/custom-imap/src/test/resources/pop3server.xml
AL examples/custom-imap/src/test/java/org/apache/james/examples/imap/ImapCustomPackagesTest.java
AL examples/custom-imap/pom.xml
!????? examples/custom-imap/README.md
AL examples/custom-imap/sample-configuration/imapserver.xml
AL examples/custom-mailets/src/main/resources/mailetcontainer.xml
AL examples/custom-mailets/src/main/java/org/apache/james/examples/custom/mailets/IsDelayedForMoreThan.java
AL examples/custom-mailets/src/main/java/org/apache/james/examples/custom/mailets/SendPromotionCode.java
AL examples/custom-mailets/pom.xml
!????? examples/custom-mailets/README.md
AL examples/custom-healthcheck/src/main/resources/healthcheck.properties
AL examples/custom-healthcheck/src/main/java/org/apache/james/examples/HealthCheckA.java
AL examples/custom-healthcheck/pom.xml
!????? examples/custom-healthcheck/README.md
AL examples/pom.xml
!????? examples/README.md
B examples/imap-autoconf/thunderbird_autoconf.png
B examples/imap-autoconf/outlook_enjoyAutoConfig.jpg
!????? examples/imap-autoconf/content/mail/config-v1.1.xml
!????? examples/imap-autoconf/content/.well-known/autoconfig/mail/config-v1.1.xml
!????? examples/imap-autoconf/content/autodiscover/autodiscover.xml
!????? examples/imap-autoconf/docker-compose.yml
!????? examples/imap-autoconf/README.adoc
B examples/imap-autoconf/outlook_enterMailAddress.jpg
B examples/imap-autoconf/outlook_enterPassword.jpg
AL examples/custom-james-assembly/src/main/java/org/apache/james/examples/CustomJamesServerMain.java
AL examples/custom-james-assembly/pom.xml
!????? examples/custom-james-assembly/README.md
AL examples/custom-james-assembly/sample-configuration/mailetcontainer.xml
AL examples/custom-james-assembly/sample-configuration/imapserver.xml
AL examples/custom-james-assembly/sample-configuration/mailrepositorystore.xml
AL examples/custom-james-assembly/sample-configuration/logback.xml
AL examples/custom-james-assembly/sample-configuration/smtpserver.xml
B examples/opensearch-dahsboard/img_13.png
B examples/opensearch-dahsboard/img_1.png
B examples/opensearch-dahsboard/img_12.png
B examples/opensearch-dahsboard/img_10.png
B examples/opensearch-dahsboard/img_15.png
!????? examples/opensearch-dahsboard/docker-compose.yml
B examples/opensearch-dahsboard/img_5.png
B examples/opensearch-dahsboard/img_3.png
B examples/opensearch-dahsboard/img.png
B examples/opensearch-dahsboard/img_2.png
!????? examples/opensearch-dahsboard/README.md
B examples/opensearch-dahsboard/img_8.png
B examples/opensearch-dahsboard/img_7.png
!????? examples/opensearch-dahsboard/james-dashboard.ndjson
B examples/opensearch-dahsboard/img_6.png
B examples/opensearch-dahsboard/img_4.png
B examples/opensearch-dahsboard/img_14.png
B examples/opensearch-dahsboard/img_11.png
B examples/opensearch-dahsboard/img_9.png
B examples/oidc/keycloak/realm-oidc.json
!????? examples/oidc/test.sh
!????? examples/oidc/docker-compose.yml
!????? examples/oidc/james/imapserver.xml
AL examples/oidc/james/usersrepository.xml
!????? examples/oidc/james/jmap.properties
!????? examples/oidc/james/smtpserver.xml
B examples/oidc/_media/oidc-sso.png
B examples/oidc/_media/smtp-setting.png
!????? examples/oidc/_media/oidc-sso.drawio
B examples/oidc/_media/imap-setting.png
B examples/oidc/_media/receive-mail.png
B examples/oidc/_media/send-mail.png
B examples/oidc/_media/login-popup.png
B examples/oidc/_media/IMAP-SMTP-oidc.png
!????? examples/oidc/_media/oidc-slo.drawio
B examples/oidc/_media/oidc-slo.png
!????? examples/oidc/_media/IMAP_SMTP oidc.drawio
!????? examples/oidc/apisix/conf/apisix.yaml
!????? examples/oidc/apisix/conf/config.yaml
!????? examples/oidc/README.md
!????? examples/oidc/ldap/populate.ldif
AL mailbox/spring/src/main/resources/META-INF/spring/mailbox-locker.xml
AL mailbox/spring/src/main/resources/META-INF/spring/quota.xml
AL mailbox/spring/src/main/resources/META-INF/spring/event-system.xml
AL mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml
AL mailbox/spring/src/main/resources/META-INF/spring/mailbox-no-authorizator.xml
AL mailbox/spring/src/main/resources/META-INF/spring/mailbox-authenticator-anonymous.xml
AL mailbox/spring/src/main/resources/log4j.properties
AL mailbox/spring/src/main/java/org/apache/james/mailbox/spring/SpringMailbox.java
AL mailbox/spring/src/main/java/org/apache/james/mailbox/spring/AnonymousAuthenticator.java
AL mailbox/spring/src/main/java/org/apache/james/mailbox/spring/NoAuthorizator.java
AL mailbox/spring/src/main/java/org/apache/james/mailbox/spring/MailboxInitializer.java
AL mailbox/spring/src/test/resources/META-INF/spring/mailbox-index-lucene-test.xml
AL mailbox/spring/src/test/resources/META-INF/spring/metrics.xml
AL mailbox/spring/src/test/resources/META-INF/spring/quota-alias.xml
AL mailbox/spring/src/test/resources/META-INF/persistence.xml
AL mailbox/spring/src/test/resources/META-INF/org/apache/james/database.properties
AL mailbox/spring/src/test/java/org/apache/james/mailbox/spring/SpringMailboxTest.java
!????? mailbox/spring/src/test/README.md
AL mailbox/spring/src/reporting-site/site.xml
AL mailbox/spring/pom.xml
AL mailbox/plugin/quota-mailing-memory/src/test/java/org/apache/james/mailbox/quota/memory/listeners/InMemoryQuotaMailingListenersIntegrationTest.java
AL mailbox/plugin/quota-mailing-memory/src/test/java/org/apache/james/mailbox/quota/memory/listeners/InMemoryQuotaThresholdConfigurationChangesTest.java
AL mailbox/plugin/quota-mailing-memory/pom.xml
AL mailbox/plugin/quota-search/src/main/java/org/apache/james/quota/search/Offset.java
AL mailbox/plugin/quota-search/src/main/java/org/apache/james/quota/search/QuotaClause.java
AL mailbox/plugin/quota-search/src/main/java/org/apache/james/quota/search/QuotaBoundary.java
AL mailbox/plugin/quota-search/src/main/java/org/apache/james/quota/search/QuotaQuery.java
AL mailbox/plugin/quota-search/src/main/java/org/apache/james/quota/search/QuotaSearcher.java
AL mailbox/plugin/quota-search/src/main/java/org/apache/james/quota/search/Limit.java
AL mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/OffsetTest.java
AL mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/QuotaSearchTestSystem.java
AL mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/QuotaSearcherContract.java
AL mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/QuotaClauseTest.java
AL mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/QuotaQueryTest.java
AL mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/QuotaBoundaryFixture.java
AL mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/QuotaSearchFixture.java
AL mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/LimitTest.java
AL mailbox/plugin/quota-search/pom.xml
B mailbox/plugin/quota-mailing-cassandra/src/test/resources/json/event2.json
B mailbox/plugin/quota-mailing-cassandra/src/test/resources/json/event.json
B mailbox/plugin/quota-mailing-cassandra/src/test/resources/json/event4.json
B mailbox/plugin/quota-mailing-cassandra/src/test/resources/json/event3.json
AL mailbox/plugin/quota-mailing-cassandra/src/test/java/org/apache/james/mailbox/quota/cassandra/listeners/CassandraQuotaMailingListenersIntegrationTest.java
AL mailbox/plugin/quota-mailing-cassandra/src/test/java/org/apache/james/mailbox/quota/cassandra/dto/DTOTest.java
AL mailbox/plugin/quota-mailing-cassandra/pom.xml
AL mailbox/plugin/quota-search-scanning/src/main/java/org/apache/james/quota/search/scanning/ClauseConverter.java
AL mailbox/plugin/quota-search-scanning/src/main/java/org/apache/james/quota/search/scanning/ScanningQuotaSearcher.java
AL mailbox/plugin/quota-search-scanning/src/test/java/org/apache/james/quota/search/scanning/MemoryQuotaSearchTestSystemExtension.java
AL mailbox/plugin/quota-search-scanning/src/test/java/org/apache/james/quota/search/scanning/ScanningQuotaSearcherTest.java
AL mailbox/plugin/quota-search-scanning/pom.xml
AL mailbox/plugin/deleted-messages-vault-postgres/src/main/java/org/apache/james/vault/metadata/PostgresDeletedMessageVaultDeletionCallback.java
AL mailbox/plugin/deleted-messages-vault-postgres/src/main/java/org/apache/james/vault/metadata/PostgresDeletedMessageMetadataVault.java
AL mailbox/plugin/deleted-messages-vault-postgres/src/main/java/org/apache/james/vault/metadata/PostgresDeletedMessageMetadataDataDefinition.java
AL mailbox/plugin/deleted-messages-vault-postgres/src/test/java/org/apache/james/vault/metadata/PostgresDeletedMessageMetadataVaultTest.java
AL mailbox/plugin/deleted-messages-vault-postgres/pom.xml
AL mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/QuotaRatioAsJson.java
AL mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/QuotaRatioToOpenSearchJson.java
AL mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/JsonMessageConstants.java
AL mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaSearchIndexCreationUtil.java
AL mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/events/OpenSearchQuotaMailboxListener.java
AL mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaQueryConverter.java
AL mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/OpenSearchQuotaSearcher.java
AL mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaRatioMappingFactory.java
AL mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/UserRoutingKeyFactory.java
AL mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaRatioOpenSearchConstants.java
AL mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/OpenSearchQuotaConfiguration.java
B mailbox/plugin/quota-search-opensearch/src/test/resources/quotaRatioNoDomain.json
B mailbox/plugin/quota-search-opensearch/src/test/resources/quotaRatio.json
AL mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/OpenSearchQuotaSearchTestSystemExtension.java
AL mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/UserRoutingKeyFactoryTest.java
AL mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/json/QuotaRatioAsJsonTest.java
AL mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/json/QuotaRatioToOpenSearchJsonTest.java
AL mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/OpenSearchQuotaConfigurationTest.java
AL mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/events/OpenSearchQuotaMailboxListenerTest.java
AL mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/QuotaQueryConverterTest.java
AL mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/OpenSearchQuotaSearcherTest.java
AL mailbox/plugin/quota-search-opensearch/pom.xml
!????? mailbox/plugin/quota-mailing/src/main/resources/templates/QuotaThresholdMailBody.mustache
!????? mailbox/plugin/quota-mailing/src/main/resources/templates/QuotaThresholdMailSubject.mustache
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/QuotaMailingListenerConfiguration.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/events/QuotaEventDTOModules.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/events/HistoryEvolutionDTO.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/events/QuotaThresholdChangedEventDTO.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/events/QuotaThresholdChangedEvent.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/events/QuotaDTO.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/subscribers/QuotaThresholdMailer.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/subscribers/QuotaThresholdNotice.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/commands/DetectThresholdCrossing.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/commands/DetectThresholdCrossingHandler.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/aggregates/UserQuotaThresholds.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/model/QuotaThresholdChange.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/model/QuotaThresholdHistory.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/model/HistoryEvolution.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/model/QuotaThresholds.java
AL mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/model/QuotaThreshold.java
!????? mailbox/plugin/quota-mailing/src/test/resources/templates/body1.mustache
!????? mailbox/plugin/quota-mailing/src/test/resources/templates/body2.mustache
!????? mailbox/plugin/quota-mailing/src/test/resources/templates/subject2.mustache
!????? mailbox/plugin/quota-mailing/src/test/resources/templates/subject1.mustache
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdConfigurationChangesTest.java
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdMailingIntegrationTest.java
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListenerTest.java
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/subscribers/QuotaThresholdNoticeTest.java
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/commands/DetectThresholdCrossingTest.java
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/aggregates/UserQuotaThresholdsTest.java
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/QuotaMailingListenerConfigurationTest.java
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/model/HistoryEvolutionTest.java
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/model/QuotaThresholdTest.java
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/model/QuotaThresholdChangeTest.java
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/model/QuotaThresholdHistoryTest.java
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/model/QuotaThresholdsTest.java
AL mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/model/QuotaThresholdFixture.java
AL mailbox/plugin/quota-mailing/pom.xml
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageZipper.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/metadata/MemoryDeletedMessageMetadataVault.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTask.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVault.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BucketNameGenerator.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskDTO.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/metadata/MetadataSerializer.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/metadata/DeletedMessageWithStorageInformation.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/metadata/DeletedMessageMetadataVault.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/metadata/StorageInformation.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageVaultHook.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/VaultConfiguration.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageContentNotFoundException.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/Query.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/DeletedMessageField.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/FieldName.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/Combinator.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/CriterionFactory.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/Criterion.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/Operator.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageVault.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessage.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/DeletedMessageWithStorageInformationConverter.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/DeletedMessageWithStorageInformationDTO.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryDTO.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryElementDeserializer.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryElementSerializer.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/CriterionDTO.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryTranslator.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryElement.java
AL mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageConverter.java
B mailbox/plugin/deleted-messages-vault/src/test/resources/json/deleted_message_with_storage_information.json
B mailbox/plugin/deleted-messages-vault/src/test/resources/json/deleted_message.json
B mailbox/plugin/deleted-messages-vault/src/test/resources/json/storage_information.json
B mailbox/plugin/deleted-messages-vault/src/test/resources/json/deleted_message_with_storage_information_invalid.json
B mailbox/plugin/deleted-messages-vault/src/test/resources/json/deleted_message_with_subject.json
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageMailboxContextTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/memory/metadata/MemoryDeletedMessageMetadataVaultTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskSerializationTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BucketNameGeneratorTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageConverterTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultSearchContract.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageZipperTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/VaultConfigurationTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/DeletedMessageMetadataVaultContract.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/StorageInformationTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/DeletedMessageVaultMetadataFixture.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/DeletedMessageWithStorageInformationTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/DeletedMessageWithStorageInformationDTOTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementSerializerTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryTranslatorTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementDeserializerTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementTest.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageFixture.java
AL mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultContract.java
AL mailbox/plugin/deleted-messages-vault/pom.xml
AL mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/UserPerBucketDAO.java
AL mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/StorageInformationDAO.java
AL mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/CassandraDeletedMessageMetadataVault.java
AL mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/DeletedMessageMetadataDataDefinition.java
AL mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/DeletedMessageVaultDeletionCallback.java
AL mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataDAO.java
AL mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/DeletedMessageIdentifier.java
AL mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/MetadataDAOTest.java
AL mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/CassandraDeletedMessageMetadataVaultTest.java
AL mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/DeletedMessageIdentifierTest.java
AL mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/UserPerBucketDAOTest.java
AL mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/StorageInformationDAOTest.java
AL mailbox/plugin/deleted-messages-vault-cassandra/pom.xml
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MessageToOpenSearchJson.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MessageUpdateJson.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MimePartDto.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/HeaderDto.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/EMailerDto.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/JsonMessageConstants.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/IndexableMessage.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/EMailersDto.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/SubjectsDto.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/IndexAttachments.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/IndexHeaders.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/IndexBody.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndex.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/DisabledListeningMessageSearchIndex.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxOpenSearchConstants.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/DefaultMailboxMappingFactory.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/CriterionConverter.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/SortConverter.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/DefaultCriterionConverter.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/QueryConverter.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/DateResolutionFormatter.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearchHighlighter.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearcher.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIdRoutingKeyFactory.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/OpenSearchMailboxConfiguration.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxMappingFactory.java
AL mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIndexCreationUtil.java
!????? mailbox/opensearch/src/test/resources/eml/emailWith3Attachments.eml
!????? mailbox/opensearch/src/test/resources/eml/mailCustomStringHeader.eml
!????? mailbox/opensearch/src/test/resources/eml/bodyMakeTikaToFail.eml
!????? mailbox/opensearch/src/test/resources/eml/alternative_simple.eml
!????? mailbox/opensearch/src/test/resources/eml/attachments-filename-in-content-type.eml
B mailbox/opensearch/src/test/resources/eml/inlined-mixed.json
B mailbox/opensearch/src/test/resources/eml/alternative_simple.json
B mailbox/opensearch/src/test/resources/eml/alternative.json
!????? mailbox/opensearch/src/test/resources/eml/mailCustomDateHeader.eml
!????? mailbox/opensearch/src/test/resources/eml/inlined-mixed.eml
!????? mailbox/opensearch/src/test/resources/eml/mailWithHeaders.eml
!????? mailbox/opensearch/src/test/resources/eml/htmlContent.txt
!????? mailbox/opensearch/src/test/resources/eml/alternative.eml
AL mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/MessageToOpenSearchJsonTest.java
AL mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/IndexableMessageTest.java
AL mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchMailboxConfigurationTest.java
AL mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchOptimizeMoveAndFuzzySearchIntegrationTest.java
AL mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndexTest.java
AL mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/query/SearchQueryTest.java
AL mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/query/DateResolutionFormatterTest.java
AL mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearchHighlighterTest.java
AL mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearcherTest.java
AL mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchIntegrationTest.java
AL mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/MailboxIdRoutingKeyFactoryTest.java
AL mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchNoIndexBodyIntegrationTest.java
AL mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchQueryStringTest.java
AL mailbox/opensearch/src/reporting-site/site.xml
AL mailbox/opensearch/pom.xml
AL mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAttachmentMapper.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAnnotationMapper.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryModSeqProvider.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageIdMapper.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryUidProvider.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxSessionMapperFactory.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryPerUserMaxQuotaManager.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageId.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
AL mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryId.java
!????? mailbox/memory/src/test/resources/test.eml
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryCombinationManagerTestSystem.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/listener/MailboxSubscriptionListenerTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/task/MemoryRecomputeCurrentQuotasServiceTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMailboxMapperTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMailboxMapperAclTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageIdMapperTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryAnnotationMapperTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMessageMapperTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryAttachmentMapperTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMessageWithAttachmentMapperTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMessageMoveTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageManagerTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerStressTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryPerUserMaxQuotaManagerTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManagerTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaCalculatorTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerStorageTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryCombinationManagerTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapperTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerProvider.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryQuotaMailboxMessageManagerTest.java
AL mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageManagerTestSystem.java
AL mailbox/memory/src/reporting-site/site.xml
AL mailbox/memory/pom.xml
AL mailbox/event/json/src/main/scala/org/apache/james/event/json/MailboxEventSerializer.scala
AL mailbox/event/json/src/main/scala/org/apache/james/event/json/DTOs.scala
AL mailbox/event/json/src/main/java/org/apache/james/event/acl/ACLDiffDTO.java
AL mailbox/event/json/src/main/java/org/apache/james/event/acl/ACLUpdatedDTO.java
AL mailbox/event/json/src/main/java/org/apache/james/event/acl/ACLDTO.java
AL mailbox/event/json/src/main/java/org/apache/james/event/acl/ACLUpdated.java
AL mailbox/event/json/src/main/java/org/apache/james/event/MailboxAggregateId.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/MailboxDeletionSerializationTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/MailboxRenamedSerializationTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/SerializerFixture.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/ExpungedSerializationTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/MessageMoveEventSerializationTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/QuotaUsageUpdatedEventSerializationTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/QuotaRootTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/MessageIdTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/SessionIdTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/MailboxPathTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/MailboxIdTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/EventIdTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/UserTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/FlagsTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/MessageUidTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/UpdatedFlagsTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/MessageMetaDataTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/QuotaSizeTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/ACLDiffTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/ModSeqTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/QuotaCountTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/FlagsUpdatedSerializationTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/MailboxAddedSerializationTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/AddedSerializationTest.java
AL mailbox/event/json/src/test/java/org/apache/james/event/json/MailboxACLUpdatedEventSerializationTest.java
AL mailbox/event/json/pom.xml
AL mailbox/tika/src/main/java/org/apache/james/mailbox/tika/TikaTextExtractor.java
AL mailbox/tika/src/main/java/org/apache/james/mailbox/tika/ContentTypeFilteringTextExtractor.java
AL mailbox/tika/src/main/java/org/apache/james/mailbox/tika/TikaHttpClientImpl.java
AL mailbox/tika/src/main/java/org/apache/james/mailbox/tika/CachingTextExtractor.java
AL mailbox/tika/src/main/java/org/apache/james/mailbox/tika/TikaConfiguration.java
AL mailbox/tika/src/main/java/org/apache/james/mailbox/tika/TikaHttpClient.java
B mailbox/tika/src/test/resources/documents/writter.docx
A mailbox/tika/src/test/resources/documents/slides.odp
B mailbox/tika/src/test/resources/documents/calc.xlsx
A mailbox/tika/src/test/resources/documents/writter.odt
B mailbox/tika/src/test/resources/documents/fake.txt
B mailbox/tika/src/test/resources/documents/slides.pptx
!????? mailbox/tika/src/test/resources/documents/Text.txt
A mailbox/tika/src/test/resources/documents/calc.ods
B mailbox/tika/src/test/resources/documents/PDF.pdf
AL mailbox/tika/src/test/java/org/apache/james/mailbox/tika/CachingTextExtractorTest.java
AL mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaExtension.java
AL mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaContainerSingleton.java
AL mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaConfigurationTest.java
AL mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaContainer.java
AL mailbox/tika/src/test/java/org/apache/james/mailbox/tika/ContentTypeFilteringTextExtractorTest.java
AL mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaTextExtractorTest.java
AL mailbox/tika/pom.xml
AL mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/JpaMigrator.java
AL mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/exception/JpaMigrateException.java
AL mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/JpaMigrateQuery.java
AL mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/IMAP172JpaMigrateCommand.java
AL mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/IMAP168JpaMigrateCommand.java
AL mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/IMAP165JpaMigrateCommand.java
AL mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/IMAP184JpaMigrateCommand.java
AL mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/IMAP176JpaMigrateCommand.java
AL mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/JpaMigrateCommand.java
AL mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/IMAP180JpaMigrateCommand.java
AL mailbox/tools/jpa-migrator/src/test/java/org/apache/james/mailbox/tools/jpa/migrator/JpaMigratorTest.java
AL mailbox/tools/jpa-migrator/pom.xml
AL mailbox/tools/copier/src/main/java/org/apache/james/mailbox/tools/copier/MailboxCopierImpl.java
AL mailbox/tools/copier/src/test/java/org/apache/james/mailbox/tools/copier/MailboxCopierTest.java
AL mailbox/tools/copier/pom.xml
AL mailbox/tools/indexer/src/main/resources/META-INF/spring/mailbox-tools.xml
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/MessageIdReindexingTaskDTO.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTask.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskAdditionalInformationDTO.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskDTO.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/MessageIdReindexingTaskAdditionalInformationDTO.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTaskDTO.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/MessageIdReIndexerImpl.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/ImpactingEvent.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/ImpactingEventType.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/MessageIdReIndexingTask.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingContext.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskAdditionalInformationDTO.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTask.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/RunningOptionsDTO.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingContextInformation.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskDTO.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingContextInformationDTO.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTaskAdditionalInformationDTO.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTaskDTO.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskDTO.java
AL mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ThrowsReIndexer.java
AL mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java
AL mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/MessageIdReIndexerImplTest.java
AL mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.java
AL mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java
AL mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
AL mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/MessageIdReindexingTaskSerializationTest.java
AL mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java
AL mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.java
AL mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTaskSerializationTest.java
AL mailbox/tools/indexer/pom.xml
AL mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasService.java
AL mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeSingleComponentCurrentQuotasService.java
AL mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTask.java
AL mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RunningOptionsDTO.java
AL mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeSingleQuotaComponentResult.java
AL mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeSieveUploadCurrentQuotasService.java
AL mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskAdditionalInformationDTO.java
AL mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskDTO.java
AL mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeMailboxCurrentQuotasService.java
AL mailbox/tools/quota-recompute/src/test/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskSerializationTest.java
AL mailbox/tools/quota-recompute/src/test/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasServiceContract.java
AL mailbox/tools/quota-recompute/pom.xml
AL mailbox/src/reporting-site/site.xml
AL mailbox/api/src/main/java/org/apache/james/mailbox/RequestAware.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSessionIdGenerator.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/acl/ACLDiff.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLChanged.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/acl/UnionMailboxACLResolver.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLDiff.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/acl/MailboxACLResolver.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/MailboxPathLocker.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/AttachmentManager.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/DefaultMailboxes.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/MailboxAnnotationManager.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/Authorizator.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/Authenticator.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/events/MailboxEvents.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/events/MessageMoveEvent.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/events/MailboxIdRegistrationKey.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/FlagsBuilder.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/SystemMailboxesProvider.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/RightManager.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/UuidBackedAttachmentId.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaRatio.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageResultIterator.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxId.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/Cid.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/ContentType.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/Header.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageRange.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MultimailboxesSearchQuery.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/ComposedMessageId.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/SerializableQuotaUsageValue.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/FetchGroup.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageIdDto.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/InputStreamContent.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/ByteSourceContent.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/SerializableQuotaLimitValue.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageId.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxMetaData.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MimeDescriptor.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/Headers.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/Mailbox.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/ThreadId.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMetaData.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/StringBackedAttachmentId.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/ComposedMessageIdWithMetaData.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/Quota.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageAttachmentMetadata.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxNameExpression.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/search/ExactNameCaseInsensitive.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/search/Wildcard.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxQuery.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/search/ExactName.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/search/PrefixedRegex.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/search/PrefixedWildcardCaseInsensitive.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/search/PrefixedWildcard.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/PartContentDescriptor.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/DeleteResult.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/UpdatedFlags.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/HeaderAndBodyByteContent.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/CurrentQuotas.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxConstants.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/Content.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaOperation.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/SerializableQuota.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/ByteContent.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMoves.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotation.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/UidValidity.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentMetadata.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotationKey.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MimePath.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/Profiles.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/ParsedAttachment.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaRoot.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageResult.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/UuidBackedAttachmentIdFactory.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/copier/MailboxCopier.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/AttachmentContentLoader.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/MetadataWithMailboxId.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/StringBackedAttachmentIdFactory.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/probe/QuotaProbe.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/probe/ACLProbe.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/probe/MailboxProbe.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/quota/Limits.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/quota/QuotaRootDeserializer.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/quota/QuotaCodec.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/quota/MaxQuotaManager.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/quota/QuotaRootResolver.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/quota/QuotaManager.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/quota/CurrentQuotaManager.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/quota/UserQuotaRootResolver.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/quota/QuotaChangeNotifier.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/ThreadNotFoundException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/UnsupportedRightException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/HasEmptyMailboxNameInHierarchyException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/InboxAlreadyCreated.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxRoleNotFoundException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/BadCredentialsException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/ForbiddenDelegationException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/MessageRangeException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/AttachmentNotFoundException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/OverQuotaException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/UnsupportedOperationException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/UnsupportedSearchException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxExistsException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/DifferentDomainException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/UserDoesNotExistException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/TooLongMailboxNameException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/AnnotationException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/SubscriptionException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxSecurityException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxNotFoundException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/ReadOnlyException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/UnsupportedCriteriaException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/InsufficientRightsException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxNameException.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexingExecutionFailures.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/indexer/IndexingDetailInformation.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/indexer/MessageIdReIndexer.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexer.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/Role.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/MailboxUtil.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/MessageUid.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/ApplicableFlagBuilder.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/MailboxCounterCorrector.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/SessionProvider.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/ModSeq.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/MessageIdManager.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/AttachmentIdFactory.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/searchhighligt/SearchHighlighterConfiguration.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/searchhighligt/SearchSnippet.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/searchhighligt/SearchHighlighter.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/extension/PreDeletionHook.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/extractor/ParsedContent.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/extractor/TextExtractor.java
AL mailbox/api/src/main/java/org/apache/james/mailbox/SubscriptionManager.java
!????? mailbox/api/src/test/resources/eml/twoAttachmentsApi.eml
B mailbox/api/src/test/resources/shattered-2.pdf
B mailbox/api/src/test/resources/shattered-1.pdf
AL mailbox/api/src/test/java/org/apache/james/mailbox/acl/UnionMailboxACLResolverTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/acl/PositiveUserACLDiffTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/acl/PositiveUserACLChangedTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/acl/ACLDiffTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/RoleTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/MailboxSessionUtil.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/fixture/MailboxFixture.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/mock/DataProvisioner.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMail.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/events/MailboxIdRegistrationKeyTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/EventTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/MetadataWithMailboxIdTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAssertingTool.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/QuotaRootTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAssertingToolTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxCountersTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MultimailboxesSearchQueryTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/UidValidityTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageAttachmentMetadataTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/ContentTypeTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/ThreadIdTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/QuotaOperationTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/QuotaRatioTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/SearchQueryTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/FetchGroupTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/ComposedMessageIdWithMetaDataTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/PartContentDescriptorTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/StringBackedAttachmentIdTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationKeyTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MimePathTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/TestMessageId.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/search/ExactNameTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedWildcardCaseInsensitiveTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/search/MailboxQueryTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedWildcardTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/search/ExactNameCaseInsensitiveTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/search/WildcardTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageIdDtoTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/TestId.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentMetadataTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/CidTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/CurrentQuotasTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxFolderDelimiterAwareTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/UpdatedFlagsTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLEntryKeyTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/Rfc4314RightsTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageMetaDataTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageRangeTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageMovesTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/model/QuotaTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/ComposedMessageIdTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/SubscriptionManagerContract.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/quota/QuotaFixture.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/ApplicableFlagBuilderTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/indexer/ReindexingExecutionFailuresTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/indexer/ReindexingFailureTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/MessageUidTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/MailboxExceptionTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/manager/IntegrationResources.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/manager/ManagerTestProvisionner.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/manager/QuotaMessageManagerContract.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/AppendResultTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/MessageMoveEventTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/MailboxListenerTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressContract.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/searchhighligt/SearchHighLighterContract.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/ModSeqTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/extension/PreDeletionHookTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/extractor/ParsedContentTest.java
AL mailbox/api/src/test/java/org/apache/james/mailbox/extractor/TextExtractorContract.java
AL mailbox/api/src/reporting-site/site.xml
AL mailbox/api/pom.xml
AL mailbox/pom.xml
!????? mailbox/README.md
AL mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
AL mailbox/jpa/src/main/resources/james-database.properties
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAId.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAnnotationMapper.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAttachmentMapper.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/MessageUtils.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailboxAnnotation.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAUserFlag.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAProperty.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailboxAnnotationId.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/EncryptDecryptHelper.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMessageWithAttachmentStorage.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMessage.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAAttachment.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAModSeqProvider.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAUidProvider.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPATransactionalMapper.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAAttachmentContentLoader.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JPAPerUserMaxQuotaManager.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/MaxDomainMessageCount.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/MaxUserStorage.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/JpaCurrentQuota.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/MaxGlobalMessageCount.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/MaxDomainStorage.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/MaxGlobalStorage.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/MaxUserMessageCount.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JPAPerUserMaxQuotaDAO.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/model/JPASubscription.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
AL mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageFactory.java
AL mailbox/jpa/src/test/resources/persistence.xml
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAttachmentMapper.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAAttachmentMapperTest.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMessageMapperTest.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/task/JPARecomputeCurrentQuotasServiceTest.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/MessageUtilsTest.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAnnotationMapper.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMessageTest.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaAnnotationMapperTest.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMessageWithAttachmentMapperTest.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMessageMoveTest.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMailboxMapperTest.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerStressTest.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPASubscriptionManagerTest.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/quota/JPACurrentQuotaManagerTest.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/quota/JPAPerUserMaxQuotaTest.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxFixture.java
AL mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
AL mailbox/jpa/src/reporting-site/site.xml
AL mailbox/jpa/pom.xml
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailArchivesLoader.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/Zipper.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/LongExtraField.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/StringExtraField.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/UidExtraField.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ZipArchivesLoader.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/WithZipHeader.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/EntryTypeExtraField.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ZippedMailAccountIterator.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ExtraFieldExtractor.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/SizeExtraField.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/InternalDateExtraField.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ZipEntryType.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/MessageIdExtraField.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/package-info.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ZipEntryIterator.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/MailboxIdExtraField.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/UidValidityExtraField.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/FlagsExtraField.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/SerializedMessageId.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/UnknownArchiveEntry.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/ZipMailArchiveRestorer.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/ArchiveService.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/DefaultMailboxBackup.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/SerializedMailboxId.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailboxWithAnnotations.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MessageArchiveEntry.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailArchiveRestorer.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailArchiveEntry.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailboxBackup.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailboxWithAnnotationsArchiveEntry.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailArchiveIterator.java
AL mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Directory.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/InternalDateExtraFieldTest.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/WithZipHeaderTest.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipEntryTypeExtraFieldTest.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DirectoryTest.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MessageIdExtraFieldTest.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipEntryTypeContract.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidExtraFieldTest.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxIdExtraFieldTest.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/FlagExtraFieldTest.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchivesLoaderTest.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/SizeExtraFieldTest.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidValidityExtraFieldTest.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java
AL mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java
AL mailbox/backup/pom.xml
B mailbox/scanning-search/src/test/resources/pdf.pdf
AL mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
AL mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/PDFTextExtractor.java
AL mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/PDFTextExtractorTest.java
AL mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SearchThreadIdGuessingAlgorithmTest.java
AL mailbox/scanning-search/pom.xml
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/RandomMailboxSessionIdGenerator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/LazyMimeDescriptor.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/NoMailboxPathLocker.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxSessionMapperFactory.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxSubscriptionListener.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/event/SpamEventListener.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AnnotationMapper.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/UidProvider.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/SearchThreadIdGuessingAlgorithm.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapperFactory.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/ThreadIdGuessingAlgorithm.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/FetchGroupConverter.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/FlagsFilter.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/StandardNames.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/MailboxIdDeserialisationException.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/FileBufferedBodyFactory.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/Properties.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessage.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImpl.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DelegatingMailboxMessage.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/Message.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/Subject.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DefaultMessageId.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/FlagsFactory.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/Property.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/MailboxMessage.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/MimeMessageId.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AttachmentMapperFactory.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapperFactory.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/ModSeqProvider.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/utils/MimeMessageHeadersUtil.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AttachmentMapper.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/NaiveThreadIdGuessingAlgorithm.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageIdMapper.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AttachmentIdAssignationStrategy.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/FlagsUpdateCalculator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreAttachmentManager.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/BatchSizes.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageResultImpl.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxAnnotationManager.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/SessionProviderImpl.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/NoMaxQuotaManager.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/NoQuotaManager.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/CurrentQuotaCalculator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaComponents.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/NoQuotaUpdater.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/FixedMaxQuotaManager.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreQuotaManager.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaUpdater.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaChecker.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultQuotaChangeNotifier.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/streaming/FullByteContent.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/streaming/PartContentBuilder.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamContent.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/streaming/CountingInputStream.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/ResultUtils.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/MessageComparators.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/CombinedComparator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/BaseSubjectComparator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/SentDateComparator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/HeaderDisplayComparator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/HeaderMailboxComparator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/AbstractHeaderComparator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearchIndex.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/mime/EMailer.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/mime/MimePart.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/mime/MimePartParser.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/mime/Subjects.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/mime/HeaderCollection.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/mime/SerializableMessage.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/mime/RootMimePartContainerBuilder.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/mime/MimePartContainerBuilder.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/mime/EMailers.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/SystemMailboxesProviderImpl.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/TransactionalMapper.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/Mapper.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/NonTransactionalMapper.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/Subscription.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/user/SubscriptionMapper.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/user/SubscriptionMapperFactory.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageMovesWithMailbox.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageFactory.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/FakeAuthorizator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/PreDeletionHooks.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/MoveResult.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/MimeDescriptorImpl.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxExpressionBackwardCompatibility.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/FakeAuthenticator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/AbstractMailboxSessionIdGenerator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxReactorUtils.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/extractor/JsoupTextExtractor.java
AL mailbox/store/src/main/java/org/apache/james/mailbox/store/extractor/DefaultTextExtractor.java
!????? mailbox/store/src/test/resources/eml/pgpSignedMail.eml
!????? mailbox/store/src/test/resources/eml/htmlMail.eml
!????? mailbox/store/src/test/resources/eml/mail4.eml
!????? mailbox/store/src/test/resources/eml/recursiveMail.eml
!????? mailbox/store/src/test/resources/eml/emailWithNonIndexableAttachment.eml
!????? mailbox/store/src/test/resources/eml/mailWithLongHeaders.eml
!????? mailbox/store/src/test/resources/eml/calendar2.eml
!????? mailbox/store/src/test/resources/eml/signedMessage.eml
B mailbox/store/src/test/resources/eml/4037_014.jpg
!????? mailbox/store/src/test/resources/eml/oneAttachmentWithSimpleContentType.eml
B mailbox/store/src/test/resources/eml/recursiveMail.json
!????? mailbox/store/src/test/resources/eml/mail5.eml
!????? mailbox/store/src/test/resources/eml/multiAttachmentsWithOneWrongContentDisposition.eml
!????? mailbox/store/src/test/resources/eml/spamMail.eml
!????? mailbox/store/src/test/resources/eml/mail.eml
!????? mailbox/store/src/test/resources/eml/mailWithManyHeaders.eml
!????? mailbox/store/src/test/resources/eml/oneAttachmentWithEmptyContentType.eml
B mailbox/store/src/test/resources/eml/mail.json
B mailbox/store/src/test/resources/eml/attachment.pdf
!????? mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithNoCid.eml
!????? mailbox/store/src/test/resources/eml/invalidCharset.eml
B mailbox/store/src/test/resources/eml/james-3901.json
!????? mailbox/store/src/test/resources/eml/headerWithDot.eml
!????? mailbox/store/src/test/resources/eml/emailWithOnlyAttachment.eml
!????? mailbox/store/src/test/resources/eml/inlined-mixed.eml
!????? mailbox/store/src/test/resources/eml/filenameOnly.eml
!????? mailbox/store/src/test/resources/eml/noContentDispositionWithCID.eml
!????? mailbox/store/src/test/resources/eml/embeddedAttachmentWithAttachment.eml
!????? mailbox/store/src/test/resources/eml/oneInlinedAttachment.eml
!????? mailbox/store/src/test/resources/eml/james-3901.eml
!????? mailbox/store/src/test/resources/eml/messageWithNonASCIIFilenameAttachment.eml
B mailbox/store/src/test/resources/eml/4037_015.jpg
B mailbox/store/src/test/resources/eml/pgpSignedMail.json
B mailbox/store/src/test/resources/eml/spamMail.json
!????? mailbox/store/src/test/resources/eml/filenameAndName.eml
!????? mailbox/store/src/test/resources/eml/invitationEmailFromOP.eml
!????? mailbox/store/src/test/resources/eml/mail3.eml
B mailbox/store/src/test/resources/eml/recursiveMailWithoutAttachments.json
!????? mailbox/store/src/test/resources/eml/frnog.eml
!????? mailbox/store/src/test/resources/eml/twoAttachments.eml
B mailbox/store/src/test/resources/eml/nonTextualWithoutAttachmentTextContent.json
!????? mailbox/store/src/test/resources/eml/oneAttachmentAndSomeTextInlined.eml
B mailbox/store/src/test/resources/eml/emailWithNonIndexableAttachmentWithoutAttachment.json
!????? mailbox/store/src/test/resources/eml/oneHtmlAttachmentAndSomeTextInlined.eml
!????? mailbox/store/src/test/resources/eml/unknownDisposition.eml
!????? mailbox/store/src/test/resources/eml/mail2.eml
B mailbox/store/src/test/resources/eml/nonTextual.json
!????? mailbox/store/src/test/resources/eml/mail1.eml
B mailbox/store/src/test/resources/eml/invalidCharset.json
!????? mailbox/store/src/test/resources/eml/noAttachment.eml
!????? mailbox/store/src/test/resources/eml/charset.eml
B mailbox/store/src/test/resources/eml/gimp.png
B mailbox/store/src/test/resources/eml/spamMailNoHeaders.json
!????? mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithBlankCid.eml
B mailbox/store/src/test/resources/eml/htmlMail.json
!????? mailbox/store/src/test/resources/eml/embeddedAttachmentWithInline.eml
!????? mailbox/store/src/test/resources/eml/oneAttachmentWithoutContentType.eml
!????? mailbox/store/src/test/resources/eml/emailWithTextAttachment.eml
A mailbox/store/src/test/resources/eml/ديناصور.odt
!????? mailbox/store/src/test/resources/eml/oneAttachmentWithoutName.eml
!????? mailbox/store/src/test/resources/eml/calendar.eml
!????? mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithEmptyCid.eml
!????? mailbox/store/src/test/resources/eml/charset2.eml
!????? mailbox/store/src/test/resources/eml/nonTextual.eml
AL mailbox/store/src/test/resources/documents/html-iso-8859-1.html
!????? mailbox/store/src/test/resources/documents/writter.docx
B mailbox/store/src/test/resources/documents/simple-text-iso-8859-1.txt
!????? mailbox/store/src/test/resources/documents/Text.txt
AL mailbox/store/src/test/resources/documents/html.txt
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageManagerTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxReactorUtilsTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageManagerTestSystem.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxMessageResultImplTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMailboxManagerAttachmentTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/CombinationManagerTestSystem.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
!????? mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/FetchGroupConverterTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageUidProviderTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMailboxAssert.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AttachmentMapperTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageAssert.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilderTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImplTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessageTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/FlagsFactoryTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessagePropertiesAssertTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MetadataMapAssertTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/DefaultMessageIdTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/PropertyTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MetadataMapAssert.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/FlagsFilterTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMailboxAssertTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssertTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/DelegatingMailboxMessageTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageUidProvider.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMoveTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssert.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/SubjectTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MimeMessageIdTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AnnotationMapperTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessagePropertiesAssert.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMessageAssertTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/utils/MimeMessageHeadersUtilTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculatorTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/ThreadIdGuessingAlgorithmContract.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/PreDeletionHooksTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/SystemMailboxesProviderImplTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/ResultUtilsTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/BatchSizesTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/CurrentQuotaManagerContract.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/StoreQuotaManagerTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/GenericMaxQuotaManagerTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/QuotaCheckerTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/PartContentBuilderComplexMultipartTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/streaming/CountingInputStreamTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/comparator/SentDateComparatorTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/CombinedComparatorTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilsMultipartMixedTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilsTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndexContract.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/mime/HeaderCollectionTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/mime/FieldImpl.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/mime/EMailerTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/mime/EMailersTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/mime/SubjectsTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/mime/MimePartTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilsRFC822Test.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndexTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageBuilder.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/user/SubscriptionMapperTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/PartContentBuilderMultipartAlternativeTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerQuotaTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/FlagsUpdateCalculatorTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/JVMMailboxPathLockerTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreAttachmentManagerTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/extractor/JsoupTextExtractorTest.java
AL mailbox/store/src/test/java/org/apache/james/mailbox/store/extractor/DefaultTextExtractorTest.java
AL mailbox/store/src/reporting-site/site.xml
AL mailbox/store/pom.xml
AL mailbox/lucene/src/main/resources/META-INF/spring/mailbox-index-lucene.xml
AL mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/DocumentFieldConstants.java
AL mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
AL mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneSearchHighlighter.java
AL mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/UpperCaseFilter.java
AL mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneIndexableDocument.java
AL mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LenientImapSearchAnalyzer.java
AL mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageFlagSearchTest.java
AL mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMemorySearchHighLighterTest.java
AL mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java
AL mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneTestsUtils.java
AL mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
AL mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneFSSearchHighLighterTest.java
AL mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneGenericTests.java
AL mailbox/lucene/src/reporting-site/site.xml
AL mailbox/lucene/pom.xml
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMessageManager.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresThreadIdGuessingAlgorithm.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/UnsupportAttachmentContentLoader.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMailboxMemberDAO.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/MessageRepresentation.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMessageDataDefinition.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dao/PostgresThreadDataDefinition.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dao/PostgresMailboxMessageDAOUtils.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dao/PostgresMailboxAnnotationDAO.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dao/PostgresAttachmentDAO.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dao/PostgresMessageDAO.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dao/PostgresThreadDAO.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dao/PostgresMailboxMessageDAO.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dao/PostgresMailboxMessageFetchStrategy.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dao/PostgresMailboxDAO.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMailbox.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresUidProvider.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresAttachmentMapper.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMessageRetriever.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMessageMapper.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMailboxDataDefinition.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/eventsourcing/acl/ACLModule.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresModSeqProvider.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/MailboxDeleteDuringUpdateException.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/RLSSupportPostgresMailboxMapper.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresAnnotationMapper.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresACLUpsertException.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresAttachmentDataDefinition.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresAttachmentBlobReferenceSource.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMailboxMapper.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/dto/AttachmentsDTO.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMailboxMemberDataDefinition.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMessageIdMapper.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/mail/PostgresMessageBlobReferenceSource.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMailboxAnnotationDataDefinition.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMailboxAggregateDataDefinition.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/quota/PostgresCurrentQuotaManager.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/quota/PostgresPerUserMaxQuotaManager.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMailboxManager.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/search/UidSearchOverride.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/search/UnseenSearchOverride.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/search/AllSearchOverride.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/search/DeletedSearchOverride.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/search/DeletedWithRangeSearchOverride.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/search/NotDeletedWithRangeSearchOverride.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMailboxSessionMapperFactory.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/user/PostgresSubscriptionMapper.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/user/PostgresSubscriptionDAO.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/user/PostgresSubscriptionDataDefinition.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMailboxId.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMessageId.java
AL mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/DeleteMessageListener.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/PostgresMailboxManagerProvider.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/PostgresSubscriptionManagerTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/PostgresCombinationManagerTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/RLSSupportPostgresMailboxMapperACLTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresAnnotationMapperRowLevelSecurityTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresMessageMapperRowLevelSecurityTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresMailboxMapperTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresUidProviderTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/dao/PostgresMailboxMessageDAOTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/task/PostgresRecomputeCurrentQuotasServiceTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresMailboxMapperRowLevelSecurityTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresAttachmentBlobReferenceSourceTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresMapperProvider.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresModSeqProviderTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresMessageMapperTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresMailboxMapperACLTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresMessageBlobReferenceSourceTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresMessageIdMapperTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresMessageMoveTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresAttachmentMapperTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/mail/PostgresAnnotationMapperTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/PostgresMessageIdManagerQuotaTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/PostgresCombinationManagerTestSystem.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/PostgresThreadIdGuessingAlgorithmTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/PostgresMessageIdManagerTestSystem.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/quota/PostgresCurrentQuotaManagerTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/quota/PostgresPerUserMaxQuotaManagerTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/PostgresMessageIdManagerSideEffectTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/search/DeletedSearchOverrideTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/search/DeletedWithRangeSearchOverrideTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/search/UnseenSearchOverrideTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/search/UidSearchOverrideTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/search/NotDeletedWithRangeSearchOverrideTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/search/SearchOverrideFixture.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/search/AllSearchOverrideTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/DeleteMessageListenerTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/PostgresTestSystemFixture.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/PostgresMessageIdManagerStorageTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/user/PostgresSubscriptionMapperTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/user/PostgresSubscriptionMapperRowLevelSecurityTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/DeleteMessageListenerContract.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/PostgresMailboxManagerAttachmentTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/DeleteMessageListenerWithRLSTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/PostgresMailboxManagerTest.java
AL mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/PostgresMailboxManagerStressTest.java
AL mailbox/postgres/pom.xml
B mailbox/cassandra/doc/table_structure.png
!????? mailbox/cassandra/doc/README.md
!????? mailbox/cassandra/doc/table_structure.drawio
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/json/MailboxACLJsonConverter.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageRepresentation.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandler.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentation.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraThreadDAO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapper.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesTask.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTask.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxFlagInconsistencyTask.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesService.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTaskDTO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTask.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersTask.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTaskAdditionalInformationDTO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RunningOptionsDTO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesService.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxFlagInconsistenciesService.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersService.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/CassandraMailboxCounterCorrector.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesTaskAdditionalInformationDTO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskDTO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTaskRunner.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskAdditionalInformationDTO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesTaskDTO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/ConflictingEntry.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersTaskAdditionalInformationDTO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxFlagInconsistenciesTaskDTO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxFlagInconsistenciesTaskAdditionalInformationDTO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersTaskDTO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/MessageInconsistenciesEntry.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/AttachmentBlobReferenceSource.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageBlobReferenceSource.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/ACLMapper.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/AttachmentLoader.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/SetACLCommand.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLModule.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/AclV2DAOSubscriber.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/DeleteMailboxCommand.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/UserRightsDAOSubscriber.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/MailboxACLAggregate.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/UpdateACLCommand.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MailboxDeleteDuringUpdateException.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentsDAO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/ThreadTablePartitionKey.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV3DAO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMetadata.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/MailboxBaseTupleUtil.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/FlagsUpdateStageResult.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraFirstUnseenDAO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraIdAndPath.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLDAOV2.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraThreadLookupDAO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageId.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ids/CassandraId.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraThreadTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxRecentsTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraCurrentQuota.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraThreadLookupTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/MessageIdToImapUid.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageModseqTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraACLV2Table.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageUidTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageIds.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxCountersTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAnnotationTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMaxQuota.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxPathV3Table.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/Flag.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV3Table.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraDomainMaxQuota.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentV2Table.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraFirstUnseenTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraDeletedMessageTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraUserMailboxRightsTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraGlobalMaxQuota.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraApplicableFlagTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraSubscriptionTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageIdTable.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraSubscriptionDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxRecentsDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraDeletedMessageDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAnnotationDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraUidDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAclDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraModSeqDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraFirstUnseenDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxQuotaDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxCounterDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraThreadDataDefinition.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraThreadIdGuessingAlgorithm.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraGlobalMaxQuotaDao.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/FakeCassandraCurrentQuotaManager.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV2.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/migration/CassandraCurrentQuotaManagerMigration.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/migration/CassandraPerUserMaxQuotaManagerMigration.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaDao.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/FakeMaxQuotaManager.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerV1.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerV2.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerDomainMaxQuotaDao.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/UidSearchOverride.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/UnseenSearchOverride.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/AllSearchOverride.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/DeletedSearchOverride.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/DeletedWithRangeSearchOverride.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/NotDeletedWithRangeSearchOverride.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/GhostMailbox.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
AL mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/DeleteMessageListener.java
B mailbox/cassandra/src/test/resources/json/solveMessageInconsistencies.additionalInformation.json
B mailbox/cassandra/src/test/resources/json/solveMessageInconsistencies.additionalInformation.legacy.json
B mailbox/cassandra/src/test/resources/json/solveMessageInconsistencies.task.legacy.json
B mailbox/cassandra/src/test/resources/json/solveMessageInconsistencies.task.json
B mailbox/cassandra/src/test/resources/shattered-2.pdf
!????? mailbox/cassandra/src/test/resources/cassandra-driver.conf
B mailbox/cassandra/src/test/resources/shattered-1.pdf
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/json/MailboxACLJsonConverterTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3Test.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentDAOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraFirstUnseenDAOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraThreadDAOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxAggregateModule.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraThreadLookupDAOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV3DAOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/MailboxInconsistenciesPOJOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesServiceTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxFlagInconsistencyTaskSerializationTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesServiceTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/CassandraRecomputeCurrentQuotasServiceTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTaskTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskSerializationTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersTaskSerializationTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxFlagInconsistenciesServiceTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersServiceTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesTaskSerializationTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/AttachmentLoaderTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperRelaxedConsistencyTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperRelaxedConsistencyTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperContract.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentationByIdTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapperTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLUpdatedDTOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperConcurrencyTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperV2Test.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxFixture.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapperTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperGenericTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/FlagsUpdateStageResultTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperNoACLTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandlerTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraThreadIdGuessingAlgorithmTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerStorageTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageIdTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/ids/CassandraIdTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerConsistencyTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerMigrationTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/migration/CassandraCurrentQuotaManagerMigrationTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerV1Test.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerV2Test.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV2Test.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/DeletedSearchOverrideTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/DeletedWithRangeSearchOverrideTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/UnseenSearchOverrideTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/UidSearchOverrideTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/NotDeletedWithRangeSearchOverrideTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/AllSearchOverrideTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerQuotaTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/TestCassandraMailboxSessionMapperFactory.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListenerTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java
AL mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerWithoutAclTest.java
AL mailbox/cassandra/src/reporting-site/site.xml
AL mailbox/cassandra/pom.xml
N mailbox/cassandra/README.txt
!????? docs/Dockerfile
!????? docs/ui-overrides/partials/header-content.hbs
!????? docs/ui-overrides/img/james.svg
!????? docs/modules/customization/nav.adoc
!????? docs/modules/customization/pages/mail-processing.adoc
!????? docs/modules/customization/pages/smtp-hooks.adoc
!????? docs/modules/customization/pages/imap.adoc
!????? docs/modules/customization/pages/webadmin-routes.adoc
!????? docs/modules/customization/pages/mailbox-listeners.adoc
!????? docs/modules/customization/pages/index.adoc
B docs/modules/customization/assets/images/james-hexagons-extensions.png
!????? docs/modules/servers/nav.adoc
!????? docs/modules/servers/pages/distributed/architecture/mailqueue_combined_extend.adoc
!????? docs/modules/servers/pages/distributed/architecture/consistency_model_data_replication_extend.adoc
!????? docs/modules/servers/pages/distributed/architecture/data-tiering.adoc
!????? docs/modules/servers/pages/distributed/architecture/implemented-standards.adoc
!????? docs/modules/servers/pages/distributed/architecture/specialized-instances.adoc
!????? docs/modules/servers/pages/distributed/architecture/index.adoc
!????? docs/modules/servers/pages/distributed/architecture/consistency-model.adoc
!????? docs/modules/servers/pages/distributed/extending.adoc
!????? docs/modules/servers/pages/distributed/objectives.adoc
!????? docs/modules/servers/pages/distributed/operate/metrics.adoc
!????? docs/modules/servers/pages/distributed/operate/security.adoc
!????? docs/modules/servers/pages/distributed/operate/webadmin/admin-messages-extend.adoc
!????? docs/modules/servers/pages/distributed/operate/webadmin/admin-mailboxes-extend.adoc
!????? docs/modules/servers/pages/distributed/operate/webadmin/admin-mail-queues-extend.adoc
!????? docs/modules/servers/pages/distributed/operate/migrating.adoc
!????? docs/modules/servers/pages/distributed/operate/logging/docker-compose-block.adoc
!????? docs/modules/servers/pages/distributed/operate/guide.adoc
!????? docs/modules/servers/pages/distributed/operate/performanceChecklist.adoc
!????? docs/modules/servers/pages/distributed/operate/webadmin.adoc
!????? docs/modules/servers/pages/distributed/operate/logging.adoc
!????? docs/modules/servers/pages/distributed/operate/index.adoc
!????? docs/modules/servers/pages/distributed/operate/cassandra-migration.adoc
!????? docs/modules/servers/pages/distributed/operate/cli.adoc
!????? docs/modules/servers/pages/distributed/benchmark/benchmark_prepare.adoc
!????? docs/modules/servers/pages/distributed/benchmark/db-benchmark.adoc
!????? docs/modules/servers/pages/distributed/benchmark/james-benchmark.adoc
!????? docs/modules/servers/pages/distributed/benchmark/provision.sh
!????? docs/modules/servers/pages/distributed/benchmark/index.adoc
!????? docs/modules/servers/pages/distributed/index.adoc
!????? docs/modules/servers/pages/distributed/run/k8s-secrets.adoc
!????? docs/modules/servers/pages/distributed/run/k8s-logsMetrics.adoc
!????? docs/modules/servers/pages/distributed/run/run-docker.adoc
!????? docs/modules/servers/pages/distributed/run/run-kubernetes.adoc
!????? docs/modules/servers/pages/distributed/run/k8s-values.adoc
!????? docs/modules/servers/pages/distributed/run/index.adoc
!????? docs/modules/servers/pages/distributed/run/run-java.adoc
!????? docs/modules/servers/pages/distributed/run/k8s-checklist.adoc
!????? docs/modules/servers/pages/distributed/configure/collecting-events.adoc
!????? docs/modules/servers/pages/distributed/configure/matchers.adoc
!????? docs/modules/servers/pages/distributed/configure/mailets.adoc
!????? docs/modules/servers/pages/distributed/configure/batchsizes.adoc
!????? docs/modules/servers/pages/distributed/configure/smtp-hooks.adoc
!????? docs/modules/servers/pages/distributed/configure/domainlist.adoc
!????? docs/modules/servers/pages/distributed/configure/queue.adoc
!????? docs/modules/servers/pages/distributed/configure/dsn.adoc
!????? docs/modules/servers/pages/distributed/configure/jmx.adoc
!????? docs/modules/servers/pages/distributed/configure/cassandra.adoc
!????? docs/modules/servers/pages/distributed/configure/tika.adoc
!????? docs/modules/servers/pages/distributed/configure/jvm.adoc
!????? docs/modules/servers/pages/distributed/configure/jmap.adoc
!????? docs/modules/servers/pages/distributed/configure/mailrepositorystore.adoc
!????? docs/modules/servers/pages/distributed/configure/collecting-contacts.adoc
!????? docs/modules/servers/pages/distributed/configure/droplists.adoc
!????? docs/modules/servers/pages/distributed/configure/mat-sts.adoc
!????? docs/modules/servers/pages/distributed/configure/search.adoc
!????? docs/modules/servers/pages/distributed/configure/blobstore.adoc
!????? docs/modules/servers/pages/distributed/configure/extensions.adoc
!????? docs/modules/servers/pages/distributed/configure/sieve.adoc
!????? docs/modules/servers/pages/distributed/configure/listeners.adoc
!????? docs/modules/servers/pages/distributed/configure/vault.adoc
!????? docs/modules/servers/pages/distributed/configure/imap.adoc
!????? docs/modules/servers/pages/distributed/configure/ssl.adoc
!????? docs/modules/servers/pages/distributed/configure/smtp.adoc
!????? docs/modules/servers/pages/distributed/configure/mailetcontainer.adoc
!????? docs/modules/servers/pages/distributed/configure/webadmin.adoc
!????? docs/modules/servers/pages/distributed/configure/recipientrewritetable.adoc
!????? docs/modules/servers/pages/distributed/configure/rabbitmq.adoc
!????? docs/modules/servers/pages/distributed/configure/spam.adoc
!????? docs/modules/servers/pages/distributed/configure/remote-delivery-error-handling.adoc
!????? docs/modules/servers/pages/distributed/configure/index.adoc
!????? docs/modules/servers/pages/distributed/configure/dns.adoc
!????? docs/modules/servers/pages/distributed/configure/redis.adoc
!????? docs/modules/servers/pages/distributed/configure/healthcheck.adoc
!????? docs/modules/servers/pages/distributed/configure/usersrepository.adoc
!????? docs/modules/servers/pages/distributed/configure/opensearch.adoc
!????? docs/modules/servers/pages/distributed/configure/pop3.adoc
!????? docs/modules/servers/pages/5-minute-demo.adoc
!????? docs/modules/servers/pages/15-minute-demo.adoc
!????? docs/modules/servers/pages/test.adoc
!????? docs/modules/servers/pages/demo.adoc
!????? docs/modules/servers/pages/basic/context.adoc
!????? docs/modules/servers/pages/basic/objectives.adoc
!????? docs/modules/servers/pages/basic/conf/index.adoc
!????? docs/modules/servers/pages/basic/help.adoc
!????? docs/modules/servers/pages/basic/concepts.adoc
!????? docs/modules/servers/pages/basic/architecture.adoc
!????? docs/modules/servers/pages/basic/index.adoc
!????? docs/modules/servers/pages/basic/self-hosting.notes
!????? docs/modules/servers/pages/run.adoc
!????? docs/modules/servers/pages/index.adoc
!????? docs/modules/servers/pages/postgres/architecture/mailqueue_combined_extend.adoc
!????? docs/modules/servers/pages/postgres/architecture/consistency_model_data_replication_extend.adoc
!????? docs/modules/servers/pages/postgres/architecture/implemented-standards.adoc
!????? docs/modules/servers/pages/postgres/architecture/specialized-instances.adoc
!????? docs/modules/servers/pages/postgres/architecture/index.adoc
!????? docs/modules/servers/pages/postgres/architecture/consistency-model.adoc
!????? docs/modules/servers/pages/postgres/extending.adoc
!????? docs/modules/servers/pages/postgres/objectives.adoc
!????? docs/modules/servers/pages/postgres/operate/metrics.adoc
!????? docs/modules/servers/pages/postgres/operate/security.adoc
!????? docs/modules/servers/pages/postgres/operate/webadmin/admin-messages-extend.adoc
!????? docs/modules/servers/pages/postgres/operate/webadmin/admin-mailboxes-extend.adoc
!????? docs/modules/servers/pages/postgres/operate/webadmin/admin-mail-queues-extend.adoc
!????? docs/modules/servers/pages/postgres/operate/migrating.adoc
!????? docs/modules/servers/pages/postgres/operate/logging/docker-compose-block.adoc
!????? docs/modules/servers/pages/postgres/operate/guide.adoc
!????? docs/modules/servers/pages/postgres/operate/performanceChecklist.adoc
!????? docs/modules/servers/pages/postgres/operate/webadmin.adoc
!????? docs/modules/servers/pages/postgres/operate/logging.adoc
!????? docs/modules/servers/pages/postgres/operate/index.adoc
!????? docs/modules/servers/pages/postgres/operate/cli.adoc
!????? docs/modules/servers/pages/postgres/benchmark/benchmark_prepare.adoc
!????? docs/modules/servers/pages/postgres/benchmark/db-benchmark.adoc
!????? docs/modules/servers/pages/postgres/benchmark/james-benchmark.adoc
!????? docs/modules/servers/pages/postgres/benchmark/index.adoc
!????? docs/modules/servers/pages/postgres/index.adoc
!????? docs/modules/servers/pages/postgres/extending/index.adoc
!????? docs/modules/servers/pages/postgres/run/run-docker.adoc
!????? docs/modules/servers/pages/postgres/run/index.adoc
!????? docs/modules/servers/pages/postgres/run/run-java.adoc
!????? docs/modules/servers/pages/postgres/configure/collecting-events.adoc
!????? docs/modules/servers/pages/postgres/configure/matchers.adoc
!????? docs/modules/servers/pages/postgres/configure/mailets.adoc
!????? docs/modules/servers/pages/postgres/configure/batchsizes.adoc
!????? docs/modules/servers/pages/postgres/configure/smtp-hooks.adoc
!????? docs/modules/servers/pages/postgres/configure/domainlist.adoc
!????? docs/modules/servers/pages/postgres/configure/queue.adoc
!????? docs/modules/servers/pages/postgres/configure/dsn.adoc
!????? docs/modules/servers/pages/postgres/configure/jmx.adoc
!????? docs/modules/servers/pages/postgres/configure/tika.adoc
!????? docs/modules/servers/pages/postgres/configure/jvm.adoc
!????? docs/modules/servers/pages/postgres/configure/jmap.adoc
!????? docs/modules/servers/pages/postgres/configure/mailrepositorystore.adoc
!????? docs/modules/servers/pages/postgres/configure/collecting-contacts.adoc
!????? docs/modules/servers/pages/postgres/configure/droplists.adoc
!????? docs/modules/servers/pages/postgres/configure/mat-sts.adoc
!????? docs/modules/servers/pages/postgres/configure/search.adoc
!????? docs/modules/servers/pages/postgres/configure/blobstore.adoc
!????? docs/modules/servers/pages/postgres/configure/extensions.adoc
!????? docs/modules/servers/pages/postgres/configure/sieve.adoc
!????? docs/modules/servers/pages/postgres/configure/listeners.adoc
!????? docs/modules/servers/pages/postgres/configure/vault.adoc
!????? docs/modules/servers/pages/postgres/configure/imap.adoc
!????? docs/modules/servers/pages/postgres/configure/ssl.adoc
!????? docs/modules/servers/pages/postgres/configure/smtp.adoc
!????? docs/modules/servers/pages/postgres/configure/mailetcontainer.adoc
!????? docs/modules/servers/pages/postgres/configure/webadmin.adoc
!????? docs/modules/servers/pages/postgres/configure/recipientrewritetable.adoc
!????? docs/modules/servers/pages/postgres/configure/rabbitmq.adoc
!????? docs/modules/servers/pages/postgres/configure/spam.adoc
!????? docs/modules/servers/pages/postgres/configure/remote-delivery-error-handling.adoc
!????? docs/modules/servers/pages/postgres/configure/index.adoc
!????? docs/modules/servers/pages/postgres/configure/dns.adoc
!????? docs/modules/servers/pages/postgres/configure/redis.adoc
!????? docs/modules/servers/pages/postgres/configure/healthcheck.adoc
!????? docs/modules/servers/pages/postgres/configure/usersrepository.adoc
!????? docs/modules/servers/pages/postgres/configure/opensearch.adoc
!????? docs/modules/servers/pages/postgres/configure/pop3.adoc
!????? docs/modules/servers/partials/architecture/implemented-standards.adoc
!????? docs/modules/servers/partials/architecture/specialized-instances.adoc
!????? docs/modules/servers/partials/architecture/index.adoc
!????? docs/modules/servers/partials/architecture/consistency-model.adoc
!????? docs/modules/servers/partials/IsOverQuota.adoc
!????? docs/modules/servers/partials/HasHeaderWithPrefix.adoc
!????? docs/modules/servers/partials/ManageSieveMailet.adoc
!????? docs/modules/servers/partials/AddFooter.adoc
!????? docs/modules/servers/partials/FileRegexMatcher.adoc
!????? docs/modules/servers/partials/AtMostPriority.adoc
!????? docs/modules/servers/partials/RecipientToLowerCase.adoc
!????? docs/modules/servers/partials/MailToAllUsers.adoc
!????? docs/modules/servers/partials/Expires.adoc
!????? docs/modules/servers/partials/AmqpForwardAttribute.adoc
!????? docs/modules/servers/partials/SenderHasMXRecord.adoc
!????? docs/modules/servers/partials/LogMessage.adoc
!????? docs/modules/servers/partials/ClamAVScan.adoc
!????? docs/modules/servers/partials/MailAttributesToMimeHeaders.adoc
!????? docs/modules/servers/partials/RemoveMimeHeader.adoc
!????? docs/modules/servers/partials/SenderIsNull.adoc
!????? docs/modules/servers/partials/SerialiseToHTTP.adoc
!????? docs/modules/servers/partials/ClassifyBounce.adoc
!????? docs/modules/servers/partials/IsSMIMESigned.adoc
!????? docs/modules/servers/partials/SubjectIs.adoc
!????? docs/modules/servers/partials/ToPlainText.adoc
!????? docs/modules/servers/partials/WithStorageDirective.adoc
!????? docs/modules/servers/partials/IsSMIMEEncrypted.adoc
!????? docs/modules/servers/partials/RecipientHasMXRecord.adoc
!????? docs/modules/servers/partials/AtMost.adoc
!????? docs/modules/servers/partials/ExtractMDNOriginalJMAPMessageId.adoc
!????? docs/modules/servers/partials/RecipientRewriteTable.adoc
!????? docs/modules/servers/partials/RecipientIsLocal.adoc
!????? docs/modules/servers/partials/RemoveMimeHeaderByPrefix.adoc
!????? docs/modules/servers/partials/ConvertTo7Bit.adoc
!????? docs/modules/servers/partials/HostIs.adoc
!????? docs/modules/servers/partials/UserIs.adoc
!????? docs/modules/servers/partials/XOriginatingIpInNetwork.adoc
!????? docs/modules/servers/partials/ICalendarParser.adoc
!????? docs/modules/servers/partials/HasPriority.adoc
!????? docs/modules/servers/partials/LocalDelivery.adoc
!????? docs/modules/servers/partials/NESSpamCheck.adoc
!????? docs/modules/servers/partials/SPF.adoc
!????? docs/modules/servers/partials/TextCalendarBodyToAttachment.adoc
!????? docs/modules/servers/partials/WithPriority.adoc
!????? docs/modules/servers/partials/SpamAssassin.adoc
!????? docs/modules/servers/partials/Forward.adoc
!????? docs/modules/servers/partials/RecipientDomainIs.adoc
!????? docs/modules/servers/partials/SaveMailNameInHeaders .adoc
!????? docs/modules/servers/partials/SMTPIsAuthNetwork.adoc
!????? docs/modules/servers/partials/HasMailAttributeWithValueRegex.adoc
!????? docs/modules/servers/partials/ReplaceContent.adoc
!????? docs/modules/servers/partials/RemoteAddrInNetwork.adoc
!????? docs/modules/servers/partials/NotifyPostmaster.adoc
!????? docs/modules/servers/partials/HeadersToHTTP.adoc
!????? docs/modules/servers/partials/CommandForListserv.adoc
!????? docs/modules/servers/partials/RandomStoring.adoc
!????? docs/modules/servers/partials/PostmasterAlias.adoc
!????? docs/modules/servers/partials/SMIMECheckSignature.adoc
!????? docs/modules/servers/partials/RecoverAttachment.adoc
!????? docs/modules/servers/partials/StripAttachment.adoc
!????? docs/modules/servers/partials/SubAddressing.adoc
!????? docs/modules/servers/partials/DKIMSign.adoc
!????? docs/modules/servers/partials/TooManyRecipients.adoc
!????? docs/modules/servers/partials/SplitMail.adoc
!????? docs/modules/servers/partials/RemoveAllMailAttributes.adoc
!????? docs/modules/servers/partials/ICALToHeader.adoc
!????? docs/modules/servers/partials/SanitizeMimeMessageId.adoc
!????? docs/modules/servers/partials/HasMimeTypeAnySubPart.adoc
!????? docs/modules/servers/partials/AttachmentFileNameIs.adoc
!????? docs/modules/servers/partials/MimeDecodingMailet.adoc
!????? docs/modules/servers/partials/IsX509CertificateSubject.adoc
!????? docs/modules/servers/partials/Bounce.adoc
!????? docs/modules/servers/partials/RecipientCountExceeds.adoc
!????? docs/modules/servers/partials/WrapText.adoc
!????? docs/modules/servers/partials/DKIMVerify.adoc
!????? docs/modules/servers/partials/IsSenderInRRTLoop.adoc
!????? docs/modules/servers/partials/SetMimeHeader.adoc
!????? docs/modules/servers/partials/Redirect.adoc
!????? docs/modules/servers/partials/RelayLimit.adoc
!????? docs/modules/servers/partials/DeconnectionRight.adoc
!????? docs/modules/servers/partials/ICALToJsonAttribute.adoc
!????? docs/modules/servers/partials/SenderIs.adoc
!????? docs/modules/servers/partials/TooManyLines.adoc
!????? docs/modules/servers/partials/IsSingleRecipient.adoc
!????? docs/modules/servers/partials/ToRepository.adoc
!????? docs/modules/servers/partials/SenderInFakeDomain.adoc
!????? docs/modules/servers/partials/Null.adoc
!????? docs/modules/servers/partials/IsRemoteDeliveryPermanentError.adoc
!????? docs/modules/servers/partials/RemoteDelivery.adoc
!????? docs/modules/servers/partials/ServerTime.adoc
!????? docs/modules/servers/partials/AddSubjectPrefix.adoc
!????? docs/modules/servers/partials/RemoveMailAttribute.adoc
!????? docs/modules/servers/partials/Resend.adoc
!????? docs/modules/servers/partials/HasException.adoc
!????? docs/modules/servers/partials/UnwrapText.adoc
!????? docs/modules/servers/partials/ToSenderDomainRepository.adoc
!????? docs/modules/servers/partials/VacationMailet.adoc
!????? docs/modules/servers/partials/HasAttachment.adoc
!????? docs/modules/servers/partials/operate/metrics.adoc
!????? docs/modules/servers/partials/operate/security.adoc
!????? docs/modules/servers/partials/operate/migrating.adoc
!????? docs/modules/servers/partials/operate/guide.adoc
!????? docs/modules/servers/partials/operate/performanceChecklist.adoc
!????? docs/modules/servers/partials/operate/webadmin.adoc
!????? docs/modules/servers/partials/operate/logging.adoc
!????? docs/modules/servers/partials/operate/index.adoc
!????? docs/modules/servers/partials/operate/cli.adoc
!????? docs/modules/servers/partials/All.adoc
!????? docs/modules/servers/partials/benchmark/db-benchmark.adoc
!????? docs/modules/servers/partials/benchmark/james-benchmark.adoc
!????? docs/modules/servers/partials/benchmark/index.adoc
!????? docs/modules/servers/partials/CommandListservMatcher.adoc
!????? docs/modules/servers/partials/Sieve.adoc
!????? docs/modules/servers/partials/ToProcessor.adoc
!????? docs/modules/servers/partials/MailAttributesListToMimeHeaders.adoc
!????? docs/modules/servers/partials/FetchedFrom.adoc
!????? docs/modules/servers/partials/HostIsLocal.adoc
!????? docs/modules/servers/partials/SetMailAttribute.adoc
!????? docs/modules/servers/partials/HasMimeTypeParameter.adoc
!????? docs/modules/servers/partials/RemoteAddrNotInNetwork.adoc
!????? docs/modules/servers/partials/AtLeastPriority.adoc
!????? docs/modules/servers/partials/ContactExtractor.adoc
!????? docs/modules/servers/partials/Sign.adoc
!????? docs/modules/servers/partials/HasMailAttributeWithValue.adoc
!????? docs/modules/servers/partials/DSNBounce.adoc
!????? docs/modules/servers/partials/RemoteDeliveryFailedWithSMTPCode.adoc
!????? docs/modules/servers/partials/FoldLongLines.adoc
!????? docs/modules/servers/partials/HasMailAttribute.adoc
!????? docs/modules/servers/partials/ToSenderFolder.adoc
!????? docs/modules/servers/partials/SenderHostIsLocal.adoc
!????? docs/modules/servers/partials/CompareNumericHeaderValue.adoc
!????? docs/modules/servers/partials/RecipientIsRegex.adoc
!????? docs/modules/servers/partials/NotifySender.adoc
!????? docs/modules/servers/partials/LDAPMatchers.adoc
!????? docs/modules/servers/partials/SMIMESign.adoc
!????? docs/modules/servers/partials/SubjectStartsWith.adoc
!????? docs/modules/servers/partials/SenderDomainIs.adoc
!????? docs/modules/servers/partials/IsRemoteDeliveryTemporaryError.adoc
!????? docs/modules/servers/partials/SentByMailet.adoc
!????? docs/modules/servers/partials/DLP.adoc
!????? docs/modules/servers/partials/SenderIsLocal.adoc
!????? docs/modules/servers/partials/RecipientIs.adoc
!????? docs/modules/servers/partials/FromRepository.adoc
!????? docs/modules/servers/partials/InSpammerBlacklist.adoc
!????? docs/modules/servers/partials/SenderHostIs.adoc
!????? docs/modules/servers/partials/IsMarkedAsSpam.adoc
!????? docs/modules/servers/partials/SMTPAuthSuccessful.adoc
!????? docs/modules/servers/partials/HasHeader.adoc
!????? docs/modules/servers/partials/HasMimeType.adoc
!????? docs/modules/servers/partials/OnlyText.adoc
!????? docs/modules/servers/partials/UseHeaderRecipients.adoc
!????? docs/modules/servers/partials/SentByJmap.adoc
!????? docs/modules/servers/partials/ICSSanitizer.adoc
!????? docs/modules/servers/partials/SenderIsRegex.adoc
!????? docs/modules/servers/partials/configure/forProtocolsPartial.adoc
!????? docs/modules/servers/partials/configure/collecting-events.adoc
!????? docs/modules/servers/partials/configure/matchers.adoc
!????? docs/modules/servers/partials/configure/mailets.adoc
!????? docs/modules/servers/partials/configure/batchsizes.adoc
!????? docs/modules/servers/partials/configure/forStorageDependenciesPartial.adoc
!????? docs/modules/servers/partials/configure/smtp-hooks.adoc
!????? docs/modules/servers/partials/configure/domainlist.adoc
!????? docs/modules/servers/partials/configure/queue.adoc
!????? docs/modules/servers/partials/configure/mta-sts.adoc
!????? docs/modules/servers/partials/configure/dsn.adoc
!????? docs/modules/servers/partials/configure/jmx.adoc
!????? docs/modules/servers/partials/configure/tika.adoc
!????? docs/modules/servers/partials/configure/jvm.adoc
!????? docs/modules/servers/partials/configure/jmap.adoc
!????? docs/modules/servers/partials/configure/mailrepositorystore.adoc
!????? docs/modules/servers/partials/configure/collecting-contacts.adoc
!????? docs/modules/servers/partials/configure/droplists.adoc
!????? docs/modules/servers/partials/configure/search.adoc
!????? docs/modules/servers/partials/configure/blobstore.adoc
!????? docs/modules/servers/partials/configure/forCoreComponentsPartial.adoc
!????? docs/modules/servers/partials/configure/extensions.adoc
!????? docs/modules/servers/partials/configure/sieve.adoc
!????? docs/modules/servers/partials/configure/listeners.adoc
!????? docs/modules/servers/partials/configure/vault.adoc
!????? docs/modules/servers/partials/configure/imap.adoc
!????? docs/modules/servers/partials/configure/ssl.adoc
!????? docs/modules/servers/partials/configure/systemPropertiesPartial.adoc
!????? docs/modules/servers/partials/configure/smtp.adoc
!????? docs/modules/servers/partials/configure/mailetcontainer.adoc
!????? docs/modules/servers/partials/configure/webadmin.adoc
!????? docs/modules/servers/partials/configure/smtp-limitation-hoot.adoc
!????? docs/modules/servers/partials/configure/recipientrewritetable.adoc
!????? docs/modules/servers/partials/configure/rabbitmq.adoc
!????? docs/modules/servers/partials/configure/spam.adoc
!????? docs/modules/servers/partials/configure/remote-delivery-error-handling.adoc
!????? docs/modules/servers/partials/configure/forExtensionsPartial.adoc
!????? docs/modules/servers/partials/configure/dns.adoc
!????? docs/modules/servers/partials/configure/redis.adoc
!????? docs/modules/servers/partials/configure/healthcheck.adoc
!????? docs/modules/servers/partials/configure/usersrepository.adoc
!????? docs/modules/servers/partials/configure/opensearch.adoc
!????? docs/modules/servers/partials/configure/pop3.adoc
!????? docs/modules/servers/partials/MetricsMailet.adoc
!????? docs/modules/servers/partials/PartHasContentType.adoc
!????? docs/modules/servers/partials/SMTPAuthUserIs.adoc
!????? docs/modules/servers/partials/AddDeliveredToHeader.adoc
!????? docs/modules/servers/partials/SMIMEDecrypt.adoc
!????? docs/modules/servers/partials/SizeGreaterThan.adoc
!????? docs/modules/servers/assets/images/storage_james_postgres.svg
B docs/modules/servers/assets/images/server-components.png
B docs/modules/servers/assets/images/specialized-instances-postgres.png
B docs/modules/servers/assets/images/james-imap-base-performance-postgres.png
B docs/modules/servers/assets/images/IMAP_board.png
B docs/modules/servers/assets/images/cassandra_stress_test_result_2.png
B docs/modules/servers/assets/images/postgres_pg_stat_statements.png
B docs/modules/servers/assets/images/apache-james-lens.png
B docs/modules/servers/assets/images/webAdmin.png
B docs/modules/servers/assets/images/cassandra_stress_test_result_1.png
B docs/modules/servers/assets/images/BlobStore.png
B docs/modules/servers/assets/images/storage_james_distributed.png
B docs/modules/servers/assets/images/remote-delivery-error-handling.png
B docs/modules/servers/assets/images/specialized-instances-distributed.png
B docs/modules/servers/assets/images/MATCHER.png
B docs/modules/servers/assets/images/storage_james_postgres.png
B docs/modules/servers/assets/images/JMAP_board.png
B docs/modules/servers/assets/images/james-imap-base-performance-distributed.png
B docs/modules/servers/assets/images/preload-dashboards.png
B docs/modules/servers/assets/images/JVM_board.png
!????? docs/modules/concepts/nav.adoc
!????? docs/modules/concepts/pages/configuration.adoc
!????? docs/modules/concepts/pages/mail/index.adoc
!????? docs/modules/concepts/pages/storage/mailbox.adoc
!????? docs/modules/concepts/pages/storage/users.adoc
!????? docs/modules/concepts/pages/storage/index.adoc
!????? docs/modules/concepts/pages/messages/mime.adoc
!????? docs/modules/concepts/pages/messages/imf.adoc
!????? docs/modules/concepts/pages/messages/index.adoc
!????? docs/modules/concepts/pages/protocols/jmap.adoc
!????? docs/modules/concepts/pages/protocols/imap.adoc
!????? docs/modules/concepts/pages/protocols/smtp.adoc
!????? docs/modules/concepts/pages/protocols/index.adoc
!????? docs/modules/concepts/pages/protocols/pop.adoc
!????? docs/modules/concepts/pages/protocols/esmtp.adoc
!????? docs/modules/concepts/pages/protocols/lmtp.adoc
!????? docs/modules/concepts/pages/user/index.adoc
!????? docs/modules/concepts/pages/processing/index.adoc
!????? docs/modules/concepts/pages/glossary.adoc
!????? docs/modules/concepts/pages/index.adoc
!????? docs/modules/ROOT/nav.adoc
!????? docs/modules/ROOT/pages/index.adoc
!????? docs/modules/development/nav.adoc
!????? docs/modules/development/pages/deployment-tests.adoc
!????? docs/modules/development/pages/logging.adoc
!????? docs/modules/development/pages/index.adoc
!????? docs/modules/community/nav.adoc
!????? docs/modules/community/pages/support.adoc
!????? docs/modules/community/pages/website.adoc
!????? docs/modules/community/pages/guidelines.adoc
!????? docs/modules/community/pages/download.adoc
!????? docs/modules/community/pages/mailing-lists.adoc
!????? docs/modules/community/pages/release.adoc
!????? docs/modules/community/pages/index.adoc
!????? docs/modules/community/pages/contributing.adoc
B docs/modules/community/images/linagora.png
!????? docs/README.md
!????? docs/antora-playbook-local.yml
!????? docs/antora.yml
N LICENSE
AL checkstyle-suppressions.xml
!????? testing/base/src/main/resources/logback-test.xml
!????? testing/base/src/main/resources/testcontainers.properties
AL testing/base/src/main/java/org/apache/james/junit/categories/Unstable.java
AL testing/base/pom.xml
AL Jenkinsfile
*****************************************************
Printing headers for text files without a valid license header...
=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_session_fixation.test
=====================================================
S: 220 mydomain.tld smtp
C: ehlo yopmail.com
S: 250.*
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250-8BITMIME
S: 250 STARTTLS
C: AUTH LOGIN
S: 334 VXNlcm5hbWU6
C: Ym9iQG15ZG9tYWluLnRsZA==
S: 334 UGFzc3dvcmQ6
C: c2VjcmV0
S: 235 Authentication Successful
C: mail from:<bob@mydomain.tld>
C: rcpt to:<matthieu@yopmail.com>
S: 250 2.1.0 Sender <bob@mydomain.tld> OK
S: 250 2.1.5 Recipient <matthieu@yopmail.com> OK
C: starttls
S: 501 .*
=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/rcpt_with_starttls.test
=====================================================
S: 220 mydomain.tld smtp
C: ehlo yopmail.com
C: mail from:<matthieu@yopmail.com>
C: rcpt to:<starttls@mydomain.tld>
C: data
S: 250.*
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250-8BITMIME
S: 250 STARTTLS
S: 250 2.1.0 Sender <matthieu@yopmail.com> OK
S: 250 2.1.5 Recipient <starttls@mydomain.tld> OK
S: 354 Ok Send data ending with <CRLF>.<CRLF>
C: subject: test
C:
C: content content
C: .
S: 250 2.6.0 Message received
=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/authplain.test
=====================================================
S: 220 mydomain.tld smtp
C: AUTH LOGIN
S: 334 VXNlcm5hbWU6
C: Ym9iQG15ZG9tYWluLnRsZA==
S: 334 UGFzc3dvcmQ6
C: c2VjcmV0
S: 235 Authentication Successful
=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/data_with_starttls.test
=====================================================
S: 220 mydomain.tld smtp
C: ehlo yopmail.com
C: mail from:<matthieu@yopmail.com>
C: rcpt to:<bob@mydomain.tld>
C: data
S: 250.*
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250-8BITMIME
S: 250 STARTTLS
S: 250 2.1.0 Sender <matthieu@yopmail.com> OK
S: 250 2.1.5 Recipient <bob@mydomain.tld> OK
S: 354 Ok Send data ending with <CRLF>.<CRLF>
C: subject: test
C:
C: content starttls content
C: .
S: 250 2.6.0 Message received
=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_with_injection.test
=====================================================
S: 220 mydomain.tld smtp
C: ehlo yopmail.com
S: 250.*
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250-8BITMIME
S: 250 STARTTLS
C: starttls\r\nmail from:<matthieu@yopmail.com>\r\n
S: 451 Unable to process request
=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/helo.test
=====================================================
S: 220 mydomain.tld smtp
C: ehlo yopmail.com
C: mail from:<matthieu@yopmail.com>
C: rcpt to:<bob@mydomain.tld>
C: data
S: 250.*
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250 8BITMIME
S: 250 2.1.0 Sender <matthieu@yopmail.com> OK
S: 250 2.1.5 Recipient <bob@mydomain.tld> OK
S: 354 Ok Send data ending with <CRLF>.<CRLF>
C: subject: test
C:
C: content
C: .
S: 250 2.6.0 Message received
=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/data_starts_with_starttls.test
=====================================================
S: 220 mydomain.tld smtp
C: ehlo yopmail.com
C: mail from:<matthieu@yopmail.com>
C: rcpt to:<bob@mydomain.tld>
C: data
S: 250.*
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250-8BITMIME
S: 250 STARTTLS
S: 250 2.1.0 Sender <matthieu@yopmail.com> OK
S: 250 2.1.5 Recipient <bob@mydomain.tld> OK
S: 354 Ok Send data ending with <CRLF>.<CRLF>
C: subject: test
C:
C: starttls content
C: .
S: 250 2.6.0 Message received
=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls.test
=====================================================
S: 220 mydomain.tld smtp
C: ehlo yopmail.com
S: 250.*
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250-8BITMIME
S: 250 STARTTLS
C: starttls
S: 220 2.0.0 Ready to start TLS
=====================================================
== File: mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListWithPercentWildcardInMailboxName.test
=====================================================
# Test creating and searching mailboxes with literal '*' and '%' characters in their names
C: B01 CREATE "star*mailbox"
S: B01 OK \[MAILBOXID \(.+\)\] CREATE completed.
C: B011 CREATE "starmailbox"
S: B011 OK \[MAILBOXID \(.+\)\] CREATE completed.
C: B02 CREATE "percent%mailbox"
S: B02 OK \[MAILBOXID \(.+\)\] CREATE completed.
C: B021 CREATE "percentmailbox"
S: B021 OK \[MAILBOXID \(.+\)\] CREATE completed.
C: B03 LIST "" "star*mailbox"
SUB {
S: \* LIST \(\\HasNoChildren\) \"\.\" \"star\*mailbox\"
S: \* LIST \(\\HasNoChildren\) \"\.\" \"starmailbox\"
}
S: B03 OK LIST completed.
C: B04 LIST "" "percent%mailbox"
SUB {
S: \* LIST \(\\HasNoChildren\) \"\.\" \"percent%mailbox\"
S: \* LIST \(\\HasNoChildren\) \"\.\" \"percentmailbox\"
}
S: B04 OK LIST completed.
C: B05 LIST "" %
SUB {
S: \* LIST \(\\HasNoChildren\) \"\.\" \"star\*mailbox\"
S: \* LIST \(\\HasNoChildren\) \"\.\" \"starmailbox\"
S: \* LIST \(\\HasNoChildren\) \"\.\" \"percent%mailbox\"
S: \* LIST \(\\HasNoChildren\) \"\.\" \"percentmailbox\"
S: \* LIST \(\\HasNoChildren\) \"\.\" \"INBOX\"
}
S: B05 OK LIST completed.
C: B06 LIST "" *
SUB {
S: \* LIST \(\\HasNoChildren\) \"\.\" \"star\*mailbox\"
S: \* LIST \(\\HasNoChildren\) \"\.\" \"starmailbox\"
S: \* LIST \(\\HasNoChildren\) \"\.\" \"percent%mailbox\"
S: \* LIST \(\\HasNoChildren\) \"\.\" \"percentmailbox\"
S: \* LIST \(\\HasNoChildren\) \"\.\" \"INBOX\"
}
S: B06 OK LIST completed.
C: B07 LIST "" "star*mail%"
SUB {
S: \* LIST \(\\HasNoChildren\) \"\.\" \"star\*mailbox\"
S: \* LIST \(\\HasNoChildren\) \"\.\" \"starmailbox\"
}
S: B07 OK LIST completed.
=====================================================
== File: mpt/impl/imap-mailbox/core/src/main/resources/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<root level="WARN">
<appender-ref ref="CONSOLE" />
</root>
<logger name="org.apache.james" level="WARN">
<appender-ref ref="CONSOLE" />
</logger>
</configuration>
=====================================================
== File: mpt/impl/imap-mailbox/cassandra/src/test/resources/cassandra-driver.conf
=====================================================
datastax-java-driver {
basic.request {
timeout = 5 seconds
}
}
=====================================================
== File: upgrade-instructions.md
=====================================================
# Upgrade instructions
This document covers every changes an Ops needs to be aware of when running James.
The following procedures are to take as it, and the Apache Software Foundation, nor its contributors, can not be
responsible for any damages generated by following the below procedures.
Before performing these operations, you should ensure to have the skills to conduct the operations, and you should read other
software documentation. Do not follow this guide blindly!
## Unreleased
No specific operation to conduct from a 3.9.0 version.
## 3.9.0 version (tagged but not yet released)
Note: this section is in progress. It will be updated during all the development process until the release.
No changes yet.
Changes to apply between 3.8.x and 3.9.0 will be reported here.
Change list:
- [JAMES-4046 Refactor and update apache-james-mailbox-lucene](#james-4046-refactor-and-update-apache-james-mailbox-lucene)
- [Imap Packages](#imap-packages)
- [Jmap uploads](#jmap-uploads)
- [Mutualize quota table](#mutualize-quota-table)
- [Drop Legacy Cassandra migrations](#drop-legacy-cassandra-migrations)
- [Improve CassandraThreadIdGuessingAlgorithm](#improve-cassandrathreadidguessingalgorithm)
- [Set up TTL on the mailbox_change and email_change tables](#set-up-ttl-on-the-mailboxchange-and-emailchange-tables)
- [Change compaction strategy of blob_cache table](#change-compaction-strategy-of-blobcache-table)
- [RRT forwards now rewrite senders](#rrt-forwards-now-rewrite-senders)
- [Increase RabbitMQ consumer timeout on the task queue](#increase-rabbitmq-consumer-timeout-on-the-task-queue)
- [JMX authentication for Spring](#jmx-authentication-for-spring)
- [Java 21](#java-21)
- [javax -> jakarta](#javax---jakarta)
- [Make all queues on RabbitMQ quorum queue when `quorum.queues.enable=true`](#make-all-queues-on-rabbitmq-quorum-queue-when-quorumqueuesenabletrue)
- [Migrate RabbitMQ classic queues to version 2](#migrate-rabbitmq-classic-queues-to-version-2)
- [JAMES-3946 White list removals](#james-3946-white-list-removals)
- [JAMES-4052 Details in quota index](#james-4052-details-in-quota-index)
- [JAMES-1409 Change JPARecipientRewriteTable to store separate record per target address](#james-1409-change-jparecipientrewritetable-to-store-separate-record-per-target-address)
- [JAMES-4118 Cleanup message previews](#james-4118-cleanup-message-previews)
- [JAMES-4128 Breaking Mailet API changes](#james-4128-breaking-mailet-api-changes)
### JAMES-4128 Breaking Mailet API changes
Date: 02/04/2025
JIRA: https://issues.apache.org/jira/browse/JAMES-4126
The Mailet API has been slightly reworked to improve mailet encapsulation and make implementation easier.
=====================================================
== File: code-coverage-report/pom.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.james</groupId>
<artifactId>james-project</artifactId>
<version>3.10.0-SNAPSHOT</version>
</parent>
<artifactId>code-coverage-report</artifactId>
<name>Apache James :: Code Coverage Report</name>
<description>Generate code coverage report for Apache James</description>
<packaging>pom</packaging>
<dependencies>
<!-- Parent dependencies are in pom package type, can not directly declare as jar-->
<!-- 1. apache-james-mailbox-->
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-api</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-cassandra</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-deleted-messages-vault</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-deleted-messages-vault-cassandra</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-event-json</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-jpa</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-lucene</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-memory</artifactId>
</dependency>
<dependency>
=====================================================
== File: CHANGELOG.md
=====================================================
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
## [unreleased]
## [Unreleased 3.9.x]
No changes yet.
## [3.9.0] - 2025-xx-xx
### Important changes
- Upgrade javax -> jakarta. See releated upgrade instructions.
- Upgrade Java 11 -> 21. See related upgrade instructions.
- API change: CassandraModule and all associated Cassandra*Module were renamed to CassandraDataDefinition and Cassandra*DataDefinition respectively.
- API change : Mailet API has been cleaned up and no longer exposes the mailet config, exposing only the mailet's name instead.
- API change : GenericMailet can have its config bound by constructor and this is the preferred way to initialize your mailets. `init` is still called but will eventually be removed in a later release.
- JAMES-2586: A performant Postgres based implementation of Apache James. Usable in a standalone context but can scale as well with components like RabbitMQ, OpenSearch and S3.
### Removals
- JAMES-3946 WhiteList manager removals (#2299)
This had been repleaced by the Guice DropList extension.
- JAMES-4025 Drop Jmap draft
Please use RFC-8621 implementation rather than this outdated draft.
- JAMES-4065 drop habeas warrant mark mailet
- [DROP] Remove Linshare third party connector (#2613
### Security
- [FIX] JMX password auto-detection
- [FIX] Enforce CRLF as part of SMTP DATA transaction (#1876)
- [FIX] Set up JMX auth for Spring
- [FIX] Set up JMX auth filter for Guice
- Bump org.apache.commons:commons-configuration2 from 2.9.0 to 2.10.1 (#2147)
- [Fix] BouncyCastle 1.70 -> 1.77 (fixes multiple minor CVEs)
- [FIX] SMTP stack should recompute relaying rights upon PROXY message (#1933)
- JAMES-4032 DKIM SMTP hook (#2264)
- JAMES-4034 SMTP submission: validate FROM header (#2246)
- JAMES-4041 Fix OOM upon IMAP COPY (#2265)
- [UPGRADE] Logback 1.5.12 -> 1.5.15 (#2581)
- Bump commons-io to 2.17.0
- [S3 Metrics] Allow to customize S3 metrics prefix
=====================================================
== File: third-party/rspamd/docker-compose-rspamd-with-redis-sentinel.yml
=====================================================
version: '3'
services:
james:
depends_on:
rspamd:
condition: service_healthy
image: apache/james:memory-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- ./target/apache-james-rspamd-jar-with-dependencies.jar:/root/extensions-jars/james-server-rspamd.jar
- ./sample-configuration/extensions.properties:/root/conf/extensions.properties
- ./sample-configuration/mailetcontainer_memory.xml:/root/conf/mailetcontainer.xml
- ./sample-configuration/listeners.xml:/root/conf/listeners.xml
- ./sample-configuration/rspamd.properties:/root/conf/rspamd.properties
- ./sample-configuration/webadmin.properties:/root/conf/webadmin.properties
- ./sample-configuration/healthcheck.properties:/root/conf/healthcheck.properties
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
redis-master:
image: redis:8.0.2
container_name: redis-master
command: sh /usr/local/etc/redis/docker-entrypoint.sh
volumes:
- ./sample-configuration/redis/master/redis.conf.template:/usr/local/etc/redis/redis.conf.template
- ./sample-configuration/redis/master/docker-entrypoint-master.sh:/usr/local/etc/redis/docker-entrypoint.sh
healthcheck:
test: ["CMD", "redis-cli", "ping", "|", "grep", "PONG"]
interval: 10s
timeout: 10s
retries: 5
redis-replica-1:
image: redis:8.0.2
container_name: redis-replica-1
depends_on:
redis-master:
condition: service_healthy
=====================================================
== File: third-party/rspamd/docker-compose.yml
=====================================================
version: '3'
services:
james:
depends_on:
rspamd:
condition: service_healthy
image: apache/james:memory-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- $PWD/target/apache-james-rspamd-jar-with-dependencies.jar:/root/extensions-jars/james-server-rspamd.jar
- $PWD/sample-configuration/extensions.properties:/root/conf/extensions.properties
- $PWD/sample-configuration/mailetcontainer_memory.xml:/root/conf/mailetcontainer.xml
- $PWD/sample-configuration/listeners.xml:/root/conf/listeners.xml
- $PWD/sample-configuration/rspamd.properties:/root/conf/rspamd.properties
- $PWD/sample-configuration/webadmin.properties:/root/conf/webadmin.properties
- $PWD/sample-configuration/healthcheck.properties:/root/conf/healthcheck.properties
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
redis:
image: redis:8.0.2
command:
- "--loglevel"
- "debug"
clamav:
image: clamav/clamav:1.4
rspamd:
depends_on:
clamav:
condition: service_healthy
redis:
condition: service_started
container_name: rspamd
image: rspamd/rspamd:3.12.0
environment:
- RSPAMD_PASSWORD=admin
=====================================================
== File: third-party/rspamd/docker-compose-rspamd-with-kvrocks-standalone.yml
=====================================================
version: '3'
services:
james:
depends_on:
rspamd:
condition: service_healthy
image: apache/james:memory-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- ./target/apache-james-rspamd-jar-with-dependencies.jar:/root/extensions-jars/james-server-rspamd.jar
- ./sample-configuration/extensions.properties:/root/conf/extensions.properties
- ./sample-configuration/mailetcontainer_memory.xml:/root/conf/mailetcontainer.xml
- ./sample-configuration/listeners.xml:/root/conf/listeners.xml
- ./sample-configuration/rspamd.properties:/root/conf/rspamd.properties
- ./sample-configuration/webadmin.properties:/root/conf/webadmin.properties
- ./sample-configuration/healthcheck.properties:/root/conf/healthcheck.properties
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
kvrocks:
image: apache/kvrocks:2.12.1
healthcheck:
test: [ "CMD", "redis-cli", "ping", "|", "grep", "PONG" ]
interval: 10s
timeout: 10s
retries: 5
volumes:
- ./sample-configuration/kvrocks/standalone/kvrocks.conf:/var/lib/kvrocks/kvrocks.conf
- kvrocks_data:/var/lib/kvrocks
networks:
default:
aliases:
- redis
clamav:
image: clamav/clamav:1.4
rspamd:
=====================================================
== File: third-party/rspamd/src/test/resources/rspamd-config/actions.conf
=====================================================
reject = 13.5; # Reject when reaching this score
add_header = 6; # Add header when reaching this score
greylist = 4; # Apply greylisting when reaching this score (will emit `soft reject action`)
=====================================================
== File: third-party/rspamd/src/test/resources/rspamd-config/worker-controller.inc
=====================================================
password = "{= env.PASSWORD =}"
=====================================================
== File: third-party/rspamd/src/test/resources/rspamd-config/antivirus.conf
=====================================================
clamav {
# Scan mime_parts seperately - otherwise the complete mail will be transfered to AV Scanner
#attachments_only = true; # Before 1.8.1
scan_mime_parts = true; # After 1.8.1
# Scanning Text is suitable for some av scanner databases (e.g. Sanesecurity)
scan_text_mime = true; # 1.8.1 +
scan_image_mime = true; # 1.8.1 +
# If set force this action if any virus is found (default unset: no action is forced)
# action = "reject";
message = '${SCANNER}: virus found: "${VIRUS}"';
# If set true, log message is emitted for clean messages
log_clean = false;
# symbol to add (add it to metric if you want non-zero weight)
symbol = CLAM_VIRUS;
# type of scanner: "clamav", "fprot", "sophos" or "savapi"
type = clamav;
servers = "{= env.CLAMAV_SERVERS =}";
patterns {
JUST_EICAR = '^Eicar-Test-Signature$';
}
}
=====================================================
== File: third-party/rspamd/src/test/resources/rspamd-config/redis.conf
=====================================================
servers = "{= env.REDIS_SERVERS =}";
=====================================================
== File: third-party/rspamd/src/test/resources/rspamd-config/statistic.conf
=====================================================
classifier "bayes" {
tokenizer {
name = "osb";
}
cache {
}
new_schema = true; # Always use new schema
store_tokens = false; # Redefine if storing of tokens is desired
signatures = false; # Store learn signatures
per_user = true; # Enable per user classifier
users_enabled = true;
min_tokens = 11;
backend = "redis";
min_learns = 2;
statfile {
symbol = "BAYES_HAM";
spam = false;
}
statfile {
symbol = "BAYES_SPAM";
spam = true;
}
learn_condition = 'return require("lua_bayes_learn").can_learn';
# Autolearn sample
# autolearn {
# spam_threshold = 6.0; # When to learn spam (score >= threshold)
# ham_threshold = -0.5; # When to learn ham (score <= threshold)
# check_balance = true; # Check spam and ham balance
# min_balance = 0.9; # Keep diff for spam/ham learns for at least this value
#}
.include(try=true; priority=1) "$LOCAL_CONFDIR/local.d/classifier-bayes.conf"
.include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/classifier-bayes.conf"
}
=====================================================
== File: third-party/rspamd/src/test/resources/mail/ham/ham1.eml
=====================================================
From Steve_Burt@cursor-system.com Thu Aug 22 12:46:39 2002
Return-Path: <Steve_Burt@cursor-system.com>
Delivered-To: zzzz@localhost.netnoteinc.com
Received: from localhost (localhost [127.0.0.1])
by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BE12E43C34
for <zzzz@localhost>; Thu, 22 Aug 2002 07:46:38 -0400 (EDT)
Received: from phobos [127.0.0.1]
by localhost with IMAP (fetchmail-5.9.0)
for zzzz@localhost (single-drop); Thu, 22 Aug 2002 12:46:38 +0100 (IST)
Received: from n20.grp.scd.yahoo.com (n20.grp.scd.yahoo.com
[66.218.66.76]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id
g7MBkTZ05087 for <zzzz@spamassassin.taint.org>; Thu, 22 Aug 2002 12:46:29 +0100
X-Egroups-Return: sentto-2242572-52726-1030016790-zzzz=spamassassin.taint.org@returns.groups.yahoo.com
Received: from [66.218.67.196] by n20.grp.scd.yahoo.com with NNFMP;
22 Aug 2002 11:46:30 -0000
X-Sender: steve.burt@cursor-system.com
X-Apparently-To: zzzzteana@yahoogroups.com
Received: (EGP: mail-8_1_0_1); 22 Aug 2002 11:46:29 -0000
Received: (qmail 11764 invoked from network); 22 Aug 2002 11:46:29 -0000
Received: from unknown (66.218.66.217) by m3.grp.scd.yahoo.com with QMQP;
22 Aug 2002 11:46:29 -0000
Received: from unknown (HELO mailgateway.cursor-system.com) (62.189.7.27)
by mta2.grp.scd.yahoo.com with SMTP; 22 Aug 2002 11:46:29 -0000
Received: from exchange1.cps.local (unverified) by
mailgateway.cursor-system.com (Content Technologies SMTPRS 4.2.10) with
ESMTP id <T5cde81f695ac1d100407d@mailgateway.cursor-system.com> for
<forteana@yahoogroups.com>; Thu, 22 Aug 2002 13:14:10 +0100
Received: by exchange1.cps.local with Internet Mail Service (5.5.2653.19)
id <PXX6AT23>; Thu, 22 Aug 2002 12:46:27 +0100
Message-Id: <5EC2AD6D2314D14FB64BDA287D25D9EF12B4F6@exchange1.cps.local>
To: "'zzzzteana@yahoogroups.com'" <zzzzteana@yahoogroups.com>
X-Mailer: Internet Mail Service (5.5.2653.19)
X-Egroups-From: Steve Burt <steve.burt@cursor-system.com>
From: Steve Burt <Steve_Burt@cursor-system.com>
X-Yahoo-Profile: pyruse
MIME-Version: 1.0
Mailing-List: list zzzzteana@yahoogroups.com; contact
forteana-owner@yahoogroups.com
Delivered-To: mailing list zzzzteana@yahoogroups.com
Precedence: bulk
List-Unsubscribe: <mailto:zzzzteana-unsubscribe@yahoogroups.com>
Date: Thu, 22 Aug 2002 12:46:18 +0100
Subject: [zzzzteana] RE: Alexander
Reply-To: zzzzteana@yahoogroups.com
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Martin A posted:
Tassos Papadopoulos, the Greek sculptor behind the plan, judged that the
limestone of Mount Kerdylio, 70 miles east of Salonika and not far from the
=====================================================
== File: third-party/rspamd/src/test/resources/mail/attachment/inlineVirusTextAttachment.eml
=====================================================
To: me@linagora.com
From: Benoit Tellier <me@linagora.com>
Subject: Mail with text attachment
Message-ID: <befd8cab-9c9c-5537-4e77-937f32326087@any.com>
Date: Thu, 13 Oct 2016 10:26:20 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------4FD2D252DB453546C22C25B2"
This is a multi-part message in MIME format.
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
I'm the body!
--------------4FD2D252DB453546C22C25B2
Content-Disposition: inline
Content-Type: text/plain; charset=UTF-8;
name="attachment.txt"
Content-ID: <id>
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
--------------4FD2D252DB453546C22C25B2--
=====================================================
== File: third-party/rspamd/src/test/resources/mail/attachment/inlineNonVirusTextAttachment.eml
=====================================================
To: me@linagora.com
From: Benoit Tellier <me@linagora.com>
Subject: Mail with text attachment
Message-ID: <befd8cab-9c9c-5537-4e77-937f32326087@any.com>
Date: Thu, 13 Oct 2016 10:26:20 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------4FD2D252DB453546C22C25B2"
This is a multi-part message in MIME format.
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
I'm the body!
--------------4FD2D252DB453546C22C25B2
Content-Disposition: inline
Content-Type: text/plain; charset=UTF-8;
name="attachment.txt"
Content-ID: <id>
Non virus text
--------------4FD2D252DB453546C22C25B2--
=====================================================
== File: third-party/rspamd/src/test/resources/mail/spam/phishing.eml
=====================================================
From: support@yourbank.com
To: victim@example.com
Subject: Urgent: Verify Your Account
Date: Thu, 04 Jul 2024 10:00:00 +0000
Message-ID: <0000000000000000000@yourbank.com>
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
<html>
<body>
<p>Dear Valued Customer,</p>
<p>We regret to inform you that your account has been temporarily suspended due to suspicious activity. To restore your account access, please verify your identity by clicking on the link below:</p>
<p><a href="http://evil.yourbankk.com">yourbank.com</a></p>
<p>Failure to verify your account within 24 hours will result in permanent suspension. We apologize for any inconvenience this may cause and appreciate your prompt attention to this matter.</p>
<p>Thank you for your cooperation.</p>
<p>Sincerely,<br>Customer Support Team<br>Your Bank</p>
</body>
</html>
=====================================================
== File: third-party/rspamd/src/test/resources/mail/spam/spam8.eml
=====================================================
From ormlh@imail.ru Sun Jul 15 04:56:31 2001
Return-Path: <ormlh@imail.ru>
Delivered-To: yyyy@netnoteinc.com
Received: from cccp.co.kr (unknown [211.218.149.105]) by
mail.netnoteinc.com (Postfix) with SMTP id 789D51140BA for
<jm@netnoteinc.com>; Sun, 15 Jul 2001 03:56:28 +0000 (Eire)
Received: from imail.ru [210.14.5.95] by cccp.co.kr running [nMail 1.04
(Windows NT/2000) SMTP Server]; Wed, 11 Jul 2001 02:41:35 +0900
Message-Id: <00000e0836ec$00006b26$0000082f@imail.ru>
To: <67@163.net>
From: ormlh@imail.ru
Subject: FW:
Date: Fri, 02 Jan 1998 04:30:44 -0400
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
X-Priority: 3
X-Msmail-Priority: Normal
X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0)
<HTML>
<BODY bgColor=3D#C0C0C0>
<FONT face=3D"Arial">
<FONT size=3D4>
<FONT color=3D"#800040"> Thank you for your interest!</FONT>
<FONT size=3D3>
<FONT color=3D"#800040"> </FONT>
<FONT color=3D"#000000"> <BR>
<BR>
Judgment Courses offers an extensive Audio training<BR>
course in </FONT>
<FONT color=3D"#0000A0"> "How to Collect Money Judgments"</FONT>
<FONT color=3D"#000000"> . </FONT>
<FONT size=3D2>
<FONT color=3D"#000000"> S6</FONT>
<FONT size=3D3>
<FONT color=3D"#000000"> <BR>
<BR>
If you are like many people, you are not even sure what a<BR>
Money Judgment is and </FONT>
<FONT color=3D"#0000A0"> why processing Money Judgments<BR>
can earn you very substantial income</FONT>
<FONT color=3D"#000000"> .<BR>
<BR>
If you ever sue a company or a person and you win then you<BR>
will have a Money Judgment against them.<BR>
<BR>
You are happy you won but you will soon find out the<BR>
shocking fact: "Its now up to you to collect on the<BR>
=====================================================
== File: third-party/rspamd/README.md
=====================================================
# James' extensions for Rspamd
This module is for developing and delivering extensions to James for the [Rspamd](https://rspamd.com/) (the spam filtering system)
and [ClamAV](https://www.clamav.net/) (the antivirus engine).
## How to run
- The Rspamd extension requires an extra configuration file `rspamd.properties` to configure Rspamd connection
Configuration parameters:
- `rSpamdUrl` : URL defining the Rspamd's server. Eg: http://rspamd:11334
- `rSpamdPassword` : Password for pass authentication when request to Rspamd's server. Eg: admin
- `rspamdTimeout` : Timeout for HTTP requests called to Rspamd. Default to 15 seconds.
- `perUserBayes` : Use per-user Bayes for mail scanning/feedback. Default to false.
- Declare the `extensions.properties` for this module.
```
guice.extension.module=org.apache.james.rspamd.module.RspamdModule
guice.extension.task=org.apache.james.rspamd.module.RspamdTaskExtensionModule
```
- Declare the Rspamd mailbox listeners in `listeners.xml`. Eg:
```
<listener>
<class>org.apache.james.rspamd.RspamdListener</class>
</listener>
```
This listener can report mails to per-user Bayes by configure `perUserBayes` in `rspamd.properties`.
- Declare the Rspamd mailet for custom mail processing.
You can specify the `virusProcessor` if you want to enable virus scanning for mail. Upon configurable `virusProcessor`
you can specify how James process mail virus. We provide a sample Rspamd mailet and `virusProcessor` configuration:
You can specify the `rejectSpamProcessor`. Emails marked as `rejected` by Rspamd will be redirected to this
processor. This corresponds to emails with the highest spam score, thus delivering them to users as marked as spam
might not even be desirable.
The `rewriteSubject` option allows to rewritte subjects when asked by Rspamd.
This mailet can scan mails against per-user Bayes by configure `perUserBayes` in `rspamd.properties`. This is achieved
through the use of Rspamd `Deliver-To` HTTP header. If true, Rspamd will be called for each recipient of the mail, which comes at a performance cost. If true, subjects are not rewritten.
If true `virusProcessor` and `rejectSpamProcessor` are honnered per user, at the cost of email copies. Default to false.
```xml
<processor state="local-delivery" enableJmx="true">
<mailet match="All" class="org.apache.james.rspamd.RspamdScanner">
<rewriteSubject>true</rewriteSubject>
=====================================================
== File: third-party/rspamd/sample-configuration/extensions.properties
=====================================================
guice.extension.module=org.apache.james.rspamd.module.RspamdModule
guice.extension.task=org.apache.james.rspamd.module.RspamdTaskExtensionModule
=====================================================
== File: third-party/rspamd/sample-configuration/kvrocks/standalone/kvrocks.conf
=====================================================
log-level info
port 6379
=====================================================
== File: third-party/rspamd/sample-configuration/kvrocks/sentinel/master-node/kvrocks.conf
=====================================================
log-level info
requirepass secret1
masterauth secret1
port 6379
# Fix Rspamd error: `lua_bayes_redis.lua:145: cannot get bayes statistics for BAYES_HAM: READONLY You can't write against a read only slave.`, despite Rspamd acked correctly the master/replicas Kvrock.
# Rationale: Rspamd relies on read-only Lua script to get BAYES statistics and execute the script against the Kvrocks replicas.
# Howver, Kvrocks replica stricly prohibits EVALSHA for even read-only Lua script - which is not the case with Redis replicas.
# This allows Rspamd to execute EVALSHA read-only Lua script on Kvrocks replicas to get the BAYES statistics.
# Cautious: This would allow Kvrocks replicas to be writable, therefore we need to carefully configure Rspamd or whatever app to use the correct master/replicas Kvrocks endpoints.
# There is also a small time window upon Redis Sentinel failover that Rspamd could write to the old master (new replica). We could very likely accept that for spam learning data.
slave-read-only no
=====================================================
== File: third-party/rspamd/sample-configuration/kvrocks/sentinel/sentinel-node/docker-entrypoint-sentinel.sh
=====================================================
#!/bin/sh
cp /usr/local/etc/redis/sentinel.conf.template /usr/local/etc/redis/sentinel.conf
chmod 777 /usr/local/etc/redis/sentinel.conf
redis-sentinel /usr/local/etc/redis/sentinel.conf
=====================================================
== File: third-party/rspamd/sample-configuration/kvrocks/sentinel/sentinel-node/sentinel.conf.template
=====================================================
port 26379
loglevel debug
sentinel monitor mymaster kvrocks-master 6379 2
sentinel auth-pass mymaster secret1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
sentinel resolve-hostnames yes
=====================================================
== File: third-party/rspamd/sample-configuration/kvrocks/sentinel/replica-node/kvrocks.conf
=====================================================
log-level info
slaveof kvrocks-master 6379
masterauth secret1
requirepass secret1
port 6379
# Fix Rspamd error: `lua_bayes_redis.lua:145: cannot get bayes statistics for BAYES_HAM: READONLY You can't write against a read only slave.`, despite Rspamd acked correctly the master/replicas Kvrock.
# Rationale: Rspamd relies on read-only Lua script to get BAYES statistics and execute the script against the Kvrocks replicas.
# Howver, Kvrocks replica stricly prohibits EVALSHA for even read-only Lua script - which is not the case with Redis replicas.
# This allows Rspamd to execute EVALSHA read-only Lua script on Kvrocks replicas to get the BAYES statistics.
# Cautious: This would allow Kvrocks replicas to be writable, therefore we need to carefully configure Rspamd or whatever app to use the correct master/replicas Kvrocks endpoints.
# There is also a small time window upon Redis Sentinel failover that Rspamd could write to the old master (new replica). We could very likely accept that for spam learning data.
# Only needed if Rspamd < 3.12.0
# slave-read-only no
=====================================================
== File: third-party/rspamd/sample-configuration/rspamd-redis-sentinel.conf
=====================================================
servers = "redis-master:6379,redis-replica-1:6379,redis-replica-2:6379";
sentinels = "sentinel-1:26379,sentinel-2:26379,sentinel-3:26379";
password = "secret1";
sentinel_watch_time = 1min; # How often Rspam will query sentinels for masters and slaves
sentinel_masters_pattern = "^mymaster.*$"; # Defines masters pattern to match in Lua syntax (no pattern means all masters)
timeout = 5s;
=====================================================
== File: third-party/rspamd/sample-configuration/redis/replica/redis.conf.template
=====================================================
loglevel debug
appendonly yes
replicaof redis-master 6379
masterauth secret1
requirepass secret1
=====================================================
== File: third-party/rspamd/sample-configuration/redis/replica/docker-entrypoint-replica.sh
=====================================================
#!/bin/sh
cp /usr/local/etc/redis/redis.conf.template /usr/local/etc/redis/redis.conf
chmod 777 /usr/local/etc/redis/redis.conf
redis-server /usr/local/etc/redis/redis.conf
=====================================================
== File: third-party/rspamd/sample-configuration/redis/sentinel/docker-entrypoint-sentinel.sh
=====================================================
#!/bin/sh
cp /usr/local/etc/redis/sentinel.conf.template /usr/local/etc/redis/sentinel.conf
chmod 777 /usr/local/etc/redis/sentinel.conf
redis-sentinel /usr/local/etc/redis/sentinel.conf
=====================================================
== File: third-party/rspamd/sample-configuration/redis/sentinel/sentinel.conf.template
=====================================================
port 26379
loglevel debug
sentinel monitor mymaster redis-master 6379 2
sentinel auth-pass mymaster secret1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
sentinel resolve-hostnames yes
=====================================================
== File: third-party/rspamd/sample-configuration/redis/master/redis.conf.template
=====================================================
loglevel debug
appendonly yes
requirepass secret1
masterauth secret1
=====================================================
== File: third-party/rspamd/sample-configuration/redis/master/docker-entrypoint-master.sh
=====================================================
#!/bin/sh
cp /usr/local/etc/redis/redis.conf.template /usr/local/etc/redis/redis.conf
chmod 777 /usr/local/etc/redis/redis.conf
redis-server /usr/local/etc/redis/redis.conf
=====================================================
== File: third-party/rspamd/sample-configuration/worker-controller.inc
=====================================================
password = "{= env.PASSWORD =}"
=====================================================
== File: third-party/rspamd/sample-configuration/antivirus.conf
=====================================================
clamav {
# Scan mime_parts seperately - otherwise the complete mail will be transfered to AV Scanner
#attachments_only = true; # Before 1.8.1
scan_mime_parts = true; # After 1.8.1
# Scanning Text is suitable for some av scanner databases (e.g. Sanesecurity)
scan_text_mime = true; # 1.8.1 +
scan_image_mime = true; # 1.8.1 +
# If set force this action if any virus is found (default unset: no action is forced)
# action = "reject";
message = '${SCANNER}: virus found: "${VIRUS}"';
# If set true, log message is emitted for clean messages
log_clean = false;
# symbol to add (add it to metric if you want non-zero weight)
symbol = CLAM_VIRUS;
# type of scanner: "clamav", "fprot", "sophos" or "savapi"
type = clamav;
servers = "clamav:3310";
patterns {
JUST_EICAR = '^Eicar-Test-Signature$';
}
}
=====================================================
== File: third-party/rspamd/sample-configuration/classifier-bayes.conf
=====================================================
per_user = true; # Enable per user classifier.
min_learns = 20; # Minimum learn to count for both spam and ham classes to perform classification.
=====================================================
== File: third-party/rspamd/sample-configuration/redis.conf
=====================================================
servers = "redis:6379";
=====================================================
== File: third-party/rspamd/sample-configuration/redis-shake/shake.toml
=====================================================
# For the full configuration, visit https://github.com/tair-opensource/RedisShake/blob/v4/shake.toml
[scan_reader]
address = "${SHAKE_SRC_ADDRESS}" # Source Redis IP
username = "" # keep empty if not using ACL
password = "" # keep empty if no authentication is required
scan = true
count = 10000 # number of keys to scan per iteration, should use a suitable batch size
[redis_writer]
address = "${SHAKE_DST_ADDRESS}" # Target Kvrocks IP
username = "" # keep empty if not using ACL
password = "" # keep empty if no authentication is required
=====================================================
== File: third-party/rspamd/sample-configuration/statistic.conf
=====================================================
classifier "bayes" {
tokenizer {
name = "osb";
}
cache {
}
new_schema = true; # Always use new schema
store_tokens = false; # Redefine if storing of tokens is desired
signatures = false; # Store learn signatures
per_user = true; # Enable per user classifier
users_enabled = true;
min_tokens = 11;
backend = "redis";
min_learns = 50; // Should not be bias by too small learning set
statfile {
symbol = "BAYES_HAM";
spam = false;
}
statfile {
symbol = "BAYES_SPAM";
spam = true;
}
learn_condition = 'return require("lua_bayes_learn").can_learn';
# Autolearn sample
# autolearn {
# spam_threshold = 6.0; # When to learn spam (score >= threshold)
# ham_threshold = -0.5; # When to learn ham (score <= threshold)
# check_balance = true; # Check spam and ham balance
# min_balance = 0.9; # Keep diff for spam/ham learns for at least this value
#}
.include(try=true; priority=1) "$LOCAL_CONFDIR/local.d/classifier-bayes.conf"
.include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/classifier-bayes.conf"
}
=====================================================
== File: third-party/rspamd/sample-configuration/rspamd-kvrocks-sentinel.conf
=====================================================
servers = "kvrocks-master:6379,kvrocks-replica-1:6379,kvrocks-replica-2:6379";
sentinels = "sentinel-1:26379,sentinel-2:26379,sentinel-3:26379";
password = "secret1";
sentinel_watch_time = 10s; # How often Rspam will query sentinels for masters and slaves
sentinel_masters_pattern = "^mymaster.*$"; # Defines masters pattern to match in Lua syntax (no pattern means all masters)
timeout = 5s;
redis_version = 7; # Allow Rspamd to execute the EVALSHA_RO command against Kvrocks replicas. cf https://github.com/rspamd/rspamd/pull/5419
=====================================================
== File: third-party/rspamd/sample-configuration/rspamd.properties
=====================================================
rspamdUrl=http://rspamd:11334
rspamdPassword=admin
# Whether to scan/learn mails using per-user Bayes. Default to false.
perUserBayes=false
=====================================================
== File: third-party/rspamd/docker-compose-distributed.yml
=====================================================
version: '3'
services:
james:
depends_on:
cassandra:
condition: service_healthy
opensearch:
condition: service_started
tika:
condition: service_started
rabbitmq:
condition: service_started
s3:
condition: service_started
rspamd:
condition: service_healthy
image: apache/james:distributed-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- $PWD/target/apache-james-rspamd-jar-with-dependencies.jar:/root/extensions-jars/james-server-rspamd.jar
- $PWD/sample-configuration/extensions.properties:/root/conf/extensions.properties
- $PWD/sample-configuration/mailetcontainer_distributed.xml:/root/conf/mailetcontainer.xml
- $PWD/sample-configuration/listeners.xml:/root/conf/listeners.xml
- $PWD/sample-configuration/rspamd.properties:/root/conf/rspamd.properties
- $PWD/sample-configuration/webadmin.properties:/root/conf/webadmin.properties
- $PWD/sample-configuration/healthcheck.properties:/root/conf/healthcheck.properties
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
networks:
- james
opensearch:
image: opensearchproject/opensearch:2.19.2
environment:
- discovery.type=single-node
- DISABLE_INSTALL_DEMO_CONFIG=true
- DISABLE_SECURITY_PLUGIN=true
networks:
=====================================================
== File: third-party/rspamd/docker-compose-rspamd-with-kvrocks-sentinel.yml
=====================================================
version: '3'
services:
james:
depends_on:
rspamd:
condition: service_healthy
image: apache/james:memory-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- ./target/apache-james-rspamd-jar-with-dependencies.jar:/root/extensions-jars/james-server-rspamd.jar
- ./sample-configuration/extensions.properties:/root/conf/extensions.properties
- ./sample-configuration/mailetcontainer_memory.xml:/root/conf/mailetcontainer.xml
- ./sample-configuration/listeners.xml:/root/conf/listeners.xml
- ./sample-configuration/rspamd.properties:/root/conf/rspamd.properties
- ./sample-configuration/webadmin.properties:/root/conf/webadmin.properties
- ./sample-configuration/healthcheck.properties:/root/conf/healthcheck.properties
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
kvrocks-master:
image: apache/kvrocks:2.12.1
container_name: kvrocks-master
volumes:
- ./sample-configuration/kvrocks/sentinel/master-node/kvrocks.conf:/var/lib/kvrocks/kvrocks.conf
- kvrocks_master_data:/var/lib/kvrocks
healthcheck:
test: [ "CMD", "redis-cli", "ping", "|", "grep", "PONG" ]
interval: 10s
timeout: 10s
retries: 5
kvrocks-replica-1:
image: apache/kvrocks:2.12.1
container_name: kvrocks-replica-1
depends_on:
kvrocks-master:
condition: service_healthy
healthcheck:
=====================================================
== File: third-party/elasticsearch/docker-compose.yml
=====================================================
version: '3'
services:
james:
depends_on:
- elasticsearch
image: apache/james:memory-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- ./target/apache-james-elasticsearch-jar-with-dependencies.jar:/root/extensions-jars/apache-james-elasticsearch.jar
- ./conf/extensions.properties:/root/conf/extensions.properties
- ./conf/elasticsearch.properties:/root/conf/elasticsearch.properties
elasticsearch:
image: elasticsearch:6.4.0
environment:
- discovery.type=single-node
=====================================================
== File: third-party/elasticsearch/conf/extensions.properties
=====================================================
guice.extension.module=org.apache.james.metrics.es.v7.ESMetricReporterModule
guice.extension.startable=org.apache.james.metrics.es.v7.ESMetricReporter
=====================================================
== File: third-party/elasticsearch/conf/elasticsearch.properties
=====================================================
# Reports for metrics into ElasticSearch
# Defaults to elasticsearch.masterHost : on which server to publish metrics
# WARNING: Supported ElasticSearch versions for metrics differs from the James one. Only ElasticSearch version 2 to 6 are supported. This requires a distinct ElasticSearch isntalation for metrics.
# This component is furthermore unmaintained an use is discouraged.#elasticsearch.http.host=elasticsearch
elasticsearch.masterHost=elasticsearch
elasticsearch.http.port=9200
elasticsearch.metrics.reports.enabled=true
elasticsearch.metrics.reports.period=30
elasticsearch.metrics.reports.index=james-metrics
=====================================================
== File: third-party/elasticsearch/README.md
=====================================================
# ElasticSearch metric extension for Apache James
Exports Apache James metrics directly to ElasticSearch that can later be queried
using [Grafana](https://grafana.com/).
**WARNING**: A separate ElasticSearch server is required, as an ElasticSearch 6.3 is needed, which is not compatible with
ElasticSearch 7.10 release line, and not compatible with **OpenSearch** currently used by Apache James.
To run this metric exporter register it in `extensions.properties`:
```
guice.extension.module=org.apache.james.metrics.es.v7.ESMetricReporterModule
guice.extension.startable=org.apache.james.metrics.es.v7.ESMetricReporter
```
For configuring the metric reporting on ElasticSearch edit `elasticsearch.properties` content:
| Property name | explanation |
|---|---|
| elasticsearch.http.host | Optional. Host to report metrics on. Defaults to master host. Must be specified if metric export to ElasticSearch is enabled. |
| elasticsearch.http.port | Optional. Http port to use for publishing metrics. Must be specified if metric export to ElasticSearch is enabled.|
| elasticsearch.metrics.reports.enabled | Optional. Boolean value. Enables metrics reporting. Defaults to false. |
| elasticsearch.metrics.reports.period | Optional. Seconds between metric reports. Defaults to 60 seconds. |
| elasticsearch.metrics.reports.index | Optional. Index to publish metrics on. Defaults to james-metrics.|
We provide a docker-compose of this set up.
In order to run it...
- 1. Compile this project: `mvn clean install -DskipTests --pl org.apache.james:apache-james-elasticsearch --am`
- 2. Then start James:
```
docker-compose up
```
=====================================================
== File: third-party/clamav/docker-compose.yml
=====================================================
version: '3'
services:
james:
depends_on:
cassandra:
condition: service_healthy
opensearch:
condition: service_started
tika:
condition: service_started
rabbitmq:
condition: service_started
s3:
condition: service_started
clamav:
condition: service_started
image: apache/james:distributed-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- $PWD/target/apache-james-clamav-jar-with-dependencies.jar:/root/extensions-jars/james-server-clamav.jar
- $PWD/sample-configuration/mailetcontainer.xml:/root/conf/mailetcontainer.xml
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
networks:
- james
opensearch:
image: opensearchproject/opensearch:2.19.2
environment:
- discovery.type=single-node
- DISABLE_INSTALL_DEMO_CONFIG=true
- DISABLE_SECURITY_PLUGIN=true
networks:
james:
aliases:
- elasticsearch
cassandra:
=====================================================
== File: third-party/clamav/src/test/resources/attachment/inlineVirusTextAttachment.eml
=====================================================
To: me@linagora.com
From: Benoit Tellier <me@linagora.com>
Subject: Mail with text attachment
Message-ID: <befd8cab-9c9c-5537-4e77-937f32326087@any.com>
Date: Thu, 13 Oct 2016 10:26:20 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------4FD2D252DB453546C22C25B2"
This is a multi-part message in MIME format.
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
I'm the body!
--------------4FD2D252DB453546C22C25B2
Content-Disposition: inline
Content-Type: text/plain; charset=UTF-8;
name="attachment.txt"
Content-ID: <id>
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
--------------4FD2D252DB453546C22C25B2--
=====================================================
== File: third-party/clamav/src/test/resources/attachment/inlineNonVirusTextAttachment.eml
=====================================================
To: me@linagora.com
From: Benoit Tellier <me@linagora.com>
Subject: Mail with text attachment
Message-ID: <befd8cab-9c9c-5537-4e77-937f32326087@any.com>
Date: Thu, 13 Oct 2016 10:26:20 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------4FD2D252DB453546C22C25B2"
This is a multi-part message in MIME format.
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
I'm the body!
--------------4FD2D252DB453546C22C25B2
Content-Disposition: inline
Content-Type: text/plain; charset=UTF-8;
name="attachment.txt"
Content-ID: <id>
Non virus text
--------------4FD2D252DB453546C22C25B2--
=====================================================
== File: third-party/clamav/README.md
=====================================================
# James' extensions for ClamAV
This module is for developing and delivering extensions to James for the [ClamAV](https://www.clamav.net/) (the antivirus engine) integration.
Currently, this module provides `ClamAVScan` mailet that talks directly with ClamAV via unix socket to scan virus for every
incoming mail. Upon having virus, mail will be redirected to `virus` processor with configurable behavior for further processing.
E.g:
```xml
<processor state="local-delivery" enableJmx="true">
<mailet match="All" class="org.apache.james.clamav.ClamAVScan">
<host>clamav</host>
<port>3310</port>
<onMailetException>ignore</onMailetException>
</mailet>
<!-- If infected go to virus processor -->
<mailet match="HasMailAttributeWithValue=org.apache.james.infected, true" class="ToProcessor">
<processor>virus</processor>
</mailet>
</processor>
<processor state="virus" enableJmx="false">
<mailet match="All" class="ToRepository">
<repositoryPath>cassandra://var/mail/virus/</repositoryPath>
</mailet>
</processor>
```
To run James with this ClamAV integration, please use James's jar extension mechanism.
We also provide a sample [docker-compose.yml](docker-compose.yml) on how to setup the James <-> ClamAV integration.
=====================================================
== File: third-party/crowdsec/Dockerfile
=====================================================
FROM apache/james:memory-latest
RUN echo ":/root/libs/logback-jackson-0.1.5.jar:/root/libs/logback-json-core-0.1.5.jar" >> /root/jib-classpath-file
=====================================================
== File: third-party/crowdsec/docker-compose.yml
=====================================================
version: '3'
services:
james:
image: apache/james:memory-crowdsec
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- ./logback-jackson-0.1.5.jar:/root/libs/logback-jackson-0.1.5.jar
- ./logback-json-core-0.1.5.jar:/root/libs/logback-json-core-0.1.5.jar
- ./sample-configuration/logback.xml:/root/conf/logback.xml
- ./target/apache-james-crowdsec-jar-with-dependencies.jar:/root/extensions-jars/james-server-crowdsec.jar
- ./sample-configuration/extensions.properties:/root/conf/extensions.properties
- ./sample-configuration/smtpserver.xml:/root/conf/smtpserver.xml
- ./sample-configuration/crowdsec.properties:/root/conf/crowdsec.properties
- ./sample-configuration/imapserver.xml:/root/conf/imapserver.xml
- ./sample-configuration/pop3server.xml:/root/conf/pop3server.xml
networks:
- james
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
crowdsec:
image: crowdsecurity/crowdsec:v1.5.4
container_name: crowdsec
restart: always
volumes:
- ./sample-configuration/acquis.yaml:/etc/crowdsec/acquis.yaml
- ./sample-configuration/parsers/syslog-logs.yaml:/etc/crowdsec/parsers/s00-raw/syslog-logs.yaml
- ./sample-configuration/parsers/james-auth.yaml:/etc/crowdsec/parsers/s01-parse/james-auth.yaml
- ./sample-configuration/scenarios:/etc/crowdsec/scenarios
- ./sample-configuration/collections:/etc/crowdsec/collections
- /var/run/docker.sock:/var/run/docker.sock
ports:
- "8080:8080"
- "6060:6060"
networks:
- james
networks:
james:
=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/collections/james.yaml
=====================================================
parsers:
- crowdsecurity/syslog-logs
- linagora/james-auth
- linagora/james-dictionary-attack
scenarios:
- apache-james/bf-auth
author: linagora
=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/parsers/james-dictionary-attack.yaml
=====================================================
onsuccess: next_stage
debug: true
filter: "evt.Parsed.program == 'james'"
name: linagora/james-dictionary-attack
description: "Parser for James dictionary attack"
pattern_syntax:
DICTIONARY_ATTACK: 'Rejected message. Unknown user: %{EMAILADDRESS:rcpt}'
nodes:
- grok:
name: "DICTIONARY_ATTACK"
apply_on: message
statics:
- meta: log_type
value: dictionary-attack
- meta: timestamp
expression: evt.Parsed.timestamp
- meta: level
expression: evt.Parsed.level
- meta: source_ip
expression: evt.Parsed.mdc_ip
- meta: user
expression: evt.Parsed.mdc_user
- meta: rcpt
expression: evt.Parsed.rcpt
=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/parsers/syslog-logs.yaml
=====================================================
#If it's syslog, we are going to extract progname from it
filter: "evt.Line.Labels.type == 'syslog'"
onsuccess: next_stage
pattern_syntax:
RAW_SYSLOG_PREFIX: '^<%{NUMBER:stuff1}>%{NUMBER:stuff2} %{SYSLOGBASE2} %{DATA:program} %{NUMBER:pid}'
RAW_SYSLOG_META: '\[meta sequenceId="%{NOTDQUOTE:seq_id}"\]'
name: crowdsecurity/syslog-logs
nodes:
- grok:
#this is a named regular expression. grok patterns can be kept into separate files for readability
pattern: "^%{SYSLOGLINE}"
#This is the field of the `Event` to which the regexp should be applied
apply_on: Line.Raw
- grok:
#a second pattern for unparsed syslog lines, as saw in opnsense
pattern: '%{RAW_SYSLOG_PREFIX} - %{RAW_SYSLOG_META} %{GREEDYDATA:message}'
apply_on: Line.Raw
#if the node was successfull, statics will be applied.
statics:
- meta: machine
expression: evt.Parsed.logsource
- parsed: "logsource"
value: "syslog"
# syslog date can be in two different fields (one of hte assignment will fail)
- target: evt.StrTime
expression: evt.Parsed.timestamp
- target: evt.StrTime
expression: evt.Parsed.timestamp8601
- meta: datasource_path
expression: evt.Line.Src
- meta: datasource_type
expression: evt.Line.Module
---
#if it's not syslog, the type is the progname
filter: "evt.Line.Labels.type != 'syslog'"
onsuccess: next_stage
name: crowdsecurity/non-syslog
debug: true
statics:
- parsed: json_parsed
expression: UnmarshalJSON(evt.Line.Raw, evt.Unmarshaled, "message")
- parsed: program
expression: evt.Line.Labels.type
- parsed: timestamp
expression: evt.Unmarshaled.message.timestamp
- parsed: level
expression: evt.Unmarshaled.message.level
- parsed: thread
expression: evt.Unmarshaled.message.thread
- parsed: mdc_protocol
=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/parsers/james-auth.yaml
=====================================================
onsuccess: next_stage
debug: true
filter: "evt.Parsed.program == 'james'"
name: linagora/james-auth
description: "Parser for James IMAP and SMTP authentication "
pattern_syntax:
IMAP_AUTH_FAIL_BAD_CREDENTIALS: 'IMAP Authentication failed%{DATA:data}because of bad credentials.'
IMAP_AUTH_FAIL_DELEGATION_BAD_CREDENTIALS: 'IMAP Authentication with delegation failed%{DATA:data}because of bad credentials.'
IMAP_AUTH_FAIL_NO_EXISTING_DELEGATION: 'IMAP Authentication with delegation failed%{DATA:data}because of non existing delegation.'
SMTP_AUTH_FAIL: 'SMTP Authentication%{DATA:data}failed.'
POP3_AUTH_FAIL: 'Bad credential supplied for %{DATA:user} with remote address %{IP:source_ip}'
nodes:
- grok:
name: "IMAP_AUTH_FAIL_BAD_CREDENTIALS"
apply_on: message
statics:
- meta: log_type
value: imap-auth-fail
- meta: timestamp
expression: evt.Parsed.timestamp
- meta: level
expression: evt.Parsed.level
- meta: source_ip
expression: evt.Parsed.mdc_ip
- meta: host
expression: evt.Parsed.mdc_host
- meta: user
expression: evt.Parsed.user
- grok:
name: "IMAP_AUTH_FAIL_DELEGATION_BAD_CREDENTIALS"
apply_on: message
statics:
- meta: log_type
value: imap-auth-fail
- meta: timestamp
expression: evt.Parsed.timestamp
- meta: level
expression: evt.Parsed.level
- meta: source_ip
expression: evt.Parsed.mdc_ip
- meta: host
expression: evt.Parsed.mdc_host
- meta: user
expression: evt.Parsed.user
- grok:
name: "IMAP_AUTH_FAIL_NO_EXISTING_DELEGATION"
apply_on: message
statics:
- meta: log_type
=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/acquis.yaml
=====================================================
source: file
filenames:
- /var/log/james.log
labels:
type: james
=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/scenarios/james-bf-auth.yaml
=====================================================
type: leaky
name: apache-james/bf-auth
debug: true
description: "Detect login james bruteforce"
filter: "evt.Meta.log_type == 'imap-auth-fail' || evt.Meta.log_type == 'smtp-auth-fail' || evt.Meta.log_type == 'pop3-auth-fail'"
leakspeed: "5m"
capacity: 2 # 3rd failed authentication would trigger the ban decision
groupby: evt.Meta.source_ip
blackhole: 0m # to enable rapidly trigger new ban decision across tests. cf https://docs.crowdsec.net/docs/scenarios/format/#blackhole
reprocess: true
labels:
service: ssh
type: bruteforce
remediation: true
=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/scenarios/james-dictionary-attack.yaml
=====================================================
type: leaky
name: linagora/james-dictionary-attack
debug: true
description: "Detect login james bruteforce"
filter: "evt.Meta.log_type == 'dictionary-attack'"
leakspeed: "1m"
capacity: 5
groupby: evt.Meta.source_ip
blackhole: 1m
reprocess: true
labels:
service: ssh
type: bruteforce
remediation: true
=====================================================
== File: third-party/crowdsec/src/test/resources/haproxy.cfg
=====================================================
global
log stdout format raw local0 info
defaults
mode tcp
timeout client 1800s
timeout connect 5s
timeout server 1800s
log global
option tcplog
frontend imap1-frontend
bind :143
default_backend james-servers-imaps
frontend imaps-frontend
bind :993
default_backend james-servers-imaps
backend james-servers-imap
server james1 172.17.0.1:39847 send-proxy
backend james-servers-imaps
server james1 172.17.0.1:39347 send-proxy
=====================================================
== File: third-party/crowdsec/src/test/resources/log/james.log
=====================================================
=====================================================
== File: third-party/crowdsec/README.md
=====================================================
# James' extensions for Crowdsec
This module is for developing and delivering extensions to James for the [Crowdsec](https://www.crowdsec.net/) (IP filtering system)
## How to run
- The Crowdsec extension requires an extra configuration file `crowdsec.properties` to configure Crowdsec connection
Configuration parameters:
- `crowdsecUrl` : String. Required. URL defining the Crowdsec's bouncer. Eg: http://crowdsec:8080/v1
- `apiKey` : String. Required. Api key for pass authentication when request to Crowdsec.
- `timeout` : Duration. Optional. Default to `500ms`. Timeout questioning to CrowdSec.
E.g. `500ms`, `1 second`,...
- Declare the `extensions.properties` for this module.
```
guice.extension.module=org.apache.james.crowdsec.module.CrowdsecModule
```
- Mount the configuration file onto the classpath
You can find a `logback.xml` configuration file in the `sample-configuration` directory. \
To use this configuration at runtime, ensure the file is available in the application's classpath by placing it in a directory accessible by the application.
Use a `-Dlogback.configurationFile` JVM argument to specify the file's location when starting the application.
### CrowdSec support for SMTP
- Declare the Crowdsec EhloHook in `smtpserver.xml`. Eg:
```
<handlerchain>
<handler class="org.apache.james.smtpserver.fastfail.ValidRcptHandler"/>
<handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>
<handler class="org.apache.james.crowdsec.CrowdsecEhloHook"/>
</handlerchain>
```
or
```
<handlerchain>
<handler class="org.apache.james.smtpserver.fastfail.ValidRcptHandler"/>
<handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>
<handler class="org.apache.james.crowdsec.CrowdsecSMTPConnectHandler"/>
</handlerchain>
```
The EHLO hook will block banned clients with `554 Email rejected` whereas the connect handler will terminate the connection even before the SMTP greeting.
### CrowdSec support for IMAP
- Declare the `CrowdsecImapConnectionCheck` in `imapserver.xml`. Eg:
```
=====================================================
== File: third-party/crowdsec/sample-configuration/collections/james.yaml
=====================================================
parsers:
- crowdsecurity/syslog-logs
- linagora/james-auth
- linagora/james-dictionary-attack
scenarios:
- apache-james/bf-auth
author: linagora
=====================================================
== File: third-party/crowdsec/sample-configuration/parsers/james-dictionary-attack.yaml
=====================================================
onsuccess: next_stage
debug: true
filter: "evt.Parsed.program == 'james'"
name: linagora/james-dictionary-attack
description: "Parser for James dictionary attack"
pattern_syntax:
DICTIONARY_ATTACK: 'Rejected message. Unknown user: %{EMAILADDRESS:rcpt}'
nodes:
- grok:
name: "DICTIONARY_ATTACK"
apply_on: message
statics:
- meta: log_type
value: dictionary-attack
- meta: timestamp
expression: evt.Parsed.timestamp
- meta: level
expression: evt.Parsed.level
- meta: source_ip
expression: evt.Parsed.mdc_ip
- meta: user
expression: evt.Parsed.mdc_user
- meta: rcpt
expression: evt.Parsed.rcpt
=====================================================
== File: third-party/crowdsec/sample-configuration/parsers/syslog-logs.yaml
=====================================================
#If it's syslog, we are going to extract progname from it
filter: "evt.Line.Labels.type == 'syslog'"
onsuccess: next_stage
pattern_syntax:
RAW_SYSLOG_PREFIX: '^<%{NUMBER:stuff1}>%{NUMBER:stuff2} %{SYSLOGBASE2} %{DATA:program} %{NUMBER:pid}'
RAW_SYSLOG_META: '\[meta sequenceId="%{NOTDQUOTE:seq_id}"\]'
name: crowdsecurity/syslog-logs
nodes:
- grok:
#this is a named regular expression. grok patterns can be kept into separate files for readability
pattern: "^%{SYSLOGLINE}"
#This is the field of the `Event` to which the regexp should be applied
apply_on: Line.Raw
- grok:
#a second pattern for unparsed syslog lines, as saw in opnsense
pattern: '%{RAW_SYSLOG_PREFIX} - %{RAW_SYSLOG_META} %{GREEDYDATA:message}'
apply_on: Line.Raw
#if the node was successfull, statics will be applied.
statics:
- meta: machine
expression: evt.Parsed.logsource
- parsed: "logsource"
value: "syslog"
# syslog date can be in two different fields (one of hte assignment will fail)
- target: evt.StrTime
expression: evt.Parsed.timestamp
- target: evt.StrTime
expression: evt.Parsed.timestamp8601
- meta: datasource_path
expression: evt.Line.Src
- meta: datasource_type
expression: evt.Line.Module
---
#if it's not syslog, the type is the progname
filter: "evt.Line.Labels.type != 'syslog'"
onsuccess: next_stage
name: crowdsecurity/non-syslog
debug: true
statics:
- parsed: json_parsed
expression: UnmarshalJSON(evt.Line.Raw, evt.Unmarshaled, "message")
- parsed: program
expression: evt.Line.Labels.type
- parsed: timestamp
expression: evt.Unmarshaled.message.timestamp
- parsed: level
expression: evt.Unmarshaled.message.level
- parsed: thread
expression: evt.Unmarshaled.message.thread
- parsed: mdc_protocol
=====================================================
== File: third-party/crowdsec/sample-configuration/parsers/james-auth.yaml
=====================================================
onsuccess: next_stage
debug: true
filter: "evt.Parsed.program == 'james'"
name: linagora/james-auth
description: "Parser for James IMAP and SMTP authentication "
pattern_syntax:
IMAP_AUTH_FAIL_BAD_CREDENTIALS: 'IMAP Authentication failed%{DATA:data}because of bad credentials.'
IMAP_AUTH_FAIL_DELEGATION_BAD_CREDENTIALS: 'IMAP Authentication with delegation failed%{DATA:data}because of bad credentials.'
IMAP_AUTH_FAIL_NO_EXISTING_DELEGATION: 'IMAP Authentication with delegation failed%{DATA:data}because of non existing delegation.'
SMTP_AUTH_FAIL: 'SMTP Authentication%{DATA:data}failed.'
POP3_AUTH_FAIL: 'Bad credential supplied for %{DATA:user} with remote address %{IP:source_ip}'
nodes:
- grok:
name: "IMAP_AUTH_FAIL_BAD_CREDENTIALS"
apply_on: message
statics:
- meta: log_type
value: imap-auth-fail
- meta: timestamp
expression: evt.Parsed.timestamp
- meta: level
expression: evt.Parsed.level
- meta: source_ip
expression: evt.Parsed.mdc_ip
- meta: host
expression: evt.Parsed.mdc_host
- meta: user
expression: evt.Parsed.user
- grok:
name: "IMAP_AUTH_FAIL_DELEGATION_BAD_CREDENTIALS"
apply_on: message
statics:
- meta: log_type
value: imap-auth-fail
- meta: timestamp
expression: evt.Parsed.timestamp
- meta: level
expression: evt.Parsed.level
- meta: source_ip
expression: evt.Parsed.mdc_ip
- meta: host
expression: evt.Parsed.mdc_host
- meta: user
expression: evt.Parsed.user
- grok:
name: "IMAP_AUTH_FAIL_NO_EXISTING_DELEGATION"
apply_on: message
statics:
- meta: log_type
=====================================================
== File: third-party/crowdsec/sample-configuration/extensions.properties
=====================================================
guice.extension.module=org.apache.james.crowdsec.module.CrowdsecModule
=====================================================
== File: third-party/crowdsec/sample-configuration/acquis.yaml
=====================================================
source: docker
container_name:
- james
labels:
type: james
=====================================================
== File: third-party/crowdsec/sample-configuration/scenarios/james-bf-auth.yaml
=====================================================
type: leaky
name: apache-james/bf-auth
debug: true
description: "Detect login james bruteforce"
filter: "evt.Meta.log_type == 'imap-auth-fail' || evt.Meta.log_type == 'smtp-auth-fail' || evt.Meta.log_type == 'pop3-auth-fail'"
leakspeed: "1m"
capacity: 5
groupby: evt.Meta.source_ip
blackhole: 1m
reprocess: true
labels:
service: ssh
type: bruteforce
remediation: true
=====================================================
== File: third-party/crowdsec/sample-configuration/scenarios/james-dictionary-attack.yaml
=====================================================
type: leaky
name: linagora/james-dictionary-attack
debug: true
description: "Detect login james bruteforce"
filter: "evt.Meta.log_type == 'dictionary-attack'"
leakspeed: "1m"
capacity: 5
groupby: evt.Meta.source_ip
blackhole: 1m
reprocess: true
labels:
service: ssh
type: bruteforce
remediation: true
=====================================================
== File: third-party/crowdsec/sample-configuration/crowdsec.properties
=====================================================
crowdsecUrl=http://crowdsec:8080/v1
apiKey=default_api_key
=====================================================
== File: third-party/spamassassin/docker-compose.yml
=====================================================
version: '3'
services:
james:
depends_on:
- spamassassin
image: apache/james:memory-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- $PWD/target/apache-james-spamassassin-jar-with-dependencies.jar:/root/extensions-jars/james-server-spamassassin.jar
- $PWD/sample-configuration/extensions.properties:/root/conf/extensions.properties
- $PWD/sample-configuration/spamassassin.properties:/root/conf/spamassassin.properties
- $PWD/sample-configuration/mailetcontainer.xml:/root/conf/mailetcontainer.xml
- $PWD/sample-configuration/listeners.xml:/root/conf/listeners.xml
- $PWD/sample-configuration/smtpserver.xml:/root/conf/smtpserver.xml
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
spamassassin:
image: instantlinux/spamassassin:4.0.0-6
ports:
- "783:783"
=====================================================
== File: third-party/spamassassin/src/test/resources/eml/spam.eml
=====================================================
Return-Path: <user@james.org>
Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (user@james.org)
To: <user@james.org>
From: user <user@james.org>
Message-ID: <f18fa52e-2e9d-1125-327d-2100b23f8a6b@james.org>
Date: Thu, 19 Jan 2017 20:36:37 +0100
MIME-Version: 1.0
In-Reply-To: <001a114380a6a260d105467765ab@google.com>
Content-Type: multipart/mixed;
boundary="------------17D96D411CBD55D8239A8C1F"
This is a multi-part message in MIME format.
--------------17D96D411CBD55D8239A8C1F
Content-Type: multipart/alternative;
boundary="------------64D716A3DDAEC185D3E67448"
--------------64D716A3DDAEC185D3E67448
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
-------- Message transéré --------
Sujet : Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (user@james.org)
Date : Thu, 19 Jan 2017 19:18:23 +0000
De : <user@james.org>
Répondre à : user@james.org
Pour : user@james.org
--------------64D716A3DDAEC185D3E67448
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p><br>
</p>
<div class="moz-forward-container"><br>
<br>
=====================================================
== File: third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham1
=====================================================
From exmh-workers-admin@redhat.com Thu Aug 22 12:36:23 2002
Return-Path: <exmh-workers-admin@spamassassin.taint.org>
Delivered-To: zzzz@localhost.netnoteinc.com
Received: from localhost (localhost [127.0.0.1])
by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D03E543C36
for <zzzz@localhost>; Thu, 22 Aug 2002 07:36:16 -0400 (EDT)
Received: from phobos [127.0.0.1]
by localhost with IMAP (fetchmail-5.9.0)
for zzzz@localhost (single-drop); Thu, 22 Aug 2002 12:36:16 +0100 (IST)
Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by
dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MBYrZ04811 for
<zzzz-exmh@spamassassin.taint.org>; Thu, 22 Aug 2002 12:34:53 +0100
Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by
listman.redhat.com (Postfix) with ESMTP id 8386540858; Thu, 22 Aug 2002
07:35:02 -0400 (EDT)
Delivered-To: exmh-workers@listman.spamassassin.taint.org
Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org
[172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 10CF8406D7
for <exmh-workers@listman.redhat.com>; Thu, 22 Aug 2002 07:34:10 -0400
(EDT)
Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6)
id g7MBY7g11259 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002
07:34:07 -0400
Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by
int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MBY7Y11255 for
<exmh-workers@redhat.com>; Thu, 22 Aug 2002 07:34:07 -0400
Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org
(8.11.6/8.11.6) with SMTP id g7MBIhl25223 for <exmh-workers@redhat.com>;
Thu, 22 Aug 2002 07:18:55 -0400
Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by
ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7MBWel29762;
Thu, 22 Aug 2002 18:32:40 +0700 (ICT)
Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU
(8.11.6/8.11.6) with ESMTP id g7MBQPW13260; Thu, 22 Aug 2002 18:26:25
+0700 (ICT)
From: Robert Elz <kre@munnari.OZ.AU>
To: Chris Garrigues <cwg-dated-1030377287.06fa6d@DeepEddy.Com>
Cc: exmh-workers@spamassassin.taint.org
Subject: Re: New Sequences Window
In-Reply-To: <1029945287.4797.TMDA@deepeddy.vircio.com>
References: <1029945287.4797.TMDA@deepeddy.vircio.com>
<1029882468.3116.TMDA@deepeddy.vircio.com> <9627.1029933001@munnari.OZ.AU>
<1029943066.26919.TMDA@deepeddy.vircio.com>
<1029944441.398.TMDA@deepeddy.vircio.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Message-Id: <13258.1030015585@munnari.OZ.AU>
X-Loop: exmh-workers@spamassassin.taint.org
Sender: exmh-workers-admin@spamassassin.taint.org
Errors-To: exmh-workers-admin@spamassassin.taint.org
=====================================================
== File: third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham3
=====================================================
From timc@2ubh.com Thu Aug 22 13:52:59 2002
Return-Path: <timc@2ubh.com>
Delivered-To: zzzz@localhost.netnoteinc.com
Received: from localhost (localhost [127.0.0.1])
by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0314547C66
for <zzzz@localhost>; Thu, 22 Aug 2002 08:52:58 -0400 (EDT)
Received: from phobos [127.0.0.1]
by localhost with IMAP (fetchmail-5.9.0)
for zzzz@localhost (single-drop); Thu, 22 Aug 2002 13:52:59 +0100 (IST)
Received: from n16.grp.scd.yahoo.com (n16.grp.scd.yahoo.com
[66.218.66.71]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id
g7MCrdZ07070 for <zzzz@spamassassin.taint.org>; Thu, 22 Aug 2002 13:53:39 +0100
X-Egroups-Return: sentto-2242572-52733-1030020820-zzzz=spamassassin.taint.org@returns.groups.yahoo.com
Received: from [66.218.67.198] by n16.grp.scd.yahoo.com with NNFMP;
22 Aug 2002 12:53:40 -0000
X-Sender: timc@2ubh.com
X-Apparently-To: zzzzteana@yahoogroups.com
Received: (EGP: mail-8_1_0_1); 22 Aug 2002 12:53:39 -0000
Received: (qmail 76099 invoked from network); 22 Aug 2002 12:53:39 -0000
Received: from unknown (66.218.66.218) by m5.grp.scd.yahoo.com with QMQP;
22 Aug 2002 12:53:39 -0000
Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by
mta3.grp.scd.yahoo.com with SMTP; 22 Aug 2002 12:53:39 -0000
Received: from host217-36-23-185.in-addr.btopenworld.com ([217.36.23.185])
by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17hrT0-0004gj-00
for forteana@yahoogroups.com; Thu, 22 Aug 2002 13:53:38 +0100
X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410)
To: zzzzteana <zzzzteana@yahoogroups.com>
X-Priority: 3
Message-Id: <E17hrT0-0004gj-00@rhenium.btinternet.com>
From: "Tim Chapman" <timc@2ubh.com>
X-Yahoo-Profile: tim2ubh
MIME-Version: 1.0
Mailing-List: list zzzzteana@yahoogroups.com; contact
forteana-owner@yahoogroups.com
Delivered-To: mailing list zzzzteana@yahoogroups.com
Precedence: bulk
List-Unsubscribe: <mailto:zzzzteana-unsubscribe@yahoogroups.com>
Date: Thu, 22 Aug 2002 13:52:38 +0100
Subject: [zzzzteana] Moscow bomber
Reply-To: zzzzteana@yahoogroups.com
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Man Threatens Explosion In Moscow
Thursday August 22, 2002 1:40 PM
MOSCOW (AP) - Security officers on Thursday seized an unidentified man who
said he was armed with explosives and threatened to blow up his truck in
front of Russia's Federal Security Services headquarters in Moscow, NTV
=====================================================
== File: third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham2
=====================================================
From Steve_Burt@cursor-system.com Thu Aug 22 12:46:39 2002
Return-Path: <Steve_Burt@cursor-system.com>
Delivered-To: zzzz@localhost.netnoteinc.com
Received: from localhost (localhost [127.0.0.1])
by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BE12E43C34
for <zzzz@localhost>; Thu, 22 Aug 2002 07:46:38 -0400 (EDT)
Received: from phobos [127.0.0.1]
by localhost with IMAP (fetchmail-5.9.0)
for zzzz@localhost (single-drop); Thu, 22 Aug 2002 12:46:38 +0100 (IST)
Received: from n20.grp.scd.yahoo.com (n20.grp.scd.yahoo.com
[66.218.66.76]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id
g7MBkTZ05087 for <zzzz@spamassassin.taint.org>; Thu, 22 Aug 2002 12:46:29 +0100
X-Egroups-Return: sentto-2242572-52726-1030016790-zzzz=spamassassin.taint.org@returns.groups.yahoo.com
Received: from [66.218.67.196] by n20.grp.scd.yahoo.com with NNFMP;
22 Aug 2002 11:46:30 -0000
X-Sender: steve.burt@cursor-system.com
X-Apparently-To: zzzzteana@yahoogroups.com
Received: (EGP: mail-8_1_0_1); 22 Aug 2002 11:46:29 -0000
Received: (qmail 11764 invoked from network); 22 Aug 2002 11:46:29 -0000
Received: from unknown (66.218.66.217) by m3.grp.scd.yahoo.com with QMQP;
22 Aug 2002 11:46:29 -0000
Received: from unknown (HELO mailgateway.cursor-system.com) (62.189.7.27)
by mta2.grp.scd.yahoo.com with SMTP; 22 Aug 2002 11:46:29 -0000
Received: from exchange1.cps.local (unverified) by
mailgateway.cursor-system.com (Content Technologies SMTPRS 4.2.10) with
ESMTP id <T5cde81f695ac1d100407d@mailgateway.cursor-system.com> for
<forteana@yahoogroups.com>; Thu, 22 Aug 2002 13:14:10 +0100
Received: by exchange1.cps.local with Internet Mail Service (5.5.2653.19)
id <PXX6AT23>; Thu, 22 Aug 2002 12:46:27 +0100
Message-Id: <5EC2AD6D2314D14FB64BDA287D25D9EF12B4F6@exchange1.cps.local>
To: "'zzzzteana@yahoogroups.com'" <zzzzteana@yahoogroups.com>
X-Mailer: Internet Mail Service (5.5.2653.19)
X-Egroups-From: Steve Burt <steve.burt@cursor-system.com>
From: Steve Burt <Steve_Burt@cursor-system.com>
X-Yahoo-Profile: pyruse
MIME-Version: 1.0
Mailing-List: list zzzzteana@yahoogroups.com; contact
forteana-owner@yahoogroups.com
Delivered-To: mailing list zzzzteana@yahoogroups.com
Precedence: bulk
List-Unsubscribe: <mailto:zzzzteana-unsubscribe@yahoogroups.com>
Date: Thu, 22 Aug 2002 12:46:18 +0100
Subject: [zzzzteana] RE: Alexander
Reply-To: zzzzteana@yahoogroups.com
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Martin A posted:
Tassos Papadopoulos, the Greek sculptor behind the plan, judged that the
limestone of Mount Kerdylio, 70 miles east of Salonika and not far from the
=====================================================
== File: third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam2
=====================================================
From lmrn@mailexcite.com Mon Jun 24 17:03:24 2002
Return-Path: merchantsworld2001@juno.com
Delivery-Date: Mon May 13 04:46:13 2002
Received: from mandark.labs.netnoteinc.com ([213.105.180.140]) by
dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g4D3kCe15097 for
<jm@jmason.org>; Mon, 13 May 2002 04:46:12 +0100
Received: from 203.129.205.5.205.129.203.in-addr.arpa ([203.129.205.5]) by
mandark.labs.netnoteinc.com (8.11.2/8.11.2) with SMTP id g4D3k2D12605 for
<jm@netnoteinc.com>; Mon, 13 May 2002 04:46:04 +0100
Received: from html (unverified [207.95.174.49]) by
203.129.205.5.205.129.203.in-addr.arpa (EMWAC SMTPRS 0.83) with SMTP id
<B0000178595@203.129.205.5.205.129.203.in-addr.arpa>; Mon, 13 May 2002
09:04:46 +0530
Message-Id: <B0000178595@203.129.205.5.205.129.203.in-addr.arpa>
From: lmrn@mailexcite.com
To: ranmoore@cybertime.net
Subject: Real Protection, Stun Guns! Free Shipping! Time:2:01:35 PM
Date: Mon, 28 Jul 1980 14:01:35
MIME-Version: 1.0
X-Keywords:
Content-Type: text/html; charset="DEFAULT"
<html>
<body>
<center>
<h3>
<font color="blue">
<b>
The Need For Safety Is Real In 2002, You Might Only Get One Chance - Be Ready!
<p>
Free Shipping & Handling Within The (USA) If You Order Before May 25, 2002!
<p>
3 Day Super Sale, Now Until May 7, 2002! Save Up To $30.00 On Some Items!
</b>
</font>
</h3>
</center>
<p>
IT'S GETTING TO BE SPRING AGAIN, PROTECT YOURSELF AS YOU WALK,<br>
JOG AND EXERCISE OUTSIDE. ALSO PROTECT YOUR LOVED ONES AS<br>
THEY RETURN HOME FROM COLLEGE!<br>
<p>
* LEGAL PROTECTION FOR COLLEGE STUDENTS!<br>
* GREAT UP'COMING OUTDOOR PROTECTION GIFTS!<br>
* THERE IS NOTHING WORTH MORE PROTECTING THAN LIFE!<br>
* OUR STUN DEVICES & PEPPER PRODUCTS ARE LEGAL PROTECTION!
<p>
<b>
<font color="red">
=====================================================
== File: third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam3
=====================================================
From amknight@mailexcite.com Mon Jun 24 17:03:49 2002
Return-Path: merchantsworld2001@juno.com
Delivery-Date: Wed May 15 08:58:23 2002
Received: from mandark.labs.netnoteinc.com ([213.105.180.140]) by
dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g4F7wIe23864 for
<jm@jmason.org>; Wed, 15 May 2002 08:58:18 +0100
Received: from webcust2.hightowertech.com (webcust2.hightowertech.com
[216.41.166.100]) by mandark.labs.netnoteinc.com (8.11.2/8.11.2) with
ESMTP id g4F7wGD24120 for <jm@netnoteinc.com>; Wed, 15 May 2002 08:58:17
+0100
Received: from html ([206.216.197.214]) by webcust2.hightowertech.com with
Microsoft SMTPSVC(5.5.1877.197.19); Wed, 15 May 2002 00:55:53 -0700
From: amknight@mailexcite.com
To: cbmark@cbmark.com
Subject: New Improved Fat Burners, Now With TV Fat Absorbers! Time:6:25:49 PM
Date: Wed, 30 Jul 1980 18:25:49
MIME-Version: 1.0
Message-Id: <0845b5355070f52WEBCUST2@webcust2.hightowertech.com>
X-Keywords:
Content-Type: text/html; charset="DEFAULT"
<html>
<body>
<center>
<b>
<font color="blue">
*****Bonus Fat Absorbers As Seen On TV, Included Free With Purchase Of 2 Or More Bottle, $24.95 Value*****
</font>
<br>
<br>
***TAKE $10.00 OFF 2 & 3 MONTH SUPPLY ORDERS, $5.00 OFF 1 MONTH SUPPLY!
***AND STILL GET YOUR BONUS! PRICE WILL BE DEDUCTED DURING PROCESSING.
<br>
<br>
***FAT ABSORBERS ARE GREAT FOR THOSE WHO WANT TO LOSE WEIGHT, BUT CAN'T STAY ON A DIET***
<br>
<br>
***OFFER GOOD UNTIL MAY 27, 2002! FOREIGN ORDERS INCLUDED!
<br>
<br>
<font color="blue">
LOSE 30 POUNDS IN 30 DAYS... GUARANTEED!!!
<br>
<br>
All Natural Weight-Loss Program, Speeds Up The Metabolism Safely
Rated #1 In Both Categories of SAFETY & EFFECTIVENESS In<br>
(THE United States Today)
=====================================================
== File: third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam1
=====================================================
From ilug-admin@linux.ie Tue Aug 6 11:51:02 2002
Return-Path: <ilug-admin@linux.ie>
Delivered-To: yyyy@localhost.netnoteinc.com
Received: from localhost (localhost [127.0.0.1])
by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9E1F5441DD
for <jm@localhost>; Tue, 6 Aug 2002 06:48:09 -0400 (EDT)
Received: from phobos [127.0.0.1]
by localhost with IMAP (fetchmail-5.9.0)
for jm@localhost (single-drop); Tue, 06 Aug 2002 11:48:09 +0100 (IST)
Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by
dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g72LqWv13294 for
<jm-ilug@jmason.org>; Fri, 2 Aug 2002 22:52:32 +0100
Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org
(8.9.3/8.9.3) with ESMTP id WAA31224; Fri, 2 Aug 2002 22:50:17 +0100
Received: from bettyjagessar.com (w142.z064000057.nyc-ny.dsl.cnc.net
[64.0.57.142]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id WAA31201 for
<ilug@linux.ie>; Fri, 2 Aug 2002 22:50:11 +0100
X-Authentication-Warning: lugh.tuatha.org: Host w142.z064000057.nyc-ny.dsl.cnc.net
[64.0.57.142] claimed to be bettyjagessar.com
Received: from 64.0.57.142 [202.63.165.34] by bettyjagessar.com
(SMTPD32-7.06 EVAL) id A42A7FC01F2; Fri, 02 Aug 2002 02:18:18 -0400
Message-Id: <1028311679.886@0.57.142>
Date: Fri, 02 Aug 2002 23:37:59 0530
To: ilug@linux.ie
From: "Start Now" <startnow2002@hotmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"; format=flowed
Subject: [ILUG] STOP THE MLM INSANITY
Sender: ilug-admin@linux.ie
Errors-To: ilug-admin@linux.ie
X-Mailman-Version: 1.1
Precedence: bulk
List-Id: Irish Linux Users' Group <ilug.linux.ie>
X-Beenthere: ilug@linux.ie
Greetings!
You are receiving this letter because you have expressed an interest in
receiving information about online business opportunities. If this is
erroneous then please accept my most sincere apology. This is a one-time
mailing, so no removal is necessary.
If you've been burned, betrayed, and back-stabbed by multi-level marketing,
MLM, then please read this letter. It could be the most important one that
has ever landed in your Inbox.
MULTI-LEVEL MARKETING IS A HUGE MISTAKE FOR MOST PEOPLE
MLM has failed to deliver on its promises for the past 50 years. The pursuit
of the "MLM Dream" has cost hundreds of thousands of people their friends,
=====================================================
== File: third-party/spamassassin/sample-configuration/extensions.properties
=====================================================
guice.extension.module=org.apache.james.spamassassin.SpamAssassinModule
=====================================================
== File: third-party/spamassassin/sample-configuration/spamassassin.properties
=====================================================
spamassassin.host=localhost
spamassassin.port=783
=====================================================
== File: backends-common/opensearch/src/test/resources/auth-es/nginx-conf/reverse_elasticsearch.conf
=====================================================
server {
listen 9200 ssl;
ssl_certificate /etc/ssl/certs/default.crt;
ssl_certificate_key /etc/ssl/private/default.key;
server_name reverse_elasticsearch;
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/conf.d/passwd;
location / {
proxy_pass http://elasticsearch:9200;
}
}
=====================================================
== File: backends-common/opensearch/src/test/resources/auth-es/nginx-conf/passwd
=====================================================
# the default credential: elasticsearch:secret
elasticsearch:$apr1$m5FvKpw7$EZ9UEUCilHyKTIqQ57nWG1
=====================================================
== File: backends-common/opensearch/src/test/resources/auth-es/NginxDockerfile
=====================================================
FROM nginx:1.25
COPY conf/nginx-conf/ /etc/nginx/conf.d/
COPY conf/default.crt /etc/ssl/certs/default.crt
COPY conf/default.key /etc/ssl/private/default.key
=====================================================
== File: backends-common/opensearch/src/test/resources/auth-es/README.md
=====================================================
## Resources explanation
### nginx-conf
Contains nginx configuration files:
- reverse_elasticsearch.conf: allow nginx to be the proxy connecting to OpenSearch
- passwd: Nginx credentials file store, each record follows the format: `username:encrypted-password`
TODO This set up is inherited from ElasticSearch where the security plugin was proprietary and this was our only way to
test things like SSL, auth. Now that we use OpenSearch we could instead rely on OpenSearch native features.
### default.crt & default.key
public (.crt) and private (.key) of the self signed SSL certification. It will be loaded by nginx
### server.jks
Once you use a http client connect to nginx by `https` protocol,
the default behavior of the client is rejecting the connection because
self signed SSL certification provided by nginx is not recognized by the
client. To deal with this problem, there are two ways to configure the client:
- Not recommended in production, ignore SSL Validation
- Configure the client to use local TrustStore file containing the .crt,
then it should trust nginx.
The `server.jks` is generated by the command
```
keytool -import -v -trustcacerts -file default.crt -keystore server.jks -keypass mypass -storepass mypass
```
With:
- password: `mypass`
=====================================================
== File: backends-common/opensearch/src/test/resources/auth-es/default.key
=====================================================
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAwyDNIXe5OeNI/Bf2LUUSF2koINYB9Z2D9qsxYjXB02NrPmPA
DRjiE9c3XgCsiQdkJv008lltTNyvJ5O/ARtnzOpDn6CGIZ8aH08VzP5ECs5jak+c
gc5dVloEhbGTOUVq10mh02FuTG36CY+LnEWXAOo8yKOcA4jiAtzFA8buZbJGmgPx
hTOYw0VMmvXEUBVdwlT4Uk8/3OE4VGQZecO6mnzP1Fh7D5vf1UaBrrMcUYg/6Igx
UmcSZbb9NDUoTnZvkHjlt8bGUXuTTTeQh5pmwdtoiyF00wjP7DhvPLBc1fIB9lxx
EZ+to1e5K/SMA9I76cX3LIChyfPdBc6yZIbPbwIDAQABAoIBAQC+DHmeyjQPDK8u
UcxE5UwsnxAlgysfZY59Ntn/dKpW0DNI7fDFEOJJPsm/ddqWECvcyavDC5SoUx0J
6B4V3vJnpBe/JqLdpk/UBLwQD+qHt+MeTXH6/9rq2vwilwT0uAbKrv29mtzJ9ied
HkF1MFZV3s7bAHdY/f5bmVkOR7g0NQ6QLuXYiLDSHpu/7dMVBNS9qMNL292cZbpi
KJZUvyrK6jSOh9Dt3fmWVdjRp5nGd/Z0r32A8UdoWiQ3cXe9uwXVxz8+ZGkP4t44
Ob+YcgHUEz6iI2o7nqWpNtPI+hBWH1YK/Szlay3rTZSKvkNG1Sdwm1UhoJqNFucC
7ZWkH8GxAoGBAOSpP9lrB0sXCGwhD3xbAYCZsTgomSQ13X6/daKdN9fxpegK7v5r
baojBoSvIKiKezHzMiL5IiEhESXEvXQigFNORdf9mFs9Z9ec4I/96dQNYM4d1QtM
nz3dABt62po8ROCA4Y26ar+OmcJ2kv0RPuJCDGkrY1Is7SNTtGi+HW55AoGBANp1
MJi3VHS9oEF8dslgLkZMZWPgcwJK2Y3wYIkatmxuVkWYdRFPqWWwlXUU17KH7eqm
iEONLNyI7g/duFFTbz52MkeMpX6xarXddYkS2HMDUqSTgt3T+ULHVhTtlEEBXg6m
5cx/eg8niJ6VH+vFtRcYrActLg751mjNgz8fmBMnAoGBAMwj4fHsIIXEWWuXlGi0
IsI59EKr1BTE1isLKS11aN6sSS7BXB7dr/k97drVMrXldBjjArbAbtze1Z0/aNhe
2OwGrEopiDSkvKl8z+sdh/0duHgroADHdj9Xp3nhE3qxJdi8lyHd9OFxoQpAq/es
xtRenQ/jgXdizo9EcoM0f7gZAoGARw6ZSQNQyEwpxUM7zBKp2pnc3NjT7+nyy7Vl
YRM8RRa6nxaQ9ZmIyxfd9WBbLKoEHDAg4IAaGH29mZGP83wFEjcV8anw5r3ErPUk
1vo3R2nMRtXoWkkpqav29wW0FFTiiDeHRbYtOKKuUI7G/ESpu6J9yjPK6HohYKOA
Tlbzez8CgYAFhpoeHO2X06pEsFeI6rMtc0rS0EHuVuqfjjyEMOyQZ8BsCWzDZBDW
N9rxd0yz80H1Q33dwzrkiVu15e+JMNb5I80Ou0t+LQVYpvhtM89yKoLFk2HqL+eH
wQJ/Fszj8fwdwx+k2DEve8MVHSx/w9CpwM7B2yGxcUFKi/JSM1rQEw==
-----END RSA PRIVATE KEY-----
=====================================================
== File: backends-common/opensearch/src/test/resources/auth-es/default.crt
=====================================================
-----BEGIN CERTIFICATE-----
MIIDBjCCAe4CCQDbp5K1cKRJgjANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJB
VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0
cyBQdHkgTHRkMB4XDTE4MDcwMjEyNDkxMloXDTE5MDcwMjEyNDkxMlowRTELMAkG
A1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0
IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AMMgzSF3uTnjSPwX9i1FEhdpKCDWAfWdg/arMWI1wdNjaz5jwA0Y4hPXN14ArIkH
ZCb9NPJZbUzcryeTvwEbZ8zqQ5+ghiGfGh9PFcz+RArOY2pPnIHOXVZaBIWxkzlF
atdJodNhbkxt+gmPi5xFlwDqPMijnAOI4gLcxQPG7mWyRpoD8YUzmMNFTJr1xFAV
XcJU+FJPP9zhOFRkGXnDupp8z9RYew+b39VGga6zHFGIP+iIMVJnEmW2/TQ1KE52
b5B45bfGxlF7k003kIeaZsHbaIshdNMIz+w4bzywXNXyAfZccRGfraNXuSv0jAPS
O+nF9yyAocnz3QXOsmSGz28CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAFRDXedF9
hjuEmLjETBwhh5Zgg102GDJp58ZBkLE1IaT4mrbK90mhpzxsaxbuqOdu3PXJV4tc
SEocxj5hk5ivVZiWk/j8YJmB8ZOUKdeOxc1tfratlonJ85AY+6m02+FhjUnWobmg
HVBepFTJt1iaTgOpVf8YpbYW+L6+kWV9C2CtT3WUhxtllKjokbF+YVN7LnDlbynM
80+aGm+rdg+TUusg+T/2FeVlDyBgbqagBcCQCQacWD2+zzL28XB3PwRE6oU/tKuu
rbCsGZE0WH8Pc7p6J/alRr+foQiu7KKJKJ8pO1qdy716DlmPIDN23iZROIu1GKKl
ZIKfyefPUcwHyw==
-----END CERTIFICATE-----
=====================================================
== File: backends-common/rabbitmq/src/test/resources/empty-store
=====================================================
=====================================================
== File: backends-common/redis/src/test/resources/kvrocks/replica/kvrocks.conf
=====================================================
log-level info
slaveof kvrocks1 6379
masterauth 123
requirepass 123
port 6379
=====================================================
== File: backends-common/redis/src/test/resources/kvrocks/sentinel/sentinel.conf
=====================================================
dir /tmp
sentinel resolve-hostnames yes
sentinel monitor mymaster kvrocks1 6379 2
sentinel auth-pass mymaster 123
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
requirepass "321"
=====================================================
== File: backends-common/redis/src/test/resources/kvrocks/master/kvrocks.conf
=====================================================
log-level info
requirepass 123
masterauth 123
port 6379
=====================================================
== File: backends-common/redis/src/test/resources/sentinel_tls.conf
=====================================================
dir /tmp
sentinel resolve-hostnames yes
sentinel monitor mymaster redis1 6379 2
sentinel auth-pass mymaster 123
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
tls-replication yes
tls-port 26379
port 0
tls-auth-clients yes
tls-ca-cert-file /etc/redis/rootCA.crt
tls-key-file /etc/redis/private.key
tls-cert-file /etc/redis/certificate.crt
=====================================================
== File: backends-common/redis/src/test/resources/sentinel.conf
=====================================================
dir /tmp
sentinel resolve-hostnames yes
sentinel monitor mymaster redis1 6379 2
sentinel auth-pass mymaster 123
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
requirepass "321"
=====================================================
== File: backends-common/redis/src/test/resources/redis_cluster.conf
=====================================================
# Custom config file to enable cluster mode
# on all Redis instances started via Docker
cluster-enabled yes
# The cluster file is created and managed by Redis
# We just need to declare it here
cluster-node-timeout 3000
appendonly yes
=====================================================
== File: backends-common/redis/src/test/resources/private.key
=====================================================
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAwtxnAa7Vc53o/+/4aqU6d5+YfZjUXQZ7WFF6bf5zv/8ZtG3F
eZjIbFbqgoxbu50493RsYcJcuTdUfyXTy+tK3vvKHjglK+uO9h0ySGqhOknrcVkv
v5qjWIQppR2Ritsgrx9W6YBhiHOugY4bvr2wDAwwH1Z8/+EdDJJc2nBtyrSW9I/p
GrgSpwHtSXCL/lifeQWxchJmPfdvzxiTFCHkjxTBCgmuqzpCmDA0FFfm65ZbN4Wt
ahx/niOtbOhGVXBLbD0zlSvkRk862yDs0YrD0a+dCivHP/st3RhTFuhRGAx5ORO6
ePyNKI21+4GVUjBgFl4efDBO/u1DGhhLZ0K4hwIDAQABAoIBAQCCyVGttH35qswf
NB6E3b9fWNQNwI0QnvAcuBs3RmjEPeEv09mOIriq1q9xzekoBH+evxqbhsubWQKy
kF4WaSeIgHEJVV/FmcYLdE8ygbcTG1gWbOj6bj0ihRo6g50TGL5YK+22rX9JCXPf
6tS+cix9+ZQ3BGLDj4Fi1b3Ss1FNkjnjHycnEvhIhEunJ+DGYRj18SycZL7OyDRU
khksMVuimcW8jx8kxvH38sj+MDbTvaFc/ukoS46tBKz9ZDJ553I0PTSHZfMw77+a
x346j1gvkQCejjlVD2J7kRlEMYdPn52wzXmJyzAE/UpragSL1mxDaE0Yhl1qkGDG
asAZZh2pAoGBAOs7zTF48b+NDbgQlDR57yaIiyDaMX2o9N0t+ob+y5HQr6F9LHE/
Bjs83X7IMqFQsc25Ytd8jsYzX7qfjVuhMs+wMhRyTO8+nYAYHBTKL8UvCU+xzA5z
xzcNLHOOyx2G4ZAb5aSgrX8/BZpZPxLictf8H/IPh42FNZv4b6YNezrTAoGBANQQ
MVih4nM68BGncQpuX25dR/InoMchzJktlYILlHgYmeJu/FTiHqdaLZDgbIBnXdVB
GGlMXIjesiC7gSGM23s8Yau047Pn8PQsC1a9Q8fS9CXmhqJmqjE3Fl793Q6vemQj
cPc1Glg2wQ8iZ9mpAiRSQBRcNCMNZgnVFs7MllL9AoGBAN6NcZEA0BdeKECgztbn
Fe/q91ZZmME+fIxV19Soc4i9W6z5dHagHhElgJlWZzBf3Bi68FzXJ201Zbh3A5JR
bHU6Sec2TLt9Dh4GsWqp75Aq9DBGEr0JpMzc1dVun5SL7BQfkKC0s/DTe0WQcjA3
tlfJ3Z9yOdkW0qWB4n/D+XapAoGBAI3gP4Ny2xQIzHCjO6ek7EfkNKw4AwL3A/E/
ZBVbNfubSekKI9uOZL/GP1H8M9s8TLTOFkzsf8Q6aaYojF4r5PNwFFBSdzz34mcZ
yIRBn8Vix2FL96tTUG4Y0ui+o1Sd5h5077EUYAnAqC098YjX38z5ElIM1fzVi/zs
CZRVoATpAoGAP2UyFMYfXBAc4KmWsr8qLRegVHSsdWtuKDNxffM3kLS4AVYUF0Sl
yGvit2PZG/z1FfjQTVuVjuTK/01xw7fWaVU16oqictneIQT7RS2Q5q0dNRxca9G5
f2+Cbztk8Hkqak4SEpMclq0FoIjwIiX586x0DuA2V37ApL21l1He+no=
-----END RSA PRIVATE KEY-----
=====================================================
== File: backends-common/redis/src/test/resources/rootCA.crt
=====================================================
-----BEGIN CERTIFICATE-----
MIID5TCCAs2gAwIBAgIUASoDQ2Wf0Mef+y9bfCqSMy6hFfMwDQYJKoZIhvcNAQEL
BQAwgYAxCzAJBgNVBAYTAlZOMQ4wDAYDVQQIDAVIYW5vaTEOMAwGA1UEBwwFSGFu
b2kxETAPBgNVBAoMCExpbmFnb3JhMQ4wDAYDVQQLDAVKYW1lczEOMAwGA1UEAwwF
YWRtaW4xHjAcBgkqhkiG9w0BCQEWD2FkbWluQGphbWVzLm9yZzAgFw0yNDA4MTUw
ODQzNDBaGA8yMjk4MDUzMTA4NDM0MFowgYAxCzAJBgNVBAYTAlZOMQ4wDAYDVQQI
DAVIYW5vaTEOMAwGA1UEBwwFSGFub2kxETAPBgNVBAoMCExpbmFnb3JhMQ4wDAYD
VQQLDAVKYW1lczEOMAwGA1UEAwwFYWRtaW4xHjAcBgkqhkiG9w0BCQEWD2FkbWlu
QGphbWVzLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMShojs1
MXL0IAAjmuLTYoNzXGTjfsmdIi+M9n/I5+QGpixcQzaX5uniP6b+AgsIhRlQPN+W
ixwWmpnDhZu+bV7bgJKXv0YmoKaGQGDb5N/PfuDpfGuVzQphjjtQP7jmW3wpqzNa
MBT03z5nK/WBxeMJXE9bYNT5rP28YCDg0f8sSKSZkMUdlYfoUm+vYH9+bmIwzaTF
6kRc6M+n/ELzDvDS+KevtJ3q4P710qTukH7uXEVEzs/lUSVtHXg/HrJ7tld3bnrq
ASDB0EmPljqjsHJB/f3n4PoT/Ansc4r4vjASQCPzr2yq6e7jHnU+QN4pXGUQv5Rd
zGqThOSRnyvQSgcCAwEAAaNTMFEwHQYDVR0OBBYEFJLv8+NebeBDDJWLpb3cD+kF
aIjeMB8GA1UdIwQYMBaAFJLv8+NebeBDDJWLpb3cD+kFaIjeMA8GA1UdEwEB/wQF
MAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFal8TpKaOBESJC9Nhb71Ivw8fV+kGdq
YySdseOnuXgAorXfs6MK0ko/rbrTJjS9JImbFcxTqHim+kTTsiy3wvYBUi77DKoS
XVhl5EuNkdkMG1EhR1kC7SUJv5C4o7i1OZIJwf7ATWyo/KbEezIIlvS7Jz9q7EOG
9zm57k+noY/BvbcRCh0CmOyD5MuyFGw+PitPiWzsWTK0PCBKRKwzRi0hbw/w4PHk
ur+/0bhMVU4kuE7SquRn3pjoxtQqYGy55xEAl/Rkzd5a9PD7vTnf3o2RcA5/K/5N
HJL1vvH3jMNLXBy/t3Uek5H/6BM8qxtAqNoJcnCfbm7zYz2GFGXThr0=
-----END CERTIFICATE-----
=====================================================
== File: backends-common/redis/src/test/resources/certificate.crt
=====================================================
-----BEGIN CERTIFICATE-----
MIIDiDCCAnACFA13culxEf5FhyuNZUycVScFz2UOMA0GCSqGSIb3DQEBCwUAMIGA
MQswCQYDVQQGEwJWTjEOMAwGA1UECAwFSGFub2kxDjAMBgNVBAcMBUhhbm9pMREw
DwYDVQQKDAhMaW5hZ29yYTEOMAwGA1UECwwFSmFtZXMxDjAMBgNVBAMMBWFkbWlu
MR4wHAYJKoZIhvcNAQkBFg9hZG1pbkBqYW1lcy5vcmcwIBcNMjQwODE1MDkyNjQw
WhgPMjI5ODA1MzEwOTI2NDBaMH4xCzAJBgNVBAYTAlZOMQ4wDAYDVQQIDAVIYW5v
aTEOMAwGA1UEBwwFSGFub2kxETAPBgNVBAoMCExpbmFnb3JhMQ4wDAYDVQQLDAVK
YW1lczENMAsGA1UEAwwEdXNlcjEdMBsGCSqGSIb3DQEJARYOdXNlckBqYW1lcy5v
cmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC3GcBrtVznej/7/hq
pTp3n5h9mNRdBntYUXpt/nO//xm0bcV5mMhsVuqCjFu7nTj3dGxhwly5N1R/JdPL
60re+8oeOCUr6472HTJIaqE6SetxWS+/mqNYhCmlHZGK2yCvH1bpgGGIc66Bjhu+
vbAMDDAfVnz/4R0MklzacG3KtJb0j+kauBKnAe1JcIv+WJ95BbFyEmY992/PGJMU
IeSPFMEKCa6rOkKYMDQUV+brlls3ha1qHH+eI61s6EZVcEtsPTOVK+RGTzrbIOzR
isPRr50KK8c/+y3dGFMW6FEYDHk5E7p4/I0ojbX7gZVSMGAWXh58ME7+7UMaGEtn
QriHAgMBAAEwDQYJKoZIhvcNAQELBQADggEBACDnWoIqpUCxUdYzbu6MABXliudg
yCHRvzRkc8l1h0J7QsLnimhfmV9ujZw+u0dBy722ueToecqMRo3CQhVz/KdGOsXK
mRF5uOk4A6fWEJcpxwVNfHmMz99JUOQFryZlirAAmJVKWQYHBizQX2PSRG8bBA9p
S3GpLgaA9b2ltxE0B/E5GSivIEeA2CwwUjhPBFTxpgdTbEYCDwhLhQ3d68i2jL8/
NuUA+6RlYESJiJuJa6VXinbl3LEjNCGoaw8S+Jln6XMtF+KNpLfiZcY4fA92k18n
YxEYYBYHDk2B457LlknIHHYlAvwVA85a2PfaRuIuEzJtfdui1QHv9JZIKL4=
-----END CERTIFICATE-----
=====================================================
== File: backends-common/redis/pom.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.james</groupId>
<artifactId>james-backends-common</artifactId>
<version>3.10.0-SNAPSHOT</version>
</parent>
<artifactId>apache-james-backends-redis</artifactId>
<name>Apache James :: Backends Common :: Redis</name>
<dependencies>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-core</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-filesystem-api</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-guice-common</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-testing</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-util</artifactId>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>eu.timepit</groupId>
<artifactId>refined_${scala.base}</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</dependency>
=====================================================
== File: backends-common/README.adoc
=====================================================
= backends-common
This project intends to share implementation details for commonly used back-ends accross james
projects.
For instance, as we are implementing a cassandra storage backend for James, we need to :
- Use tools to help to work with Cassandra in james-mailbox project
- We need to access test helpers in james-mpt project
- We need the same tools than those introduce in james-mailbox in James server data.
=====================================================
== File: backends-common/cassandra/src/test/resources/cassandra-driver.conf
=====================================================
datastax-java-driver {
basic.request {
timeout = 5 seconds
}
}
=====================================================
== File: backends-common/cassandra/src/test/resources/configuration-reader-test/cassandra.properties
=====================================================
mailbox.max.retry.acl=1
mailbox.max.retry.modseq=2
mailbox.max.retry.uid=3
mailbox.max.retry.message.flags.update=4
mailbox.max.retry.message.id.flags.update=5
fetch.advance.row.count=6
chunk.size.expunge=8
mailbox.blob.part.size=9
attachment.v2.migration.read.timeout=10
message.attachmentids.read.timeout=11
cassandra.consistency_level.regular=LOCAL_QUORUM
cassandra.consistency_level.lightweight_transaction=LOCAL_SERIAL
=====================================================
== File: README.adoc
=====================================================
Apache James Project
====================
:latest_james_version: 3.8.0
image:https://img.shields.io/badge/Join%20us-Mailing%20lists-purple.svg[link="https://james.apache.org/mail.html"]
link:https://gitter.im/apache/james-project[image:https://badges.gitter.im/apache/james-project.svg[Join the chat at link:https://gitter.im/apache/james-project]]
image:https://img.shields.io/badge/CI-Jenkins-blue.svg[link="https://ci-builds.apache.org/job/james/job/ApacheJames/"]
image:https://img.shields.io/badge/Documentation-green.svg[link="https://james.apache.org/documentation.html"]
image:https://img.shields.io/badge/Downloads-{latest_james_version}-yellow.svg[link="https://james.apache.org/download.cgi"]
image:https://img.shields.io/badge/Images-docker-blue.svg[link="https://hub.docker.com/r/apache/james"]
image:https://img.shields.io/badge/License-ApacheV2-orange.svg[link="https://www.apache.org/licenses/"]
image:https://img.shields.io/badge/Latests-news-red.svg[link="https://james.apache.org/index.html#posts"]
image::james-logo.png[link="https://james.apache.org"]
*James* stands for *Java Apache Mail Enterprise Server!*
It has a modular architecture based on a rich set of *modern* and *efficient* components which provides at the end
*complete, stable, secure and extendable Mail Servers running on the JVM*.
Create your *own personal solution* for emails treatment by assembling the components you need thanks to the Inversion
of Control mail platform offered and go further customizing filtering and routing rules using *James Mailet Container*.
Supported protocols are: IMAP, SMTP, link:https://jmap.io[JMAP], POP3 and more...
The link:https://james.staged.apache.org/james-distributed-app/{latest_james_version}/index.html[*Distributed server*] focuses on delivering an easy-to-operate scalable mail server based on modern technologies
(Cassandra, S3, OpenSearch and RabbitMQ).
Read more on https://james.apache.org/[our website].
== How to contribute?
.Read more...
[%collapsible]
====
James is a project that lives from the contributions of its community! Anyone can contribute!
Read https://james.apache.org/index.html#third[how to contribute].
We more than welcome *articles* and *blog posts* about James. Contact us by https://james.apache.org/mail.html[email]
or on https://gitter.im/apache/james-project[Gitter] to share your experiences.
*Documentation* is an easy way to get started, and more than wanted! Check out the https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20documentation%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC[~documentation] label on JIRA.
And to get started with *code contributions*, search out the
https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20newbie%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC[~newbie],
https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20easyfix%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC[~easyfix],
https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20feature%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC[~feature] labels on JIRA.
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1985.txt
=====================================================
Network Working Group J. De Winter
Request for Comments: 1985 Wildbear Consulting, Inc.
Category: Standards Track August 1996
SMTP Service Extension
for Remote Message Queue Starting
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Abstract
This memo defines an extension to the SMTP service whereby an SMTP
client and server may interact to give the server an opportunity to
start the processing of its queues for messages to go to a given
host. This extension is meant to be used in startup conditions as
well as for mail nodes that have transient connections to their
service providers.
1. Introduction
The TURN command was a valid attempt to address the problem of having
to start the processing for the mail queue on a remote machine.
However, the TURN command presents a large security loophole. As
there is no verification of the remote host name, the TURN command
could be used by a rogue system to download the mail for a site other
than itself.
Therefore, this memo introduces the ETRN command. This command uses
the mechanism defined in [4] to define extensions to the SMTP service
whereby a client ("sender-SMTP") may request that the server
("receiver-SMTP") start the processing of its mail queues for
messages that are waiting at the server for the client machine. If
any messages are at the server for the client, then the server should
create a new SMTP session and send the messages at that time.
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc2554.txt
=====================================================
Network Working Group J. Myers
Request for Comments: 2554 Netscape Communications
Category: Standards Track March 1999
SMTP Service Extension
for Authentication
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1999). All Rights Reserved.
1. Introduction
This document defines an SMTP service extension [ESMTP] whereby an
SMTP client may indicate an authentication mechanism to the server,
perform an authentication protocol exchange, and optionally negotiate
a security layer for subsequent protocol interactions. This
extension is a profile of the Simple Authentication and Security
Layer [SASL].
2. Conventions Used in this Document
In examples, "C:" and "S:" indicate lines sent by the client and
server respectively.
The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY"
in this document are to be interpreted as defined in "Key words for
use in RFCs to Indicate Requirement Levels" [KEYWORDS].
3. The Authentication service extension
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1652.txt
=====================================================
Network Working Group J. Klensin, WG Chair
Request for Comments: 1652 MCI
Obsoletes: 1426 N. Freed, Editor
Category: Standards Track Innosoft
M. Rose
Dover Beach Consulting, Inc.
E. Stefferud
Network Management Associates, Inc.
D. Crocker
Silicon Graphics, Inc.
July 1994
SMTP Service Extension for 8bit-MIMEtransport
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Abstract
This memo defines an extension to the SMTP service whereby an SMTP
content body consisting of text containing octets outside of the US-
ASCII octet range (hex 00-7F) may be relayed using SMTP.
1. Introduction
Although SMTP is widely and robustly deployed, various extensions
have been requested by parts of the Internet community. In
particular, a significant portion of the Internet community wishes to
exchange messages in which the content body consists of a MIME
message [3] containing arbitrary octet-aligned material. This memo
uses the mechanism described in [5] to define an extension to the
SMTP service whereby such contents may be exchanged. Note that this
extension does NOT eliminate the possibility of an SMTP server
limiting line length; servers are free to implement this extension
but nevertheless set a line length limit no lower than 1000 octets.
Given that this restriction still applies, this extension does NOT
provide a means for transferring unencoded binary via SMTP.
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1830.txt
=====================================================
Network Working Group G. Vaudreuil
Request for Comments: 1830 Octel Network Services
Category: Experimental August 1995
SMTP Service Extensions
for Transmission of Large
and Binary MIME Messages
Status of this Memo
This memo defines an Experimental Protocol for the Internet
community. This memo does not specify an Internet standard of any
kind. Discussion and suggestions for improvement are requested.
Distribution of this memo is unlimited.
1. Abstract
This memo defines two extensions to the SMTP service. The first
service enables a SMTP client and server to negotiate the use of an
alternate DATA command "BDAT" for efficiently sending large MIME
messages. The second extension takes advantage of the BDAT command
to permit the negotiated sending of unencoded binary data.
2. Introduction
The MIME extensions to the Internet message protocol provides for the
transmission of many kinds of data which were previously unsupported
in Internet mail. Anticipating the need to more efficiently
transport the new media made possible with MIME, the SMTP protocol
has been extended to provide transport for new message types. RFC
1426 defines one such extension for the transmission of unencoded 8
bit MIME messages [8BIT]. This service extension permits the
receiver SMTP to declare support for 8 bit body parts and the sender
to request 8 bit transmission of a particular message.
One expected result of the use of MIME is that the Internet mail
system will be expected to carry very large mail messages. In such
transactions, there is a need to eliminate the requirement that the
message be scanned for "CR LF . CR LF" sequences upon sending and
receiving to detect the end of message.
Independent of the need to send large messages, Internet mail is
increasingly multi-media there is a need to avoid the overhead of
base64 and quoted-printable encoding of binary objects sent using the
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc2142.txt
=====================================================
Network Working Group D. Crocker
Request for Comments: 2142 Internet Mail Consortium
Cateogry: Standards Track May 1997
MAILBOX NAMES FOR
COMMON SERVICES, ROLES AND FUNCTIONS
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
ABSTRACT
This specification enumerates and describes Internet mail addresses
(mailbox name @ host reference) to be used when contacting personnel
at an organization. Mailbox names are provided for both operations
and business functions. Additional mailbox names and aliases are not
prohibited, but organizations which support email exchanges with the
Internet are encouraged to support AT LEAST each mailbox name for
which the associated function exists within the organization.
1. RATIONALE AND SCOPE
Various Internet documents have specified mailbox names to be used
when reaching the operators of the new service; for example, [RFC822
6.3, C.6] requires the presence of a <POSTMASTER@domain> mailbox name
on all hosts that have an SMTP server. Other protocols have defacto
standards for well known mailbox names, such as <USENET@domain> for
NNTP (see [RFC977]), and <WEBMASTER@domain> for HTTP (see [HTTP]).
Defacto standards also exist for well known mailbox names which have
nothing to do with a particular protocol, e.g., <ABUSE@domain> and
<TROUBLE@domain>.
The purpose of this memo is to aggregate and specify the basic set of
mailbox names which organizations need to support. Most
organizations do not need to support the full set of mailbox names
defined here, since not every organization will implement the all of
the associated services. However, if a given service is offerred,
then the associated mailbox name(es) must be supported, resulting in
delivery to a recipient appropriate for the referenced service or
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc2034.txt
=====================================================
Network Working Group N. Freed
Request for Comments: RFC 2034 Innosoft
Category: Standards Track October 1996
SMTP Service Extension for
Returning Enhanced Error Codes
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Abstract
This memo defines an extension to the SMTP service [RFC-821, RFC-
1869] whereby an SMTP server augments its responses with the enhanced
mail system status codes defined in RFC 1893. These codes can then
be used to provide more informative explanations of error conditions,
especially in the context of the delivery status notifications format
defined in RFC 1894.
2. Introduction
Although SMTP is widely and robustly deployed, various extensions
have been requested by parts of the Internet community. In
particular, in the modern, international, and multilingual Internet a
need exists to assign codes to specific error conditions that can be
translated into different languages. RFC 1893 defines such a set of
status codes and RFC 1894 defines a mechanism to send such coded
material to users. However, in many cases the agent creating the RFC
1894 delivery status notification is doing so in response to errors
it received from a remote SMTP server.
As such, remote servers need a mechanism for embedding enhanced
status codes in their responses as well as a way to indicate to a
client when they are in fact doing this. This memo uses the SMTP
extension mechanism described in RFC 1869 to define such a mechanism.
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1891.txt
=====================================================
Network Working Group K. Moore
Request for Comments: 1891 University of Tennessee
Category: Standards Track January 1996
SMTP Service Extension
for Delivery Status Notifications
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Abstract
This memo defines an extension to the SMTP service, which allows an
SMTP client to specify (a) that delivery status notifications (DSNs)
should be generated under certain conditions, (b) whether such
notifications should return the contents of the message, and (c)
additional information, to be returned with a DSN, that allows the
sender to identify both the recipient(s) for which the DSN was
issued, and the transaction in which the original message was sent.
Any questions, comments, and reports of defects or ambiguities in
this specification may be sent to the mailing list for the NOTARY
working group of the IETF, using the address
<notifications@cs.utk.edu>. Requests to subscribe to the mailing
list should be addressed to <notifications-request@cs.utk.edu>.
Implementors of this specification are encouraged to subscribe to the
mailing list, so that they will quickly be informed of any problems
which might hinder interoperability.
NOTE: This document is a Proposed Standard. If and when this
protocol is submitted for Draft Standard status, any normative text
(phrases containing SHOULD, SHOULD NOT, MUST, MUST NOT, or MAY) in
this document will be re-evaluated in light of implementation
experience, and are thus subject to change.
2. Introduction
The SMTP protocol [1] requires that an SMTP server provide
notification of delivery failure, if it determines that a message
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc0974.txt
=====================================================
Network Working Group Craig Partridge
Request for Comments: 974 CSNET CIC BBN Laboratories Inc
January 1986
MAIL ROUTING AND THE DOMAIN SYSTEM
Status of this Memo
This RFC presents a description of how mail systems on the Internet
are expected to route messages based on information from the domain
system described in RFCs 882, 883 and 973. Distribution of this memo
is unlimited.
Introduction
The purpose of this memo is to explain how mailers are to decide how
to route a message addressed to a given Internet domain name. This
involves a discussion of how mailers interpret MX RRs, which are used
for message routing. Note that this memo makes no statement about
how mailers are to deal with MB and MG RRs, which are used for
interpreting mailbox names.
Under RFC-882 and RFC-883 certain assumptions about mail addresses
have been changed. Up to now, one could usually assume that if a
message was addressed to a mailbox, for example, at LOKI.BBN.COM,
that one could just open an SMTP connection to LOKI.BBN.COM and pass
the message along. This system broke down in certain situations,
such as for certain UUCP and CSNET hosts which were not directly
attached to the Internet, but these hosts could be handled as special
cases in configuration files (for example, most mailers were set up
to automatically forward mail addressed to a CSNET host to
CSNET-RELAY.ARPA).
Under domains, one cannot simply open a connection to LOKI.BBN.COM,
but must instead ask the domain system where messages to LOKI.BBN.COM
are to be delivered. And the domain system may direct a mailer to
deliver messages to an entirely different host, such as SH.CS.NET.
Or, in a more complicated case, the mailer may learn that it has a
choice of routes to LOKI.BBN.COM. This memo is essentially a set of
guidelines on how mailers should behave in this more complex world.
Readers are expected to be familiar with RFCs 882, 883, and the
updates to them (e.g., RFC-973).
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc2821.txt
=====================================================
Network Working Group J. Klensin, Editor
Request for Comments: 2821 AT&T Laboratories
Obsoletes: 821, 974, 1869 April 2001
Updates: 1123
Category: Standards Track
Simple Mail Transfer Protocol
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2001). All Rights Reserved.
Abstract
This document is a self-contained specification of the basic protocol
for the Internet electronic mail transport. It consolidates, updates
and clarifies, but doesn't add new or change existing functionality
of the following:
- the original SMTP (Simple Mail Transfer Protocol) specification of
RFC 821 [30],
- domain name system requirements and implications for mail
transport from RFC 1035 [22] and RFC 974 [27],
- the clarifications and applicability statements in RFC 1123 [2],
and
- material drawn from the SMTP Extension mechanisms [19].
It obsoletes RFC 821, RFC 974, and updates RFC 1123 (replaces the
mail transport materials of RFC 1123). However, RFC 821 specifies
some features that were not in significant use in the Internet by the
mid-1990s and (in appendices) some additional transport models.
Those sections are omitted here in the interest of clarity and
brevity; readers needing them should refer to RFC 821.
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1870.txt
=====================================================
Network Working Group J. Klensin, WG Chair
Request For Comments: 1870 MCI
STD: 10 N. Freed, Editor
Obsoletes: 1653 Innosoft International, Inc.
Category: Standards Track K. Moore
University of Tennessee
November 1995
SMTP Service Extension
for Message Size Declaration
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Abstract
This memo defines an extension to the SMTP service whereby an SMTP
client and server may interact to give the server an opportunity to
decline to accept a message (perhaps temporarily) based on the
client's estimate of the message size.
2. Introduction
The MIME extensions to the Internet message protocol provide for the
transmission of many kinds of data which were previously unsupported
in Internet mail. One expected result of the use of MIME is that
SMTP will be expected to carry a much wider range of message sizes
than was previously the case. This has an impact on the amount of
resources (e.g. disk space) required by a system acting as a server.
This memo uses the mechanism defined in [5] to define extensions to
the SMTP service whereby a client ("sender-SMTP") may declare the
size of a particular message to a server ("receiver-SMTP"), after
which the server may indicate to the client that it is or is not
willing to accept the message based on the declared message size and
whereby a server ("receiver-SMTP") may declare the maximum message
size it is willing to accept to a client ("sender-SMTP").
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc2197.txt
=====================================================
Network Working Group N. Freed
Request for Comments: 2197 Innosoft
Obsoletes: 1854 September 1997
Category: Standards Track
SMTP Service Extension
for Command Pipelining
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Abstract
This memo defines an extension to the SMTP service whereby a server
can indicate the extent of its ability to accept multiple commands in
a single TCP send operation. Using a single TCP send operation for
multiple commands can improve SMTP performance significantly.
The present document is an updated version of RFC 1854 [3]. Only
textual and editorial changes have been made; the protocol has not
changed in any way.
2. Introduction
Although SMTP is widely and robustly deployed, certain extensions may
nevertheless prove useful. In particular, many parts of the Internet
make use of high latency network links. SMTP's intrinsic one
command-one response structure is significantly penalized by high
latency links, often to the point where the factors contributing to
overall connection time are dominated by the time spent waiting for
responses to individual commands (turnaround time).
In the best of all worlds it would be possible to simply deploy SMTP
client software that makes use of command pipelining: batching up
multiple commands into single TCP send operations. Unfortunately, the
original SMTP specification [1] did not explicitly state that SMTP
servers must support this. As a result a non-trivial number of
Internet SMTP servers cannot adequately handle command pipelining.
Flaws known to exist in deployed servers include:
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc0821.txt
=====================================================
RFC 821
SIMPLE MAIL TRANSFER PROTOCOL
Jonathan B. Postel
August 1982
Information Sciences Institute
University of Southern California
4676 Admiralty Way
Marina del Rey, California 90291
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1869.txt
=====================================================
Network Working Group J. Klensin, WG Chair
Request For Comments: 1869 MCI
STD: 10 N. Freed, Editor
Obsoletes: 1651 Innosoft International, Inc.
Category: Standards Track M. Rose
Dover Beach Consulting, Inc.
E. Stefferud
Network Management Associates, Inc.
D. Crocker
Brandenburg Consulting
November 1995
SMTP Service Extensions
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Abstract
This memo defines a framework for extending the SMTP service by
defining a means whereby a server SMTP can inform a client SMTP as to
the service extensions it supports. Extensions to the SMTP service
are registered with the IANA. This framework does not require
modification of existing SMTP clients or servers unless the features
of the service extensions are to be requested or provided.
2. Introduction
The Simple Mail Transfer Protocol (SMTP) [1] has provided a stable,
effective basis for the relay function of message transfer agents.
Although a decade old, SMTP has proven remarkably resilient.
Nevertheless, the need for a number of protocol extensions has become
evident. Rather than describing these extensions as separate and
haphazard entities, this document enhances SMTP in a straightforward
fashion that provides a framework in which all future extensions can
be built in a single consistent way.
3. Framework for SMTP Extensions
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1893.txt
=====================================================
Network Working Group G. Vaudreuil
Request for Comments: 1893 Octel Network Services
Category: Standards Track January 1996
Enhanced Mail System Status Codes
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Overview
There currently is not a standard mechanism for the reporting of mail
system errors except for the limited set offered by SMTP and the
system specific text descriptions sent in mail messages. There is a
pressing need for a rich machine readable status code for use in
delivery status notifications [DSN]. This document proposes a new
set of status codes for this purpose.
SMTP [SMTP] error codes have historically been used for reporting
mail system errors. Because of limitations in the SMTP code design,
these are not suitable for use in delivery status notifications.
SMTP provides about 12 useful codes for delivery reports. The
majority of the codes are protocol specific response codes such as
the 354 response to the SMTP data command. Each of the 12 useful
codes are each overloaded to indicate several error conditions each.
SMTP suffers some scars from history, most notably the unfortunate
damage to the reply code extension mechanism by uncontrolled use.
This proposal facilitates future extensibility by requiring the
client to interpret unknown error codes according to the theory of
codes while requiring servers to register new response codes.
The SMTP theory of reply codes partitioned in the number space such a
manner that the remaining available codes will not provide the space
needed. The most critical example is the existence of only 5
remaining codes for mail system errors. The mail system
classification includes both host and mailbox error conditions. The
remaining third digit space would be completely consumed as needed to
indicate MIME and media conversion errors and security system errors.
=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc6710.txt
=====================================================
Internet Engineering Task Force (IETF) A. Melnikov
Request for Comments: 6710 Isode Ltd
Category: Standards Track K. Carlberg
ISSN: 2070-1721 G11
August 2012
Simple Mail Transfer Protocol Extension for Message Transfer Priorities
Abstract
This memo defines an extension to the SMTP (Simple Mail Transfer
Protocol) service whereby messages are given a label to indicate
preferential handling, to enable mail handling nodes to take this
information into account for onward processing.
Status of This Memo
This is an Internet Standards Track document.
This document is a product of the Internet Engineering Task Force
(IETF). It represents the consensus of the IETF community. It has
received public review and has been approved for publication by the
Internet Engineering Steering Group (IESG). Further information on
Internet Standards is available in Section 2 of RFC 5741.
Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
http://www.rfc-editor.org/info/rfc6710.
Copyright Notice
Copyright (c) 2012 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
=====================================================
== File: src/site/resources/server/rfclist/lmtp/rfc2033.txt
=====================================================
Network Working Group J. Myers
Request for Comments: 2033 Carnegie Mellon
Category: Informational October 1996
Local Mail Transfer Protocol
Status of this Memo
This memo provides information for the Internet community. This memo
does not specify an Internet standard of any kind. Distribution of
this memo is unlimited.
1. Abstract
SMTP [SMTP] [HOST-REQ] and its service extensions [ESMTP] provide a
mechanism for transferring mail reliably and efficiently. The design
of the SMTP protocol effectively requires the server to manage a mail
delivery queue.
In some limited circumstances, outside the area of mail exchange
between independent hosts on public networks, it is desirable to
implement a system where a mail receiver does not manage a queue.
This document describes the LMTP protocol for transporting mail into
such systems.
Although LMTP is an alternative protocol to ESMTP, it uses (with a
few changes) the syntax and semantics of ESMTP. This design permits
LMTP to utilize the extensions defined for ESMTP. LMTP should be
used only by specific prior arrangement and configuration, and it
MUST NOT be used on TCP port 25.
Table of Contents
1. Abstract ................................................ 1
2. Conventions Used in this Document ....................... 2
3. Introduction and Overview ............................... 2
4. The LMTP protocol ....................................... 3
4.1. The LHLO, HELO and EHLO commands ........................ 4
4.2. The DATA command ........................................ 4
4.3. The BDAT command ........................................ 5
5. Implementation requirements ............................. 6
6. Acknowledgments ......................................... 6
7. References .............................................. 7
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2087.txt
=====================================================
Network Working Group J. Myers
Request for Comments: 2087 Carnegie Mellon
Category: Standards Track January 1997
IMAP4 QUOTA extension
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Abstract
The QUOTA extension of the Internet Message Access Protocol [IMAP4]
permits administrative limits on resource usage (quotas) to be
manipulated through the IMAP protocol.
Table of Contents
1. Abstract........................................... 1
2. Conventions Used in this Document.................. 1
3. Introduction and Overview.......................... 2
4. Commands........................................... 2
4.1. SETQUOTA Command................................... 2
4.2. GETQUOTA Command................................... 2
4.3. GETQUOTAROOT Command............................... 3
5. Responses.......................................... 3
5.1. QUOTA Response..................................... 3
5.2. QUOTAROOT Response................................. 4
6. Formal syntax...................................... 4
7. References......................................... 5
8. Security Considerations............................ 5
9. Author's Address................................... 5
2. Conventions Used in this Document
In examples, "C:" and "S:" indicate lines sent by the client and
server respectively.
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2221.txt
=====================================================
Network Working Group M. Gahrns
Request for Comments: 2221 Microsoft
Category: Standards Track October 1997
IMAP4 Login Referrals
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1997). All Rights Reserved.
1. Abstract
When dealing with large amounts of users and many IMAP4 [RFC-2060]
servers, it is often necessary to move users from one IMAP4 server to
another. For example, hardware failures or organizational changes
may dictate such a move.
Login referrals allow clients to transparently connect to an
alternate IMAP4 server, if their home IMAP4 server has changed.
A referral mechanism can provide efficiencies over the alternative
'proxy method', in which the local IMAP4 server contacts the remote
server on behalf of the client, and then transfers the data from the
remote server to itself, and then on to the client. The referral
mechanism's direct client connection to the remote server is often a
more efficient use of bandwidth, and does not require the local
server to impersonate the client when authenticating to the remote
server.
2. Conventions used in this document
In examples, "C:" and "S:" indicate lines sent by the client and
server respectively.
A home server, is an IMAP4 server that contains the user's inbox.
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2193.txt
=====================================================
Network Working Group M. Gahrns
Request for Comments: 2193 Microsoft
Category: Standards Track September 1997
IMAP4 Mailbox Referrals
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Abstract
When dealing with large amounts of users, messages and geographically
dispersed IMAP4 [RFC-2060] servers, it is often desirable to
distribute messages amongst different servers within an organization.
For example an administrator may choose to store user's personal
mailboxes on a local IMAP4 server, while storing shared mailboxes
remotely on another server. This type of configuration is common
when it is uneconomical to store all data centrally due to limited
bandwidth or disk resources.
Mailbox referrals allow clients to seamlessly access mailboxes that
are distributed across several IMAP4 servers.
A referral mechanism can provide efficiencies over the alternative
"proxy method", in which the local IMAP4 server contacts the remote
server on behalf of the client, and then transfers the data from the
remote server to itself, and then on to the client. The referral
mechanism's direct client connection to the remote server is often a
more efficient use of bandwidth, and does not require the local
server to impersonate the client when authenticating to the remote
server.
2. Conventions used in this document
In examples, "C:" and "S:" indicate lines sent by the client and
server respectively.
A home server, is an IMAP4 server that contains the user's inbox.
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2192.txt
=====================================================
Network Working Group C. Newman
Request for Comments: 2192 Innosoft
Category: Standards Track September 1997
IMAP URL Scheme
Status of this memo
This document specifies an Internet standards track protocol for
the Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is
unlimited.
Abstract
IMAP [IMAP4] is a rich protocol for accessing remote message
stores. It provides an ideal mechanism for accessing public
mailing list archives as well as private and shared message stores.
This document defines a URL scheme for referencing objects on an
IMAP server.
1. Conventions used in this document
The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY"
in this document are to be interpreted as defined in "Key words for
use in RFCs to Indicate Requirement Levels" [KEYWORDS].
2. IMAP scheme
The IMAP URL scheme is used to designate IMAP servers, mailboxes,
messages, MIME bodies [MIME], and search programs on Internet hosts
accessible using the IMAP protocol.
The IMAP URL follows the common Internet scheme syntax as defined
in RFC 1738 [BASIC-URL] except that clear text passwords are not
permitted. If :<port> is omitted, the port defaults to 143.
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2088.txt
=====================================================
Network Working Group J. Myers
Request for Comments: 2088 Carnegie Mellon
Cateogry: Standards Track January 1997
IMAP4 non-synchronizing literals
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Abstract
The Internet Message Access Protocol [IMAP4] contains the "literal"
syntactic construct for communicating strings. When sending a
literal from client to server, IMAP4 requires the client to wait for
the server to send a command continuation request between sending the
octet count and the string data. This document specifies an
alternate form of literal which does not require this network round
trip.
2. Conventions Used in this Document
In examples, "C:" and "S:" indicate lines sent by the client and
server respectively.
3. Specification
The non-synchronizing literal is added an alternate form of literal,
and may appear in communication from client to server instead of the
IMAP4 form of literal. The IMAP4 form of literal, used in
communication from client to server, is referred to as a
synchronizing literal.
Non-synchronizing literals may be used with any IMAP4 server
implementation which returns "LITERAL+" as one of the supported
capabilities to the CAPABILITY command. If the server does not
advertise the LITERAL+ capability, the client must use synchronizing
literals instead.
The non-synchronizing literal is distinguished from the original
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2060.txt
=====================================================
Network Working Group M. Crispin
Request for Comments: 2060 University of Washington
Obsoletes: 1730 December 1996
Category: Standards Track
INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Abstract
The Internet Message Access Protocol, Version 4rev1 (IMAP4rev1)
allows a client to access and manipulate electronic mail messages on
a server. IMAP4rev1 permits manipulation of remote message folders,
called "mailboxes", in a way that is functionally equivalent to local
mailboxes. IMAP4rev1 also provides the capability for an offline
client to resynchronize with the server (see also [IMAP-DISC]).
IMAP4rev1 includes operations for creating, deleting, and renaming
mailboxes; checking for new messages; permanently removing messages;
setting and clearing flags; [RFC-822] and [MIME-IMB] parsing;
searching; and selective fetching of message attributes, texts, and
portions thereof. Messages in IMAP4rev1 are accessed by the use of
numbers. These numbers are either message sequence numbers or unique
identifiers.
IMAP4rev1 supports a single server. A mechanism for accessing
configuration information to support multiple IMAP4rev1 servers is
discussed in [ACAP].
IMAP4rev1 does not specify a means of posting mail; this function is
handled by a mail transfer protocol such as [SMTP].
IMAP4rev1 is designed to be upwards compatible from the [IMAP2] and
unpublished IMAP2bis protocols. In the course of the evolution of
IMAP4rev1, some aspects in the earlier protocol have become obsolete.
Obsolete commands, responses, and data formats which an IMAP4rev1
implementation may encounter when used with an earlier implementation
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2086.txt
=====================================================
Network Working Group J. Myers
Request for Comments: 2086 Carnegie Mellon
Category: Standards Track January 1997
IMAP4 ACL extension
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Abstract
The ACL extension of the Internet Message Access Protocol [IMAP4]
permits access control lists to be manipulated through the IMAP
protocol.
Table of Contents
1. Abstract............................................... 1
2. Conventions Used in this Document...................... 1
3. Introduction and Overview.............................. 2
4. Commands............................................... 3
4.1. SETACL................................................. 3
4.2. DELETEACL.............................................. 4
4.3. GETACL................................................. 4
4.4. LISTRIGHTS............................................. 4
4.5. MYRIGHTS............................................... 5
5. Responses.............................................. 5
5.1. ACL.................................................... 5
5.2. LISTRIGHTS............................................. 6
5.3. MYRIGHTS............................................... 6
6. Formal Syntax.......................................... 6
7. References............................................. 7
8. Security Considerations................................ 7
9. Author's Address....................................... 8
2. Conventions Used in this Document
In examples, "C:" and "S:" indicate lines sent by the client and
server respectively.
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2342.txt
=====================================================
Network Working Group M. Gahrns
Request for Comments: 2342 Microsoft
Category: Standards Track C. Newman
Innosoft
May 1998
IMAP4 Namespace
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1998). All Rights Reserved.
1. Abstract
IMAP4 [RFC-2060] does not define a default server namespace. As a
result, two common namespace models have evolved:
The "Personal Mailbox" model, in which the default namespace that is
presented consists of only the user's personal mailboxes. To access
shared mailboxes, the user must use an escape mechanism to reach
another namespace.
The "Complete Hierarchy" model, in which the default namespace that
is presented includes the user's personal mailboxes along with any
other mailboxes they have access to.
These two models, create difficulties for certain client operations.
This document defines a NAMESPACE command that allows a client to
discover the prefixes of namespaces used by a server for personal
mailboxes, other users' mailboxes, and shared mailboxes. This allows
a client to avoid much of the manual user configuration that is now
necessary when mixing and matching IMAP4 clients and servers.
2. Conventions used in this document
In examples, "C:" and "S:" indicate lines sent by the client and
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2595.txt
=====================================================
Network Working Group C. Newman
Request for Comments: 2595 Innosoft
Category: Standards Track June 1999
Using TLS with IMAP, POP3 and ACAP
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1999). All Rights Reserved.
1. Motivation
The TLS protocol (formerly known as SSL) provides a way to secure an
application protocol from tampering and eavesdropping. The option of
using such security is desirable for IMAP, POP and ACAP due to common
connection eavesdropping and hijacking attacks [AUTH]. Although
advanced SASL authentication mechanisms can provide a lightweight
version of this service, TLS is complimentary to simple
authentication-only SASL mechanisms or deployed clear-text password
login commands.
Many sites have a high investment in authentication infrastructure
(e.g., a large database of a one-way-function applied to user
passwords), so a privacy layer which is not tightly bound to user
authentication can protect against network eavesdropping attacks
without requiring a new authentication infrastructure and/or forcing
all users to change their password. Recognizing that such sites will
desire simple password authentication in combination with TLS
encryption, this specification defines the PLAIN SASL mechanism for
use with protocols which lack a simple password authentication
command such as ACAP and SMTP. (Note there is a separate RFC for the
STARTTLS command in SMTP [SMTPTLS].)
There is a strong desire in the IETF to eliminate the transmission of
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2195.txt
=====================================================
Network Working Group J. Klensin
Request for Comments: 2195 R. Catoe
Category: Standards Track P. Krumviede
Obsoletes: 2095 MCI
September 1997
IMAP/POP AUTHorize Extension for Simple Challenge/Response
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Abstract
While IMAP4 supports a number of strong authentication mechanisms as
described in RFC 1731, it lacks any mechanism that neither passes
cleartext, reusable passwords across the network nor requires either
a significant security infrastructure or that the mail server update
a mail-system-wide user authentication file on each mail access.
This specification provides a simple challenge-response
authentication protocol that is suitable for use with IMAP4. Since
it utilizes Keyed-MD5 digests and does not require that the secret be
stored in the clear on the server, it may also constitute an
improvement on APOP for POP3 use as specified in RFC 1734.
1. Introduction
Existing Proposed Standards specify an AUTHENTICATE mechanism for the
IMAP4 protocol [IMAP, IMAP-AUTH] and a parallel AUTH mechanism for
the POP3 protocol [POP3-AUTH]. The AUTHENTICATE mechanism is
intended to be extensible; the four methods specified in [IMAP-AUTH]
are all fairly powerful and require some security infrastructure to
support. The base POP3 specification [POP3] also contains a
lightweight challenge-response mechanism called APOP. APOP is
associated with most of the risks associated with such protocols: in
particular, it requires that both the client and server machines have
access to the shared secret in cleartext form. CRAM offers a method
for avoiding such cleartext storage while retaining the algorithmic
simplicity of APOP in using only MD5, though in a "keyed" method.
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2180.txt
=====================================================
Network Working Group M. Gahrns
Request for Comments: 2180 Microsoft
Category: Informational July 1997
IMAP4 Multi-Accessed Mailbox Practice
Status of this Memo
This memo provides information for the Internet community. This memo
does not specify an Internet standard of any kind. Distribution of
this memo is unlimited.
1. Abstract
IMAP4[RFC-2060] is rich client/server protocol that allows a client
to access and manipulate electronic mail messages on a server.
Within the protocol framework, it is possible to have differing
results for particular client/server interactions. If a protocol does
not allow for this, it is often unduly restrictive.
For example, when multiple clients are accessing a mailbox and one
attempts to delete the mailbox, an IMAP4 server may choose to
implement a solution based upon server architectural constraints or
individual preference.
With this flexibility comes greater client responsibility. It is not
sufficient for a client to be written based upon the behavior of a
particular IMAP server. Rather the client must be based upon the
behavior allowed by the protocol.
By documenting common IMAP4 server practice for the case of
simultaneous client access to a mailbox, we hope to ensure the widest
amount of inter-operation between IMAP4 clients and servers.
The behavior described in this document reflects the practice of some
existing servers or behavior that the consensus of the IMAP mailing
list has deemed to be reasonable. The behavior described within this
document is believed to be [RFC-2060] compliant. However, this
document is not meant to define IMAP4 compliance, nor is it an
exhaustive list of valid IMAP4 behavior. [RFC-2060] must always be
consulted to determine IMAP4 compliance, especially for server
behavior not described within this document.
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc5256.txt
=====================================================
Network Working Group M. Crispin
Request for Comments: 5256 Panda Programming
Category: Standards Track K. Murchison
Carnegie Mellon University
June 2008
Internet Message Access Protocol - SORT and THREAD Extensions
Status of This Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Abstract
This document describes the base-level server-based sorting and
threading extensions to the IMAP protocol. These extensions provide
substantial performance improvements for IMAP clients that offer
sorted and threaded views.
1. Introduction
The SORT and THREAD extensions to the [IMAP] protocol provide a means
of server-based sorting and threading of messages, without requiring
that the client download the necessary data to do so itself. This is
particularly useful for online clients as described in [IMAP-MODELS].
A server that supports the base-level SORT extension indicates this
with a capability name which starts with "SORT". Future, upwards-
compatible extensions to the SORT extension will all start with
"SORT", indicating support for this base level.
A server that supports the THREAD extension indicates this with one
or more capability names consisting of "THREAD=" followed by a
supported threading algorithm name as described in this document.
This provides for future upwards-compatible extensions.
A server that implements the SORT and/or THREAD extensions MUST
collate strings in accordance with the requirements of I18NLEVEL=1,
as described in [IMAP-I18N], and SHOULD implement and advertise the
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2177.txt
=====================================================
Network Working Group B. Leiba
Request for Comments: 2177 IBM T.J. Watson Research Center
Category: Standards Track June 1997
IMAP4 IDLE command
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Abstract
The Internet Message Access Protocol [IMAP4] requires a client to
poll the server for changes to the selected mailbox (new mail,
deletions). It's often more desirable to have the server transmit
updates to the client in real time. This allows a user to see new
mail immediately. It also helps some real-time applications based on
IMAP, which might otherwise need to poll extremely often (such as
every few seconds). (While the spec actually does allow a server to
push EXISTS responses aysynchronously, a client can't expect this
behaviour and must poll.)
This document specifies the syntax of an IDLE command, which will
allow a client to tell the server that it's ready to accept such
real-time updates.
2. Conventions Used in this Document
In examples, "C:" and "S:" indicate lines sent by the client and
server respectively.
The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY"
in this document are to be interpreted as described in RFC 2060
[IMAP4].
3. Specification
IDLE Command
Arguments: none
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2683.txt
=====================================================
Network Working Group B. Leiba
Request for Comments: 2683 IBM T.J. Watson Research Center
Category: Informational September 1999
IMAP4 Implementation Recommendations
Status of this Memo
This memo provides information for the Internet community. It does
not specify an Internet standard of any kind. Distribution of this
memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1999). All Rights Reserved.
1. Abstract
The IMAP4 specification [RFC-2060] describes a rich protocol for use
in building clients and servers for storage, retrieval, and
manipulation of electronic mail. Because the protocol is so rich and
has so many implementation choices, there are often trade-offs that
must be made and issues that must be considered when designing such
clients and servers. This document attempts to outline these issues
and to make recommendations in order to make the end products as
interoperable as possible.
2. Conventions used in this document
In examples, "C:" indicates lines sent by a client that is connected
to a server. "S:" indicates lines sent by the server to the client.
The words "must", "must not", "should", "should not", and "may" are
used with specific meaning in this document; since their meaning is
somewhat different from that specified in RFC 2119, we do not put
them in all caps here. Their meaning is as follows:
must -- This word means that the action described is necessary
to ensure interoperability. The recommendation should
not be ignored.
must not -- This phrase means that the action described will be
almost certain to hurt interoperability. The
recommendation should not be ignored.
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2359.txt
=====================================================
Network Working Group J. Myers
Request for Comments: 2359 Netscape Communications
Category: Standards Track June 1998
IMAP4 UIDPLUS extension
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1998). All Rights Reserved.
IESG NOTE
The IMAP extension described here assumes a particular means of using
IMAP to support disconnected operation. However, this means of
supporting disconnected operation is not yet documented. Also, there
are multiple theories about how best to do disconnected operation in
IMAP, and as yet, there is no consensus on which one should be
adopted as a standard.
This document is being approved as a Proposed Standard because it
does not appear to have technical flaws in itelf. However, approval
of this document as a Proposed Standard should not be considered an
IETF endorsement of any particular means of doing disconnected
operation in IMAP.
Table of Contents
1. Abstract .............................................. 2
2. Conventions Used in this Document ..................... 2
3. Introduction and Overview ............................. 2
4. Features .............................................. 2
4.1. UID EXPUNGE Command ................................... 2
4.2. APPENDUID response code ............................... 3
4.3. COPYUID response code ................................. 4
5. Formal Syntax ......................................... 4
6. References ............................................ 4
=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc1731.txt
=====================================================
Network Working Group J. Myers
Request for Comments: 1731 Carnegie Mellon
Category: Standards Track December 1994
IMAP4 Authentication Mechanisms
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Introduction
The Internet Message Access Protocol, Version 4 [IMAP4] contains the
AUTHENTICATE command, for identifying and authenticating a user to an
IMAP4 server and for optionally negotiating a protection mechanism
for subsequent protocol interactions. This document describes
several authentication mechanisms for use by the IMAP4 AUTHENTICATE
command.
2. Kerberos version 4 authentication mechanism
The authentication type associated with Kerberos version 4 is
"KERBEROS_V4".
The data encoded in the first ready response contains a random 32-bit
number in network byte order. The client should respond with a
Kerberos ticket and an authenticator for the principal
"imap.hostname@realm", where "hostname" is the first component of the
host name of the server with all letters in lower case and where
"realm" is the Kerberos realm of the server. The encrypted checksum
field included within the Kerberos authenticator should contain the
server provided 32-bit number in network byte order.
Upon decrypting and verifying the ticket and authenticator, the
server should verify that the contained checksum field equals the
original server provided random 32-bit number. Should the
verification be successful, the server must add one to the checksum
and construct 8 octets of data, with the first four octets containing
=====================================================
== File: src/site/resources/server/rfclist/pop3/rfc1725.txt
=====================================================
Network Working Group J. Myers
Request for Comments: 1725 Carnegie Mellon
Obsoletes: 1460 M. Rose
Category: Standards Track Dover Beach Consulting, Inc.
November 1994
Post Office Protocol - Version 3
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Overview
This memo is a revision to RFC 1460, a Draft Standard. It makes the
following changes from that document:
- removed text regarding "split-UA model", which didn't add
anything to the understanding of POP
- clarified syntax of commands, keywords, and arguments
- clarified behavior on broken connection
- explicitly permitted an inactivity autologout timer
- clarified the requirements of the "exclusive-access lock"
- removed implementation-specific wording regarding the parsing of
the maildrop
- allowed servers to close the connection after a failed
authentication command
- removed the LAST command
- fixed typo in example of TOP command
- clarified that the second argument to the TOP command is non-
negative
=====================================================
== File: src/site/resources/server/rfclist/pop3/rfc1939.txt
=====================================================
Network Working Group J. Myers
Request for Comments: 1939 Carnegie Mellon
STD: 53 M. Rose
Obsoletes: 1725 Dover Beach Consulting, Inc.
Category: Standards Track May 1996
Post Office Protocol - Version 3
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Table of Contents
1. Introduction ................................................ 2
2. A Short Digression .......................................... 2
3. Basic Operation ............................................. 3
4. The AUTHORIZATION State ..................................... 4
QUIT Command ................................................ 5
5. The TRANSACTION State ....................................... 5
STAT Command ................................................ 6
LIST Command ................................................ 6
RETR Command ................................................ 8
DELE Command ................................................ 8
NOOP Command ................................................ 9
RSET Command ................................................ 9
6. The UPDATE State ............................................ 10
QUIT Command ................................................ 10
7. Optional POP3 Commands ...................................... 11
TOP Command ................................................. 11
UIDL Command ................................................ 12
USER Command ................................................ 13
PASS Command ................................................ 14
APOP Command ................................................ 15
8. Scaling and Operational Considerations ...................... 16
9. POP3 Command Summary ........................................ 18
10. Example POP3 Session ....................................... 19
11. Message Format ............................................. 19
12. References ................................................. 20
13. Security Considerations .................................... 20
=====================================================
== File: src/site/resources/server/rfclist/pop3/rfc1734.txt
=====================================================
Network Working Group J. Myers
Request for Comments: 1734 Carnegie Mellon
Category: Standards Track December 1994
POP3 AUTHentication command
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Introduction
This document describes the optional AUTH command, for indicating an
authentication mechanism to the server, performing an authentication
protocol exchange, and optionally negotiating a protection mechanism
for subsequent protocol interactions. The authentication and
protection mechanisms used by the POP3 AUTH command are those used by
IMAP4.
2. The AUTH command
AUTH mechanism
Arguments:
a string identifying an IMAP4 authentication mechanism,
such as defined by [IMAP4-AUTH]. Any use of the string
"imap" used in a server authentication identity in the
definition of an authentication mechanism is replaced with
the string "pop".
Restrictions:
may only be given in the AUTHORIZATION state
Discussion:
The AUTH command indicates an authentication mechanism to
the server. If the server supports the requested
authentication mechanism, it performs an authentication
protocol exchange to authenticate and identify the user.
=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2830.txt
=====================================================
Network Working Group J. Hodges
Request for Comments: 2830 Oblix Inc.
Category: Standards Track R. Morgan
Univ of Washington
M. Wahl
Sun Microsystems, Inc.
May 2000
Lightweight Directory Access Protocol (v3):
Extension for Transport Layer Security
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2000). All Rights Reserved.
Abstract
This document defines the "Start Transport Layer Security (TLS)
Operation" for LDAP [LDAPv3, TLS]. This operation provides for TLS
establishment in an LDAP association and is defined in terms of an
LDAP extended request.
1. Conventions Used in this Document
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [ReqsKeywords].
2. The Start TLS Request
This section describes the Start TLS extended request and extended
response themselves: how to form the request, the form of the
response, and enumerates the various result codes the client MUST be
prepared to handle.
=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2255.txt
=====================================================
Network Working Group T. Howes
Request for Comments: 2255 M. Smith
Category: Standards Track Netscape Communications Corp.
December 1997
The LDAP URL Format
1. Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1997). All Rights Reserved.
IESG NOTE
This document describes a directory access protocol that provides
both read and update access. Update access requires secure
authentication, but this document does not mandate implementation of
any satisfactory authentication mechanisms.
In accordance with RFC 2026, section 4.4.1, this specification is
being approved by IESG as a Proposed Standard despite this
limitation, for the following reasons:
a. to encourage implementation and interoperability testing of
these protocols (with or without update access) before they
are deployed, and
b. to encourage deployment and use of these protocols in read-only
applications. (e.g. applications where LDAPv3 is used as
a query language for directories which are updated by some
secure mechanism other than LDAP), and
c. to avoid delaying the advancement and deployment of other Internet
standards-track protocols which require the ability to query, but
not update, LDAPv3 directory servers.
=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2252.txt
=====================================================
Network Working Group M. Wahl
Request for Comments: 2252 Critical Angle Inc.
Category: Standards Track A. Coulbeck
Isode Inc.
T. Howes
Netscape Communications Corp.
S. Kille
Isode Limited
December 1997
Lightweight Directory Access Protocol (v3):
Attribute Syntax Definitions
1. Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1997). All Rights Reserved.
IESG Note
This document describes a directory access protocol that provides
both read and update access. Update access requires secure
authentication, but this document does not mandate implementation of
any satisfactory authentication mechanisms.
In accordance with RFC 2026, section 4.4.1, this specification is
being approved by IESG as a Proposed Standard despite this
limitation, for the following reasons:
a. to encourage implementation and interoperability testing of
these protocols (with or without update access) before they
are deployed, and
b. to encourage deployment and use of these protocols in read-only
applications. (e.g. applications where LDAPv3 is used as
a query language for directories which are updated by some
=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc3377.txt
=====================================================
Network Working Group J. Hodges
Request for Comments: 3377 Sun Microsystems Inc.
Category: Standards Track R. Morgan
University of Washington
September 2002
Lightweight Directory Access Protocol (v3):
Technical Specification
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2002). All Rights Reserved.
Abstract
This document specifies the set of RFCs comprising the Lightweight
Directory Access Protocol Version 3 (LDAPv3), and addresses the "IESG
Note" attached to RFCs 2251 through 2256.
1. Background and Motivation
The specification for the Lightweight Directory Access Protocol
version 3 (LDAPv3) nominally comprises eight RFCs which were issued
in two distinct subsets at separate times -- RFCs 2251 through 2256
first, then RFCs 2829 and 2830 following later.
RFC 2251 through 2256 do not mandate the implementation of any
satisfactory authentication mechanisms and hence were published with
an "IESG Note" discouraging implementation and deployment of LDAPv3
clients or servers implementing update functionality until a Proposed
Standard for mandatory authentication in LDAPv3 is published.
RFC 2829 was subsequently published in answer to the IESG Note.
The purpose of this document is to explicitly specify the set of RFCs
=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2256.txt
=====================================================
Network Working Group M. Wahl
Request for Comments: 2256 Critical Angle Inc.
Category: Standards Track December 1997
A Summary of the X.500(96) User Schema for use with LDAPv3
1. Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1997). All Rights Reserved.
IESG Note
This document describes a directory access protocol that provides
both read and update access. Update access requires secure
authentication, but this document does not mandate implementation of
any satisfactory authentication mechanisms.
In accordance with RFC 2026, section 4.4.1, this specification is
being approved by IESG as a Proposed Standard despite this
limitation, for the following reasons:
a. to encourage implementation and interoperability testing of
these protocols (with or without update access) before they
are deployed, and
b. to encourage deployment and use of these protocols in read-only
applications. (e.g. applications where LDAPv3 is used as
a query language for directories which are updated by some
secure mechanism other than LDAP), and
c. to avoid delaying the advancement and deployment of other Internet
standards-track protocols which require the ability to query, but
not update, LDAPv3 directory servers.
Readers are hereby warned that until mandatory authentication
=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2253.txt
=====================================================
Network Working Group M. Wahl
Request for Comments: 2253 Critical Angle Inc.
Obsoletes: 1779 S. Kille
Category: Standards Track Isode Ltd.
T. Howes
Netscape Communications Corp.
December 1997
Lightweight Directory Access Protocol (v3):
UTF-8 String Representation of Distinguished Names
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1997). All Rights Reserved.
IESG Note
This document describes a directory access protocol that provides
both read and update access. Update access requires secure
authentication, but this document does not mandate implementation of
any satisfactory authentication mechanisms.
In accordance with RFC 2026, section 4.4.1, this specification is
being approved by IESG as a Proposed Standard despite this
limitation, for the following reasons:
a. to encourage implementation and interoperability testing of
these protocols (with or without update access) before they
are deployed, and
b. to encourage deployment and use of these protocols in read-only
applications. (e.g. applications where LDAPv3 is used as
a query language for directories which are updated by some
secure mechanism other than LDAP), and
=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2829.txt
=====================================================
Network Working Group M. Wahl
Request for Comments: 2829 Sun Microsystems, Inc.
Category: Standards Track H. Alvestrand
EDB Maxware
J. Hodges
Oblix, Inc.
R. Morgan
University of Washington
May 2000
Authentication Methods for LDAP
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2000). All Rights Reserved.
Abstract
This document specifies particular combinations of security
mechanisms which are required and recommended in LDAP [1]
implementations.
1. Introduction
LDAP version 3 is a powerful access protocol for directories.
It offers means of searching, fetching and manipulating directory
content, and ways to access a rich set of security functions.
In order to function for the best of the Internet, it is vital that
these security functions be interoperable; therefore there has to be
a minimum subset of security functions that is common to all
implementations that claim LDAPv3 conformance.
Basic threats to an LDAP directory service include:
=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2254.txt
=====================================================
Network Working Group T. Howes
Request for Comments: 2254 Netscape Communications Corp.
Category: Standards Track December 1997
The String Representation of LDAP Search Filters
1. Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1997). All Rights Reserved.
IESG Note
This document describes a directory access protocol that provides
both read and update access. Update access requires secure
authentication, but this document does not mandate implementation of
any satisfactory authentication mechanisms.
In accordance with RFC 2026, section 4.4.1, this specification is
being approved by IESG as a Proposed Standard despite this
limitation, for the following reasons:
a. to encourage implementation and interoperability testing of
these protocols (with or without update access) before they
are deployed, and
b. to encourage deployment and use of these protocols in read-only
applications. (e.g. applications where LDAPv3 is used as
a query language for directories which are updated by some
secure mechanism other than LDAP), and
c. to avoid delaying the advancement and deployment of other Internet
standards-track protocols which require the ability to query, but
not update, LDAPv3 directory servers.
=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2251.txt
=====================================================
Network Working Group M. Wahl
Request for Comments: 2251 Critical Angle Inc.
Category: Standards Track T. Howes
Netscape Communications Corp.
S. Kille
Isode Limited
December 1997
Lightweight Directory Access Protocol (v3)
1. Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1997). All Rights Reserved.
IESG Note
This document describes a directory access protocol that provides
both read and update access. Update access requires secure
authentication, but this document does not mandate implementation of
any satisfactory authentication mechanisms.
In accordance with RFC 2026, section 4.4.1, this specification is
being approved by IESG as a Proposed Standard despite this
limitation, for the following reasons:
a. to encourage implementation and interoperability testing of
these protocols (with or without update access) before they
are deployed, and
b. to encourage deployment and use of these protocols in read-only
applications. (e.g. applications where LDAPv3 is used as
a query language for directories which are updated by some
secure mechanism other than LDAP), and
c. to avoid delaying the advancement and deployment of other Internet
=====================================================
== File: src/site/resources/server/rfclist/basic/rfc0822.txt
=====================================================
RFC # 822
Obsoletes: RFC #733 (NIC #41952)
STANDARD FOR THE FORMAT OF
ARPA INTERNET TEXT MESSAGES
August 13, 1982
Revised by
David H. Crocker
Dept. of Electrical Engineering
University of Delaware, Newark, DE 19711
Network: DCrocker @ UDel-Relay
=====================================================
== File: src/site/resources/server/rfclist/basic/rfc2046.txt
=====================================================
Network Working Group N. Freed
Request for Comments: 2046 Innosoft
Obsoletes: 1521, 1522, 1590 N. Borenstein
Category: Standards Track First Virtual
November 1996
Multipurpose Internet Mail Extensions
(MIME) Part Two:
Media Types
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Abstract
STD 11, RFC 822 defines a message representation protocol specifying
considerable detail about US-ASCII message headers, but which leaves
the message content, or message body, as flat US-ASCII text. This
set of documents, collectively called the Multipurpose Internet Mail
Extensions, or MIME, redefines the format of messages to allow for
(1) textual message bodies in character sets other than
US-ASCII,
(2) an extensible set of different formats for non-textual
message bodies,
(3) multi-part message bodies, and
(4) textual header information in character sets other than
US-ASCII.
These documents are based on earlier work documented in RFC 934, STD
11, and RFC 1049, but extends and revises them. Because RFC 822 said
so little about message bodies, these documents are largely
orthogonal to (rather than a revision of) RFC 822.
The initial document in this set, RFC 2045, specifies the various
headers used to describe the structure of MIME messages. This second
=====================================================
== File: src/site/resources/server/rfclist/basic/rfc2822.txt
=====================================================
Network Working Group P. Resnick, Editor
Request for Comments: 2822 QUALCOMM Incorporated
Obsoletes: 822 April 2001
Category: Standards Track
Internet Message Format
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2001). All Rights Reserved.
Abstract
This standard specifies a syntax for text messages that are sent
between computer users, within the framework of "electronic mail"
messages. This standard supersedes the one specified in Request For
Comments (RFC) 822, "Standard for the Format of ARPA Internet Text
Messages", updating it to reflect current practice and incorporating
incremental changes that were specified in other RFCs.
Table of Contents
1. Introduction ............................................... 3
1.1. Scope .................................................... 3
1.2. Notational conventions ................................... 4
1.2.1. Requirements notation .................................. 4
1.2.2. Syntactic notation ..................................... 4
1.3. Structure of this document ............................... 4
2. Lexical Analysis of Messages ............................... 5
2.1. General Description ...................................... 5
2.1.1. Line Length Limits ..................................... 6
2.2. Header Fields ............................................ 7
2.2.1. Unstructured Header Field Bodies ....................... 7
2.2.2. Structured Header Field Bodies ......................... 7
2.2.3. Long Header Fields ..................................... 7
2.3. Body ..................................................... 8
=====================================================
== File: src/site/resources/server/rfclist/basic/rfc1123.txt
=====================================================
Network Working Group Internet Engineering Task Force
Request for Comments: 1123 R. Braden, Editor
October 1989
Requirements for Internet Hosts -- Application and Support
Status of This Memo
This RFC is an official specification for the Internet community. It
incorporates by reference, amends, corrects, and supplements the
primary protocol standards documents relating to hosts. Distribution
of this document is unlimited.
Summary
This RFC is one of a pair that defines and discusses the requirements
for Internet host software. This RFC covers the application and
support protocols; its companion RFC-1122 covers the communication
protocol layers: link layer, IP layer, and transport layer.
Table of Contents
1. INTRODUCTION ............................................... 5
1.1 The Internet Architecture .............................. 6
1.2 General Considerations ................................. 6
1.2.1 Continuing Internet Evolution ..................... 6
1.2.2 Robustness Principle .............................. 7
1.2.3 Error Logging ..................................... 8
1.2.4 Configuration ..................................... 8
1.3 Reading this Document .................................. 10
1.3.1 Organization ...................................... 10
1.3.2 Requirements ...................................... 10
1.3.3 Terminology ....................................... 11
1.4 Acknowledgments ........................................ 12
2. GENERAL ISSUES ............................................. 13
2.1 Host Names and Numbers ................................. 13
2.2 Using Domain Name Service .............................. 13
2.3 Applications on Multihomed hosts ....................... 14
=====================================================
== File: src/site/resources/server/rfclist/basic/rfc2045.txt
=====================================================
Network Working Group N. Freed
Request for Comments: 2045 Innosoft
Obsoletes: 1521, 1522, 1590 N. Borenstein
Category: Standards Track First Virtual
November 1996
Multipurpose Internet Mail Extensions
(MIME) Part One:
Format of Internet Message Bodies
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Abstract
STD 11, RFC 822, defines a message representation protocol specifying
considerable detail about US-ASCII message headers, and leaves the
message content, or message body, as flat US-ASCII text. This set of
documents, collectively called the Multipurpose Internet Mail
Extensions, or MIME, redefines the format of messages to allow for
(1) textual message bodies in character sets other than
US-ASCII,
(2) an extensible set of different formats for non-textual
message bodies,
(3) multi-part message bodies, and
(4) textual header information in character sets other than
US-ASCII.
These documents are based on earlier work documented in RFC 934, STD
11, and RFC 1049, but extends and revises them. Because RFC 822 said
so little about message bodies, these documents are largely
orthogonal to (rather than a revision of) RFC 822.
This initial document specifies the various headers used to describe
the structure of MIME messages. The second document, RFC 2046,
=====================================================
== File: src/site/markdown/server/manage-guice-distributed-james.md
=====================================================
# Managing Guice distributed James
This guide aims to be an entry-point to the James documentation for user managing a distributed Guice James server.
It includes:
- Simple architecture explanations
- Propose some diagnostics for some common issues
- Present procedures that can be set up to address these issues
In order to not duplicate information, existing documentation will be linked.
Please note that this product is under active development, should be considered experimental and thus targets
advanced users.
## Table of content
- [Overall architecture](#Overall_architecture)
- [Basic Monitoring](#Basic_Monitoring)
- [Cassandra table level configuration](#Cassandra_table_level_configuration)
- [Deleted Messages Vault](#Deleted_Messages_Vault)
- [OpenSearch Indexing](#Opensearch_Indexing)
- [Mailbox Event Bus](#Mailbox_Event_Bus)
- [Mail Processing](#Mail_Processing)
- [Mail Queue](#Mail_Queue)
- [Setting Cassandra user permissions](#Setting_Cassandra_user_permissions)
- [Solving cassandra inconsistencies](#Solving_cassandra_inconsistencies)
- [Updating Cassandra schema version](#Updating_Cassandra_schema_version)
## Overall architecture
Guice distributed James server intends to provide a horizontally scalable email server.
In order to achieve this goal, this product leverages the following technologies:
- **Cassandra** for meta-data storage
- **ObjectStorage** (S3) for binary content storage
- **OpenSearch** for search
- **RabbitMQ** for messaging
A [docker-compose](https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docker-compose.yml) file is
available to allow you to quickly deploy locally this product.
## Basic Monitoring
A toolbox is available to help an administrator diagnose issues:
- [Structured logging into Kibana](#Structured_logging_into_Kibana)
- [Metrics graphs into Grafana](#Metrics_graphs_into_Grafana)
- [WebAdmin HealthChecks](#Webadmin_Healthchecks)
=====================================================
== File: src/site/markdown/server/manage-cli.md
=====================================================
Manage James via the Command Line
=================================
With any wiring, James is packed with a command line client.
To use it enter, for Spring distrubution:
```
./bin/james-cli.sh -h 127.0.0.1 -p 9999 COMMAND
```
And for Guice distributions:
```
java -jar /root/james-cli.jar -h 127.0.0.1 -p 9999 COMMAND
```
Guice in docker embeds a script helper:
```
docker exec -ti james james-cli COMMAND
```
The following document will explain you which are the available options for **COMMAND**.
Note: the command line before **COMMAND** will be documente as *{cli}*.
## Navigation menu
- [Manage Domains](#Manage-Domains)
- [Managing users](#Managing-users)
- [Managing mailboxes](#Managing-mailboxes)
- [Adding a message in a mailbox](#Adding-a-message-in-a-mailbox)
- [Managing mappings](#Managing-mappings)
- [Manage quotas](#Manage-quotas)
- [Manage DropList](#Manage-Droplist)
- [Re-indexing](#Re-indexing)
- [Sieve scripts quota](#Sieve-scripts-quota)
- [Switching of mailbox implementation](#Switching-of-mailbox-implementation)
## Manage Domains
Domains represent the domain names handled by your server.
You can add a domain:
```
{cli} AddDomain domain.tld
```
=====================================================
== File: src/site/markdown/server/install/guice-cassandra-rabbitmq-s3.md
=====================================================
# Guice-Cassandra-Rabbitmq-S3 installation guide
## Building
### Requirements
- Java 11 SDK
- Docker ∕ OpenSearch 2.1.0, RabbitMQ Management 3.8.18, compatible S3 ObjectStorage and Cassandra 4.0
- Maven 3
### Building the artifacts
An usual compilation using maven will produce two artifacts into server/apps/distributed-app/target directory:
* james-server-distributed-app.jar
* james-server-distributed-app.lib
You can for example run in the base of [this git repository](https://github.com/apache/james-project):
```
mvn clean install
```
## Running
### Requirements
* Cassandra 4.0
* OpenSearch 2.1.0
* RabbitMQ-Management 3.8.18
* Zenko Cloudserver or AWS S3 compatible API
### James Launch
To run james, you have to create a directory containing required configuration files.
James requires the configuration to be in a subfolder of working directory that is called **conf**. You can get a sample
directory for configuration from
[server/apps/distributed-app/sample-configuration](https://github.com/apache/james-project/tree/master/server/apps/distributed-app/sample-configuration). You might need to adapt it to your needs.
You also need to generate a keystore in your conf folder with the following command:
```bash
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
```
You need to have a Cassandra, OpenSearch, S3 and RabbitMQ instance running. You can either install the servers or launch them via docker:
```bash
$ docker run -d -p 9042:9042 --name=cassandra cassandra:4.1.9
=====================================================
== File: src/site/markdown/server/install/guice-cassandra.md
=====================================================
# Guice-Cassandra installation guide
## Building
### Requirements
- Java 11 SDK
- Docker ∕ OpenSearch 2.1.0 and Cassandra 4.0
- Maven 3
*WARNING*: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)
### Building the artifacts
An usual compilation using maven will produce two artifacts into server/container/guice/cassandra-guice/target directory:
* james-server-cassandra-guice.jar
* james-server-cassandra-guice.lib
You can for example run in the base of [this git repository](https://github.com/apache/james-project):
```
mvn clean install
```
## Running
### Requirements
* Cassandra 4.0
* OpenSearch 2.1.0
### James Launch
To run james, you have to create a directory containing required configuration files.
James requires the configuration to be in a subfolder of working directory that is called **conf**. You can get a sample
directory for configuration from
[server/apps/cassandra-app/sample-configuration](https://github.com/apache/james-project/tree/master/server/apps/cassandra-app/sample-configuration). You might need to adapt it to your needs.
You also need to generate a keystore in your conf folder with the following command:
```bash
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
```
You need to have a Cassandra and an OpenSearch instance running. You can either install the servers or launch them via docker:
```bash
=====================================================
== File: src/site/markdown/server/install/guice-jpa.md
=====================================================
# Guice-JPA installation guide
## Building
### Requirements
- Java 11 SDK
- Maven 3 (optional)
### Download the artifacts
Download james-jpa-guice-3.9.0.zip from [the download page](http://james.apache.org/download.cgi#Apache_James_Server) and deflate it.
### (alternative) Building the artifacts
An usual compilation using maven of this [Git repository content](https://github.com/apache/james-project) will produce
two artifacts into server/container/guice/jpa-guice/target directory:
- james-server-jpa-guice.jar
- james-server-jpa-guice.lib
You can for example run in the base of this git repository:
```
mvn clean install
```
To run james, you have to create a directory containing required configuration files.
James requires the configuration to be in a subfolder of working directory that is called **conf**. You can get a sample
directory for configuration from [server/apps/jpa-app/sample-configuration](https://github.com/apache/james-project/tree/master/server/apps/jpa-app/sample-configuration). You might need to adapt it to your needs.
## Running
### James Launch
Edit the configuration to match your needs.
You also need to generate a keystore in your conf folder with the following command:
```bash
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
```
Once everything is set up, you just have to run the jar with:
```bash
$ java -javaagent:james-server-jpa-guice.lib/openjpa-4.1.1.jar \
-Dlogback.configurationFile=conf/logback.xml \
=====================================================
== File: src/site/markdown/server/install/guice-jpa-smtp.md
=====================================================
# Guice-JPA-SMTP installation guide
## Building
### Requirements
- Java 11 SDK
- Docker
- Maven (optional)
### Download the artifacts
Download james-jpa-smtp-guice-3.9.0.zip from [the download page](http://james.apache.org/download.cgi#Apache_James_Server) and deflate it.
### (alternative) Building the artifacts
An usual compilation using maven of this [Git repository content](https://github.com/apache/james-project) will produce
two artifacts into server/container/guice/jpa-smtp/target directory :
- james-server-jpa-smtp-${version}.jar
- james-server-jpa-smtp-${version}.lib
To run james, you have to create a directory containing required configuration files names **conf**.
A [sample directory](https://github.com/apache/james-project/tree/master/server/apps/jpa-smtp-app/sample-configuration) is provided with some default value you may need to replace.
## Running
### James Launch
Edit the configuration to match your needs.
You also need to generate a keystore with the following command :
```bash
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
```
Once everything is set up, you just have to run the jar with :
```bash
$ java -javaagent:james-server-jpa-smtp-app.lib/openjpa-4.1.1.jar \
-Dworking.directory=. \
-Djdk.tls.ephemeralDHKeySize=2048 \
-Dlogback.configurationFile=conf/logback.xml \
-jar james-server-jpa-smtp-app.jar
```
=====================================================
== File: src/site/markdown/server/manage-webadmin.md
=====================================================
Web administration for JAMES
============================
The web administration supports for now the CRUD operations on the domains, the users, their mailboxes and their quotas,
managing mail repositories, performing cassandra migrations, and much more, as described in the following sections.
**WARNING**: This API supports authentication only via the use of JWT. If JWT is disabled (the default), an administrator should ensure an attacker cannot use this API.
By the way, some endpoints are not filtered by authentication. Those endpoints are not related to data stored in James, such as Swagger documentation and James health checks.
Please also note **webadmin** is only enabled with **Guice**. You cannot use it when using James with **Spring**, as the required injections are not implemented.
In case of any error, the response will contain a JSON error message in the following format:
```
{
statusCode: <error_code>,
type: <error_type>,
message: <the_error_message>
cause: <the_detail_message_from_throwable>
}
```
Also be aware that, in case things go wrong, all endpoints might return a 500 internal error (with a JSON body formatted
as exposed above). To avoid information duplication, this is ommited on endpoint specific documentation.
Finally, please note that in case of a malformed URL the 400 bad request response will contain an HTML body.
## Navigation menu
- [HealthCheck](#HealthCheck)
- [Administrating domains](#Administrating_domains)
- [Administrating users](#Administrating_users)
- [Administrating mailboxes](#Administrating_mailboxes)
- [Administrating messages](#Administrating_Messages)
- [Administrating user mailboxes](#Administrating_user_mailboxes)
- [Administrating quotas by users](#Administrating_quotas_by_users)
- [Administrating quotas by domains](#Administrating_quotas_by_domains)
- [Administrating global quotas](#Administrating_global_quotas)
- [Administrating DropLists](#Administrating_DropLists)
- [Cassandra Schema upgrades](#Cassandra_Schema_upgrades)
- [Correcting ghost mailbox](#Correcting_ghost_mailbox)
- [Creating address aliases](#Creating_address_aliases)
- [Creating domain mappings](#Creating_domain_mappings)
- [Creating address forwards](#Creating_address_forwards)
- [Creating address group](#Creating_address_group)
- [Creating regex mapping](#Creating_regex_mapping)
- [Address Mappings](#Address_Mappings)
- [User Mappings](#User_Mappings)
- [Administrating mail repositories](#Administrating_mail_repositories)
=====================================================
== File: src/site/markdown/mailet/release-notes.md
=====================================================
#Release Notes
Apache JamesProject Team (2012/12/28)
##Release Notes
2.5.0 Release 2.5.0 marks a new milestone in Apache Mailet life. All Apache James mailet related sub-projects
(Api, Base, Crypto, Standard) have been merged as a multi-module maven project.
They share the same version number, a common naming scheme and will be released together.Apart from bug fixing, one
notable release characteristic is that 2.5.0 jars are OSGi bundles.
##Earlier Releases
For information regarding the **Release notes** of earlier releases, please visit
<a href="release-notes-old.html">Old releases</a> page.
=====================================================
== File: src/site/markdown/mailet/quickstart.md
=====================================================
Mailets for developers
======================
## Artifact names
All binary (and source) artifacts are available via [Maven Central](http://repo.maven.apache.org/maven2).
The project **groupId** is *org.apache.james* and the artifact names are:
* **apache-mailet-api** - for the Mailet API
* **apache-mailet-base** - for base Mailets
* **apache-mailet-standard** - for Standard Mailets
* **apache-mailet-crypto** - for Crypto Mailets
* **mailetdocs-maven-plugin** if you wish to extract documentation from sources
Just include something like this in your *pom.xml*
~~~
<dependencies>
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>apache-mailet-api</artifactId>
<version>3.9.0</version>
</dependency>
<!-- other dependencies -->
</dependencies>
~~~
### Write your own mailets
To learn how to write your own mailets please have a look at
<a href="https://github.com/apache/james-project/blob/master/mailet/base/src/main/java/org/apache/mailet/base/GenericMatcher.java">Generic Matcher</a> and
<a href="https://github.com/apache/james-project/blob/master/mailet/base/src/main/java/org/apache/mailet/base/GenericMailet.java">Generic Mailet</a>.
Another good learning source are the unit tests from
<a href="https://github.com/apache/james-project/tree/master/mailet/standard/src/main/java/org/apache/james/transport">Standard Mailets</a>
=====================================================
== File: src/homepage/about.md
=====================================================
This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](http://jekyllrb.com/)
You can find the source code for the Jekyll new theme at:
{% include icon-github.html username="jekyll" %} /
[minima](https://github.com/jekyll/minima)
You can find the source code for Jekyll at
{% include icon-github.html username="jekyll" %} /
[jekyll](https://github.com/jekyll/jekyll)
## How to post new articles on Jekyll
#### The Posts Folder
As explained on the [directory structure](https://jekyllrb.com/docs/structure/) page, the _posts folder is where your blog posts will live:
```
.
├── _drafts
├── _includes
├── _layouts
├── _posts
| ├── 2007-10-29-why-every-programmer-should-play-nethack.md
| └── 2009-04-26-barcamp-boston-4-roundup.md
├── _data
├── _site
├── .jekyll-metadata
└── index.html
```
The files extension is Markdown.
#### Front Matter
The front matter is where Jekyll starts to get really cool. Any file that contains a YAML front matter block will be processed by Jekyll as a special file. The front matter must be the first thing in the file and must take the form of valid YAML set between triple-dashed lines. Here is a basic example:
```
---
layout: post
title: "Welcome to Jekyll"
date: 2016-08-29 16:13:22 +0200
tags:
---
```
* ```Layout``` attribute must be always Post to load the good HTM-CSS template of the page
=====================================================
== File: src/homepage/images/james-alt.svg
=====================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="37px" height="31px" viewBox="0 0 37 31" enable-background="new 0 0 37 31" xml:space="preserve">
<g>
<path fill="#FFFFFF" d="M37.001,4.407c-1.435-0.966-2.92-1.75-4.473-2.153c-1.552-0.412-3.151-0.315-4.63,0.3l-0.277,0.117
l-0.139,0.062l-0.064,0.032l-0.036,0.016l-0.018,0.008l-0.008,0.004c0.008-0.007-0.028,0.016,0.02-0.012L27.37,2.783
c-0.2,0.127-0.391,0.232-0.589,0.337c-0.392,0.207-0.796,0.391-1.216,0.543c-0.836,0.295-1.737,0.503-2.664,0.389
c-0.458-0.061-0.913-0.222-1.3-0.489c-0.382-0.268-0.689-0.629-0.899-1.026C20.28,1.737,20.15,0.857,20.124,0
c0.156,0.842,0.393,1.686,0.857,2.363c0.234,0.336,0.523,0.622,0.864,0.811c0.339,0.19,0.723,0.284,1.111,0.301
c0.782,0.038,1.582-0.201,2.325-0.532c0.376-0.165,0.741-0.353,1.092-0.563c0.176-0.105,0.354-0.219,0.509-0.33l0.307-0.201
c0.1-0.057,0.194-0.122,0.293-0.173c0.801-0.433,1.702-0.731,2.627-0.793c0.925-0.069,1.856,0.063,2.716,0.357
c0.863,0.29,1.655,0.731,2.359,1.267C35.888,3.047,36.52,3.676,37.001,4.407z"/>
<path fill="#FFFFFF" d="M13.25,20.418c-5.733-4.373-9.554-8.973-9.418-9.078c0.147-0.145,4.153,4.212,9.83,8.536
c1.665,1.28,3.28,2.412,4.733,3.381c0.02-0.036,0.041-0.069,0.062-0.105c0.237-0.456,0.42-0.948,0.562-1.462
c-1.018-2.053-3.554-4.892-6.501-7.496c-0.656-0.572-1.338-1.078-2.028-1.536c-0.151,1.223-0.452,2.098-0.453,2.096
c0,0-0.335-1.163-0.306-2.579C9.266,11.892,8.8,11.63,8.336,11.389c-0.004,1.395-0.414,2.439-0.417,2.439
c0,0.002-0.833-1.414-0.922-3.071c-0.002-0.01-0.002-0.021-0.002-0.031c-2.767-1.279-5.1-1.896-5.104-1.89
C1.867,8.774,2.064,14.75,6.431,19.305c0.147-0.008,0.296-0.016,0.449-0.016c1.588,0.004,2.944,0.577,2.947,0.577
c0-0.002-0.835,0.501-2.054,0.671c0.444,0.355,0.899,0.682,1.364,0.973c1.148-0.416,2.102-0.557,2.102-0.557
c0-0.002-0.503,0.495-1.334,1.017c3.035,1.685,5.787,2.542,7.53,2.624c0.236-0.26,0.452-0.532,0.645-0.821
C16.586,22.84,14.938,21.717,13.25,20.418z"/>
<path fill="#FFFFFF" d="M33.7,4.335c-1.103,0.092-2.21,0.292-3.3,0.605c-2.173,0.623-4.31,1.725-6.062,3.396
c-0.883,0.824-1.64,1.798-2.271,2.846c-0.614,1.059-1.109,2.191-1.43,3.363c-0.327,1.168-0.529,2.363-0.595,3.548
c-0.02,0.291-0.031,0.596-0.039,0.9L19.995,19.4l-0.008,0.35c-0.012,0.462-0.051,0.918-0.122,1.358
c-0.056,0.337-0.131,0.665-0.223,0.984c-0.141,0.514-0.324,1.006-0.562,1.466c-0.02,0.036-0.043,0.066-0.062,0.102
c-0.099,0.178-0.204,0.353-0.317,0.52c-0.191,0.286-0.407,0.559-0.643,0.819c-0.17,0.186-0.348,0.366-0.544,0.541
c-1.304,1.152-3.097,1.944-5.021,2.453c-1.931,0.518-3.995,0.788-6.091,0.934c-2.1,0.145-4.234,0.166-6.404,0.112
c2.023,0.815,4.157,1.338,6.333,1.664c2.179,0.313,4.422,0.415,6.701,0.127c1.137-0.149,2.287-0.394,3.418-0.802
c1.129-0.405,2.252-0.959,3.265-1.745c1.019-0.771,1.92-1.77,2.571-2.913c0.331-0.568,0.601-1.167,0.82-1.775
c0.21-0.611,0.364-1.236,0.47-1.859c0.11-0.619,0.17-1.24,0.193-1.852c0.008-0.154,0.008-0.307,0.008-0.461v-0.398
c0.005-0.234,0.011-0.468,0.022-0.716c0.052-0.967,0.166-1.914,0.376-2.832c0.418-1.832,1.213-3.537,2.405-5.009
c1.192-1.472,2.767-2.711,4.552-3.706c1.79-0.994,3.765-1.774,5.862-2.355C35.917,4.247,34.808,4.238,33.7,4.335z"/>
</g>
</svg>
=====================================================
== File: src/homepage/images/james.svg
=====================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="-223 283 164 228" style="enable-background:new -223 283 164 228;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{display:inline;}
.st2{fill:#FFFFFF;}
.st3{fill:#E74A24;}
.st4{fill:none;}
.st5{fill:url(#SVGID_1_);}
.st6{fill:#E4262A;}
.st7{font-family:'Poppins-Regular';}
.st8{font-size:28px;}
</style>
<g id="Calque_2" class="st0">
<rect x="-233.5" y="269.3" class="st1" width="186" height="258"/>
</g>
<g id="Calque_1">
<g>
<circle class="st2" cx="-141.1" cy="342.3" r="59.3"/>
<path class="st3" d="M-100.2,317.9c-3.2-2.1-6.5-3.9-9.9-4.7c-3.4-0.9-7-0.7-10.2,0.7l-0.6,0.3l-0.3,0.1l-0.2,0.1l-0.1,0l0,0l0,0
c0,0-0.1,0,0,0l0,0c-0.4,0.3-0.9,0.5-1.3,0.7c-0.9,0.5-1.8,0.9-2.7,1.2c-1.9,0.6-3.8,1.1-5.9,0.9c-1-0.1-2-0.5-2.9-1.1
c-0.9-0.6-1.5-1.4-2-2.3c-0.9-1.8-1.2-3.7-1.3-5.6c0.3,1.9,0.9,3.7,1.9,5.2c0.5,0.7,1.2,1.4,1.9,1.8c0.8,0.4,1.6,0.6,2.5,0.7
c1.7,0.1,3.5-0.4,5.2-1.2c0.8-0.4,1.6-0.8,2.4-1.2c0.4-0.2,0.8-0.5,1.1-0.7l0.7-0.4c0.2-0.1,0.4-0.3,0.7-0.4
c1.8-1,3.8-1.6,5.8-1.7c2-0.1,4.1,0.1,6,0.8c1.9,0.6,3.7,1.6,5.2,2.8C-102.6,314.9-101.2,316.3-100.2,317.9z"/>
<path class="st4" d="M-172.3,334c-0.3,0.2,8.2,10.4,20.9,20c3.7,2.9,7.4,5.3,10.7,7.4c0.3-0.4,0.5-0.8,0.7-1.1
c-3.2-2.1-6.8-4.6-10.5-7.4C-163.1,343.3-171.9,333.7-172.3,334z"/>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="8.0298" y1="783.6619" x2="46.1336" y2="783.6619" gradientTransform="matrix(-0.1008 -0.9949 -0.9949 0.1008 623.7179 292.7814)">
<stop offset="0" style="stop-color:#FBC315"/>
<stop offset="0.4969" style="stop-color:#E74A24"/>
<stop offset="1" style="stop-color:#E4262A"/>
</linearGradient>
<path class="st5" d="M-152.8,353.1c-12.7-9.6-21.2-19.7-20.9-20c0.3-0.3,9.2,9.3,21.8,18.8c3.7,2.8,7.3,5.3,10.5,7.4
c0-0.1,0.1-0.1,0.1-0.2c0.5-1,0.9-2.1,1.2-3.2c-2.3-4.5-7.9-10.8-14.4-16.5c-1.5-1.3-3-2.4-4.5-3.4c-0.3,2.7-1,4.6-1,4.6
c0,0-0.7-2.6-0.7-5.7c-1-0.6-2.1-1.2-3.1-1.7c0,3.1-0.9,5.4-0.9,5.4c0,0-1.8-3.1-2-6.8c0,0,0,0,0-0.1c-6.1-2.8-11.3-4.2-11.3-4.2
c-0.1-0.1,0.4,13,10.1,23c0.3,0,0.7,0,1,0c3.5,0,6.5,1.3,6.5,1.3c0,0-1.8,1.1-4.6,1.5c1,0.8,2,1.5,3,2.1c2.5-0.9,4.7-1.2,4.7-1.2
c0,0-1.1,1.1-3,2.2c6.7,3.7,12.8,5.6,16.7,5.8c0.5-0.6,1-1.2,1.4-1.8C-145.4,358.4-149,356-152.8,353.1z"/>
<path class="st6" d="M-107.5,317.7c-2.4,0.2-4.9,0.6-7.3,1.3c-4.8,1.4-9.5,3.8-13.4,7.5c-2,1.8-3.6,4-5,6.3
c-1.4,2.3-2.5,4.8-3.2,7.4c-0.7,2.6-1.2,5.2-1.3,7.8c0,0.6-0.1,1.3-0.1,2l0,0.9l0,0.8c0,1-0.1,2-0.3,3c-0.1,0.7-0.3,1.5-0.5,2.2
c-0.3,1.1-0.7,2.2-1.2,3.2c0,0.1-0.1,0.1-0.1,0.2c-0.2,0.4-0.5,0.8-0.7,1.1c-0.4,0.6-0.9,1.2-1.4,1.8c-0.4,0.4-0.8,0.8-1.2,1.2
c-2.9,2.5-6.9,4.3-11.1,5.4c-4.3,1.1-8.9,1.7-13.5,2.1c-4.7,0.3-9.4,0.4-14.2,0.2c4.5,1.8,9.2,2.9,14,3.7
c4.8,0.7,9.8,0.9,14.8,0.3c2.5-0.3,5.1-0.9,7.6-1.8c2.5-0.9,5-2.1,7.2-3.8c2.3-1.7,4.2-3.9,5.7-6.4c0.7-1.3,1.3-2.6,1.8-3.9
c0.5-1.3,0.8-2.7,1-4.1c0.2-1.4,0.4-2.7,0.4-4.1c0-0.3,0-0.7,0-1l0-0.9c0-0.5,0-1,0-1.6c0.1-2.1,0.4-4.2,0.8-6.2
c0.9-4,2.7-7.8,5.3-11c2.6-3.2,6.1-6,10.1-8.2c4-2.2,8.3-3.9,13-5.2C-102.6,317.5-105,317.5-107.5,317.7z"/>
</g>
<g>
<path class="st2" d="M-217.7,479.8c-1.9,0-3.4-0.2-4.7-0.7v-5.7c1.6,0.4,3,0.6,4.2,0.6c3.7,0,5.6-2.4,5.6-7.1v-40.3h6.8v40.1
c0,4.3-1,7.5-3,9.8C-210.8,478.7-213.8,479.8-217.7,479.8z"/>
=====================================================
== File: src/homepage/_posts/2007-09-16-jspf-0.9.5.markdown
=====================================================
---
layout: post
title: "jSPF-0.9.5 released"
date: 2007-09-16 16:13:22 +0200
categories: james update
---
We are proud to announce the [availability][availability] of APACHE jSPF-0.9.5. This release brings initial support for
asynchronous processing and is fully RFC4408 compliant.
[availability]: /download.cgi
=====================================================
== File: src/homepage/_posts/2019-03-26-james-3.3.0.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.3.0"
date: 2019-03-26 09:09:47 +0100
categories: james update
---
The Apache James developers are pleased to announce James server 3.3.0 release.
Here are some points we worked on:
### Added
- Metrics for BlobStore
- New Guice product using Cassandra RabbitMQ ElasticSearch, OpenStack Swift and optional LDAP dependency (experimental)
- JPA SMTP dockerFile contributed by [matzepan](https://github.com/matzepan)
- Listing healthchecks, thanks to [Madhu Bhat](https://github.com/kratostaine)
- Configuring the ElasticSearch clusterName
- Logging and Metrics now supports Elasticsearch 6 (previously only Elasticsearch 2 was supported)
- Implementation of the RabbitMQ EventBus
- DeadLetter APIs and memory implementation for storing events that failed delivery
- RecipientRewriteTable Aliases and associated WebAdmin routes
### Fixed
- MAILBOX-350 Potential invalid UID <-> MSN mapping upon IMAP COPY
- Possibility to better zoom in Grafana boards
- default ElasticSearch shards & replica configured values
- Move & copy batch sizes are now loaded from configuration
### Changed
- WebAdmin ReIndexing API had been reworked
- MailboxListener and mailbox event system were reworked. Custom listeners will need to be adapted. Please see Upgrade instuctions.
- Docker images are now using a JRE instead of a JDK
- Replacement of the old mailbox event system with the EventBus
### Removed
- Drop HBase and JCR components (mailbox and server/data).
### Third party softwares
- Tika prior 1.20 is subject to multiple CVEs. We recommend the upgrade
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2022-01-26-james-3.6.2.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.6.2"
date: 2022-01-26 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.6.2 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
## Announcements
[More announcements to follow this release]
## Release changelog
This is a maintenance release addressing the following issues:
- JAMES-3646 Rely on strong typing for file paths operations
- Upgrade Log4J to 2.17.1 (CVE-2021-44832 + CVE-2021-45105)
- Upgrade Logback to 1.2.9 (CVE-2021-42550)
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2011-12-07-protocols-1.6.0-RC1.markdown
=====================================================
---
layout: post
title: "Apache James Protocols 1.6.0-RC1 released"
date: 2011-10-07 16:13:22 +0200
categories: james update
---
The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 1.6.0-RC1 of Apache James Protocols library.
=====================================================
== File: src/homepage/_posts/2009-07-17-jMPT-0.1.markdown
=====================================================
---
layout: post
title: "Apache MPT 0.1 released"
date: 2009-07-17 16:13:22 +0200
categories: james update
---
The Apache James project is pleased to announced that the first release of
[Apache MPT][MPT] - a functional testing
library particularly suitable for line protocols based on ASCII - is now
[available][available] . These protocols are common in mail but the library may be useful more widely.
See the [release notes][notes] for more details.
[notes]: http://james.apache.org/mpt/0.1/release-notes.html
[available]: /download.cgi#Apache_MPT
[MPT]: http://james.apache.org/mpt
=====================================================
== File: src/homepage/_posts/2023-06-20-fail2ban.markdown
=====================================================
---
layout: post
title: "Guest post: James and fail2ban"
date: 2023-05-17 01:16:30 +0200
categories: james update
---
Credits: Paul Gunter
[Original][Original] version.
# Repel brute force attacks with Linux firewall (iptables) and fail2ban
## Introduction
Servers on the Internet are constantly under attack. Mail servers are also attacked to gain control of
a server that can be used to send bulk spam emails. This often leads to these servers ending up on
various black lists and can no longer be used as mail servers. A safe basic configuration of James is
required at this point.
Nevertheless, attacks can mean that the server can practically no longer be operated. These are often
DoS or DDoS attacks (Denial-of-Service or Distributed Denial-of-Service), which smaller servers
in particular are difficult to defend against. However, basic protection via the firewall is relatively
easy to reach.
But even after that, attacks can be seen, especially those that try to spy out access data. These
attacks can be detected by monitoring the log files. So the attack patterns are known and can be
repelled with fail2ban.
All examples refer to a Linux operating system, Windows is not covered. The examples are shown
using Ubuntu and can be transferred to other Linux variants. “iptables” is used as the firewall front
end.
## Setting
The following assumes a small mail server on which only an SSH service can be accessed from
outside in addition to Apache James. In the example, the SSH service uses the standard port 22,
James uses the standard ports 25 (smtp), 110 (pop3) and/or 143 (imap).
The examples refer to Apache James 3.8.0 (Spring App).
The operating system is Ubuntu 22.04.
The configuration should be carried out beforehand on a test system and not during operation. One
thing to note about James is that changes to log4j2's configuration usually take effect immediately.
## (D)DoS - Attacks
An attempt is made to load the server with so many requests that it no longer works. In the case of
DDos, this is carried out in parallel by a large number of servers, which also means a corresponding
=====================================================
== File: src/homepage/_posts/2007-04-05-JAMES-2.3.1-RC1.markdown
=====================================================
---
layout: post
title: "James Server 2.3.1 RC1 released"
date: 2007-04-05 16:13:22 +0200
categories: james update
---
James PMC is proud to announce the [availability][availability] of the first release candidate
of James Server 2.3.1. This release is maintenance release. See the [changelog][changelog] for more detail.
[availability]: http://downloads.apache.org/james/server/rc
[changelog]: http://issues.apache.org/jira/browse/James?report=com.atlassian.jira.plugin.system.project:changelog-panel
=====================================================
== File: src/homepage/_posts/2022-08-26-james-3.7.1.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.7.1"
date: 2022-08-26 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.7.1 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The Apache James PMC would like to thanks all contributors who made this release possible!
## Announcement
As this is a minor maintenance release.
This release addresses CVE-2022-28220 `STARTTLS command injection in Apache JAMES`.
It also includes various bugfixes.
## Release changelog
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#361---2022-08-26
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2006-09-03-JSPF-0.9-b3.markdown
=====================================================
---
layout: post
title: "jSPF 0.9 b3 Released"
date: 2006-09-03 16:13:22 +0200
categories: james update
---
James PMC is proud to announce the [availability][availability] of the third beta of jspf 0.9.
This version has start to use the official spf testsuite to fix all rfc issues.
[availability]: http://downloads.apache.org/james/jspf/
=====================================================
== File: src/homepage/_posts/2022-10-28-jspf-1.0.2.markdown
=====================================================
---
layout: post
title: "Apache James JSPF 1.0.3"
date: 2022-12-30 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce the 1.0.3 release of the JSPF library.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
This release fixes error management for DSNJava asynchronous capabilities
The Apache James PMC would like to thanks all contributors who made this release possible!
[tracker]: https://issues.apache.org/jira/projects/JSPF/issues
[download]: https://james.apache.org/download.cgi#Apache_jSPF
=====================================================
== File: src/homepage/_posts/2011-02-06-protocols-1.5.markdown
=====================================================
---
layout: post
title: "Apache James Protocols 1.5"
date: 2011-02-06 16:13:22 +0200
categories: james update
---
The Apache James Project is happy to announce the release of version 1.5 of the Apache James Protocols.
[Read the release notes][notes]
[notes]: https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311060&version=12316655
=====================================================
== File: src/homepage/_posts/2009-05-16-Mailet-crypto-0.1.markdown
=====================================================
---
layout: post
title: "Apache Crypto Mailets 1.0 released"
date: 2009-05-16 16:13:22 +0200
categories: james update
---
The Apache James Project is pleased to announce the first independent release of
[Apache Cryptographic Mailets][crypto] (previous versions
were released as part of the [Apache James Server][server]).
This package contains mailets which encode, decode, sign and verify mail plus cryptology utilities.
[server]: http://james.apache.org/server
[crypto]: http://james.apache.org/mailet/crypto
=====================================================
== File: src/homepage/_posts/2012-01-07-mime4j-0.7.2.markdown
=====================================================
---
layout: post
title: "Apache James Mime4j 0.7.2 released"
date: 2012-01-07 16:13:22 +0200
categories: james update
---
The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce
the release of version 0.7.2 of Apache James Mime4j library.
=====================================================
== File: src/homepage/_posts/2024-03-05-mime4j-0.8.11.markdown
=====================================================
---
layout: post
title: "Apache James MIME4J 0.8.11"
date: 2024-03-05 03:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce the 0.8.11 release of the MIME4J library.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
This release fixes a minor regression of the 0.8.10 release regarding invalid encoding in email headers.
The Apache James PMC would like to thanks all contributors who made this release possible!
[CHANGELOG]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: https://james.apache.org/download.cgi#Apache_Mime4J
=====================================================
== File: src/homepage/_posts/2007-04-15-JAMES-2.3.1.markdown
=====================================================
---
layout: post
title: "James Server 2.3.1 Final Released"
date: 2007-04-15 16:13:22 +0200
categories: james update
---
James PMC is proud to announce the [availability][availability] of the final release of James Server 2.3.1. More information
on what has been fixed since the 2.3.0 release can be found in the [changelog][changelog] .
[availability]: download.cgi
[changelog]: /server/2.3.1/changelog.html
=====================================================
== File: src/homepage/_posts/2010-06-02-mailet-base-1.1.markdown
=====================================================
---
layout: post
title: "Apache Mailet Base 1.1 released"
date: 2010-06-02 16:13:22 +0200
categories: james update
---
The Apache James Project is pleased to announce a new [Apache Mailet Base][base] release
which fixes a NullPointerException when using MatcherInverter.
[base]: http://james.apache.org/mailet/api
=====================================================
== File: src/homepage/_posts/2016-01-08-module-merge.markdown
=====================================================
---
layout: post
title: "James modules merge into james-project"
date: 2016-01-08 16:13:22 +0200
categories: james update
---
Some of James modules were merged into [james-project][git].
This change was done in order to speed up our development phase before the 3.0 release and as long as important changes are needed on the API.
The modules merged are: james-server, apache-james-mailbox, apache-mailet, apache-james-mpt, protocols.
[git]: https://git-wip-us.apache.org/repos/asf?p=james-project.git;a=tree
=====================================================
== File: src/homepage/_posts/2016-02-08-moving-to-git.markdown
=====================================================
---
layout: post
title: "Moving to GIT!"
date: 2016-02-09 16:13:22 +0200
categories: james update
---
All James projects has been migrated from SVN to GIT.
Here are the links to your favorite projects:
- [james-project][james-project]
- [james-jdkim][james-jdkim]
- [james-jsieve][james-jsieve]
- [james-jspf] [james-jspf]
- [james-mime4j][james-mime4j]
- [james-postage][james-postage]
[james-project]: https://git-wip-us.apache.org/repos/asf?p=james-project.git
[james-jdkim]: https://git-wip-us.apache.org/repos/asf?p=james-jdkim.git
[james-jsieve]: https://git-wip-us.apache.org/repos/asf?p=james-jsieve.git
[james-jspf]: https://git-wip-us.apache.org/repos/asf?p=james-jspf.git
[james-mime4j]: https://git-wip-us.apache.org/repos/asf?p=james-mime4j.git
[james-postage]: https://git-wip-us.apache.org/repos/asf?p=james-postage.git
=====================================================
== File: src/homepage/_posts/2025-09-25-james-3.9.0.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.9.0"
date: 2025-09-25 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.9.0 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The Apache James PMC would like to thank all contributors who made this release possible!
## Announcement
This release brings the following significant changes:
- Upgrade javax -> jakarta. See related upgrade instructions.
- Upgrade Java 11 -> 21. See related upgrade instructions.
- JAMES-2586: A performant Postgres based implementation of Apache James. Usable in a standalone context but can scale as well with components like RabbitMQ, OpenSearch and S3.
This releases also delivers numerous bugfixes, improvements and performance enhancements.
## Release changelog
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#350---2025-xx-xx
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2022-03-01-james-3.7.0.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.7.0"
date: 2022-03-21 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.7.0 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The Apache James PMC would like to thanks all contributors who made this release possible!
## Announcement
As of Apache James version 3.7.0 we removed support for maildir storage format. Users relying on maildir are encouraged
to switch to other backends. Maildir can still be used as part of the 3.6.x release train.
## Most noticeable changes
The Apache James PMC is pleased to announce the additions of the following components/features in Apache James 3.7.0:
- Multiple bug fixes. We hopefully significantly improved James overall stability.
- Multiple performance enhancements. This new release ships a blazing fast server!
- Multiple additions had been made to our [JMAP][JMAP] implementation including:
- Implementation of RFC-9007 for composing MDN messages with JMAP
- Support for JMAP integration with Web Push (RFC-8030), including encryption
- Multiple additional JMAP methods: Email/import, Identity/set, etc...
- Periodical cleanup of JMAP uploads
- Ease TLS configuration by accepting PEM keys. This makes it easier to use Let's encrypt and certbot.
- Task to delete unreferenced blobs when blob deduplication is enabled on top of the Distributed James server.
- Use of PBKDF2 as a strong password-hashing algorithm
- Allow disabling SMTP/IMAP plain auth for increased security
- Addition of a James product dedicated to mail processing relying on Apache Pulsar for its mail queue (experimental)
- Support for IMAP SASL OAUTH authentication mechanism. Used successfully with OIDC!
- Extension for rate limiting upon email processing (memory and redis backend)
## Release changelog
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
[JMAP]: https://jmap.io
[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#362---2022-01-26
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2016-10-19-james-3.0.markdown
=====================================================
---
layout: post
title: "New logo"
date: 2016-10-19 16:13:22 +0200
categories: james update
---
We choosed a new logo!

=====================================================
== File: src/homepage/_posts/2017-06-23-jsieve-0.7.markdown
=====================================================
---
layout: post
title: "Apache James JSieve 0.7"
date: 2017-06-23 11:30:00 +0700
categories: james update
---
James JSieve 0.7 has been released.
The library is available as a maven artifact, for instance for jsieve core:
```
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>apache-jsieve-core</artifactId>
<version>0.7</version>
</dependency>
```
This release solves issues with folded encoded header matching.
It also adds an additional DiscardAction to make discarding emails explicit for the calling code.
=====================================================
== File: src/homepage/_posts/2024-06-07-jspf-1.0.4.markdown
=====================================================
---
layout: post
title: "Apache James JSPF 1.0.4"
date: 2024-06-07 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce the 1.0.4 release of the JSPF library.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
This release fixes the DSNJava asynchronous resolver that was mis-behaving since 1.0.2 release/
The Apache James PMC would like to thanks all contributors who made this release possible!
[tracker]: https://issues.apache.org/jira/projects/JSPF/issues
[download]: https://james.apache.org/download.cgi#Apache_jSPF
=====================================================
== File: src/homepage/_posts/2018-05-07-mime4j-0.8.2.markdown
=====================================================
---
layout: post
title: "Apache James Mime4J 0.8.2"
date: 2018-05-07 11:30:00 +0700
categories: james update
---
James Mime4J 0.8.2 has been released.
This release solves the following bugs:
- MIME4J-267 MIME4J DOM parsing errors on specific formats
- MIME4J-273 Correcting encoder splitting point
The following feature were added:
- MIME4J-269 Introduce a safe to use, PERMISSIVE configuration
- MIME4J-268 DefaultMessageWriter: expose a convenient *asBytes* method
- MIME4J-271 Make possible to define a Content-Type parameter
- MIME4J-272 Implicit DOM builder call
The library is available as a maven artifact, for instance for mime4j core:
```
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>apache-mime4j-core</artifactId>
<version>0.8.2</version>
</dependency>
```
You can also download the release artifacts [here].
[here]: https://downloads.apache.org/james/mime4j/0.8.2/
=====================================================
== File: src/homepage/_posts/2012-04-08-James-3.0-beta4.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.0-beta4 released"
date: 2012-04-08 16:13:22 +0200
categories: james update
---
The Apache James project is happy to announce the release of version 3.0-beta4 of its modular mail server.
We thank all Users for their feedback and tests and we encourage anyone to [download][download] and discover this Milestone 3 release.
If you're interested in contributing to the James project, please subscribe to the James [mailing lists][mail].
[download]: http://james.apache.org/download.cgi#Apache_James_Server
[mail]: http://james.apache.org/mail.html
=====================================================
== File: src/homepage/_posts/2007-01-03-Mailet-api.markdown
=====================================================
---
layout: post
title: "Mailet API to become a sub-project"
date: 2007-01-03 16:13:22 +0200
categories: james update
---
The James commiters have voted to promote the Mailet API to its own James sub-project.
This move will provide a clearer division between development of the API and development of James server, and we hope
this will encourage more participation from external projects.
The effort will start small, by releasing the current version, and move on to look at the enhancements we've been
discussing over on [the mailet api list][list] where we will extend a warm welcome to anyone
who has something to contribute.
Eventually we hope to extend the scope of the sub-project to include things like a Reference Implementation independent
of James Server and suitable for embedding, an SDK, and possibly a TCK.
[list]: http://james.apache.org/mail.html
=====================================================
== File: src/homepage/_posts/2025-03-03-jspf-1.0.5.markdown
=====================================================
---
layout: post
title: "Apache James JSPF 1.0.5"
date: 2025-03-03 15:44:00 +0700
categories: james update
---
The Apache James developers are pleased to announce the 1.0.5 release of the JSPF library.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
This release fixes the DSNJava asynchronous resolver that was improperly handling errors asynchronously.
The Apache James PMC would like to thanks all contributors who made this release possible!
[tracker]: https://issues.apache.org/jira/projects/JSPF/issues
[download]: https://james.apache.org/download.cgi#Apache_jSPF
=====================================================
== File: src/homepage/_posts/2007-05-15-mailet-api-lives.markdown
=====================================================
---
layout: post
title: "Mailet API sub-project lives"
date: 2007-05-15 16:13:22 +0200
categories: james update
---
Following a decision taken by the James PMC a few months ago, the Apache Mailet API project is now independent of James
Server and has its own [webpage][webpage] and its own source repository.
[webpage]: /mailet/index.html
=====================================================
== File: src/homepage/_posts/2009-06-16-jsieve-03.markdown
=====================================================
---
layout: post
title: "Apache JSieve 0.3 released"
date: 2009-06-16 16:13:22 +0200
categories: james update
---
The Apache James Project is pleased to announce that the third release of
[Apache JSieve][JSieve] - an implementation of the
[Sieve][Sieve] mail filtering language -
is now available for [download][download]. This is the first modular release and includes a
filtering [mailet][mailet].
See the [release notes][notes] for more details.
[JSieve]: http://james.apache.org/jsieve
[mailet]: http://james.apache.org/mailet.
[download]: /download.cgi#Apache_JSieve
[notes]: http://james.apache.org/jsieve/0.3/release-notes.html
[Sieve]: http://www.ietf.org/rfc/rfc3028.txt
=====================================================
== File: src/homepage/_posts/2016-11-19-james-3.0.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.0-beta5"
date: 2016-11-19 16:13:22 +0200
categories: james update
---
James server 3.0.0-beta5 has been released.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2019-08-30-latest-image-changes.markdown
=====================================================
---
layout: post
title: "Apache James `latest` Docker images changes"
date: 2019-08-30 09:09:47 +0100
categories: james update
---
We have decided to change the `latest` Docker images behaviour.
Until nowadays, such images were built on the `master` branch for each products (`linagora/james-memory`, `linagora/james-cassandra-rabbitmq-ldap-project`, ...).
This is not the way `latest` docker image should be, this [blog post](https://blog.container-solutions.com/docker-latest-confusion) is explaining this kind of misunderstood.
So we decided to follow the global Docker users behaviour which is to clone the _latest stable release_ as the Docker `latest` images.
For those of you who are willing to use a Docker image on top of the master branch, you can use the newly created `branch-master` tag,
which is published on each merge on the master branch.
NB: you should not use the `latest` image in a production deployment, otherwise you are at risk of jumping from one major release to another unexpectedly.
Thanks for reading,
Antoine
=====================================================
== File: src/homepage/_posts/2015-10-08-james-2.3.1.markdown
=====================================================
---
layout: post
title: "Apache James Server 2.3.2.1 released"
date: 2015-10-08 16:13:22 +0200
categories: james update
---
Guice injection is now available in a new [Java project][guice]. Feel free to try it!
[guice]: https://github.com/apache/james-project/tree/trunk/server/container/cassandra-guice/
=====================================================
== File: src/homepage/_posts/2011-01-06-imap-mailbox-0.2.markdown
=====================================================
---
layout: post
title: "Apache James IMAP 0.2 and Mailbox 0.2"
date: 2011-01-06 16:13:22 +0200
categories: james update
---
The Apache James Project is happy to announce the release of version 0.2 of the Apache James IMAP and Mailbox components
with following features:
- Numerous IMAP bug fixes (better client support, memory improvement, NIO and IO support...).
- Support for IMAP IDLE (RFC 2177, server transmit updates to the client in real time).
- Support for IMAP User Flags.
- Support for IMAP WITHIN Extensions (RFC 5032).
- Mailbox Tooling to copy from a persistence implementation to another implementation.
- ... See also the complete release notes for [IMAP 0.2][IMAP] and [Mailbox 0.2][Mailbox].
[IMAP]: http://s.apache.org/n8
[Mailbox]: http://s.apache.org/SNu
=====================================================
== File: src/homepage/_posts/2011-11-07-jspf-1.0.0.markdown
=====================================================
---
layout: post
title: "Apache James jSPF 1.0.0 released"
date: 2011-10-07 16:13:22 +0200
categories: james update
---
The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 1.0.0 of Apache James jSPF (Sender Policy Framework) library.
=====================================================
== File: src/homepage/_posts/2021-12-02-james-3.6.1.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.6.1"
date: 2021-12-02 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.6.1 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
## Announcements
This release fixes the following vulnerability issues, that are present prior to 3.6.1:
- *CVE-2021-38542*: Apache James vulnerable to STARTTLS command injection (IMAP and POP3)
- *CVE-2021-40110*: Apache James IMAP vulnerable to a ReDoS
- *CVE-2021-40111*: Apache James IMAP parsing Denial Of Service
- *CVE-2021-40525*: Apache James: Sieve file storage vulnerable to path traversal attacks
We recommend users to upgrade to this version.
## Release changelog
Here are some points we worked on:
### Fixed
- JAMES-3676 Avoid S3 connection leaks
- JAMES-3477 Mail::duplicate did lead to file leak in various places
- JAMES-3646 Sanitize some File based components
- Prevent directory traversal on top of maildir mailbox (#659)
- FileMailRepository shoud reject URL outside of James root
- SieveFileRepository should validate underlying files belong to its root
- JAMES-1862 Generalize STARTTLS sanitizing fix
- JAMES-1862 Prevent Session fixation via STARTTLS
- JAMES-3634 + JAMES-3635 Apply fuzzing to Apache James
- Upgrade PrefixedRegex to RE2J
- Fuzzed input throws String out of bound exception for FETCH
- Prevent String OutOfBoundException for IMAP APPEND
- Prevent infinite loop for IMAP STATUS command parser
- Prevent infinite loop for IMAP APPEND command parser
- JAMES-3571 MimeMessageWrapper getSize was incorrect for empty messages
- JAMES-3525 verifyIdentity should not fail on null sender
- JAMES-3556 Fix JMAP eventUrl s/closeAfter/closeafter/
- JAMES-3432 JMAP Uploads could alter the underlying byte source
- JAMES-3537 (Email/set create should allow to attach mails)
- JAMES-3558 JMAP Email/changes: When created + updated return both
- JAMES-3558 JMAP Email/changes: moves should be considered as updates
- JAMES-3557 Changes collectors should be ordered
- JAMES-3277 Distinct uids before calling toRanges
- JAMES-3434 Refactoring: EmailSubmissionSetMethod should not rely on nested clases
=====================================================
== File: src/homepage/_posts/2021-09-21-james-joinsapachecon.markdown
=====================================================
---
layout: post
title: "Getting Apache James to serve 1M+ digital mailboxes of all Estonian residents "
date: 2021-09-21 00:00:30 +0200
categories: james update
---
The Apache James team is proud to announce that one of our committers, Juhan Aasaru, presents a James
talk at [ApacheCON @home 2021][apacheCON]
Here is the [talk description][desc]:
Every Estonian (e)resident has a digital mailbox that is a secure application for the state and local government bodies
to contact the resident and vice versa. A year ago our company won the tender to improve this service and to replace
the legacy systems with something scalable. This is the story of how we started to look out for best technical solutions
for the problem and found Apache James. How we made a proposition to the government agency responsible for providing this
mailing service to use Apache James (and Apache Cassandra that powers the system under the hood). How we jumped into the
Apache James community to understand the product and find a way to solve the requirements that were missing from the
feature set. How we get tremendous help from the community and how we managed to give something back as well.
Eventually our story could be a lesson learned for someone who plans to undertake something similar together with tips
on how to correctly build a system on top of open source and what to avoid.
Most of his working life Juhan has worked as a Java developer and Solutions Architect. He has also been CTO in two
startup companies. A few years ago he was working on a Fintech startup and contributed to Apache Fineract but recently
his attention has moved away from Fintech towards Apache James.
Join him Tuesday, 21th of September in the *highligh* track.
This talk can be seen on [youtube][youtube].
[apacheCON]: https://www.apachecon.com/acah2021/index.html
[desc]: https://www.apachecon.com/acah2021/tracks/highlight.html
[youtube]: https://www.youtube.com/watch?v=uA775icp-kk
=====================================================
== File: src/homepage/_posts/2017-10-02-BlogPostInstallingJames.markdown
=====================================================
---
layout: post
title: "Blog post: Easy and secure James installation"
date: 2017-10-03 16:13:22 +0200
categories: james update
---
In a recent [blog post], [Thibaut] explains us how to easily set up a James server on a personal domain.
He gives hints about DNS configuration, SSL configuration, James configuration, and SPF configuration. All those
features explained with working examples!
[blog post]: https://medium.com/@thibaut.sautereau/installing-james-3-0-with-spf-verification-421b26b92f11
[Thibaut]: https://github.com/thithib
=====================================================
== File: src/homepage/_posts/2022-10-07-jdkim-0.3.markdown
=====================================================
---
layout: post
title: "Apache James JDKIM 0.3"
date: 2022-10-07 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce the 0.3 release of the JDKIM library.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
This release relocates the DKIM mailet into Apache James, upgrades dependencies, and fixed two bugs:
```
Fix FWS is not trimmed correctly
DKIM-38 Support several headers with different cases
```
The Apache James PMC would like to thanks all contributors who made this release possible!
[tracker]: https://james.apache.org/download.cgi#Apache_jDKIM
[download]: https://james.apache.org/download.cgi#Apache_Mime4J
=====================================================
== File: src/homepage/_posts/2011-10-07-mime4j-0.7.1.markdown
=====================================================
---
layout: post
title: "Apache James Mime4j 0.7.1 released"
date: 2011-10-07 16:13:22 +0200
categories: james update
---
The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 0.7.1 of Apache James Mime4j library
=====================================================
== File: src/homepage/_posts/2010-05-01-mailet-1.0.markdown
=====================================================
---
layout: post
title: "Apache Mailet Standard 1.0 released"
date: 2010-05-01 16:13:22 +0200
categories: james update
---
The Apache James Project is pleased to announce that the first independent release of
[Apache Mailet Standard][standard]/ - was bundled with James Server 2.3 before -
is now available for [download][download].
[standard]: http://james.apache.org/mailet/standard/
[download]: download.cgi#Apache_JSieve
=====================================================
== File: src/homepage/_posts/2019-03-19-mime4j-0.8.3.markdown
=====================================================
---
layout: post
title: "Apache James Mime4J 0.8.3"
date: 2019-03-19 08:13:22 +0700
categories: james update
---
James Mime4J 0.8.2 has been released.
This release includes the following changes:
- MIME4J-270: Using "alternative" as default subtype
- MIME4J-263: decoding encoded words with empty encoded-text
- MIME4J-279: Fixed JavaDoc errors to comply with Java8
- MIME4J-280: Improve exception handling
- MIME4J-283: DecoderUtil performance fix
The library is available as a maven artifact, for instance for mime4j core:
```
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>apache-mime4j-core</artifactId>
<version>0.8.3</version>
</dependency>
```
You can also download the release artifacts [here].
[here]: https://downloads.apache.org/james/mime4j/0.8.3/
=====================================================
== File: src/homepage/_posts/2016-05-09-jmap.markdown
=====================================================
---
layout: post
title: "JMAP implementation"
date: 2016-05-09 16:13:22 +0200
categories: james update
---
We are now supporting all basic operations on mailboxes:
- creating: through the *setMailboxes* JMAP command
- reading: through the *getMailboxes* JMAP command
- updating: through the *setMailboxes* JMAP command
- deleting: through the *setMailboxes* JMAP command
=====================================================
== File: src/homepage/_posts/2009-01-16-MAILET-2.4.markdown
=====================================================
---
layout: post
title: "Apache Mailet 2.4 released"
date: 2009-01-16 16:13:22 +0200
categories: james update
---
The Apache James Project is pleased to announce the first independent release of [mailet][Apache Mailet]
(previous versions were released as part of the [server][Apache James Server]). The Mailet API
defines a standard approach to enterprise mail processing.
[server]: http://james.apache.org/server
[mailet]: http://james.apache.org/mailet/api
=====================================================
== File: src/homepage/_posts/2006-10-03-JAMES-2.3.markdown
=====================================================
---
layout: post
title: "James Server 2.3.0 Final Released"
date: 2006-10-03 16:13:22 +0200
categories: james update
---
James PMC is proud to announce the [availability][availability] of the long awaited final release of James Server 2.3.0.
More information on what's new can be found in the [changelog][changelog] .
[availability]: download.cgi
[changelog]: /server/2.3.0/changelog.html
=====================================================
== File: src/homepage/_posts/2012-01-08-protocols-1.6.1.markdown
=====================================================
---
layout: post
title: "Apache James Protocols 1.6.1 released"
date: 2012-01-08 16:13:22 +0200
categories: james update
---
The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 1.6.1
of Apache James Protocols library.
=====================================================
== File: src/homepage/_posts/2019-09-05-james-3.4.0.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.4.0"
date: 2019-09-05 15:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.4.0 release.
Here are some points we worked on:
### Added
- Add in-memory docker image
- Support of AWS S3 as blobstore
- WebAdmin routes for mapping management (`AddAddressMapping`, `AddRegexMapping`, `ListMappings`), previously only manageable by CLI
- Metrics for Deleted Message Vault
- More metrics for BlobStore (new delete & deleteBucket configuration)
### Changed
- (experimental) New implementation of the deleted message vault on top of an object store, not relying anymore on a
repository. This avoids exposing messages via webAdmin. Messages previously stored in the vault will be lost.
- Migration to ElasticSearch 6.3
- Blob export to LinShare
- Native DKIM support for outgoing mails. The mailets from james-jdkim have been included in main James project.
### Deprecated
- Zookeeper component. This will be removed after 3.4 release. If you have development skills, and are willing to maintain this component, please reach us.
### Removed
- Karaf OSGi implementation. It was not compiled nor tested for a year. We didn't get any feedback about that and we don't have the resources nor the skills to maintain it any more.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2007-02-04-JSPF-0.9-beta4.markdown
=====================================================
---
layout: post
title: "jSPF-0.9b4 released"
date: 2007-02-04 16:13:22 +0200
categories: james update
---
James PMC is proud to announce the [availability][availability] of the fourth beta of jspf
0.9. This version pass all tests in the last official release of the [spf testsuite][spf_testsuite] .
[availability]: http://downloads.apache.org/james/jspf/beta
[spf_testsuite]: http://www.openspf.org/svn/project/test-suite/rfc4408-tests-2007.01.yml
=====================================================
== File: src/homepage/_posts/2009-10-17-jdkim.markdown
=====================================================
---
layout: post
title: "jDKIM joins Apache James as sub-project"
date: 2009-10-17 16:13:22 +0200
categories: james update
---
The Apache James project is pleased to announce the inclusion of a new sub-project called
[jDKIM][jDKIM].
jDKIM is a DomainKeys Identified Mail (DKIM) implementation library written in Java. It provides both verification and
signing and also provides Mailets for the Apache James project.
[jDKIM]: http://james.apache.org/jdkim/
=====================================================
== File: src/homepage/_posts/2007-05-16-mime4j-0.3.markdown
=====================================================
---
layout: post
title: "Apache Mime4J 0.3 Final Released"
date: 2007-05-16 16:13:22 +0200
categories: james update
---
After almost 2 years the Apache James team is proud to announce the [availability][availability] of Apache Mime4J 0.3.
This is the first release under the ASF umbrella.
[availability]: /download.cgi
=====================================================
== File: src/homepage/_posts/2020-07-16-james-3.5.0.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.5.0"
date: 2020-07-16 15:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.5.0 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
## Announcements
### Distributed James guice product beta
Furthermore, recent work of the Apache James project did lead to a James product that leverages a distributed mail server,
using storage technologies like [Cassandra], [ElasticSearch], [RabbitMQ], and [objectStorage (S3/Swift)].
Feedback on this product, announced as a beta since 3.5.0 is welcome.
This product can be executed via [docker-compose] or you can follow its [standard installation guide]
### End of support for Java 8
James 3.5.x is the last release line to support Java 8. From 3.6.0 James will run on a Java Runtime Environment 11.
## Release changelog
Here are some points we worked on:
### Added
- Distributed task management for Distributed James product. This enables several James servers to share a consistent view
of tasks being currently executed.
- JAMES-2563 Health check for ElasticSearch
- JAMES-2904 Authentication and SSL support for Cassandra backend
- JAMES-2904 Authentication and SSL support for ElasticSearch backend
- JAMES-3066 Add support alias when sending emails, with a ["allowed From headers" webadmin endpoint](https://github.com/apache/james-project/blob/master/src/site/markdown/server/manage-webadmin.md#retrieving-the-list-of-allowed-from-headers-for-a-given-user)
- JAMES-3062 HealthCheck for EventDeadLetters
- JAMES-3058 WebAdmin offline task to correct mailbox inconsistencies on top of Cassandra products
- JAMES-3105 WebAdmin offline task to recompute mailbox counters on top of Cassandra products
- JAMES-3072 Webadmin endpoint to export mailbox backup
### Changed
- Multiple changes have been made to enhance Distributed James indexing performance:
- Use of routing keys to collocate documents per mailbox
- Under some configuration, html was not extracted before document indexing
- Removed unnecessary fields from mailbox mapping
- Disable dynamic mapping thanks to a change of the header structure
- JAMES-2855 Multiple library/plugin/docker images/build tool upgrades
- By default the cassandra keyspace creation by James is now disabled by default. This allow to have credentials limited to a keyspace. It can be enabled by setting cassandra.keyspace.create=true in the cassandra.properties file.
=====================================================
== File: src/homepage/_posts/2011-03-06-jspf-0.9.9.markdown
=====================================================
---
layout: post
title: "Apache James jSPF 0.9.9"
date: 2011-03-06 16:13:22 +0200
categories: james update
---
The Apache James Project is happy to announce the release of version 0.9.9 of the Apache James jSPF which includes fixes
related to OSGI.
[Read the release notes][notes]
[notes]: https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+JSPF+AND+fixVersion+%3D+%220.9.9%22+AND+status+%3D+Resolved+ORDER+BY+priority+DESC&mode=hide
=====================================================
== File: src/homepage/_posts/2009-03-16-Mime4j-0.6.markdown
=====================================================
---
layout: post
title: "MailetDocs Maven Plugin 0.1 released"
date: 2009-03-16 16:13:22 +0200
categories: james update
---
We are proud to announce the [availability][availability] of Apache
Mime4j-0.6. This release brings another round of API enhancements and performance
optimizations. There has been a number of notable improvements in the DOM support. MIME
stream parser is expected to be 50% faster when line counting is disabled. Please also note
that as of this release Mime4j requires a Java 1.5 compatible runtime
[availability]: /download.cgi
=====================================================
== File: src/homepage/_posts/2010-05-02-jsieve-0.4.markdown
=====================================================
---
layout: post
title: "Apache JSieve 0.4 released"
date: 2010-05-02 16:13:22 +0200
categories: james update
---
The Apache James Project is pleased to announce that the forth release of [Apache JSieve][JSieve] -
an implementation of the [Sieve][Sieve] mail filtering language -
is now available for [download][download]
[JSieve]: http://james.apache.org/jsieve
[mailet]: http://james.apache.org/mailet.
[download]: /download.cgi#Apache_JSieve
[notes]: http://james.apache.org/jsieve/0.3/release-notes.html
[Sieve]: http://www.ietf.org/rfc/rfc3028.txt
=====================================================
== File: src/homepage/_posts/2018-06-06-linagora-june-nl.markdown
=====================================================
---
layout: post
title: "Linagora June newsletter"
date: 2018-06-06 11:30:00 +0700
categories: james update
---
In the name of the James team @Linagora I will be presenting you what we did in the past few weeks, and plan to work on in the coming weeks.
We have to work on some specific features to make James easier to adopt for large organizations.
# What was achieved in May
## Notifications when soon over quota
> A mail needs to be sent to the user to warn him. This is an attempts to allow clients not implementing quota's RFCs to still get the warning.
>
> This is implemented with mailbox listeners (and not mailets), with event sourcing. We added the interfaces and implementations to achieve this feature in James using event sourcing with events being stored in Cassandra or in memory.
> Such a technical solution might be very useful to implement other feature.
>
> This mailbox listener is optional. We allowed one to register his (potentially custom) mailbox listeners when working with Guice.
## Searching user by quota usage
> This would allow an admin to inspect per-user quota usage, via a webadmin interface.
>
> Again, we provided two implementations: a scanning one, which naively enumerates mailboxes to compute occupation, and one where quota occupation is indexed in ElasticSearch.
## Performance enhancements
> In order to have a very good mail search experience, it is possible to plug Apache Tika as a text extractor into James. We use Tika as an external service that we call with HTTP. When you use this Tika extractor with ElasticSearch indexing, you get a very powerful fulltext search even on complex attachment format like LibreOffice documents.
>
> We did experience slow requests with our Tika server. We contributed [this issue] which significantly enhanced Tika server performance, and we introduce a cache on James side to reduce calls to tika.
>
> We also worked on improving massive JMAP operation performance (delete a large number of emails).
# What we will work on in June
## Data Leak Prevention
> We should have a matcher applying rules defined by the admin. This matcher will then store suspicious emails in specific mail repository for an admin review.
>
> To implement this, we need to enhance browsing to MailRepository via WebAdmin. We need to allow storing such rules as well as updating them via webadmin. We need finally a mailet storing emails in a repository given its sender domain.
### Exporting a mail account
> As an administrator, I should be able to export the content of my mail account. This both allows easier migrations, comply with legal requirements as well as allow some forms of backups.
>
> The chosen format is EMLs in a ZIP format, with the folder structure described in archive meta-data, and specific metadata to ease restoring a James account (flags, etc...). An administrator (via webamin) should be able to download/upload such backups in order to do export/restores mail accounts.
=====================================================
== File: src/homepage/_posts/2024-01-08-mime4j-0.8.10.markdown
=====================================================
---
layout: post
title: "Apache James MIME4J 0.8.10"
date: 2024-01-08 03:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce the 0.8.10 release of the MIME4J library.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
This release fixes `CVE-2024-21742: Mime4J DOM header injection`.
The Apache James PMC would like to thanks all contributors who made this release possible!
[CHANGELOG]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: https://james.apache.org/download.cgi#Apache_Mime4J
=====================================================
== File: src/homepage/_posts/2007-02-03-feathercast-fetures.markdown
=====================================================
---
layout: post
title: "Feathercast features James"
date: 2007-02-03 16:13:22 +0200
categories: james update
---
James PMC member and commiter [Danny Angus][link] was interviewed about James by David
Reid for Feathercast episode 24. You can download the podcast from [here][podcast]
[link]: http://people.apache.org/list_A.html
[podcast]: http://feathercast.org/?p=39
=====================================================
== File: src/homepage/_posts/2018-11-14-james-3.2.0.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.2.0"
date: 2018-11-14 12:13:22 +0700
categories: james update
---
The Apache James developers are pleased to announce James server 3.2.0 release.
Here are some points we worked on:
### Added
- Mail filtering configured via the JMAP protocol
- WebAdmin exposed mail re-indexing tasks
- WebAdmin exposed health checks. This includes:
- Possibility to perform a single healthcheck, thanks to [mschnitzler](https://github.com/mschnitzler)
- Cassandra health checks thanks to [matzepan](https://github.com/matzepan)
- IMAP MOVE commend (RFC-6851) On top of JPA. Thanks to [mschnitzler](https://github.com/mschnitzler)
- JPA support for Sieve script storage thanks to [Sebast26](https://github.com/sebast26)
- Sieve script upload via the CLI thanks to [matzepan](https://github.com/matzepan)
- Mailet DOC: Exclude from documentation annotation thanks to [mschnitzler](https://github.com/mschnitzler)
- **cassandra.pooling.max.queue.size** configuration option Thanks to [matzepan](https://github.com/matzepan)
- **RecipentDomainI** and **SenderDomainIs** matchers by [athulyaraj](https://github.com/athulyaraj)
### Changed
- Multiple libraries updates
- Migration from Cassandra 2 to Cassandra 3
- Mail::getSender was deprecated. Mail::getMaybeSender offers better Null Sender support. Java 8 default API method was used to not break compatibility.
### Deprecated
- HBase and JCR components (mailbox and server/data). This will be removed as part of 3.3.0. If you have development skills, and are willing to maintain these components, please reach us.
### Removed
- Drop partially implemented Kafka distributed events
### Third party softwares
- SpamAssassin prior 3.4.2 is subject to multiple CVEs. We recommend the upg
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
[Sebast26]: https://github.com/sebast26
[mschnitzler]: https://github.com/mschnitzler
[matzepan]: https://github.com/matzepan
=====================================================
== File: src/homepage/_posts/2010-12-06-protocols-1.2.markdown
=====================================================
---
layout: post
title: "Apache James Protocols 1.2 released"
date: 2010-11-05 16:13:22 +0200
categories: james update
---
The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce
the release of version 3.0-M2 (Milestone 2) of the Apache James server.
M2 is not only a fast corrective release on M1 (issues related to JMX
security configuration on Windows platforms,...), but also contains an important number
of enhancement and JIRA fixes.
For example, memory usage has been reduced thanks to optimizations on
the ActiveMQ component usage (responsible for the mail spooling).
We thank all Users for their feedback and tests and we encourage
anyone to discover this Milestone 2 release.
If you're interested in contributing to the James project, please subscribe to the James
[mailing lists][lists]
[lists]: http://james.apache.org/mail.html
=====================================================
== File: src/homepage/_posts/2025-01-29-james-3.7.6.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.7.6"
date: 2025-01-29 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.7.6 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The Apache James PMC would like to thanks all contributors who made this release possible!
## Announcement
This release comprise minor bug fixes enhancing Apache James stability.
This release fixes the following security issues:
- **CVE-2024-37358**: Denial of service through the use of IMAP literals
- **CVE-2024-45626**: Denial of service through JMAP HTML to text conversion
## Release changelog
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#376
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2010-11-06-james-3.0-M2.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.0-M2 released"
date: 2010-12-06 16:13:22 +0200
categories: james update
---
The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 1.2 of
the Apache James Protocols.
=====================================================
== File: src/homepage/_posts/2023-05-17-james-3.8.0.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.8.0"
date: 2023-05-17 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.8.0 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The Apache James PMC would like to thank all contributors who made this release possible!
## Announcement
This release brings the following significant changes:
- Upgrade TCP protocols to Netty 4
- Migrate IMAP protocol as reactive
- Multiple additional IMAP extensions are implemented
- Upgrade to Cassandra driver 4
- Migrate to OpenSearch
- Review our threading model to cap threads performing blocking tasks
- Implement official JMAP quotas specification
## Release changelog
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#380---2023-05-17
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2017-10-03-Hacktoberfest.markdown
=====================================================
---
layout: post
title: "Hacktoberfest: contribute to James"
date: 2017-10-03 16:13:22 +0200
categories: james update
---
The James project joins the [Hactoberfest]!
Retrieve available issues on [GitHub].

Contributions are diversified and feature some core James components like:
- Additional mailet/matcher contributions
- Additional Command Line options
- Additional WebAdmin functionality
- JPA Mailbox missing components
[Hactoberfest]: https://hacktoberfest.digitalocean.com/
[GitHub]: https://github.com/linagora/james-project/issues?q=is%3Aissue+is%3Aopen+label%3AHacktoberfest
=====================================================
== File: src/homepage/_posts/2016-07-09-jmap.markdown
=====================================================
---
layout: post
title: "JMAP implementation"
date: 2016-07-09 16:13:22 +0200
categories: james update
---
Read and Send message with attachments.
You can now send and read messages with attachments through the JMAP commands *setMessages* and *getMessages*.
Those attachments are uploaded via the */upload* and downloaded via the */download* JMAP endpoints.
=====================================================
== File: src/homepage/_posts/2008-10-16-mime4j-0.5.markdown
=====================================================
---
layout: post
title: "Mime4j 0.5 released"
date: 2008-10-16 16:13:22 +0200
categories: james update
---
we are proud to announce the [availability][availability] of APACHE Mime4j-0.5. This release addresses a number of
important issues discovered since 0.4. In particular, it improves Mime4j ability to deal with malformed data streams
including those intentionally crafted to cause excessive CPU and memory utilization that can lead to DoS condition
This release also fixes a serious bug that can prevent Mime4j from correctly processing binary content
[availability]: /download.cgi
=====================================================
== File: src/homepage/_posts/2022-10-06-james-3.7.2.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.7.2"
date: 2022-10-06 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.7.2 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The Apache James PMC would like to thanks all contributors who made this release possible!
## Announcement
This release proposes stability related bug fixes and updates some dependencies for security reasons.
## Release changelog
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#372---2022-10-06
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2007-04-04-james-commiters-guidelines.markdown
=====================================================
---
layout: post
title: "Apache James Project Guidelines published"
date: 2007-04-04 16:13:22 +0200
categories: james update
---
The James PMC has approved - for the first time - a set of [guidelines]: guidelines.html for the project. These guidelines
are intended to reflect and summarize well-known practices in our community. They include "... definitions of how conflict
is resolved by voting, who is able to vote, and the procedures to follow for proposing and making changes to the Apache
James products.
=====================================================
== File: src/homepage/_posts/2022-12-30-james-3.7.3.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.7.3"
date: 2022-12-30 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.7.3 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The Apache James PMC would like to thanks all contributors who made this release possible!
## Announcement
This release fixes CVE-2022-45935: Temporary File Information Disclosure in Apache JAMES.
This release proposes stability related bug fixes and updates some dependencies for security reasons.
## Release changelog
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#373---2022-12-30
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2009-02-16-MAILET-docs-plugin-0.1.markdown
=====================================================
---
layout: post
title: "MailetDocs Maven Plugin 0.1 released"
date: 2009-02-16 16:13:22 +0200
categories: james update
---
The Apache James Project is pleased to announce the first release of the
[MailetDocs]: http://james.apache.org/mailet/maven-mailetdocs-plugin/ plugin for [Maven][Maven].
The plugin catalogs mailet (for [example][example]).
For more information, see the [release notes][notes].
[Maven]: http://maven.apache.org
[example]: http://james.apache.org/mailet/standard/mailet-report.html
[notes]: http://james.apache.org/mailet/maven-mailetdocs-plugin/release-notes.html
=====================================================
== File: src/homepage/_posts/2015-09-08-james-2.3.1.markdown
=====================================================
---
layout: post
title: "Apache James Server 2.3.2.1 released"
date: 2015-09-08 16:13:22 +0200
categories: james update
---
This release fixes a security vulnerability - Users are invited to upgrade (read
[annouce on the Apache James blog][blog]).
[blog]: https://blogs.apache.org/james/entry/apache_james_server_2_3
=====================================================
== File: src/homepage/_posts/2020-10-29-testing-james-with-jmeter.markdown
=====================================================
---
layout: post
title: "Performance testing for James with JMeter"
date: 2020-10-29 15:16:30 +0200
categories: community
---
Ever wanted to figure out what Apache James gets in its guts?
Xian Long detailed in this [blog post][post] how to be using JMeter in order to run some
IMAP performance tests on top of the distributed server, using [JMeter][jmeter]
[Other tools][james-gatling], based on [Gatling][gatling] had been developed within the community, addressing SMTP,
IMAP and [JMAP][JMAP] protocols.
[post]: https://www.cnblogs.com/hanxianlong/p/13894595.html
[jmeter]: https://jmeter.apache.org/
[gatling]: https://gatling.io/
[JMAP]: https://jmap.io/
[james-gatling]: https://github.com/linagora/james-gatling
=====================================================
== File: src/homepage/_posts/2009-06-17-jspf-0.9.7.markdown
=====================================================
---
layout: post
title: "Apache jSPF 0.9.7 released"
date: 2009-06-17 16:13:22 +0200
categories: james update
---
The Apache James Project is pleased to announce a new [Apache jSPF][jSPF] release which included
some critical bug fixes.
[jSPF]: http://james.apache.org/jspf
=====================================================
== File: src/homepage/_posts/2010-09-04-imap-0.2-M1.markdown
=====================================================
---
layout: post
title: "Apache IMAP 0.2-M1 released"
date: 2010-09-04 16:13:22 +0200
categories: james update
---
The Apache James Project is pleased to announce a new
[Apache IMAP][imap] release in preparation of
the upcoming 3.0-M1 [Apache Mail server][imap]
[imap]: http://james.apache.org/imap
=====================================================
== File: src/homepage/_posts/2023-03-20-james-3.7.4.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.7.4"
date: 2023-03-20 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.7.4 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The Apache James PMC would like to thanks all contributors who made this release possible!
## Announcement
This release comprise minor bug fixes enhancing Apache James stability.
## Release changelog
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#374---2023-03-20
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2009-08-17-james-2.3.2.markdown
=====================================================
---
layout: post
title: "Apache James 2.3.2 Released"
date: 2009-08-17 16:13:22 +0200
categories: james update
---
The Apache James project is pleased to announce that Apache James 2.3.2 is now
[available][available].
This is a minor bug fix release.
See the [Release Notes][notes]
for more details. Upgrading is recommended for users of previous 2.x releases.
[notes]: http://james.apache.org/server/2.3.2/release-notes.html
[available]: /download.cgi#Apache_James_2.3.2_is_the_stable_version
=====================================================
== File: src/homepage/_posts/2018-01-26-admin-features.markdown
=====================================================
---
layout: post
title: "New administration features: manage your queues and your reporitories"
date: 2018-01-26 00:00:22 +0200
categories: james update
---
An often asked feature for James is the ability to handle the mails, that after some processing,
have landed in a [repository], for example /var/mail/error/.
A brand new webadmin API allows you to handle the content of these repositories, see the documentation in [manage-webadmin].
It allows you to list the repositories, their content, but also to reprocess one or several mails in the processor and queue
of your choice.
Oh! And bonus, now you can forget this non scalable file repository and use the brand new Cassandra repository!
On the same documentation page you will also find the new mail queue management API, done to list queued mails, remove some
of them regarding different criteria, but also flush delayed mails.
Most of the work on these already usable features is done, but we still have some ideas for related improvements. [Contributions] are welcomed!
[repository]: http://james.apache.org/server/feature-persistence.html
[Contributions]: https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20in%20(feature)%20AND%20component%20%20in%20(Queue%2C%20%22MailStore%20%26%20MailRepository%22)%20AND%20type%20in%20(Improvement)
[manage-webadmin]: https://james.apache.org/server/manage-webadmin.html
=====================================================
== File: src/homepage/_posts/2011-04-06-mime4J-0.7.markdown
=====================================================
---
layout: post
title: "Apache James Mime4J 0.7"
date: 2011-04-06 16:13:22 +0200
categories: james update
---
The Apache James Project is happy to announce
the release of version 0.7 of the Apache James Mime4J.
Mime4J is a flexible MIME parsing library written in Java. SAX, DOM and pull parsing styles are
supported.
The 0.7 release brings another round of API enhancements, bug fixes and performance optimizations.
A major effort has been put in code reorganization, separating parsing code from DOM manipulation
code. Mime4J has been restructured into three separate modules: 'core', 'dom' and 'storage'.
The 'core' package provides an event-driven SAX style parser that relies on a callback mechanism
to report parsing events such as the start of an entity header the start of a body, etc.
The 'dom' package contains base/abstract classes and interfaces for MIME-DOM manipulation aiming
to provide the base for a full featured traversable DOM. Per default the Mime4J DOM builder stores
content of individual body parts in memory. The 'storage' package provides support for more
complex storage backends such on-disk storage systems, overflow on max limit, or encrypted storage
through JSSE API.
Mime4J 0.7 improves support for headless messages, malformed separation between headers and body
and adds support for "obsolete" rfc822 syntax (e.g: "Header<somespace>: " style). Parsing
performance for quoted printable streams have been considerably improved. A "DecodeMonitor" object
has been introduced in most code to define how to deal with malformed input (Lenient vs Strict
behaviours). Mime4J 0.7 also provides LenientFieldParser as an alternative to DefaultFieldParser
when a higher degree of tolerance to non-severe MIME field format violations is desired.
[Read the release notes][notes]
[notes]: https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310521&version=12313592
=====================================================
== File: src/homepage/_posts/2017-07-20-james-3.0.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.0.0"
date: 2017-07-20 16:13:22 +0200
categories: james update
---
James server 3.0.0 has been released !
You are welcome to [download it][download], any issue can be reported on our issue [tracker][tracker].
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2017-05-16-mime4j-0.8.1.markdown
=====================================================
---
layout: post
title: "Apache James Mime4J 0.8.1"
date: 2017-06-16 11:30:00 +0700
categories: james update
---
James Mime4J 0.8.1 has been released.
The library is available as a maven artifact, for instance for mime4j core:
```
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>apache-mime4j-core</artifactId>
<version>0.8.1</version>
</dependency>
```
This release solves issues with header Date handling in the dom project:
- It was not possible to know if the Date header was set as a default value was always provided
- Valid dates missing century was badly parsed.
=====================================================
== File: src/homepage/_posts/2008-08-17-JSIEVE-0.2.markdown
=====================================================
---
layout: post
title: "Apache JSieve 0.2 released"
date: 2008-08-17 16:13:22 +0200
categories: james update
---
The Apache James Project is pleased to announce the first public release of
[jsieve][Apache JSieve] an implementation of [RFC3028][RFC3028 - Sieve: A Mail Filtering Language]
for Java.
[jsieve]: http://james.apache.org/jsieve
[RFC3028]: http://www.faqs.org/rfcs/rfc3028.html
=====================================================
== File: src/homepage/_posts/2010-11-05-james-3.0-M1.markdown
=====================================================
---
layout: post
title: "Apache IMAP 0.2-M1 released"
date: 2010-11-05 16:13:22 +0200
categories: james update
---
The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce
the release of version 3.0-M1 (Milestone 1) of the Apache James server.
The Apache James Server is a 100% pure Java enterprise mail server based on open protocols.
Currently supported are SMTP/LMTP, POP3, IMAP4 protocols together with several different
storage solutions (relational database via JPA and JDBC, File system with MailDir, JCR Content Repsitory).
The James server also serves as a mail application platform. It hosts the Apache Mailet API,
and acts has a Mailet container. This feature makes it easy to design, write, and deploy custom applications for
mail processing. This modularity and ease of customization is one of James' strengths, and can allow administrators to
produce powerful applications surprisingly easily.
Features for that version include enhancements to nearly every area of functionality,
including full IMAP support, improved mailing list capabilities, fastfail support, SMTP API
for developing own fastfail filters and the next revision of the Mailet API.
This was an exciting time in James development and we thank all contributors.
We are still actively looking for eager, capable developers to contribute to James.
If you're interesting in contributing to the James project, please subscribe to the James
[mailing lists]: http://james.apache.org/mail.html.
Information about James can be found at the James web site
at [http://james.apache.org/][web].
[web]: http://james.apache.org/
=====================================================
== File: src/homepage/_posts/2021-04-21-mime4j-0.8.4.markdown
=====================================================
---
layout: post
title: "Apache James Mime4J 0.8.4"
date: 2021-04-21 13:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce Apache James Mime4J 0.8.4.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The changelog for this release can be seen [here][changelog]
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: http://james.apache.org/download.cgi#Apache_James_Server
[changelog]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md
=====================================================
== File: src/homepage/_posts/2022-12-30-mime4j-0.8.9.markdown
=====================================================
---
layout: post
title: "Apache James MIME4J 0.8.9"
date: 2022-12-30 03:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce the 0.8.9 release of the MIME4J library.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
The Apache James PMC would like to thanks all contributors who made this release possible!
[CHANGELOG]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: https://james.apache.org/download.cgi#Apache_Mime4J
=====================================================
== File: src/homepage/_posts/2011-08-06-james-beta3.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.0-beta3 released"
date: 2011-08-06 16:13:22 +0200
categories: james update
---
The Apache James project is happy to announce the release of version 3.0-beta3 of its modular mail server.
We thank all Users for their feedback and tests and we encourage anyone to
[download][download] and discover this Milestone 3 release.
If you're interested in contributing to the James project, please subscribe to the James
[mailing lists][lists]
What's new in 3.0-beta3 for end users:
- Numerous IMAP bug fixes (better client support, memory improvement, NIO and IO support...)
- Support for IMAP IDLE (RFC 2177, server transmit updates to the client in real time)
- Support for IMAP User Flags
- Support for IMAP WITHIN Extensions (RFC 5032)
- Mailbox Tooling to copy from a persistence implementation to another implementation
- Telnet Management has been removed in favor of JMX with client shell
- More metrics counters available via JMX
- Better debug logging on protocols
- JPA validated against more databases (among others Oracle)
- Multiple address and port configurations per protocol
- POP3 is now operational (was buggy in 3.0-M2)
- Upgrade tool from James 2.3 is available
- Better logging on protocols with adjustable level
- Full mailet package must be specified
- Composite Matchers
- Better debug logging on protocols
- Mailing list functionality has been removed
- More documentation on web site for configuration,...
- Java 1.6 mandatory
- ... and much more, see details on https://issues.apache.org/jira/secure/ReleaseNote.jspa?in&version=12316850&styleName=Html&projectId=10411
What's new in 3.0-beta3 for developers:
- Less maven modules
- Maven 3.0.2 required to build
- Upgrade to latest frameworks versions (netty, activemq, jackrabbit...)
- Code reports generation via 'mvn site -P site-reports' maven profile
- Corrections further to findbugs,... reports
- Code formatting
- ... and much more, see details on https://issues.apache.org/jira/secure/ReleaseNote.jspa?in&version=12316850&styleName=Html&projectId=10411
[Quick Start][quick]
=====================================================
== File: src/homepage/_posts/2018-02-12-gsoc-2018.markdown
=====================================================
---
layout: post
title: "Apache JAMES joins Google Summer of code 2018 !"
date: 2018-02-1 00:00:22 +0200
categories: announcements
---
This year, James developers will propose ideas of Google Summer of Code projects for students.
[Google Summer of Code] is a global program focused on bringing more student developers into open source software development.
Students work with an open source organization on a 3 month programming project during their break from school.

We consider it is a dreamed occasion to discover the Apache James project, and get on board in this amazing project!
We are willing to offer high quality mentoring on high added value, useful tasks. As a student:
- ?? You will discover how Open Source world works. You will exchange with our community.
- ?? You will be advised by experienced, long term committers.
- ?? You will build technical experience on a mail server.
- ?? And hopefully you will get some code contributions on an Apache project.
Here are some ideas of applications:
- ⚒ [JAMES-1931] We are in need of a WebAdmin User Interface to ease our beloved administrator API. You will need to build an administration website on top of the **webAdmin** REST API.
- ⚒ [JAMES-1932] James allow to fully customize mail processing. But we miss tools to ease edition and testing of the processing flow.
- ⚒ [JAMES-1933] Emails need to be secure. Many protocols like DKIM, SPF and DMARC allow to meet this purpose. However we need more documentation and a DMARC implementation.
- ⚒ [JAMES-2335] James should be a flexible server. We should be able to use custom configuration providers, not only XML files as of today. That is a move toward "clustering done the right way".
Of course, we are very open if you want to propose other ideas to us! Come and discuss this on [our gitter channel] or on the issues directly.
Thank you by advance for your involvement and hope to see you around!
[Google Summer of Code]: https://summerofcode.withgoogle.com/
[JAMES-1931]: https://issues.apache.org/jira/browse/JAMES-1931
[JAMES-1932]: https://issues.apache.org/jira/browse/JAMES-1932
[JAMES-1933]: https://issues.apache.org/jira/browse/JAMES-1933
[JAMES-2335]: https://issues.apache.org/jira/browse/JAMES-2335
[our gitter channel]: https://gitter.im/apache/james-project
=====================================================
== File: src/homepage/_posts/2021-09-26-mime4j-0.8.6.markdown
=====================================================
---
layout: post
title: "Apache James Mime4J 0.8.6"
date: 2021-09-26 13:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce Apache James Mime4J 0.8.6
This release mostly enhances performances:
- MIME4J-306 MimeUtil::unfold should group char appends (#52)
- MIME4J-305 ContentUtil::decode can avoid using StringBuilder (#51)
- MIME4J-304 DecoderUtil::decodeEncodedWords without REGEXP (#50)
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The changelog for this release can be seen [here][changelog]
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: http://james.apache.org/download.cgi#Apache_James_Server
[changelog]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md
=====================================================
== File: src/homepage/_posts/2025-07-18-mime4j-0.8.13.markdown
=====================================================
---
layout: post
title: "Apache James MIME4J 0.8.13"
date: 2025-07-18 03:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce the 0.8.13 release of the MIME4J library.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
This release adds the following features:
- MIME4J-332 Improve handling of "sectioned" field names
- MIME4J-331 Add support for RFC-6532 Internationalized Email Headers, and test it. (#114)
- MIME4J-330 Fix MimeStreamParser bug: part body stream ends with CR
The Apache James PMC would like to thanks all contributors who made this release possible!
[CHANGELOG]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: https://james.apache.org/download.cgi#Apache_Mime4J
=====================================================
== File: src/homepage/_posts/2016-07-19-jmap.markdown
=====================================================
---
layout: post
title: "JMAP implementation"
date: 2016-07-19 16:13:22 +0200
categories: james update
---
Full text search via JMAP.
Full text search via the *getMessageList* JMAP command is now supported.
The JMAP search **filtering** parameter is converted to an internal *SearchQuery*; then this query is processed by your
binded search backend.
=====================================================
== File: src/homepage/_posts/2008-03-16-gsoc-2008.markdown
=====================================================
---
layout: post
title: "James publishes project ideas for Google Summer of Code '08"
date: 2008-03-16 16:13:22 +0200
categories: james update
---
The James Team are delighted to announce that we're proposing two project ideas for
[Google Summer of Code (GSOC) 2008][gsoc]. The project Ideas are set out on the Apache GSOC
wiki [here]: http://wiki.apache.org/general/SummerOfCode2008#james .
In brief they are:
- Develop a VERP Mailet to allow James to write VERP modified return addresses on outbound messages, and an inbound mailet/matcher
to identify VERP bounces and invoke configurable "do something" code.
- James' provided mailing list manager is fine for small closed groups, but lacks the functionality of a more robust MLM,
the project is to add some all or more of the following features subscriber and message moderation, double opt-in and bounce handling.
[gsoc]: : http://code.google.com/soc/2008/
=====================================================
== File: src/homepage/_posts/2019-11-19-apache-con-eu.markdown
=====================================================
---
layout: post
title: "Benoit Tellier presents James at ApacheCon Europe"
date: 2019-11-19 16:16:30 +0200
categories: james apachecon
---
Benoit had the pleasure to present James at the ApacheCon at Berlin: "Gaining control over emails with Apache James".
If you missed him you can see his conference on [youtube][Youtube], or read his [article][article].
[youtube]: https://www.youtube.com/watch?v=zr8qpNkL6U4
[article]: https://medium.com/linagora-engineering/linagora-representing-james-at-the-apachecon-europe-2019-c6e28b31242a
=====================================================
== File: src/homepage/_posts/2011-05-06-jdKim0.2.markdown
=====================================================
---
layout: post
title: "Apache James jDKIM 0.2"
date: 2011-05-06 16:13:22 +0200
categories: james update
---
The Apache James Project is happy to announce
the release of version 0.2 of the Apache James jDKIM library.
jDKIM is a DKIM implementation library written in Java. It provides
both verification and signing and also provides Mailets for the
Apache JAMES project.
This is the first official release of the library, but the code has
been in production almost unchanged since two years.
[Read the release notes][notes]
[notes]: https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310990&version=12314300
=====================================================
== File: src/homepage/_posts/2009-09-17-hupa.markdown
=====================================================
---
layout: post
title: "Hupa joins Apache James as sub-project"
date: 2009-09-17 16:13:22 +0200
categories: james update
---
The Apache James project is pleased to announce the inclusion of a new sub-project called
[Hupa][Hupa].
Hupa is a GWT based webmail which use IMAP to connect to the backend mailserver.
[Hupa]: http://james.apache.org/hupa/
=====================================================
== File: src/homepage/_posts/2010-06-03-jspf-0.9.8.markdown
=====================================================
---
layout: post
title: "Apache jSPF 0.9.8 released"
date: 2010-06-03 16:13:22 +0200
categories: james update
---
The Apache James Project is pleased to announce a new [Apache jSPF][jSPF] release which includes
fixed to TXT record escaping and pass the rfc4408-tests-2009.10 testsuite.
[jSPF]: http://james.apache.org/jspf
=====================================================
== File: src/homepage/_posts/2022-10-28-mime4j-0.8.8.markdown
=====================================================
---
layout: post
title: "Apache James MIME4J 0.8.8"
date: 2022-10-28 03:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce the 0.8.8 release of the MIME4J library.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
The Apache James PMC would like to thanks all contributors who made this release possible!
[CHANGELOG]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: https://james.apache.org/download.cgi#Apache_Mime4J
=====================================================
== File: src/homepage/_posts/2010-09-03-protocols-1.2-M2.markdown
=====================================================
---
layout: post
title: "Apache protocols 1.2-M1 released"
date: 2010-09-03 16:13:22 +0200
categories: james update
---
The Apache James Project is pleased to announce a new Apache protocols release in preparation of the upcoming 3.0-M1
[Apache Mail server][imap].
[imap]: http://james.apache.org/imap
=====================================================
== File: src/homepage/_posts/2021-03-16-james-3.6.0.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.6.0"
date: 2021-03-16 15:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.6.0 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
## Announcements
### Experimental support for JMAP RFC-8621 and deprecation of JMAP Draft
Since the last release we worked hard refreshing our JMAP implementation, implementing both [JMAP core][jmap-core],
[JMAP mail][jmap-mail] and the [JMAP over WebSocket][jmap-ws] specifications. Their support is considered experimental and
early adopters' feedback is highly welcomed.
[JMAP Draft][jmap-draft] should be considered legacy, and will be removed in upcoming 3.7.0 release.
### Switch to Java 11 for build and run
We adopted Java Runtime Environment 11 from James release 3.6.0. James 3.5.0 is the last version offering Java Runtime
Environment 8 support.
## Release changelog
Here are some points we worked on:
### Added
- JAMES-2884 Partial Support for JMAP RFC-8621: The current implementation status allow reading mailboxes, emails, vacation responses.
- JAMES-3457 Implement JMAP eventSource
- JAMES-3491 JMAP over websocket (RFC-8887)
- JAMES-3470 JMAP RFC-8621 Email/changes + Mailbox/changes support
- JAMES-3117 Add PeriodicalHealthChecks for periodical calling all health checks
- JAMES-3143 WebAdmin endpoint to solve Cassandra message inconsistencies
- JAMES-3138 Webadmin endpoint to recompute users current quotas on top of Guice products
- JAMES-3296 Webadmin endpoint to rebuild RabbitMQMailQueue in the Distributed Server
- JAMES-3266 Offer an option to disable ElasticSearch in Distributed James product
- JAMES-3202 Reindex only outdated documents with the Mode option set to CORRECT in reindexing tasks
- JAMES-3405 Expose metrics of Guice servers over HTTP - enables easy Prometheus metrics collection
- JAMES-3407 Distributed server: Read-repairs for the mailbox entity
- JAMES-3428 Distributed server: Read-repairs for the mailbox counters entity
- JAMES-3139 Expose RabbitMQ channel & connection configuration
- JAMES-3441 Make possible and document Distributed Server setup with specialized instances
- JAMES-3337 Document the use of JWT
- JAMES-3399 Allow JSON logging with logback - enables structure logging with FluentBit
- JAMES-3396 WebAdmin should try to prevent RRT addresses redirection loops when possible
- JAMES-3402 JMAP MDN messages should have a Date header
=====================================================
== File: src/homepage/_posts/2016-09-19-james-3.0.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.0"
date: 2016-09-19 16:13:22 +0200
categories: james update
---
We are currently working on the release.
Keep an eye on the [news][news], we are planning to release the next version in November.
[news]: http://james.apache.org/newsarchive.html
=====================================================
== File: src/homepage/_posts/2022-04-01-mime4j-0.8.7.markdown
=====================================================
---
layout: post
title: "Apache James MIME4J 0.8.7"
date: 2022-04-01 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce the 0.8.7 release of the MIME4J library.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
The Apache James PMC would like to thanks all contributors who made this release possible!
[CHANGELOG]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md#087---2022-04-01
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: https://james.apache.org/download.cgi#Apache_Mime4J
=====================================================
== File: src/homepage/_posts/2022-10-28-jsieve-0.8.markdown
=====================================================
---
layout: post
title: "Apache James JSieve 0.8"
date: 2022-10-28 02:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce the 0.8 release of the JSieve library.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
This release targets JDK 8, update dependencies, and also brings a couple bug fixes. See the [release notes][notes].
The Apache James PMC would like to thanks all contributors who made this release possible!
[notes]: https://github.com/apache/james-jsieve/blob/master/RELEASE_NOTES.txt
[tracker]: https://issues.apache.org/jira/projects/JSIEVE/issues
[download]: https://james.apache.org/download.cgi#Apache_JSieve
=====================================================
== File: src/homepage/_posts/2009-04-16-Mailet-base-0.1.markdown
=====================================================
---
layout: post
title: "Apache Mailet Base 1.0 released"
date: 2009-04-16 16:13:22 +0200
categories: james update
---
The Apache James Project is pleased to announce the first independent release of
[Apache Mailet Base][base] (previous versions
were released as part of the
[Apache James Server][server]). The Basic Mailet Toolkit
contains lightweight frameworks and utilities likely to be of interest to
[Mailet][mailet] developers.
[base]: http://james.apache.org/mailet/base
[server]: http://james.apache.org/server
[mailet]: http://james.apache.org/mailet/api
=====================================================
== File: src/homepage/_posts/2018-07-31-james-3.1.0.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.1.0"
date: 2018-07-31 16:13:22 +0200
categories: james update
---
James server 3.1.0 has been releases.
Here are some points we worked on:
### Added
- Introduce an object store
- Configurable listeners
- MDN (Message Disposition notification) parsing and handling
- SpamAssassin support with per user reports
- Search in attachments
- Data Leak Prevention
- JPA SMTP Guice product
- Cassandra migration process
- Structured logging
- RPM packaging (in addition to deb packaging)
- Delegating folders
### Changed
- Move to Java 8
- Improve Mail Repositories handling, including a nice web API
- Improve Mail Queues handling, including a nice web API
- Improve RRT (Recipient Rewrite Table) implementation
- Quota handling improvements, and in particular users can receive an email when they are near the limit of their quota
- Many performances enhancement, in particular on Cassandra backend
- Documentation updates
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2025-05-21-jdKim0.5.markdown
=====================================================
---
layout: post
title: "Apache James jDKIM 0.5"
date: 2025-05-21 16:43:22 +0700
categories: james update
---
The Apache James Project is happy to announce
the release of version 0.5 of the Apache James jDKIM library.
jDKIM is a DKIM implementation library written in Java. It provides
both verification and signing.
This release makes various libraries updates, code fixes and enhancements.
The Apache James PMC would like to thanks all contributors who made this release possible!
=====================================================
== File: src/homepage/_posts/2006-08-02-james-website-updates.markdown
=====================================================
---
layout: post
title: "James Products website revamped<"
date: 2006-08-02 16:13:22 +0200
categories: james update
---
We just finished a major update of james products to be able to publish each product specific site under this new website structure
=====================================================
== File: src/homepage/_posts/2008-08-16-mime4j-0.4.markdown
=====================================================
---
layout: post
title: "Mime4j 0.4 released"
date: 2008-08-16 16:13:22 +0200
categories: james update
---
We are proud to announce the [availability][availability] of APACHE Mime4j-0.4. This release brings a number of
significant improvements in terms of supported capabilities, flexibility and performance:
- Revised and improved public API with support for pull parsing
- Support for parsing of 'headless' messages transmitted using non SMTP transports such as HTTP
- Reduced external dependencies. Mime4j is no longer directly dependent on log4j and commons-io
- Improved parsing performance (up to 10x for large messages)
- More comprehensive header parsing including support for RFC1864, RFC2045, RFC2183, RFC2557 and RFC3066
- Revised packaging and exception hierarchy. MimeException now extends IOException
[availability]: /download.cgi
=====================================================
== File: src/homepage/_posts/2012-06-08-hupa-0.2.markdown
=====================================================
---
layout: post
title: "Apache Hupa 0.0.2 released"
date: 2012-06-08 16:13:22 +0200
categories: james update
---
The Java Apache Mail Enterprise Server Project is happy to announce the release of version 0.0.2 of Apache Hupa, the
James rich webmail client.
=====================================================
== File: src/homepage/_posts/2024-01-09-james-3.7.5.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.7.5"
date: 2024-01-09 01:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.7.5 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The Apache James PMC would like to thanks all contributors who made this release possible!
## Announcement
This release comprise minor bug fixes enhancing Apache James stability.
This release fixes the following security issues:
- **CVE-2023-51747**: SMTP smuggling in Apache James
- **CVE-2023-51518**: Privilege escalation via JMX pre-authentication deserialisation
## Release changelog
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#375---2024-01-09
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2016-02-09-jmap.markdown
=====================================================
---
layout: post
title: "JMAP implementation"
date: 2016-02-09 16:13:22 +0200
categories: james update
---
We are actively working on implementing JMAP protocol into James.
[JMAP][JMAP] is a transport-agnostic, stateless JSON-based API for synchronising a mail client with a mail server.
It allows to develop easily a mail client in a browser, without the pain of using a server to proxy IMAP commands.
Feel free to help us, you can see our advancement on the specification implementation into [jmap/doc][doc]
[JMAP]: http://jmap.io
[doc]: https://github.com/apache/james-project/tree/3.3.x/server/protocols/jmap/doc/specs
=====================================================
== File: src/homepage/_posts/2024-12-23-mime4j-0.8.12.markdown
=====================================================
---
layout: post
title: "Apache James MIME4J 0.8.12"
date: 2024-12-23 03:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce the 0.8.12 release of the MIME4J library.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
This release fixes a minor regression of the 0.8.12 release regarding UTF-8 encoding.
The Apache James PMC would like to thanks all contributors who made this release possible!
[CHANGELOG]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: https://james.apache.org/download.cgi#Apache_Mime4J
=====================================================
== File: src/homepage/_posts/2024-01-09-james-3.8.1.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.8.1"
date: 2024-01-09 02:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.8.1 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The Apache James PMC would like to thank all contributors who made this release possible!
## Announcement
This release comprise minor bug fixes enhancing Apache James stability.
This release fixes the following security issues:
- **CVE-2023-51747**: SMTP smuggling in Apache James
- **CVE-2023-51518**: Privilege escalation via JMX pre-authentication deserialisation
## Release changelog
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#381---2024-01-09
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2012-01-07-protocols-1.6.0.markdown
=====================================================
---
layout: post
title: "Apache James Protocols 1.6.0 released"
date: 2012-01-07 16:13:22 +0200
categories: james update
---
The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 1.6.0
of Apache James Protocols library.
=====================================================
== File: src/homepage/_posts/2021-07-02-mime4j-0.8.5.markdown
=====================================================
---
layout: post
title: "Apache James Mime4J 0.8.5"
date: 2021-07-02 13:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce Apache James Mime4J 0.8.5.
This release mostly enhances performances (dates, base64 encoding, case
sensitivity management, ...)
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The changelog for this release can be seen [here][changelog]
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: http://james.apache.org/download.cgi#Apache_James_Server
[changelog]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md
=====================================================
== File: src/homepage/_posts/2006-08-03-2.3.0-RC3.markdown
=====================================================
---
layout: post
title: "James Server 2.3.0 RC3 Released"
date: 2006-08-02 16:13:22 +0200
categories: james update
---
James PMC is proud to announce the [availability][availability] of the third, and hopefully
last, release candidate of James Server 2.3.0. More information on what's new can be found in the [changelog]: /server/2.3.0/changelog.html.
New development roadmaps are being discussed right now, so stay tuned for 2.3.0 final and for the following news.
[availability]: http://downloads.apache.org/james/server/
=====================================================
== File: src/homepage/_posts/2011-10-06-protocols-1.6-beta2.markdown
=====================================================
---
layout: post
title: "Apache James Protocols 1.6-beta1 released"
date: 2011-10-06 16:13:22 +0200
categories: james update
---
The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 1.6-beta1 of Apache James Protocols library.
=====================================================
== File: src/homepage/_posts/2017-10-20-james-3.0.1.markdown
=====================================================
---
layout: post
title: "Security release: Apache James server 3.0.1"
date: 2017-10-20 00:00:22 +0200
categories: james update
---
The Apache James PMCs are glad to announce you the release
version 3.0.1 of Apache James server.
It fixes vulnerability described in CVE-2017-12628. The JMX server, also
used by the command line client is exposed to a java de-serialization
issue, and thus can be used to execute arbitrary commands. As James
exposes JMX socket by default only on local-host, this vulnerability can
only be used for privilege escalation.
Release 3.0.1 upgrades the incriminated library.
Note that you can take additional defensive steps in order to mitigate this vulnerability:
- Ensure that you restrict the access to JMX only on local-host
- Ensure that you are using a recent Java Run-time Environment. For instance OpenJDK 8 u111 is vulnerable but OpenJDK 8 u 141 is not.
- You can additionally run James in a container to limit damages of potential exploits
- And of course upgrade to the newest 3.0.1 version.
Read more about Java deserialization [issues].
[issues]: https://www.sourceclear.com/blog/Commons-Collections-Deserialization-Vulnerability-Research-Findings/
=====================================================
== File: src/homepage/_posts/2025-03-04-jdKim0.4.markdown
=====================================================
---
layout: post
title: "Apache James jDKIM 0.4"
date: 2025-03-04 16:43:22 +0700
categories: james update
---
The Apache James Project is happy to announce
the release of version 0.4 of the Apache James jDKIM library.
jDKIM is a DKIM implementation library written in Java. It provides
both verification and signing.
This release updates DNS Java to a non-vulnerable version.
=====================================================
== File: src/homepage/_posts/2017-05-16-james-3.0.0-rc1.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.0-RC1"
date: 2017-05-16 09:14:00 +0200
categories: james update
---
James server 3.0.0-RC1 has been released.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2008-04-16-jspf-0.9.6.markdown
=====================================================
---
layout: post
title: "jSPF-0.9.6 released"
date: 2008-04-16 16:13:22 +0200
categories: james update
---
We are proud to announce the [availability][availability] release of APACHE jSPF-0.9.6. This release fix two possible
NullPointerExceptions and handle the "exp=" modifier correctly.
[availability]: /download.cgi
=====================================================
== File: src/homepage/_posts/2025-01-29-james-3.8.2.markdown
=====================================================
---
layout: post
title: "Apache James Server 3.8.2"
date: 2025-01-29 02:16:30 +0200
categories: james update
---
The Apache James developers are pleased to announce James server 3.8.2 release.
Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].
The Apache James PMC would like to thank all contributors who made this release possible!
## Announcement
This release comprise minor bug fixes enhancing Apache James stability.
This release fixes the following security issues:
- **CVE-2024-37358**: Denial of service through the use of IMAP literals
- **CVE-2024-45626**: Denial of service through JMAP HTML to text conversion
## Release changelog
The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].
[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#382
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
=====================================================
== File: src/homepage/_posts/2012-12-08-mailet-2.5.0.markdown
=====================================================
---
layout: post
title: "Apache James Mailet 2.5.0 Released"
date: 2012-12-08 16:13:22 +0200
categories: james update
---
Apache Mailet 2.5.0 released.
This release brings all components under the same project so future releases will be made with
all of them. All Mailet artifact have the same version, names that start with apache-mailet-*
and are OSGi bundles.
=====================================================
== File: src/homepage/_posts/2006-07-02-2.3.0on-the-way.markdown
=====================================================
---
layout: post
title: "James Server 2.3.0 on the way"
date: 2006-07-02 16:13:22 +0200
categories: james update
---
After a long time of development we have released the first [release candidate][rc]
of James Server 2.3.0. After a period of user testing version 2.3.0 will be released.
[rc]: http://downloads.apache.org/james/server/
=====================================================
== File: src/homepage/_config.yml
=====================================================
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing these this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.
#
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'jekyll serve'. If you change this file, please restart the server process.
# Site settings
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.
title: James Website
email: btellier@apache.org
description: > # this means to ignore newlines until "baseurl:"
Write an awesome description for your new site here. You can edit this
line in _config.yml. It will appear in your document head meta (for
Google search results) and in your feed.xml site description.
baseurl: "" # the subpath of your site, e.g. /blog
url: "http://james.apache.org" # the base hostname & protocol for your site
twitter_username: ApacheJames
github_username: apache
# Build settings
markdown: kramdown
theme: minima
# Plugins
gems: []
=====================================================
== File: src/homepage/assets/css/font-awesome.min.css
=====================================================
/*!
* Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
*/@font-face{font-family:'FontAwesome';src:url('../../assets/fonts/fontawesome-webfont.eot?v=4.6.3');src:url('../../assets/fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'),url('../../assets/fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'),url('../../assets/fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'),url('../../assets/fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'),url('../../assets/fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
=====================================================
== File: src/homepage/assets/css/main.css
=====================================================
@import url(font-awesome.min.css);
@import "https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400";
@import url('https://fonts.googleapis.com/css?family=Poppins');
/*
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/
/* Reset */
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 12pt;
font-family: "Poppins", Helvetica, sans-serif;
vertical-align: baseline;
}
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after, q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
body {
-webkit-text-size-adjust: none;
}
=====================================================
== File: src/homepage/assets/css/lity.min.css
=====================================================
/*! Lity - v2.2.2 - 2016-12-14
* http://sorgalla.com/lity/
* Copyright (c) 2015-2016 Jan Sorgalla; Licensed MIT */.lity{z-index:9990;position:fixed;top:0;right:0;bottom:0;left:0;white-space:nowrap;background:#0b0b0b;background:rgba(0,0,0,0.9);outline:none !important;opacity:0;-webkit-transition:opacity .3s ease;-o-transition:opacity .3s ease;transition:opacity .3s ease}.lity.lity-opened{opacity:1}.lity.lity-closed{opacity:0}.lity *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lity-wrap{z-index:9990;position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;outline:none !important}.lity-wrap:before{content:'';display:inline-block;height:100%;vertical-align:middle;margin-right:-0.25em}.lity-loader{z-index:9991;color:#fff;position:absolute;top:50%;margin-top:-0.8em;width:100%;text-align:center;font-size:14px;font-family:Arial,Helvetica,sans-serif;opacity:0;-webkit-transition:opacity .3s ease;-o-transition:opacity .3s ease;transition:opacity .3s ease}.lity-loading .lity-loader{opacity:1}.lity-container{z-index:9992;position:relative;text-align:left;vertical-align:middle;display:inline-block;white-space:normal;max-width:100%;max-height:100%;outline:none !important}.lity-content{z-index:9993;width:100%;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1);-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;-o-transition:-o-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease, -webkit-transform .3s ease, -o-transform .3s ease}.lity-loading .lity-content,.lity-closed .lity-content{-webkit-transform:scale(.8);-ms-transform:scale(.8);-o-transform:scale(.8);transform:scale(.8)}.lity-content:after{content:'';position:absolute;left:0;top:0;bottom:0;display:block;right:0;width:auto;height:auto;z-index:-1;-webkit-box-shadow:0 0 8px rgba(0,0,0,0.6);box-shadow:0 0 8px rgba(0,0,0,0.6)}.lity-close{z-index:9994;width:35px;height:35px;position:fixed;right:0;top:0;-webkit-appearance:none;cursor:pointer;text-decoration:none;text-align:center;padding:0;color:#fff;font-style:normal;font-size:35px;font-family:Arial,Baskerville,monospace;line-height:35px;text-shadow:0 1px 2px rgba(0,0,0,0.6);border:0;background:none;outline:none;-webkit-box-shadow:none;box-shadow:none}.lity-close::-moz-focus-inner{border:0;padding:0}.lity-close:hover,.lity-close:focus,.lity-close:active,.lity-close:visited{text-decoration:none;text-align:center;padding:0;color:#fff;font-style:normal;font-size:35px;font-family:Arial,Baskerville,monospace;line-height:35px;text-shadow:0 1px 2px rgba(0,0,0,0.6);border:0;background:none;outline:none;-webkit-box-shadow:none;box-shadow:none}.lity-close:active{top:1px}.lity-image img{max-width:100%;display:block;line-height:0;border:0}.lity-iframe .lity-container,.lity-youtube .lity-container,.lity-vimeo .lity-container,.lity-facebookvideo .lity-container,.lity-googlemaps .lity-container{width:100%;max-width:964px}.lity-iframe-container{width:100%;height:0;padding-top:56.25%;overflow:auto;pointer-events:auto;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-overflow-scrolling:touch}.lity-iframe-container iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;-webkit-box-shadow:0 0 8px rgba(0,0,0,0.6);box-shadow:0 0 8px rgba(0,0,0,0.6);background:#000}.lity-hide{display:none}
=====================================================
== File: src/homepage/assets/css/ie8.css
=====================================================
/*
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/
/* Type */
body {
color: #ffffff;
}
/* Button */
.button {
position: relative;
border: solid 1px !important;
}
.button.special {
border: none !important;
}
/* Icon */
.icon.major {
-ms-behavior: url("assets/js/ie/PIE.htc");
}
.icon.major:before {
font-size: 4em;
border: 0;
}
/* Spotlight */
.spotlight .image {
position: relative;
-ms-behavior: url("assets/js/ie/PIE.htc");
}
.spotlight .image img {
position: relative;
-ms-behavior: url("assets/js/ie/PIE.htc");
}
/* Features */
.features li {
width: 29%;
=====================================================
== File: src/homepage/assets/css/ie9.css
=====================================================
/*
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/
/* Spotlight */
.spotlight:after {
content: '';
display: block;
clear: both;
}
.spotlight .content {
float: left;
width: 60%;
}
.spotlight .image {
float: left;
}
/* Features */
.features:after {
content: '';
display: block;
clear: both;
}
.features li {
float: left;
}
/* Statistics */
.statistics {
display: inline-block;
}
.statistics:after {
content: '';
display: block;
clear: both;
}
.statistics li {
float: left;
padding: 1.5em 2.5em;
=====================================================
== File: src/homepage/assets/css/test.html
=====================================================
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Calque_1" x="0px" y="0px" width="841.89px" height="595.28px" viewBox="0 0 841.89 595.28" enable-background="new 0 0 841.89 595.28" xml:space="preserve">
<circle fill="#FFFFFF" cx="672.754" cy="148.406" r="66.5"/>
<g>
<path fill="#E64821" d="M718.72,121.022c-3.564-2.383-7.259-4.322-11.117-5.314c-3.85-1.014-7.823-0.778-11.496,0.742l-0.691,0.288 l-0.342,0.154l-0.169,0.079l-0.087,0.04l-0.042,0.02l-0.022,0.01c0.022-0.015-0.064,0.039,0.048-0.031l-0.011,0.006 c-0.5,0.313-0.969,0.572-1.462,0.83c-0.978,0.509-1.981,0.965-3.021,1.341c-2.077,0.729-4.318,1.242-6.619,0.96 c-1.14-0.15-2.273-0.547-3.228-1.208c-0.954-0.659-1.714-1.552-2.235-2.532c-1.052-1.972-1.373-4.147-1.439-6.262 c0.386,2.077,0.973,4.162,2.13,5.836c0.581,0.827,1.298,1.534,2.146,1.999c0.842,0.471,1.794,0.699,2.763,0.743 c1.946,0.094,3.931-0.496,5.777-1.31c0.931-0.407,1.84-0.872,2.715-1.393c0.433-0.256,0.877-0.537,1.262-0.808l0.763-0.498 c0.242-0.141,0.476-0.302,0.729-0.428c1.985-1.068,4.221-1.805,6.523-1.96c2.296-0.168,4.614,0.158,6.75,0.882 c2.142,0.716,4.112,1.807,5.864,3.129C715.953,117.664,717.52,119.218,718.72,121.022z"/>
<g>
<path fill="none" d="M637.856,139.139c-0.337,0.258,9.157,11.617,23.405,22.405c4.192,3.205,8.29,5.973,11.994,8.286 c0.281-0.416,0.542-0.842,0.787-1.279c-3.608-2.39-7.623-5.184-11.763-8.348C648.18,149.535,638.222,138.782,637.856,139.139z"/>
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="1192.2021" y1="229.4492" x2="1234.9417" y2="229.4492" gradientTransform="matrix(-0.1008 -0.9949 0.9949 -0.1008 547.1743 1381.7705)">
<stop offset="0" style="stop-color:#FCC30E"/>
<stop offset="0.4969" style="stop-color:#E64821"/>
<stop offset="1" style="stop-color:#E42328"/>
</linearGradient>
<path fill="url(#SVGID_5_)" d="M659.708,160.542c-14.247-10.789-23.741-22.147-23.405-22.406 c0.366-0.357,10.323,10.396,24.424,21.064c4.14,3.164,8.154,5.958,11.763,8.348c0.048-0.086,0.104-0.168,0.152-0.256 c0.592-1.131,1.046-2.347,1.401-3.617c-2.531-5.059-8.833-12.067-16.158-18.494c-1.629-1.413-3.325-2.666-5.04-3.792 c-0.373,3.018-1.118,5.178-1.123,5.177c0,0-0.831-2.873-0.76-6.369c-1.156-0.697-2.313-1.347-3.463-1.94 c-0.011,3.443-1.033,6.021-1.038,6.022c0,0.007-2.07-3.492-2.291-7.581c-0.003-0.026-0.003-0.052-0.003-0.076 c-6.875-3.16-12.671-4.681-12.682-4.666c-0.062-0.155,0.428,14.595,11.28,25.836c0.366-0.022,0.735-0.04,1.114-0.039 c3.946,0.008,7.317,1.426,7.323,1.425c0-0.003-2.075,1.235-5.106,1.653c1.103,0.882,2.235,1.681,3.39,2.406 c2.854-1.034,5.221-1.376,5.221-1.376c0-0.005-1.248,1.226-3.314,2.506c7.54,4.161,14.378,6.28,18.711,6.479 c0.586-0.64,1.121-1.313,1.599-2.021C667.998,166.515,663.901,163.747,659.708,160.542z"/>
<path fill="#E42328" d="M710.524,120.843c-2.746,0.231-5.496,0.723-8.203,1.497c-5.401,1.538-10.711,4.256-15.061,8.381 c-2.191,2.033-4.073,4.437-5.644,7.024c-1.523,2.615-2.755,5.412-3.551,8.303c-0.82,2.884-1.311,5.83-1.479,8.755 c-0.05,0.721-0.077,1.467-0.096,2.221l-0.017,1.005l-0.024,0.862c-0.029,1.145-0.127,2.268-0.303,3.355 c-0.138,0.833-0.329,1.64-0.552,2.429c-0.354,1.27-0.809,2.486-1.4,3.618c-0.048,0.087-0.105,0.169-0.152,0.255 c-0.245,0.438-0.506,0.864-0.787,1.279c-0.479,0.708-1.013,1.381-1.6,2.021c-0.423,0.461-0.865,0.91-1.347,1.333 c-3.241,2.849-7.697,4.804-12.477,6.061c-4.796,1.275-9.926,1.944-15.132,2.303c-5.218,0.352-10.52,0.408-15.913,0.276 c5.027,2.018,10.327,3.3,15.735,4.109c5.415,0.774,10.986,1.024,16.65,0.312c2.825-0.373,5.682-0.975,8.496-1.973 c2.801-1.005,5.597-2.373,8.113-4.309c2.525-1.907,4.765-4.373,6.386-7.192c0.82-1.403,1.494-2.88,2.035-4.386 c0.519-1.511,0.908-3.049,1.171-4.583c0.269-1.535,0.419-3.065,0.479-4.578c0.019-0.379,0.017-0.755,0.021-1.132l0.002-0.989 c0.005-0.574,0.018-1.158,0.049-1.764c0.129-2.384,0.416-4.727,0.939-6.99c1.039-4.525,3.008-8.727,5.973-12.363 c2.961-3.634,6.877-6.692,11.314-9.149c4.449-2.453,9.354-4.38,14.567-5.816C716.026,120.628,713.268,120.607,710.524,120.843z"/>
</g>
</g>
</svg>
=====================================================
== File: src/homepage/assets/css/lightbox.css
=====================================================
/* Preload images */
body:after {
content: url(../images/close.png) url(../images/loading.gif) url(../images/prev.png) url(../images/next.png);
display: none;
}
body.lb-disable-scrolling {
overflow: hidden;
}
.lightboxOverlay {
position: absolute;
top: 0;
left: 0;
z-index: 9999;
background-color: black;
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
opacity: 0.8;
display: none;
}
.lightbox {
position: absolute;
left: 0;
width: 100%;
z-index: 10000;
text-align: center;
line-height: 0;
font-weight: normal;
}
.lightbox .lb-image {
display: block;
height: auto;
max-width: inherit;
border-radius: 3px;
}
.lightbox a img {
border: none;
}
.lb-outerContainer {
position: relative;
background-color: white;
*zoom: 1;
width: 250px;
height: 250px;
margin: 0 auto;
border-radius: 4px;
=====================================================
== File: src/homepage/assets/fonts/fontawesome-webfont.svg
=====================================================
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="fontawesomeregular" horiz-adv-x="1536" >
<font-face units-per-em="1792" ascent="1536" descent="-256" />
<missing-glyph horiz-adv-x="448" />
<glyph unicode=" " horiz-adv-x="448" />
<glyph unicode="	" horiz-adv-x="448" />
<glyph unicode=" " horiz-adv-x="448" />
<glyph unicode="¨" horiz-adv-x="1792" />
<glyph unicode="©" horiz-adv-x="1792" />
<glyph unicode="®" horiz-adv-x="1792" />
<glyph unicode="´" horiz-adv-x="1792" />
<glyph unicode="Æ" horiz-adv-x="1792" />
<glyph unicode="Ø" horiz-adv-x="1792" />
<glyph unicode=" " horiz-adv-x="768" />
<glyph unicode=" " horiz-adv-x="1537" />
<glyph unicode=" " horiz-adv-x="768" />
<glyph unicode=" " horiz-adv-x="1537" />
<glyph unicode=" " horiz-adv-x="512" />
<glyph unicode=" " horiz-adv-x="384" />
<glyph unicode=" " horiz-adv-x="256" />
<glyph unicode=" " horiz-adv-x="256" />
<glyph unicode=" " horiz-adv-x="192" />
<glyph unicode=" " horiz-adv-x="307" />
<glyph unicode=" " horiz-adv-x="85" />
<glyph unicode=" " horiz-adv-x="307" />
<glyph unicode=" " horiz-adv-x="384" />
<glyph unicode="™" horiz-adv-x="1792" />
<glyph unicode="∞" horiz-adv-x="1792" />
<glyph unicode="≠" horiz-adv-x="1792" />
<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" />
<glyph unicode="" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
<glyph unicode="" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
<glyph unicode="" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
<glyph unicode="" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
<glyph unicode="" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
<glyph unicode="" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
<glyph unicode="" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
<glyph unicode="" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
<glyph unicode="" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
<glyph unicode="" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
<glyph unicode="" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
<glyph unicode="" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
=====================================================
== File: src/homepage/assets/js/main.js
=====================================================
/*
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/
(function($) {
skel.breakpoints({
xlarge: '(max-width: 1680px)',
large: '(max-width: 1280px)',
medium: '(max-width: 980px)',
small: '(max-width: 736px)',
xsmall: '(max-width: 480px)',
xxsmall: '(max-width: 360px)'
});
$(function() {
var $window = $(window),
$body = $('body'),
$main = $('#main');
// Disable animations/transitions until the page has loaded.
$body.addClass('is-loading');
$window.on('load', function() {
window.setTimeout(function() {
$body.removeClass('is-loading');
}, 100);
});
// Fix: Placeholder polyfill.
$('form').placeholder();
// Prioritize "important" elements on medium.
skel.on('+medium -medium', function() {
$.prioritize(
'.important\\28 medium\\29',
skel.breakpoint('medium').active
);
});
// Nav.
var $nav = $('#nav');
if ($nav.length > 0) {
// Shrink effect.
$main
=====================================================
== File: src/homepage/assets/js/github-fetch.js
=====================================================
let repositoryInfo = {};
let allContributors = [];
const repositoryUrl = "https://api.github.com/repos/apache/james-project";
function getAllCollaborators(callback) {
if (allContributors.length > 0) {
callback(allContributors);
} else {
$.get(repositoryInfo.contributors_url, function(contributors) {
allContributors = contributors;
callback(contributors);
});
}
}
function getListContributorDom(contributors) {
let list = "";
contributors.sort(function(a, b){
if(a.login.toLowerCase() < b.login.toLowerCase()) return -1;
if(a.login.toLowerCase() > b.login.toLowerCase()) return 1;
return 0;
});
for (contributor of contributors) {
list += `<li class="contributor-card"><a href="` + contributor.html_url + `" alt="` + contributor.login + ` github account"><span class="image contributor-avatar"><img src="` + contributor.avatar_url + `"></span><span class="icon fa-github"></span>` + contributor.login + `</a></li>`;
}
return list;
}
function getTotalCommit(callback) {
$.get("https://api.github.com/repos/apache/james-project/stats/commit_activity", function(data) {
let total = 0;
for(week of data) {
total += week.total;
}
callback(total);
});
}
$(document).ready(function () {
$.get(repositoryUrl, function(repository) {
repositoryInfo = repository;
getAllCollaborators(function(collabs) {
$('#contributor-num').append(collabs.length);
let contributors = getListContributorDom(collabs);
$('#contributor-list').append(contributors);
});
getTotalCommit(function(commits) {
$('#commit-num').append(commits);
});
$('#fork-num').append(repositoryInfo.forks_count);
=====================================================
== File: src/homepage/assets/js/jquery.min.js
=====================================================
/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){
return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m});
=====================================================
== File: src/homepage/assets/js/lightbox.js
=====================================================
/*!
* Lightbox v2.8.2
* by Lokesh Dhakar
*
* More info:
* http://lokeshdhakar.com/projects/lightbox2/
*
* Copyright 2007, 2015 Lokesh Dhakar
* Released under the MIT license
* https://github.com/lokesh/lightbox2/blob/master/LICENSE
*/
// Uses Node, AMD or browser globals to create a module.
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], factory);
} else if (typeof exports === 'object') {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require('jquery'));
} else {
// Browser globals (root is window)
root.lightbox = factory(root.jQuery);
}
}(this, function ($) {
function Lightbox(options) {
this.album = [];
this.currentImageIndex = void 0;
this.init();
// options
this.options = $.extend({}, this.constructor.defaults);
this.option(options);
}
// Descriptions of all options available on the demo site:
// http://lokeshdhakar.com/projects/lightbox2/index.html#options
Lightbox.defaults = {
albumLabel: 'Image %1 of %2',
alwaysShowNavOnTouchDevices: false,
fadeDuration: 500,
fitImagesInViewport: true,
// maxWidth: 800,
// maxHeight: 600,
positionFromTop: 50,
resizeDuration: 700,
showImageNumberLabel: true,
=====================================================
== File: src/homepage/assets/js/ie/PIE.htc
=====================================================
<!--
PIE: CSS3 rendering for IE
Version 1.0.0
http://css3pie.com
Dual-licensed for use under the Apache License Version 2.0 or the General Public License (GPL) Version 2.
-->
<PUBLIC:COMPONENT lightWeight="true">
<!-- saved from url=(0014)about:internet -->
<PUBLIC:ATTACH EVENT="oncontentready" FOR="element" ONEVENT="init()" />
<PUBLIC:ATTACH EVENT="ondocumentready" FOR="element" ONEVENT="init()" />
<PUBLIC:ATTACH EVENT="ondetach" FOR="element" ONEVENT="cleanup()" />
<script type="text/javascript">
var doc = element.document;var f=window.PIE;
if(!f){f=window.PIE={F:"-pie-",nb:"Pie",La:"pie_",Ac:{TD:1,TH:1},cc:{TABLE:1,THEAD:1,TBODY:1,TFOOT:1,TR:1,INPUT:1,TEXTAREA:1,SELECT:1,OPTION:1,IMG:1,HR:1},fc:{A:1,INPUT:1,TEXTAREA:1,SELECT:1,BUTTON:1},Gd:{submit:1,button:1,reset:1},aa:function(){}};try{doc.execCommand("BackgroundImageCache",false,true)}catch(aa){}for(var ba=4,Z=doc.createElement("div"),ca=Z.getElementsByTagName("i"),ga;Z.innerHTML="<!--[if gt IE "+ ++ba+"]><i></i><![endif]--\>",ca[0];);f.O=ba;if(ba===6)f.F=f.F.replace(/^-/,"");f.ja=
doc.documentMode||f.O;Z.innerHTML='<v:shape adj="1"/>';ga=Z.firstChild;ga.style.behavior="url(#default#VML)";f.zc=typeof ga.adj==="object";(function(){var a,b=0,c={};f.p={Za:function(d){if(!a){a=doc.createDocumentFragment();a.namespaces.add("css3vml","urn:schemas-microsoft-com:vml")}return a.createElement("css3vml:"+d)},Ba:function(d){return d&&d._pieId||(d._pieId="_"+ ++b)},Eb:function(d){var e,g,j,i,h=arguments;e=1;for(g=h.length;e<g;e++){i=h[e];for(j in i)if(i.hasOwnProperty(j))d[j]=i[j]}return d},
Rb:function(d,e,g){var j=c[d],i,h;if(j)Object.prototype.toString.call(j)==="[object Array]"?j.push([e,g]):e.call(g,j);else{h=c[d]=[[e,g]];i=new Image;i.onload=function(){j=c[d]={h:i.width,f:i.height};for(var k=0,n=h.length;k<n;k++)h[k][0].call(h[k][1],j);i.onload=null};i.src=d}}}})();f.Na={gc:function(a,b,c,d){function e(){k=j>=90&&j<270?b:0;n=j<180?c:0;m=b-k;p=c-n}function g(){for(;j<0;)j+=360;j%=360}var j=d.sa;d=d.zb;var i,h,k,n,m,p,r,t;if(d){d=d.coords(a,b,c);i=d.x;h=d.y}if(j){j=j.jd();g();e();
if(!d){i=k;h=n}d=f.Na.tc(i,h,j,m,p);a=d[0];d=d[1]}else if(d){a=b-i;d=c-h}else{i=h=a=0;d=c}r=a-i;t=d-h;if(j===void 0){j=!r?t<0?90:270:!t?r<0?180:0:-Math.atan2(t,r)/Math.PI*180;g();e()}return{sa:j,xc:i,yc:h,td:a,ud:d,Wd:k,Xd:n,rd:m,sd:p,kd:r,ld:t,rc:f.Na.dc(i,h,a,d)}},tc:function(a,b,c,d,e){if(c===0||c===180)return[d,b];else if(c===90||c===270)return[a,e];else{c=Math.tan(-c*Math.PI/180);a=c*a-b;b=-1/c;d=b*d-e;e=b-c;return[(d-a)/e,(c*d-b*a)/e]}},dc:function(a,b,c,d){a=c-a;b=d-b;return Math.abs(a===0?
b:b===0?a:Math.sqrt(a*a+b*b))}};f.ea=function(){this.Gb=[];this.oc={}};f.ea.prototype={ba:function(a){var b=f.p.Ba(a),c=this.oc,d=this.Gb;if(!(b in c)){c[b]=d.length;d.push(a)}},Ha:function(a){a=f.p.Ba(a);var b=this.oc;if(a&&a in b){delete this.Gb[b[a]];delete b[a]}},xa:function(){for(var a=this.Gb,b=a.length;b--;)a[b]&&a[b]()}};f.Oa=new f.ea;f.Oa.Rd=function(){var a=this,b;if(!a.Sd){b=doc.documentElement.currentStyle.getAttribute(f.F+"poll-interval")||250;(function c(){a.xa();setTimeout(c,b)})();
a.Sd=1}};(function(){function a(){f.L.xa();window.detachEvent("onunload",a);window.PIE=null}f.L=new f.ea;window.attachEvent("onunload",a);f.L.ta=function(b,c,d){b.attachEvent(c,d);this.ba(function(){b.detachEvent(c,d)})}})();f.Qa=new f.ea;f.L.ta(window,"onresize",function(){f.Qa.xa()});(function(){function a(){f.mb.xa()}f.mb=new f.ea;f.L.ta(window,"onscroll",a);f.Qa.ba(a)})();(function(){function a(){c=f.kb.md()}function b(){if(c){for(var d=0,e=c.length;d<e;d++)f.attach(c[d]);c=0}}var c;if(f.ja<9){f.L.ta(window,
"onbeforeprint",a);f.L.ta(window,"onafterprint",b)}})();f.lb=new f.ea;f.L.ta(doc,"onmouseup",function(){f.lb.xa()});f.he=function(){function a(h){this.Y=h}var b=doc.createElement("length-calc"),c=doc.body||doc.documentElement,d=b.style,e={},g=["mm","cm","in","pt","pc"],j=g.length,i={};d.position="absolute";d.top=d.left="-9999px";for(c.appendChild(b);j--;){d.width="100"+g[j];e[g[j]]=b.offsetWidth/100}c.removeChild(b);d.width="1em";a.prototype={Kb:/(px|em|ex|mm|cm|in|pt|pc|%)$/,ic:function(){var h=
this.Jd;if(h===void 0)h=this.Jd=parseFloat(this.Y);return h},yb:function(){var h=this.ae;if(!h)h=this.ae=(h=this.Y.match(this.Kb))&&h[0]||"px";return h},a:function(h,k){var n=this.ic(),m=this.yb();switch(m){case "px":return n;case "%":return n*(typeof k==="function"?k():k)/100;case "em":return n*this.xb(h);case "ex":return n*this.xb(h)/2;default:return n*e[m]}},xb:function(h){var k=h.currentStyle.fontSize,n,m;if(k.indexOf("px")>0)return parseFloat(k);else if(h.tagName in f.cc){m=this;n=h.parentNode;
return f.n(k).a(n,function(){return m.xb(n)})}else{h.appendChild(b);k=b.offsetWidth;b.parentNode===h&&h.removeChild(b);return k}}};f.n=function(h){return i[h]||(i[h]=new a(h))};return a}();f.Ja=function(){function a(e){this.X=e}var b=f.n("50%"),c={top:1,center:1,bottom:1},d={left:1,center:1,right:1};a.prototype={zd:function(){if(!this.ac){var e=this.X,g=e.length,j=f.v,i=j.qa,h=f.n("0");i=i.na;h=["left",h,"top",h];if(g===1){e.push(new j.ob(i,"center"));g++}if(g===2){i&(e[0].k|e[1].k)&&e[0].d in c&&
e[1].d in d&&e.push(e.shift());if(e[0].k&i)if(e[0].d==="center")h[1]=b;else h[0]=e[0].d;else if(e[0].W())h[1]=f.n(e[0].d);if(e[1].k&i)if(e[1].d==="center")h[3]=b;else h[2]=e[1].d;else if(e[1].W())h[3]=f.n(e[1].d)}this.ac=h}return this.ac},coords:function(e,g,j){var i=this.zd(),h=i[1].a(e,g);e=i[3].a(e,j);return{x:i[0]==="right"?g-h:h,y:i[2]==="bottom"?j-e:e}}};return a}();f.Ka=function(){function a(b,c){this.h=b;this.f=c}a.prototype={a:function(b,c,d,e,g){var j=this.h,i=this.f,h=c/d;e=e/g;if(j===
"contain"){j=e>h?c:d*e;i=e>h?c/e:d}else if(j==="cover"){j=e<h?c:d*e;i=e<h?c/e:d}else if(j==="auto"){i=i==="auto"?g:i.a(b,d);j=i*e}else{j=j.a(b,c);i=i==="auto"?j/e:i.a(b,d)}return{h:j,f:i}}};a.Kc=new a("auto","auto");return a}();f.Ec=function(){function a(b){this.Y=b}a.prototype={Kb:/[a-z]+$/i,yb:function(){return this.ad||(this.ad=this.Y.match(this.Kb)[0].toLowerCase())},jd:function(){var b=this.Vc,c;if(b===undefined){b=this.yb();c=parseFloat(this.Y,10);b=this.Vc=b==="deg"?c:b==="rad"?c/Math.PI*180:
b==="grad"?c/400*360:b==="turn"?c*360:0}return b}};return a}();f.Jc=function(){function a(c){this.Y=c}var b={};a.Qd=/\s*rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d+|\d*\.\d+)\s*\)\s*/;a.Fb={aliceblue:"F0F8FF",antiquewhite:"FAEBD7",aqua:"0FF",aquamarine:"7FFFD4",azure:"F0FFFF",beige:"F5F5DC",bisque:"FFE4C4",black:"000",blanchedalmond:"FFEBCD",blue:"00F",blueviolet:"8A2BE2",brown:"A52A2A",burlywood:"DEB887",cadetblue:"5F9EA0",chartreuse:"7FFF00",chocolate:"D2691E",coral:"FF7F50",cornflowerblue:"6495ED",
cornsilk:"FFF8DC",crimson:"DC143C",cyan:"0FF",darkblue:"00008B",darkcyan:"008B8B",darkgoldenrod:"B8860B",darkgray:"A9A9A9",darkgreen:"006400",darkkhaki:"BDB76B",darkmagenta:"8B008B",darkolivegreen:"556B2F",darkorange:"FF8C00",darkorchid:"9932CC",darkred:"8B0000",darksalmon:"E9967A",darkseagreen:"8FBC8F",darkslateblue:"483D8B",darkslategray:"2F4F4F",darkturquoise:"00CED1",darkviolet:"9400D3",deeppink:"FF1493",deepskyblue:"00BFFF",dimgray:"696969",dodgerblue:"1E90FF",firebrick:"B22222",floralwhite:"FFFAF0",
forestgreen:"228B22",fuchsia:"F0F",gainsboro:"DCDCDC",ghostwhite:"F8F8FF",gold:"FFD700",goldenrod:"DAA520",gray:"808080",green:"008000",greenyellow:"ADFF2F",honeydew:"F0FFF0",hotpink:"FF69B4",indianred:"CD5C5C",indigo:"4B0082",ivory:"FFFFF0",khaki:"F0E68C",lavender:"E6E6FA",lavenderblush:"FFF0F5",lawngreen:"7CFC00",lemonchiffon:"FFFACD",lightblue:"ADD8E6",lightcoral:"F08080",lightcyan:"E0FFFF",lightgoldenrodyellow:"FAFAD2",lightgreen:"90EE90",lightgrey:"D3D3D3",lightpink:"FFB6C1",lightsalmon:"FFA07A",
lightseagreen:"20B2AA",lightskyblue:"87CEFA",lightslategray:"789",lightsteelblue:"B0C4DE",lightyellow:"FFFFE0",lime:"0F0",limegreen:"32CD32",linen:"FAF0E6",magenta:"F0F",maroon:"800000",mediumauqamarine:"66CDAA",mediumblue:"0000CD",mediumorchid:"BA55D3",mediumpurple:"9370D8",mediumseagreen:"3CB371",mediumslateblue:"7B68EE",mediumspringgreen:"00FA9A",mediumturquoise:"48D1CC",mediumvioletred:"C71585",midnightblue:"191970",mintcream:"F5FFFA",mistyrose:"FFE4E1",moccasin:"FFE4B5",navajowhite:"FFDEAD",
navy:"000080",oldlace:"FDF5E6",olive:"808000",olivedrab:"688E23",orange:"FFA500",orangered:"FF4500",orchid:"DA70D6",palegoldenrod:"EEE8AA",palegreen:"98FB98",paleturquoise:"AFEEEE",palevioletred:"D87093",papayawhip:"FFEFD5",peachpuff:"FFDAB9",peru:"CD853F",pink:"FFC0CB",plum:"DDA0DD",powderblue:"B0E0E6",purple:"800080",red:"F00",rosybrown:"BC8F8F",royalblue:"4169E1",saddlebrown:"8B4513",salmon:"FA8072",sandybrown:"F4A460",seagreen:"2E8B57",seashell:"FFF5EE",sienna:"A0522D",silver:"C0C0C0",skyblue:"87CEEB",
slateblue:"6A5ACD",slategray:"708090",snow:"FFFAFA",springgreen:"00FF7F",steelblue:"4682B4",tan:"D2B48C",teal:"008080",thistle:"D8BFD8",tomato:"FF6347",turquoise:"40E0D0",violet:"EE82EE",wheat:"F5DEB3",white:"FFF",whitesmoke:"F5F5F5",yellow:"FF0",yellowgreen:"9ACD32"};a.prototype={parse:function(){if(!this.Ua){var c=this.Y,d;if(d=c.match(a.Qd)){this.Ua="rgb("+d[1]+","+d[2]+","+d[3]+")";this.Yb=parseFloat(d[4])}else{if((d=c.toLowerCase())in a.Fb)c="#"+a.Fb[d];this.Ua=c;this.Yb=c==="transparent"?0:
1}}},U:function(c){this.parse();return this.Ua==="currentColor"?c.currentStyle.color:this.Ua},fa:function(){this.parse();return this.Yb}};f.ha=function(c){return b[c]||(b[c]=new a(c))};return a}();f.v=function(){function a(c){this.$a=c;this.ch=0;this.X=[];this.Ga=0}var b=a.qa={Ia:1,Wb:2,z:4,Lc:8,Xb:16,na:32,K:64,oa:128,pa:256,Ra:512,Tc:1024,URL:2048};a.ob=function(c,d){this.k=c;this.d=d};a.ob.prototype={Ca:function(){return this.k&b.K||this.k&b.oa&&this.d==="0"},W:function(){return this.Ca()||this.k&
b.Ra}};a.prototype={de:/\s/,Kd:/^[\+\-]?(\d*\.)?\d+/,url:/^url\(\s*("([^"]*)"|'([^']*)'|([!#$%&*-~]*))\s*\)/i,nc:/^\-?[_a-z][\w-]*/i,Yd:/^("([^"]*)"|'([^']*)')/,Bd:/^#([\da-f]{6}|[\da-f]{3})/i,be:{px:b.K,em:b.K,ex:b.K,mm:b.K,cm:b.K,"in":b.K,pt:b.K,pc:b.K,deg:b.Ia,rad:b.Ia,grad:b.Ia},fd:{rgb:1,rgba:1,hsl:1,hsla:1},next:function(c){function d(p,r){p=new a.ob(p,r);if(!c){k.X.push(p);k.Ga++}return p}function e(){k.Ga++;return null}var g,j,i,h,k=this;if(this.Ga<this.X.length)return this.X[this.Ga++];for(;this.de.test(this.$a.charAt(this.ch));)this.ch++;
if(this.ch>=this.$a.length)return e();j=this.ch;g=this.$a.substring(this.ch);i=g.charAt(0);switch(i){case "#":if(h=g.match(this.Bd)){this.ch+=h[0].length;return d(b.z,h[0])}break;case '"':case "'":if(h=g.match(this.Yd)){this.ch+=h[0].length;return d(b.Tc,h[2]||h[3]||"")}break;case "/":case ",":this.ch++;return d(b.pa,i);case "u":if(h=g.match(this.url)){this.ch+=h[0].length;return d(b.URL,h[2]||h[3]||h[4]||"")}}if(h=g.match(this.Kd)){i=h[0];this.ch+=i.length;if(g.charAt(i.length)==="%"){this.ch++;
return d(b.Ra,i+"%")}if(h=g.substring(i.length).match(this.nc)){i+=h[0];this.ch+=h[0].length;return d(this.be[h[0].toLowerCase()]||b.Lc,i)}return d(b.oa,i)}if(h=g.match(this.nc)){i=h[0];this.ch+=i.length;if(i.toLowerCase()in f.Jc.Fb||i==="currentColor"||i==="transparent")return d(b.z,i);if(g.charAt(i.length)==="("){this.ch++;if(i.toLowerCase()in this.fd){g=function(p){return p&&p.k&b.oa};h=function(p){return p&&p.k&(b.oa|b.Ra)};var n=function(p,r){return p&&p.d===r},m=function(){return k.next(1)};
if((i.charAt(0)==="r"?h(m()):g(m()))&&n(m(),",")&&h(m())&&n(m(),",")&&h(m())&&(i==="rgb"||i==="hsa"||n(m(),",")&&g(m()))&&n(m(),")"))return d(b.z,this.$a.substring(j,this.ch));return e()}return d(b.Xb,i)}return d(b.na,i)}this.ch++;return d(b.Wb,i)},D:function(){return this.X[this.Ga-- -2]},all:function(){for(;this.next(););return this.X},ma:function(c,d){for(var e=[],g,j;g=this.next();){if(c(g)){j=true;this.D();break}e.push(g)}return d&&!j?null:e}};return a}();var ha=function(a){this.e=a};ha.prototype=
{Z:0,Od:function(){var a=this.qb,b;return!a||(b=this.o())&&(a.x!==b.x||a.y!==b.y)},Td:function(){var a=this.qb,b;return!a||(b=this.o())&&(a.h!==b.h||a.f!==b.f)},hc:function(){var a=this.e,b=a.getBoundingClientRect(),c=f.ja===9,d=f.O===7,e=b.right-b.left;return{x:b.left,y:b.top,h:c||d?a.offsetWidth:e,f:c||d?a.offsetHeight:b.bottom-b.top,Hd:d&&e?a.offsetWidth/e:1}},o:function(){return this.Z?this.Va||(this.Va=this.hc()):this.hc()},Ad:function(){return!!this.qb},cb:function(){++this.Z},hb:function(){if(!--this.Z){if(this.Va)this.qb=
this.Va;this.Va=null}}};(function(){function a(b){var c=f.p.Ba(b);return function(){if(this.Z){var d=this.$b||(this.$b={});return c in d?d[c]:(d[c]=b.call(this))}else return b.call(this)}}f.B={Z:0,ka:function(b){function c(d){this.e=d;this.Zb=this.ia()}f.p.Eb(c.prototype,f.B,b);c.$c={};return c},j:function(){var b=this.ia(),c=this.constructor.$c;return b?b in c?c[b]:(c[b]=this.la(b)):null},ia:a(function(){var b=this.e,c=this.constructor,d=b.style;b=b.currentStyle;var e=this.wa,g=this.Fa,j=c.Yc||(c.Yc=
f.F+e);c=c.Zc||(c.Zc=f.nb+g.charAt(0).toUpperCase()+g.substring(1));return d[c]||b.getAttribute(j)||d[g]||b.getAttribute(e)}),i:a(function(){return!!this.j()}),H:a(function(){var b=this.ia(),c=b!==this.Zb;this.Zb=b;return c}),va:a,cb:function(){++this.Z},hb:function(){--this.Z||delete this.$b}}})();f.Sb=f.B.ka({wa:f.F+"background",Fa:f.nb+"Background",cd:{scroll:1,fixed:1,local:1},fb:{"repeat-x":1,"repeat-y":1,repeat:1,"no-repeat":1},sc:{"padding-box":1,"border-box":1,"content-box":1},Pd:{top:1,right:1,
bottom:1,left:1,center:1},Ud:{contain:1,cover:1},eb:{Ma:"backgroundClip",z:"backgroundColor",da:"backgroundImage",Pa:"backgroundOrigin",S:"backgroundPosition",T:"backgroundRepeat",Sa:"backgroundSize"},la:function(a){function b(s){return s&&s.W()||s.k&k&&s.d in t}function c(s){return s&&(s.W()&&f.n(s.d)||s.d==="auto"&&"auto")}var d=this.e.currentStyle,e,g,j,i=f.v.qa,h=i.pa,k=i.na,n=i.z,m,p,r=0,t=this.Pd,v,l,q={M:[]};if(this.wb()){e=new f.v(a);for(j={};g=e.next();){m=g.k;p=g.d;if(!j.P&&m&i.Xb&&p===
"linear-gradient"){v={ca:[],P:p};for(l={};g=e.next();){m=g.k;p=g.d;if(m&i.Wb&&p===")"){l.color&&v.ca.push(l);v.ca.length>1&&f.p.Eb(j,v);break}if(m&n){if(v.sa||v.zb){g=e.D();if(g.k!==h)break;e.next()}l={color:f.ha(p)};g=e.next();if(g.W())l.db=f.n(g.d);else e.D()}else if(m&i.Ia&&!v.sa&&!l.color&&!v.ca.length)v.sa=new f.Ec(g.d);else if(b(g)&&!v.zb&&!l.color&&!v.ca.length){e.D();v.zb=new f.Ja(e.ma(function(s){return!b(s)},false))}else if(m&h&&p===","){if(l.color){v.ca.push(l);l={}}}else break}}else if(!j.P&&
m&i.URL){j.Ab=p;j.P="image"}else if(b(g)&&!j.$){e.D();j.$=new f.Ja(e.ma(function(s){return!b(s)},false))}else if(m&k)if(p in this.fb&&!j.bb)j.bb=p;else if(p in this.sc&&!j.Wa){j.Wa=p;if((g=e.next())&&g.k&k&&g.d in this.sc)j.ub=g.d;else{j.ub=p;e.D()}}else if(p in this.cd&&!j.bc)j.bc=p;else return null;else if(m&n&&!q.color)q.color=f.ha(p);else if(m&h&&p==="/"&&!j.Xa&&j.$){g=e.next();if(g.k&k&&g.d in this.Ud)j.Xa=new f.Ka(g.d);else if(g=c(g)){m=c(e.next());if(!m){m=g;e.D()}j.Xa=new f.Ka(g,m)}else return null}else if(m&
h&&p===","&&j.P){j.Hb=a.substring(r,e.ch-1);r=e.ch;q.M.push(j);j={}}else return null}if(j.P){j.Hb=a.substring(r);q.M.push(j)}}else this.Bc(f.ja<9?function(){var s=this.eb,o=d[s.S+"X"],u=d[s.S+"Y"],x=d[s.da],y=d[s.z];if(y!=="transparent")q.color=f.ha(y);if(x!=="none")q.M=[{P:"image",Ab:(new f.v(x)).next().d,bb:d[s.T],$:new f.Ja((new f.v(o+" "+u)).all())}]}:function(){var s=this.eb,o=/\s*,\s*/,u=d[s.da].split(o),x=d[s.z],y,z,B,E,D,C;if(x!=="transparent")q.color=f.ha(x);if((E=u.length)&&u[0]!=="none"){x=
d[s.T].split(o);y=d[s.S].split(o);z=d[s.Pa].split(o);B=d[s.Ma].split(o);s=d[s.Sa].split(o);q.M=[];for(o=0;o<E;o++)if((D=u[o])&&D!=="none"){C=s[o].split(" ");q.M.push({Hb:D+" "+x[o]+" "+y[o]+" / "+s[o]+" "+z[o]+" "+B[o],P:"image",Ab:(new f.v(D)).next().d,bb:x[o],$:new f.Ja((new f.v(y[o])).all()),Wa:z[o],ub:B[o],Xa:new f.Ka(C[0],C[1])})}}});return q.color||q.M[0]?q:null},Bc:function(a){var b=f.ja>8,c=this.eb,d=this.e.runtimeStyle,e=d[c.da],g=d[c.z],j=d[c.T],i,h,k,n;if(e)d[c.da]="";if(g)d[c.z]="";if(j)d[c.T]=
"";if(b){i=d[c.Ma];h=d[c.Pa];n=d[c.S];k=d[c.Sa];if(i)d[c.Ma]="";if(h)d[c.Pa]="";if(n)d[c.S]="";if(k)d[c.Sa]=""}a=a.call(this);if(e)d[c.da]=e;if(g)d[c.z]=g;if(j)d[c.T]=j;if(b){if(i)d[c.Ma]=i;if(h)d[c.Pa]=h;if(n)d[c.S]=n;if(k)d[c.Sa]=k}return a},ia:f.B.va(function(){return this.wb()||this.Bc(function(){var a=this.e.currentStyle,b=this.eb;return a[b.z]+" "+a[b.da]+" "+a[b.T]+" "+a[b.S+"X"]+" "+a[b.S+"Y"]})}),wb:f.B.va(function(){var a=this.e;return a.style[this.Fa]||a.currentStyle.getAttribute(this.wa)}),
qc:function(){var a=0;if(f.O<7){a=this.e;a=""+(a.style[f.nb+"PngFix"]||a.currentStyle.getAttribute(f.F+"png-fix"))==="true"}return a},i:f.B.va(function(){return(this.wb()||this.qc())&&!!this.j()})});f.Vb=f.B.ka({wc:["Top","Right","Bottom","Left"],Id:{thin:"1px",medium:"3px",thick:"5px"},la:function(){var a={},b={},c={},d=false,e=true,g=true,j=true;this.Cc(function(){for(var i=this.e.currentStyle,h=0,k,n,m,p,r,t,v;h<4;h++){m=this.wc[h];v=m.charAt(0).toLowerCase();k=b[v]=i["border"+m+"Style"];n=i["border"+
m+"Color"];m=i["border"+m+"Width"];if(h>0){if(k!==p)g=false;if(n!==r)e=false;if(m!==t)j=false}p=k;r=n;t=m;c[v]=f.ha(n);m=a[v]=f.n(b[v]==="none"?"0":this.Id[m]||m);if(m.a(this.e)>0)d=true}});return d?{J:a,Zd:b,gd:c,ee:j,hd:e,$d:g}:null},ia:f.B.va(function(){var a=this.e,b=a.currentStyle,c;a.tagName in f.Ac&&a.offsetParent.currentStyle.borderCollapse==="collapse"||this.Cc(function(){c=b.borderWidth+"|"+b.borderStyle+"|"+b.borderColor});return c}),Cc:function(a){var b=this.e.runtimeStyle,c=b.borderWidth,
d=b.borderColor;if(c)b.borderWidth="";if(d)b.borderColor="";a=a.call(this);if(c)b.borderWidth=c;if(d)b.borderColor=d;return a}});(function(){f.jb=f.B.ka({wa:"border-radius",Fa:"borderRadius",la:function(b){var c=null,d,e,g,j,i=false;if(b){e=new f.v(b);var h=function(){for(var k=[],n;(g=e.next())&&g.W();){j=f.n(g.d);n=j.ic();if(n<0)return null;if(n>0)i=true;k.push(j)}return k.length>0&&k.length<5?{tl:k[0],tr:k[1]||k[0],br:k[2]||k[0],bl:k[3]||k[1]||k[0]}:null};if(b=h()){if(g){if(g.k&f.v.qa.pa&&g.d===
"/")d=h()}else d=b;if(i&&b&&d)c={x:b,y:d}}}return c}});var a=f.n("0");a={tl:a,tr:a,br:a,bl:a};f.jb.Dc={x:a,y:a}})();f.Ub=f.B.ka({wa:"border-image",Fa:"borderImage",fb:{stretch:1,round:1,repeat:1,space:1},la:function(a){var b=null,c,d,e,g,j,i,h=0,k=f.v.qa,n=k.na,m=k.oa,p=k.Ra;if(a){c=new f.v(a);b={};for(var r=function(l){return l&&l.k&k.pa&&l.d==="/"},t=function(l){return l&&l.k&n&&l.d==="fill"},v=function(){g=c.ma(function(l){return!(l.k&(m|p))});if(t(c.next())&&!b.fill)b.fill=true;else c.D();if(r(c.next())){h++;
j=c.ma(function(l){return!l.W()&&!(l.k&n&&l.d==="auto")});if(r(c.next())){h++;i=c.ma(function(l){return!l.Ca()})}}else c.D()};a=c.next();){d=a.k;e=a.d;if(d&(m|p)&&!g){c.D();v()}else if(t(a)&&!b.fill){b.fill=true;v()}else if(d&n&&this.fb[e]&&!b.repeat){b.repeat={f:e};if(a=c.next())if(a.k&n&&this.fb[a.d])b.repeat.Ob=a.d;else c.D()}else if(d&k.URL&&!b.src)b.src=e;else return null}if(!b.src||!g||g.length<1||g.length>4||j&&j.length>4||h===1&&j.length<1||i&&i.length>4||h===2&&i.length<1)return null;if(!b.repeat)b.repeat=
=====================================================
== File: src/homepage/assets/js/ie/respond.min.js
=====================================================
/*! Respond.js v1.4.2: min/max-width media query polyfill
* Copyright 2014 Scott Jehl
* Licensed under MIT
* http://j.mp/respondjs */
!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='­<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){v(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},g=function(a){return a.replace(c.regex.minmaxwh,"").match(c.regex.other)};if(c.ajax=f,c.queue=d,c.unsupportedmq=g,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,comments:/\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,maxw:/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,minmaxwh:/\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,other:/\([^\)]*\)/g},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var h,i,j,k=a.document,l=k.documentElement,m=[],n=[],o=[],p={},q=30,r=k.getElementsByTagName("head")[0]||l,s=k.getElementsByTagName("base")[0],t=r.getElementsByTagName("link"),u=function(){var a,b=k.createElement("div"),c=k.body,d=l.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=k.createElement("body"),c.style.background="none"),l.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&l.insertBefore(c,l.firstChild),a=b.offsetWidth,f?l.removeChild(c):c.removeChild(b),l.style.fontSize=d,e&&(c.style.fontSize=e),a=j=parseFloat(a)},v=function(b){var c="clientWidth",d=l[c],e="CSS1Compat"===k.compatMode&&d||k.body[c]||d,f={},g=t[t.length-1],p=(new Date).getTime();if(b&&h&&q>p-h)return a.clearTimeout(i),i=a.setTimeout(v,q),void 0;h=p;for(var s in m)if(m.hasOwnProperty(s)){var w=m[s],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?j||u():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?j||u():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(n[w.rules]))}for(var C in o)o.hasOwnProperty(C)&&o[C]&&o[C].parentNode===r&&r.removeChild(o[C]);o.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=k.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,r.insertBefore(E,g.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(k.createTextNode(F)),o.push(E)}},w=function(a,b,d){var e=a.replace(c.regex.comments,"").replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},i=!f&&d;b.length&&(b+="/"),i&&(f=1);for(var j=0;f>j;j++){var k,l,o,p;i?(k=d,n.push(h(a))):(k=e[j].match(c.regex.findStyles)&&RegExp.$1,n.push(RegExp.$2&&h(RegExp.$2))),o=k.split(","),p=o.length;for(var q=0;p>q;q++)l=o[q],g(l)||m.push({media:l.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:n.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}v()},x=function(){if(d.length){var b=d.shift();f(b.href,function(c){w(c,b.href,b.media),p[b.href]=!0,a.setTimeout(function(){x()},0)})}},y=function(){for(var b=0;b<t.length;b++){var c=t[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!p[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(w(c.styleSheet.rawCssText,e,f),p[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!s||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}x()};y(),c.update=y,c.getEmValue=u,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);
=====================================================
== File: src/homepage/assets/js/ie/html5shiv.js
=====================================================
/*
HTML5 Shiv v3.6.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}</style>";
c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video",version:"3.6.2",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment();
for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);
=====================================================
== File: src/homepage/assets/js/jquery.scrolly.min.js
=====================================================
/* jquery.scrolly v1.0.0-dev | (c) @ajlkn | MIT licensed */
(function(e){function u(s,o){var u,a,f;if((u=e(s))[t]==0)return n;a=u[i]()[r];switch(o.anchor){case"middle":f=a-(e(window).height()-u.outerHeight())/2;break;default:case r:f=Math.max(a,0)}return typeof o[i]=="function"?f-=o[i]():f-=o[i],f}var t="length",n=null,r="top",i="offset",s="click.scrolly",o=e(window);e.fn.scrolly=function(i){var o,a,f,l,c=e(this);if(this[t]==0)return c;if(this[t]>1){for(o=0;o<this[t];o++)e(this[o]).scrolly(i);return c}l=n,f=c.attr("href");if(f.charAt(0)!="#"||f[t]<2)return c;a=jQuery.extend({anchor:r,easing:"swing",offset:0,parent:e("body,html"),pollOnce:!1,speed:1e3},i),a.pollOnce&&(l=u(f,a)),c.off(s).on(s,function(e){var t=l!==n?l:u(f,a);t!==n&&(e.preventDefault(),a.parent.stop().animate({scrollTop:t},a.speed,a.easing))})}})(jQuery);
=====================================================
== File: src/homepage/assets/js/skel.min.js
=====================================================
/* skel.js v3.0.1 | (c) skel.io | MIT licensed */
var skel=function(){"use strict";var t={breakpointIds:null,events:{},isInit:!1,obj:{attachments:{},breakpoints:{},head:null,states:{}},sd:"/",state:null,stateHandlers:{},stateId:"",vars:{},DOMReady:null,indexOf:null,isArray:null,iterate:null,matchesMedia:null,extend:function(e,n){t.iterate(n,function(i){t.isArray(n[i])?(t.isArray(e[i])||(e[i]=[]),t.extend(e[i],n[i])):"object"==typeof n[i]?("object"!=typeof e[i]&&(e[i]={}),t.extend(e[i],n[i])):e[i]=n[i]})},newStyle:function(t){var e=document.createElement("style");return e.type="text/css",e.innerHTML=t,e},_canUse:null,canUse:function(e){t._canUse||(t._canUse=document.createElement("div"));var n=t._canUse.style,i=e.charAt(0).toUpperCase()+e.slice(1);return e in n||"Moz"+i in n||"Webkit"+i in n||"O"+i in n||"ms"+i in n},on:function(e,n){var i=e.split(/[\s]+/);return t.iterate(i,function(e){var a=i[e];if(t.isInit){if("init"==a)return void n();if("change"==a)n();else{var r=a.charAt(0);if("+"==r||"!"==r){var o=a.substring(1);if(o in t.obj.breakpoints)if("+"==r&&t.obj.breakpoints[o].active)n();else if("!"==r&&!t.obj.breakpoints[o].active)return void n()}}}t.events[a]||(t.events[a]=[]),t.events[a].push(n)}),t},trigger:function(e){return t.events[e]&&0!=t.events[e].length?(t.iterate(t.events[e],function(n){t.events[e][n]()}),t):void 0},breakpoint:function(e){return t.obj.breakpoints[e]},breakpoints:function(e){function n(t,e){this.name=this.id=t,this.media=e,this.active=!1,this.wasActive=!1}return n.prototype.matches=function(){return t.matchesMedia(this.media)},n.prototype.sync=function(){this.wasActive=this.active,this.active=this.matches()},t.iterate(e,function(i){t.obj.breakpoints[i]=new n(i,e[i])}),window.setTimeout(function(){t.poll()},0),t},addStateHandler:function(e,n){t.stateHandlers[e]=n},callStateHandler:function(e){var n=t.stateHandlers[e]();t.iterate(n,function(e){t.state.attachments.push(n[e])})},changeState:function(e){t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].sync()}),t.vars.lastStateId=t.stateId,t.stateId=e,t.breakpointIds=t.stateId===t.sd?[]:t.stateId.substring(1).split(t.sd),t.obj.states[t.stateId]?t.state=t.obj.states[t.stateId]:(t.obj.states[t.stateId]={attachments:[]},t.state=t.obj.states[t.stateId],t.iterate(t.stateHandlers,t.callStateHandler)),t.detachAll(t.state.attachments),t.attachAll(t.state.attachments),t.vars.stateId=t.stateId,t.vars.state=t.state,t.trigger("change"),t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].active?t.obj.breakpoints[e].wasActive||t.trigger("+"+e):t.obj.breakpoints[e].wasActive&&t.trigger("-"+e)})},generateStateConfig:function(e,n){var i={};return t.extend(i,e),t.iterate(t.breakpointIds,function(e){t.extend(i,n[t.breakpointIds[e]])}),i},getStateId:function(){var e="";return t.iterate(t.obj.breakpoints,function(n){var i=t.obj.breakpoints[n];i.matches()&&(e+=t.sd+i.id)}),e},poll:function(){var e="";e=t.getStateId(),""===e&&(e=t.sd),e!==t.stateId&&t.changeState(e)},_attach:null,attach:function(e){var n=t.obj.head,i=e.element;return i.parentNode&&i.parentNode.tagName?!1:(t._attach||(t._attach=n.firstChild),n.insertBefore(i,t._attach.nextSibling),e.permanent&&(t._attach=i),!0)},attachAll:function(e){var n=[];t.iterate(e,function(t){n[e[t].priority]||(n[e[t].priority]=[]),n[e[t].priority].push(e[t])}),n.reverse(),t.iterate(n,function(e){t.iterate(n[e],function(i){t.attach(n[e][i])})})},detach:function(t){var e=t.element;return t.permanent||!e.parentNode||e.parentNode&&!e.parentNode.tagName?!1:(e.parentNode.removeChild(e),!0)},detachAll:function(e){var n={};t.iterate(e,function(t){n[e[t].id]=!0}),t.iterate(t.obj.attachments,function(e){e in n||t.detach(t.obj.attachments[e])})},attachment:function(e){return e in t.obj.attachments?t.obj.attachments[e]:null},newAttachment:function(e,n,i,a){return t.obj.attachments[e]={id:e,element:n,priority:i,permanent:a}},init:function(){t.initMethods(),t.initVars(),t.initEvents(),t.obj.head=document.getElementsByTagName("head")[0],t.isInit=!0,t.trigger("init")},initEvents:function(){t.on("resize",function(){t.poll()}),t.on("orientationChange",function(){t.poll()}),t.DOMReady(function(){t.trigger("ready")}),window.onload&&t.on("load",window.onload),window.onload=function(){t.trigger("load")},window.onresize&&t.on("resize",window.onresize),window.onresize=function(){t.trigger("resize")},window.onorientationchange&&t.on("orientationChange",window.onorientationchange),window.onorientationchange=function(){t.trigger("orientationChange")}},initMethods:function(){document.addEventListener?!function(e,n){t.DOMReady=n()}("domready",function(){function t(t){for(r=1;t=n.shift();)t()}var e,n=[],i=document,a="DOMContentLoaded",r=/^loaded|^c/.test(i.readyState);return i.addEventListener(a,e=function(){i.removeEventListener(a,e),t()}),function(t){r?t():n.push(t)}}):!function(e,n){t.DOMReady=n()}("domready",function(t){function e(t){for(h=1;t=i.shift();)t()}var n,i=[],a=!1,r=document,o=r.documentElement,s=o.doScroll,c="DOMContentLoaded",d="addEventListener",u="onreadystatechange",l="readyState",f=s?/^loaded|^c/:/^loaded|c/,h=f.test(r[l]);return r[d]&&r[d](c,n=function(){r.removeEventListener(c,n,a),e()},a),s&&r.attachEvent(u,n=function(){/^c/.test(r[l])&&(r.detachEvent(u,n),e())}),t=s?function(e){self!=top?h?e():i.push(e):function(){try{o.doScroll("left")}catch(n){return setTimeout(function(){t(e)},50)}e()}()}:function(t){h?t():i.push(t)}}),Array.prototype.indexOf?t.indexOf=function(t,e){return t.indexOf(e)}:t.indexOf=function(t,e){if("string"==typeof t)return t.indexOf(e);var n,i,a=e?e:0;if(!this)throw new TypeError;if(i=this.length,0===i||a>=i)return-1;for(0>a&&(a=i-Math.abs(a)),n=a;i>n;n++)if(this[n]===t)return n;return-1},Array.isArray?t.isArray=function(t){return Array.isArray(t)}:t.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)},Object.keys?t.iterate=function(t,e){if(!t)return[];var n,i=Object.keys(t);for(n=0;i[n]&&e(i[n],t[i[n]])!==!1;n++);}:t.iterate=function(t,e){if(!t)return[];var n;for(n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&e(n,t[n])===!1)break},window.matchMedia?t.matchesMedia=function(t){return""==t?!0:window.matchMedia(t).matches}:window.styleMedia||window.media?t.matchesMedia=function(t){if(""==t)return!0;var e=window.styleMedia||window.media;return e.matchMedium(t||"all")}:window.getComputedStyle?t.matchesMedia=function(t){if(""==t)return!0;var e=document.createElement("style"),n=document.getElementsByTagName("script")[0],i=null;e.type="text/css",e.id="matchmediajs-test",n.parentNode.insertBefore(e,n),i="getComputedStyle"in window&&window.getComputedStyle(e,null)||e.currentStyle;var a="@media "+t+"{ #matchmediajs-test { width: 1px; } }";return e.styleSheet?e.styleSheet.cssText=a:e.textContent=a,"1px"===i.width}:t.matchesMedia=function(t){if(""==t)return!0;var e,n,i,a,r={"min-width":null,"max-width":null},o=!1;for(i=t.split(/\s+and\s+/),e=0;e<i.length;e++)n=i[e],"("==n.charAt(0)&&(n=n.substring(1,n.length-1),a=n.split(/:\s+/),2==a.length&&(r[a[0].replace(/^\s+|\s+$/g,"")]=parseInt(a[1]),o=!0));if(!o)return!1;var s=document.documentElement.clientWidth,c=document.documentElement.clientHeight;return null!==r["min-width"]&&s<r["min-width"]||null!==r["max-width"]&&s>r["max-width"]||null!==r["min-height"]&&c<r["min-height"]||null!==r["max-height"]&&c>r["max-height"]?!1:!0},navigator.userAgent.match(/MSIE ([0-9]+)/)&&RegExp.$1<9&&(t.newStyle=function(t){var e=document.createElement("span");return e.innerHTML=' <style type="text/css">'+t+"</style>",e})},initVars:function(){var e,n,i,a=navigator.userAgent;e="other",n=0,i=[["firefox",/Firefox\/([0-9\.]+)/],["bb",/BlackBerry.+Version\/([0-9\.]+)/],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/],["opera",/OPR\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)/],["edge",/Edge\/([0-9\.]+)/],["safari",/Version\/([0-9\.]+).+Safari/],["chrome",/Chrome\/([0-9\.]+)/],["ie",/MSIE ([0-9]+)/],["ie",/Trident\/.+rv:([0-9]+)/]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(RegExp.$1),!1):void 0}),t.vars.browser=e,t.vars.browserVersion=n,e="other",n=0,i=[["ios",/([0-9_]+) like Mac OS X/,function(t){return t.replace("_",".").replace("_","")}],["ios",/CPU like Mac OS X/,function(t){return 0}],["wp",/Windows Phone ([0-9\.]+)/,null],["android",/Android ([0-9\.]+)/,null],["mac",/Macintosh.+Mac OS X ([0-9_]+)/,function(t){return t.replace("_",".").replace("_","")}],["windows",/Windows NT ([0-9\.]+)/,null],["bb",/BlackBerry.+Version\/([0-9\.]+)/,null],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/,null]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(i[2]?i[2](RegExp.$1):RegExp.$1),!1):void 0}),t.vars.os=e,t.vars.osVersion=n,t.vars.IEVersion="ie"==t.vars.browser?t.vars.browserVersion:99,t.vars.touch="wp"==t.vars.os?navigator.msMaxTouchPoints>0:!!("ontouchstart"in window),t.vars.mobile="wp"==t.vars.os||"android"==t.vars.os||"ios"==t.vars.os||"bb"==t.vars.os}};return t.init(),t}();!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?module.exports=e():t.skel=e()}(this,function(){return skel});
=====================================================
== File: src/homepage/assets/js/lity.min.js
=====================================================
/*! Lity - v2.2.2 - 2016-12-14
* http://sorgalla.com/lity/
* Copyright (c) 2015-2016 Jan Sorgalla; Licensed MIT */
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){return b(a,c)}):"object"==typeof module&&"object"==typeof module.exports?module.exports=b(a,require("jquery")):a.lity=b(a,a.jQuery||a.Zepto)}("undefined"!=typeof window?window:this,function(a,b){"use strict";function c(a){var b=B();return N&&a.length?(a.one(N,b.resolve),setTimeout(b.resolve,500)):b.resolve(),b.promise()}function d(a,c,d){if(1===arguments.length)return b.extend({},a);if("string"==typeof c){if("undefined"==typeof d)return"undefined"==typeof a[c]?null:a[c];a[c]=d}else b.extend(a,c);return this}function e(a){for(var b,c=decodeURI(a.split("#")[0]).split("&"),d={},e=0,f=c.length;e<f;e++)c[e]&&(b=c[e].split("="),d[b[0]]=b[1]);return d}function f(a,c){return a+(a.indexOf("?")>-1?"&":"?")+b.param(c)}function g(a,b){var c=a.indexOf("#");return-1===c?b:(c>0&&(a=a.substr(c)),b+a)}function h(a){return b('<span class="lity-error"/>').append(a)}function i(a,c){var d=c.opener()&&c.opener().data("lity-desc")||"Image with no description",e=b('<img src="'+a+'" alt="'+d+'"/>'),f=B(),g=function(){f.reject(h("Failed loading image"))};return e.on("load",function(){return 0===this.naturalWidth?g():void f.resolve(e)}).on("error",g),f.promise()}function j(a,c){var d,e,f;try{d=b(a)}catch(a){return!1}return!!d.length&&(e=b('<i style="display:none !important"/>'),f=d.hasClass("lity-hide"),c.element().one("lity:remove",function(){e.before(d).remove(),f&&!d.closest(".lity-content").length&&d.addClass("lity-hide")}),d.removeClass("lity-hide").after(e))}function k(a){var c=J.exec(a);return!!c&&o(g(a,f("https://www.youtube"+(c[2]||"")+".com/embed/"+c[4],b.extend({autoplay:1},e(c[5]||"")))))}function l(a){var c=K.exec(a);return!!c&&o(g(a,f("https://player.vimeo.com/video/"+c[3],b.extend({autoplay:1},e(c[4]||"")))))}function m(a){var c=M.exec(a);return!!c&&(0!==a.indexOf("http")&&(a="https:"+a),o(g(a,f("https://www.facebook.com/plugins/video.php?href="+a,b.extend({autoplay:1},e(c[4]||""))))))}function n(a){var b=L.exec(a);return!!b&&o(g(a,f("https://www.google."+b[3]+"/maps?"+b[6],{output:b[6].indexOf("layer=c")>0?"svembed":"embed"})))}function o(a){return'<div class="lity-iframe-container"><iframe frameborder="0" allowfullscreen src="'+a+'"/></div>'}function p(){return z.documentElement.clientHeight?z.documentElement.clientHeight:Math.round(A.height())}function q(a){var b=v();b&&(27===a.keyCode&&b.close(),9===a.keyCode&&r(a,b))}function r(a,b){var c=b.element().find(G),d=c.index(z.activeElement);a.shiftKey&&d<=0?(c.get(c.length-1).focus(),a.preventDefault()):a.shiftKey||d!==c.length-1||(c.get(0).focus(),a.preventDefault())}function s(){b.each(D,function(a,b){b.resize()})}function t(a){1===D.unshift(a)&&(C.addClass("lity-active"),A.on({resize:s,keydown:q})),b("body > *").not(a.element()).addClass("lity-hidden").each(function(){var a=b(this);void 0===a.data(F)&&a.data(F,a.attr(E)||null)}).attr(E,"true")}function u(a){var c;a.element().attr(E,"true"),1===D.length&&(C.removeClass("lity-active"),A.off({resize:s,keydown:q})),D=b.grep(D,function(b){return a!==b}),c=D.length?D[0].element():b(".lity-hidden"),c.removeClass("lity-hidden").each(function(){var a=b(this),c=a.data(F);c?a.attr(E,c):a.removeAttr(E),a.removeData(F)})}function v(){return 0===D.length?null:D[0]}function w(a,c,d,e){var f,g="inline",h=b.extend({},d);return e&&h[e]?(f=h[e](a,c),g=e):(b.each(["inline","iframe"],function(a,b){delete h[b],h[b]=d[b]}),b.each(h,function(b,d){return!d||(!(!d.test||d.test(a,c))||(f=d(a,c),!1!==f?(g=b,!1):void 0))})),{handler:g,content:f||""}}function x(a,e,f,g){function h(a){k=b(a).css("max-height",p()+"px"),j.find(".lity-loader").each(function(){var a=b(this);c(a).always(function(){a.remove()})}),j.removeClass("lity-loading").find(".lity-content").empty().append(k),m=!0,k.trigger("lity:ready",[l])}var i,j,k,l=this,m=!1,n=!1;e=b.extend({},H,e),j=b(e.template),l.element=function(){return j},l.opener=function(){return f},l.options=b.proxy(d,l,e),l.handlers=b.proxy(d,l,e.handlers),l.resize=function(){m&&!n&&k.css("max-height",p()+"px").trigger("lity:resize",[l])},l.close=function(){if(m&&!n){n=!0,u(l);var a=B();if(g&&(z.activeElement===j[0]||b.contains(j[0],z.activeElement)))try{g.focus()}catch(a){}return k.trigger("lity:close",[l]),j.removeClass("lity-opened").addClass("lity-closed"),c(k.add(j)).always(function(){k.trigger("lity:remove",[l]),j.remove(),j=void 0,a.resolve()}),a.promise()}},i=w(a,l,e.handlers,e.handler),j.attr(E,"false").addClass("lity-loading lity-opened lity-"+i.handler).appendTo("body").focus().on("click","[data-lity-close]",function(a){b(a.target).is("[data-lity-close]")&&l.close()}).trigger("lity:open",[l]),t(l),b.when(i.content).always(h)}function y(a,c,d){a.preventDefault?(a.preventDefault(),d=b(this),a=d.data("lity-target")||d.attr("href")||d.attr("src")):d=b(d);var e=new x(a,b.extend({},d.data("lity-options")||d.data("lity"),c),d,z.activeElement);if(!a.preventDefault)return e}var z=a.document,A=b(a),B=b.Deferred,C=b("html"),D=[],E="aria-hidden",F="lity-"+E,G='a[href],area[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),button:not([disabled]),iframe,object,embed,[contenteditable],[tabindex]:not([tabindex^="-"])',H={handler:null,handlers:{image:i,inline:j,youtube:k,vimeo:l,googlemaps:n,facebookvideo:m,iframe:o},template:'<div class="lity" role="dialog" aria-label="Dialog Window (Press escape to close)" tabindex="-1"><div class="lity-wrap" data-lity-close role="document"><div class="lity-loader" aria-hidden="true">Loading...</div><div class="lity-container"><div class="lity-content"></div><button class="lity-close" type="button" aria-label="Close (Press escape to close)" data-lity-close>×</button></div></div></div>'},I=/(^data:image\/)|(\.(png|jpe?g|gif|svg|webp|bmp|ico|tiff?)(\?\S*)?$)/i,J=/(youtube(-nocookie)?\.com|youtu\.be)\/(watch\?v=|v\/|u\/|embed\/?)?([\w-]{11})(.*)?/i,K=/(vimeo(pro)?.com)\/(?:[^\d]+)?(\d+)\??(.*)?$/,L=/((maps|www)\.)?google\.([^\/\?]+)\/?((maps\/?)?\?)(.*)/i,M=/(facebook\.com)\/([a-z0-9_-]*)\/videos\/([0-9]*)(.*)?$/i,N=function(){var a=z.createElement("div"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return b[c];return!1}();return i.test=function(a){return I.test(a)},y.version="2.2.2",y.options=b.proxy(d,y,H),y.handlers=b.proxy(d,y,H.handlers),y.current=v,b(z).on("click.lity","[data-lity]",y),y});
=====================================================
== File: src/homepage/assets/js/util.js
=====================================================
(function($) {
/**
* Generate an indented list of links from a nav. Meant for use with panel().
* @return {jQuery} jQuery object.
*/
$.fn.navList = function() {
var $this = $(this);
$a = $this.find('a'),
b = [];
$a.each(function() {
var $this = $(this),
indent = Math.max(0, $this.parents('li').length - 1),
href = $this.attr('href'),
target = $this.attr('target');
b.push(
'<a ' +
'class="link depth-' + indent + '"' +
( (typeof target !== 'undefined' && target != '') ? ' target="' + target + '"' : '') +
( (typeof href !== 'undefined' && href != '') ? ' href="' + href + '"' : '') +
'>' +
'<span class="indent-' + indent + '"></span>' +
$this.text() +
'</a>'
);
});
return b.join('');
};
/**
* Panel-ify an element.
* @param {object} userConfig User config.
* @return {jQuery} jQuery object.
*/
$.fn.panel = function(userConfig) {
// No elements?
if (this.length == 0)
return $this;
// Multiple elements?
if (this.length > 1) {
=====================================================
== File: src/homepage/assets/js/jquery.scrollex.min.js
=====================================================
/* jquery.scrollex v0.2.1 | (c) @ajlkn | github.com/ajlkn/jquery.scrollex | MIT licensed */
!function(t){function e(t,e,n){return"string"==typeof t&&("%"==t.slice(-1)?t=parseInt(t.substring(0,t.length-1))/100*e:"vh"==t.slice(-2)?t=parseInt(t.substring(0,t.length-2))/100*n:"px"==t.slice(-2)&&(t=parseInt(t.substring(0,t.length-2)))),t}var n=t(window),i=1,o={};n.on("scroll",function(){var e=n.scrollTop();t.map(o,function(t){window.clearTimeout(t.timeoutId),t.timeoutId=window.setTimeout(function(){t.handler(e)},t.options.delay)})}).on("load",function(){n.trigger("scroll")}),jQuery.fn.scrollex=function(l){var s=t(this);if(0==this.length)return s;if(this.length>1){for(var r=0;r<this.length;r++)t(this[r]).scrollex(l);return s}if(s.data("_scrollexId"))return s;var a,u,h,c,p;switch(a=i++,u=jQuery.extend({top:0,bottom:0,delay:0,mode:"default",enter:null,leave:null,initialize:null,terminate:null,scroll:null},l),u.mode){case"top":h=function(t,e,n,i,o){return t>=i&&o>=t};break;case"bottom":h=function(t,e,n,i,o){return n>=i&&o>=n};break;case"middle":h=function(t,e,n,i,o){return e>=i&&o>=e};break;case"top-only":h=function(t,e,n,i,o){return i>=t&&n>=i};break;case"bottom-only":h=function(t,e,n,i,o){return n>=o&&o>=t};break;default:case"default":h=function(t,e,n,i,o){return n>=i&&o>=t}}return c=function(t){var i,o,l,s,r,a,u=this.state,h=!1,c=this.$element.offset();i=n.height(),o=t+i/2,l=t+i,s=this.$element.outerHeight(),r=c.top+e(this.options.top,s,i),a=c.top+s-e(this.options.bottom,s,i),h=this.test(t,o,l,r,a),h!=u&&(this.state=h,h?this.options.enter&&this.options.enter.apply(this.element):this.options.leave&&this.options.leave.apply(this.element)),this.options.scroll&&this.options.scroll.apply(this.element,[(o-r)/(a-r)])},p={id:a,options:u,test:h,handler:c,state:null,element:this,$element:s,timeoutId:null},o[a]=p,s.data("_scrollexId",p.id),p.options.initialize&&p.options.initialize.apply(this),s},jQuery.fn.unscrollex=function(){var e=t(this);if(0==this.length)return e;if(this.length>1){for(var n=0;n<this.length;n++)t(this[n]).unscrollex();return e}var i,l;return(i=e.data("_scrollexId"))?(l=o[i],window.clearTimeout(l.timeoutId),delete o[i],e.removeData("_scrollexId"),l.options.terminate&&l.options.terminate.apply(this),e):e}}(jQuery);
=====================================================
== File: src/homepage-docker/Dockerfile
=====================================================
FROM ruby:2.6.8-buster
RUN apt-get update \
&& apt-get install -y \
nodejs \
python-pygments \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/
RUN gem install \
github-pages \
jekyll \
jekyll-feed \
jekyll-redirect-from \
jekyll-seo-tag \
kramdown \
rdiscount \
rouge
# Copy the script
COPY compile.sh /root/compile.sh
# Define the entrypoint
WORKDIR /james-project
ENTRYPOINT ["/root/compile.sh"]
=====================================================
== File: src/homepage-docker/compile.sh
=====================================================
#!/bin/sh -e
#
printUsage() {
echo "Usage : "
echo "./compile.sh SHA1"
echo " SHA1: SHA1 to build (optional)"
exit 1
}
ORIGIN=/origin
DESTINATION=/destination
for arg in "$@"
do
case $arg in
-*)
echo "Invalid option: -$OPTARG"
printUsage
;;
*)
if ! [ -z "$1" ]; then
SHA1=$1
fi
;;
esac
if [ "0" -lt "$#" ]; then
shift
fi
done
if [ -z "$SHA1" ]; then
SHA1=master
fi
# Sources retrieval
git clone $ORIGIN/.
git checkout $SHA1
# Compilation /james-project/src/jekyll/_site
jekyll build --source src/homepage --destination $DESTINATION
=====================================================
== File: src/site-docker/Dockerfile
=====================================================
# Build James
#
# VERSION 1.0
FROM eclipse-temurin:11-jdk-focal
# Install git
RUN apt-get update
RUN apt-get install -y git wget unzip
# Install Maven
WORKDIR /root
RUN wget https://downloads.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
RUN tar -xvf apache-maven-3.6.3-bin.tar.gz
RUN ln -s /root/apache-maven-3.6.3/bin/mvn /usr/bin/mvn
# Copy the script
COPY compile.sh /root/compile.sh
# Define the entrypoint
WORKDIR /james-project
ENTRYPOINT ["/root/compile.sh"]
=====================================================
== File: src/site-docker/compile.sh
=====================================================
#!/bin/sh -e
#
printUsage() {
echo "Usage : "
echo "./compile.sh SHA1"
echo " SHA1: SHA1 to build (optional)"
exit 1
}
ORIGIN=/origin
DESTINATION=/destination
for arg in "$@"
do
case $arg in
-*)
echo "Invalid option: -$OPTARG"
printUsage
;;
*)
if ! [ -z "$1" ]; then
SHA1=$1
fi
;;
esac
if [ "0" -lt "$#" ]; then
shift
fi
done
if [ -z "$SHA1" ]; then
SHA1=master
fi
# Sources retrieval
git clone $ORIGIN/.
git checkout $SHA1
# Compilation
export MAVEN_OPTS="-Xmx7168m -Xms2048m -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit"
mvn clean install -DskipTests
mvn site:site -Dmaven.javadoc.skip=true -DskipTests -pl .,mpt/core
mkdir /tmp/website-generation
mvn site:stage -DstagingDirectory=/tmp/website-generation -pl .,mpt/core
cp -r /tmp/website-generation/* $DESTINATION/
=====================================================
== File: src/adr/0026-removing-configured-additional-mailboxListeners.md
=====================================================
# 26. Removing a configured additional MailboxListener
Date: 2020-04-03
## Status
Accepted (lazy consensus)
Not implemented yet.
Superseded by [35. Distributed Mailbox Listener Configuration](0035-distributed-listeners-configuration.md)
## Context
James enables a user to register additional mailbox listeners.
The distributed James server is handling mailbox event processing (mailboxListener execution) using a RabbitMQ work-queue
per listener.
The distributed James server then declares a queue upon start for each one of these user registered listeners, that it
binds to the main event exchange.
More information about this component, and its distributed, RabbitMQ based implementation, can be found in
[ADR 0036](0037-eventbus.md).
If the user unconfigures the listener, the queue and the binding are still present but not consumed. This results in
unbounded queue growth eventually causing RabbitMQ resource exhaustion and failure.
## Vocabulary
A **required group** is a group configured within James additional mailbox listener or statically binded via Guice. We
should have a queue for that mailbox listener binded to the main exchange.
A **registered group** is a group whose queue exists in RabbitMQ and is bound to the exchange, independently of its James
usage. If it is required, a consumer will consume the queue. Otherwise the queue might grow unbounded.
## Decision
We need a clear consensus and auditability across the James cluster about **required groups** (and their changes). Thus
Event sourcing will maintain an aggregate tracking **required groups** (and their changes). Audit will be enabled by
adding host and date information upon changes. A subscriber will perform changes (binds and unbinds) in registered groups
following the changes of the aggregate.
Event sourcing is desirable as it allows:
- Detecting previously removed MailboxListener upon start
- Audit of unbind decisions
- Enables writing more complex business rules in the future
The event sourcing system will have the following command:
=====================================================
== File: src/adr/0032-distributed-mail-queue-cleanup.md
=====================================================
# 32. Distributed Mail Queue Cleanup
Date: 2020-04-13
## Status
Accepted (lazy consensus) and implemented
## Context
Read [Distributed Mail Queue](0031-distributed-mail-queue.md) for full context.
**enqueuedMailsV3** and **deletedMailsV2** is never cleaned up and the corresponding blobs are always referenced. This is not
ideal both from a privacy and space storage costs point of view.
Note that **enqueuedMailsV3** and **deletedMailsV2** rely on timeWindowCompactionStrategy.
## Decision
Add a new `contentStart` table referencing the point in time from which a given mailQueue holds data, for each mail queue.
The values contained between `contentStart` and `browseStart` can safely be deleted.
We can perform this cleanup upon `browseStartUpdate`: once finished we can browse then delete content of **enqueuedMailsV3**
and **deletedMailsV2** contained between `contentStart` and the new `browseStart` then we can safely set `contentStart`
to the new `browseStart`.
Content before `browseStart` can safely be considered deletable, and is applicatively no longer exposed. We don't need an
additional grace period mechanism for `contentStart`.
Failing cleanup will lead to the content being eventually updated upon next `browseStart` update.
We will furthermore delete blobStore content upon dequeue, also when the mail had been deleted or purged via MailQueue
management APIs.
## Consequences
All Cassandra SSTable before `browseStart` can safely be dropped as part of the timeWindowCompactionStrategy.
Updating browse start will then be two times more expensive as we need to unreference passed slices.
Eventually this will allow reclaiming Cassandra disk space and enforce mail privacy by removing dandling metadata.
## Alternative
A [proposal](https://github.com/linagora/james-project/pull/3291#pullrequestreview-393501339) was made to piggy back
cleanup upon dequeue/delete operations. The dequeuer/deleter then directly removes the related metadata from
`enqueuedMailsV3` and `deletedMailsV2`. This simpler design however have several flaws:
- if the cleanup fails for any reason then it cannot be retried in the future. There will be no way of cleaning up the
=====================================================
== File: src/adr/0007-distributed-task-cancellation.md
=====================================================
# 7. Distributed Task cancellation
Date: 2019-10-02
## Status
Accepted (lazy consensus) & implemented
## Context
A `Task` could be run on any node of the cluster. To interrupt it we need to notify all nodes of the cancel request.
## Decision
* We will add an EventHandler to broadcast the `CancelRequested` event to all the workers listening on a RabbitMQ broadcasting exchange.
* The `TaskManager` should register to the exchange and will apply `cancel` on the `TaskManagerWorker` if the `Task` is waiting or in progress on it.
## Consequences
* The task manager's event system should be bound to the RabbitMQ exchange which publish the `TerminationEvent`s
## References
* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)
=====================================================
== File: src/adr/0043-avoid-elasticsearch-on-critical-reads.md
=====================================================
# 43. Avoid ElasticSearch on critical reads
Date: 2020-11-11
## Status
Accepted (lazy consensus) & implemented
Scope: Distributed James
## Context
A user willing to use a webmail powered by the JMAP protocol will end up doing the following operations:
- `Mailbox/get` to retrieve the mailboxes. This call is resolved against metadata stored in Cassandra.
- `Email/query` to retrieve the list of emails. This call is nowadays resolved on ElasticSearch for Email search after
a right resolution pass against Cassandra.
- `Email/get` to retrieve various levels of details. Depending on requested properties, this is either
retrieved from Cassandra alone or from ObjectStorage.
So, ElasticSearch is queried on every JMAP interaction for listing emails. Administrators thus need to enforce availability and good performance
for this component.
Relying on more services for every read also harms our resiliency as ElasticSearch outages have major impacts.
Also we should mention our ElasticSearch implementation in Distributed James suffers the following flaws:
- Updates of flags lead to updates of the all Email object, leading to sparse segments
- We currently rely on scrolling for JMAP (in order to ensure messageId uniqueness in the response while respecting limit & position)
- We noticed some very slow traces against ElasticSearch, even for simple queries.
Regarding Distributed James data-stores responsibilities:
- Cassandra is the source of truth for metadata, its storage needs to be adapted to known access patterns.
- ElasticSearch allows resolution of arbitrary queries, and performs full text search.
## Decision
Provide an optional view for most common `Email/query` requests both on Draft and RFC-8621 implementations.
This includes filters and sorts on 'sentAt'.
This view will be stored into Cassandra, and updated asynchronously via a MailboxListener.
## Consequences
A migration task will be provided for new adopters.
Administrators would be offered a configuration option to turn this view on and off as needed.
If enabled, given clients following well defined Email/query requests, administrators would no longer need
to ensure high availability and good performances for ElasticSearch to ensure availability of basic usages
(mailbox content listing).
=====================================================
== File: src/adr/0068-mutualize-cassandra-storge-for-quota.md
=====================================================
# 68. Mutualize Cassandra storage for Quota
Date: 2023-08-18
## Status
Accepted (lazy consensus).
Implemented.
## Context
One generic threat is resource abuse. Meaning a user uses an unfair amount of resources.
Similarily resource limitation is a way to decrease operating costs.
Quota, standardized in IMAP via [RFC-9208](https://www.rfc-editor.org/rfc/rfc9208.html) and in JMAP via
[RFC-9425](https://datatracker.ietf.org/doc/rfc9425/) are a mechanism designed to keep track of
user current usage of the resource and match it against the stored limit.
Resource limitation is a broad use case that we might want to better enforce in Apache James. This is especially
important when operating in SaaS mode, and actual users might be badly intentionned. See
[ADR-67 Quota for JMAP uploads](0067-quota-for-jmap-uploads.md).
As such, there is duplication, especially at the storage layers. Similar features might benefit from mutualized storage.
Especially, it is worth mentionning that Cassandra tables do not come for free: we have a strong incentive to reduce their count.
See [The Last Pickle blog post on this topic](https://thelastpickle.com/blog/2020/11/25/impacts-of-many-tables-on-cassandra.html).
In particular (quote from the above article):
```
If some tables share the same columns, it could be interesting to merge them into a single one,
adding a column to the partition key to distinguish data belonging to different tables.
```
## Decision
Add Cassandra storage helpers, exposing a generic interface for Cassandra quota implementation of various services to mutualize their
storage. This relies on a part of the primary key allowing to distinguish the component.

The helper will consist of 2 tables:
- One composed of counters to track current value
- One composed of regular `long` to track limits
(one can not mix counters and regular values in the same table in Cassandra).
Port exising Cassandra implementations of quota for various services to use those helpers. Namely the Cassandra mailbox, Sieve storage. Use those
=====================================================
== File: src/adr/0066-modular-user-data-deletion.md
=====================================================
# 66. Deleting user data
Date: 2023-05-11
## Status
Accepted (lazy consensus).
Implemented.
## Context
Regulation like European GDPR involves being able to delete all user data upon requests. Currently there exist some APIs
for deleting some data relative for the users but the overall process is complex, requires a good knowlege of James data structures.
The data is scattered across the database and some sensible items might not be deletable.
## Decision
Define a single endpoint to delete all data relative to a user.
James being modular, we decided to form it under a webadmin task with a modular design.
Each feature storing user data would then implement `UserDeletionTaskStep`.
This modular design for migration steps could help developers easier to manage/test each step, and help other tailor
James servers can implement their own steps as well.
Today, implemented deletion steps are:
- `RecipientRewriteTableUserDeletionTaskStep`: deletes all rewriting rules related to this user.
- `FilterUserDeletionTaskStep`: deletes all filters belonging to the user.
- `DelegationUserDeletionTaskStep`: deletes all delegations from / to the user.
- `MailboxUserDeletionTaskStep`: deletes mailboxes of this user, all ACLs of this user, as well as his subscriptions.
- `WebPushUserDeletionTaskStep`: deletes push data registered for this user.
- `IdentityUserDeletionTaskStep`: deletes identities registered for this user.
- `VacationUserDeletionTaskStep`: deletes vacations registered for this user.
We introduce `fromStep` query parameter that allows skipping previous steps, allowing the operator to resume the user deletion from a failed step.
This option could ease operators in case the data migration fails in the middle.
## Consequences
- Makes it easier to claim GDPR compliance on top of James.
- Modular design for deleting users is extension friendly for tailor James servers.
## Alternatives
Only deleting the user from the UsersRepository only "disable" the user without affecting the underlying data.
=====================================================
== File: src/adr/0039-distributed-blob-garbage-collector.md
=====================================================
# 39. Distributed blob garbage collector
Date: 2020-02-18
## Status
Proposed, not implemented yet.
Work had been started on this topic.
An alternative is proposed in [Deduplicated blobs GC with bloom filters](0049-deduplicated-blobs-gs-with-bloom-filters.md)
and implemented.
## Context
The body, headers, attachments of the mails are stored as blobs in a blob store.
In order to save space in those stores, those blobs are de-duplicated using a hash of their content.
To attain that the current blob store will read the content of the blob before saving it, and generate its id based on
a hash of this content. This way two blobs with the same content will share the same id and thus be saved only once.
This makes the safe deletion of one of those blobs a non trivial problem as we can't delete one blob without ensuring
that all references to it are themselves deleted. For example if two messages share the same blob, when we delete
one message there is at the time being no way to tell if the blob is still referenced by another message.
## Decision
To address this issue, we propose to implement a distributed blob garbage collector built upon the previously developed
Distributed Task Manager.
The de-duplicating blob store will keep track of the references pointing toward a blob in a `References` table.
It will also keep track of the deletion requests for a blob in a `Deletions` table.
When the garbage collector algorithm runs it will fetch from the `Deletions` table the blobs considered to be effectively deleted,
and will check in the `References` table if there are still some references to them. If there is no more reference to a blob,
it will be effectively deleted from the blob store.
To avoid concurrency issues, where we could garbage collect a blob at the same time a new reference to it appear,
a `reference generation` notion will be added. The de-duplicating id of the blobs which before where constructed
using only the hash of their content, will now include this `reference generation` too.
At a given interval a new `reference generation` will be emitted, since then all new blobs will point to this new generation.
So a `garbage collection iteration` will run only on the `reference generation` `n-2` to avoid concurrency issues.
The switch of generation will be triggered by a task running on the distributed task manager. This task will
emit an event into the event sourcing system to increment the `reference generation`.
## Alternatives
Not de-duplicating the blobs' content, this simple approach which involves storing the same
blob a lot of times can in some scenario be really slow and costly. Albeit it can in some case be preferred for the sake of
simplicity, data security...
=====================================================
== File: src/adr/0030-separate-attachment-content-and-metadata.md
=====================================================
# 30. Separate attachment content and metadata
Date: 2020-04-13
## Status
Accepted (lazy consensus) & implemented
## Context
Some mailbox implementations of James store already parsed attachments for faster retrieval.
This attachment storage capabilities are required for two features:
- JMAP attachment download
- JMAP message search "attachment content" criteria
Only Memory and Cassandra backends can be relied upon as a JMAP backend.
Other protocols relies on dynamic EML parsing to expose message subparts (IMAP)
Here are the POJOs related to these attachments:
- **Attachment** : holds an attachmentId, the attachment content, as well as the content type
- **MessageAttachment** : composes an attachment with its disposition within a message (cid, inline and name)
- **Message** exposes its list of MessageAttachment when it is read with FetchType Full.
- **Blob** represents some downloadable content, and can be either an attachment or a message. Blob has a byte array
payload too.
The following classes work with the aforementioned POJOs:
- **AttachmentMapper** and **AttachmentManager** are responsible of storing and retrieving an attachment content.
- **BlobManager** is used by JMAP to allow blob downloads.
- Mailbox search exposes attachment content related criteria. These criteria are used by the JMAP protocol.
This organisation causes attachment content to be loaded every time a message is fully read (which happens for instance
when you open a message using JMAP) despite the fact that it is not needed, as attachments are downloadable through a
separate JMAP endpoint, their content is not attached to the JMAP message JSON.
Also, the content being loaded "at once", we allocate memory space to store the whole attachment, which is sub-optimal. We
want to keep the consumed memory low per-message because a given server should be able to handle a high number of messages
at a given time.
To be noted that JPA and maildir mailbox implementations do not support attachment storage. To retrieve attachments of a
message, these implementations parse the messages to extract their attachments.
Cassandra mailbox prior schema version 4 stored attachment and its metadata in the same table, but from version 5 relies
on the blobStore to store the attachment content.
## Decision
=====================================================
== File: src/adr/0055-rspamd-spam-filtering.md
=====================================================
# 55. RSPAMD
Date: 2022-08-10
## Status
Accepted (lazy consensus).
Implemented.
## Context
In order to detect spam, James provide 3 mechanisms:
- SMTP Hook: decide to reject or not before spooling on the SMTP level
- Mailet: custom the mailet pipeline for changing the mail processing when detect spam mail.
- Mailbox listener: based on user action, eg: move in/out the message to Inbox/Spam mailbox, then decide to report spam or not to separate Spam filtering system.
For basic, we can base on username, DSN filter, domains, IP... for configuring black or grey list.
If we want to analyse deeper in each message content, we need a more complex system.
Currently, James is integrated with [SpamAssassin](https://spamassassin.apache.org/) to tackle this problem.
We found it hard to operate SpamAssassin, and we had a performance issue.
For more selection, James's repository provides the Rspamd extension, which provides the same way as SpamAssassin but another system - [Rspamd](https://github.com/rspamd/rspamd)
A quick introduction about Rspamd:
```
Rspamd is an advanced spam filtering system and email processing framework that allows evaluation of messages by a number of rules including regular expressions, statistical analysis and custom services such as URL black lists. Each message is analysed by Rspamd and given a verdict that might be used by MTA for further processing (e.g. to reject a message, or add a special header indicating spam) along with other information, such as possible DKIM signature or modifications suggested for a message.
Rspamd can act as a Milter allowing direct interaction with popular MTA systems, such as Postfix or Sendmail.
Rspamd is designed to process hundreds of messages per second simultaneously, and provides a number of useful features including a comprehensive Lua API that allows access to messages processing in various aspects as well as asynchronous network API to access external resources, such as DNS, HTTP or even generic TCP/UDP services.
```
## Decision
Set up a new maven project dedicated to rspamd extension. This allows to be embedded in a James server as a soft dependency
using the external-jar loading mechanism. With this way, the extension could be dropped in one's James installation, and not a runtime dependency.
Based on James' support for custom mailets, listeners, web admin routes, Rspamd extension can be done via:
- `RspamdScanner` mailet: with each mail income, this mailet will query to Rspamd for getting a spam or ham result, then append new headers to the mail with status/flag spam.
By setting up with `IsMarkedAsSpam` matcher, the mail will be rejected or not.
This mailet will be configured in [mailetcontainer.xml](/server/apps/distributed-app/sample-configuration/mailetcontainer.xml).
- Web admin route: to create feeding ham/spam messages task (batch mechanism). It helps spam classify learning.
- `RspamdListener`: the listener will handle mailbox events, based on `MessageMoveEvent`, `MailboxEvents.Added` to detect if the mail is spam or ham, then report to Rspamd,
enrich data to Rspamd, thus we will get more exact results in the next query.
=====================================================
== File: src/adr/0044-against-the-use-of-cassandra-lightweight-transactions.md
=====================================================
# 44. Against the use of Lightweight Transaction in Cassandra code base
Date: 2020-11-11
## Status
Accepted (lazy consensus).
Scope: Distributed James
Implemented.
## Context
As any kind of server James needs to provide some level of consistencies.
Strong consistency can be achieved with Cassandra by relying on LightWeight transactions. This enables
optimistic transactions on a single partition key.
Under the hood, Cassandra relies on the PAXOS algorithm to achieve consensus across replica allowing us
to achieve linearizable consistency at the entry level. To do so, Cassandra tracks consensus in a system.paxos
table. This `system.paxos` table needs to be checked upon reads as well in order to ensure the latest state of the ongoing
consensus is known. This can be achieved by using the SERIAL consistency level.
Experiments on a distributed James cluster (4 James nodes, having 4 CPU and 8 GB of RAM each, and a 3 node Cassandra
cluster of 32 GB of RAM, 8 CPUs, and SSD disks) demonstrated that the system.paxos table was by far the most read
and compacted table (ratio 5).
The table triggering the most reads to the `system.paxos` table was the `acl` table. Deactivating LWT on this table alone
(lightweight transactions & SERIAL consistency level) enabled an instant 80% throughput, latencies reductions
as well as softer degradations when load breaking point is exceeded.
## Decision
Rely on `event sourcing` to maintain a projection of ACLs that do not rely on LWT or SERIAL consistency level.
Event sourcing is thus responsible for handling concurrency and race conditions as well as governing denormalization
for ACLs. It can be used as a source of truth to re-build ACL projections.
Note that the ACL projection tables can end up being out of synchronization from the aggregate but we still have a
non-questionable source of truth handled via event sourcing.
## Consequences
We expect a better load handling, better response time, and cheaper operation costs for Distributed James while not
compromising the data safety of ACL operations.
ACL updates being a rare operation, we do not expect significant degradation of write performance by relying on
`eventSourcing`.
=====================================================
== File: src/adr/0050-jmap-web-push.md
=====================================================
# 50. Implement web push for JMAP
Date: 2021-10-18
## Status
Accepted (lazy consensus).
Implemented.
## Context
**Notification for newly received emails** is a common feature of modern mail applications. Furthermore,
**real time** updates across devices are a common feature. We wish to provide support for this on top
of Apache James JMAP implementation for a large variety of devices.
Dealing with mobile devices yield a unique set of challenges at the protocol level, including
low bandwidth connection, long latencies, and the need to save battery. As such, mobile devices
operating systems tend to limit background connections for applications. Thus, in order to receive
notifications when the application is running on the background, one cannot rely on
[ADR 0047](0047-jmap-push-over-websockets.md) (JMAP websocket push) - as it would imply
the application maintaining a persistent connection to the server, which is battery/network
consuming.
As such, [RFC-8620 section 7.2](https://jmap.io/spec-core.html#pushsubscription) `JMAP specification for web push`
introduces the use of [RFC-8030](https://datatracker.ietf.org/doc/html/rfc8030) `Generic Event Delivery Using HTTP Push`
using an intermediate push server: a Push Gateway is used by the device to multiplex all push of all applications on a
single connection. The device then register the URL of its push gateway on the application server (here JMAP server) for
it to forward `StateChange` events to the push gateway.
## Decision
Implement [RFC-8620 section 7.2](https://jmap.io/spec-core.html#pushsubscription) `JMAP specification for web push`.
We will store StateChanges, provide a Cassandra implementation of this storage for the Distributed application.
We will implement a PushClient based on reactor-netty to send events to the push gateway.
We will rely on a Group listener plugged on the JMAP event bus to handle the web push - See
[ADR 37: Event bus](0037-eventbus.md).
We will implement the `PushSubscription/get` and `PushSubscription/set` JMAP methods.
We will also implement the verification code mechanism (a first round-trip to verify the push gateway works well).
We also decided to allow a single push subscription per devideId (which includes device and APP identifier...)
## Consequences
The notification traffic transits by some third party infrastructure which can both be a security and privacy risk.
=====================================================
== File: src/adr/0002-make-taskmanager-distributed.md
=====================================================
# 2. Make TaskManager Distributed
Date: 2019-10-02
## Status
Accepted (lazy consensus) & implemented
## Context
In order to have a distributed version of James we need to have an homogeneous way to deal with `Task`.
Currently, every James nodes of a cluster have their own instance of `TaskManager` and they have no knowledge of others, making it impossible to orchestrate task execution at the cluster level.
Tasks are scheduled and ran on the same node they are scheduled.
We are also unable to list or access to the details of all the `Task`s of a cluster.
## Decision
Create a distribution-aware implementation of `TaskManager`.
## Consequences
* Split the `TaskManager` part dealing with the coordination (`Task` management and view) and the `Task` execution (located in `TaskManagerWorker`)
* The distributed `TaskManager` will rely on RabbitMQ to coordinate and the event system to synchronize states
## References
* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)
=====================================================
== File: src/adr/0012-jmap-partial-reads.md
=====================================================
# 12. Projections for JMAP Messages
Date: 2019-10-09
## Status
Accepted (lazy consensus) & implemented
## Context
JMAP core RFC8620 requires that the server responds only properties requested by the client.
James currently computes all of the properties regardless of their cost, and if it had been asked by the client.
Clearly we can save some latencies and resources by avoiding reading/computing expensive properties that had not been explicitly requested by the client.
## Decision
Introduce two new datastructures representing JMAP messages:
- One with only metadata
- One with metadata + headers
Given the properties requested by the client, the most appropriate message datastructure will be computed, on top of
existing message storage APIs that should remain unchanged.
Some performance tests will be run in order to evaluate the improvements.
## Consequences
GetMessages with a limited set of requested properties no longer result necessarily in full database message read. We
thus have a significant improvement, for instance when only metadata are requested.
Given the following scenario played by 5000 users per hour (constant rate)
- Authenticate
- List mailboxes
- List messages in one of their mailboxes
- Get 10 times the mailboxIds and keywords of the given messages
We went from:
- A 20% failure and timeout rate before this change to no failure
- Mean time for GetMessages went from 27 159 ms to 27 ms (1000 time improvment), for all operation from
27 591 ms to 60 ms (460 time improvment)
- P99 is a metric that did not make sense because the initial simulation exceeded Gatling (the performance measuring tool
we use) timeout (60s) at the p50 percentile. After this proposal p99 for the entire scenario is of 1 383 ms
## References
- /get method: https://tools.ietf.org/html/rfc8620#section-5.1
- [JIRA](https://issues.apache.org/jira/browse/JAMES-2919)
* [PR discussing this ADR](https://github.com/apache/james-project/pull/170)
=====================================================
== File: src/adr/0038-distributed-eventbus.md
=====================================================
# 38. Distributed Event bus
Date: 2020-05-25
## Status
Accepted (lazy consensus) & implemented
## Context
Read [Event Bus ADR](0037-eventbus.md) for context.
Given several James servers, we need them to share a common EventBus.
This:
- Ensures a better load balancing for `group mailbox listners`.
- Is required for correctness of notifications (like IMAP IDLE).
## Decision
Provide a distributed implementation of the EventBus leveraging RabbitMQ.
Events are emitted to a single Exchange.
Each group will have a corresponding queue, bound to the main exchange, with a default routing key. Each eventBus
will consume this queue and execute the relevant listener, ensuring at least once execution at the cluster level.
Retries are managed via a dedicated exchange for each group: as we need to count retries, the message headers need to
be altered and we cannot rely on rabbitMQ build in retries. Each time the execution fails locally, a new event is emitted
via the dedicated exchange, and the original event is acknowledged.
Each eventBus will have a dedicated exclusive queue, bound to the main exchange with the `registrationKeys` used by local
notification mailboxListeners (to only receive the corresponding subset of events). Errors are not retried for
notifications, failures are not persisted within `DeadLetter`, achieving at most once event delivery.
## Related ADRs
The implementation of the the distributed EventBus suffers from the following flows:
- [Removing a configured additional MailboxListener](0026-removing-configured-additional-mailboxListeners.md)
- [Distributed Mailbox Listeners Configuration](0035-distributed-listeners-configuration.md) also covers more in details
topology changes and supersedes ADR 0026.
The following enhancement have furthermore been contributed:
- [EventBus error handling upon dispatch](0027-eventBus-error-handling-upon-dispatch.md)
## References
* [JIRA 1](https://issues.apache.org/jira/browse/MAILBOX-367)
=====================================================
== File: src/adr/0031-distributed-mail-queue.md
=====================================================
# 31. Distributed Mail Queue
Date: 2020-04-13
## Status
Accepted (lazy consensus) & implemented
## Context
MailQueue is a central component of SMTP infrastructure allowing asynchronous mail processing. This enables a short
SMTP reply time despite a potentially longer mail processing time. It also works as a buffer during SMTP peak workload
to not overload a server.
Furthermore, when used as a Mail Exchange server (MX), the ability to add delays to be observed before dequeing elements
allows, among others:
- Delaying retries upon MX delivery failure to a remote site.
- Throttling, which could be helpful for not being considered a spammer.
A mailqueue also enables advanced administration operations like traffic review, discarding emails, resetting wait
delays, purging the queue, etc.
Spring implementation and non distributed implementations rely on an embedded ActiveMQ to implement the MailQueue.
Emails are being stored in a local file system. An administrator wishing to administrate the mailQueue will thus need
to interact with all its James servers, which is not friendly in a distributed setup.
Distributed James relies on the following third party softwares (among other):
- **RabbitMQ** for messaging. Good at holding a queue, however some advanced administrative operations can't be
implemented with this component alone. This is the case for `browse`, `getSize` and `arbitrary mail removal`.
- **Cassandra** is the metadata database. Due to **tombstone** being used for delete, queue is a well known anti-pattern.
- **ObjectStorage** (Swift or S3) holds byte content.
## Decision
Distributed James should ship a distributed MailQueue composing the following softwares with the following
responsibilities:
- **RabbitMQ** for messaging. A rabbitMQ consumer will trigger dequeue operations.
- A time series projection of the queue content (order by time list of mail metadata) will be maintained in **Cassandra** (see later). Time series avoid the
aforementioned tombstone anti-pattern, and no polling is performed on this projection.
- **ObjectStorage** (Swift or S3) holds large byte content. This avoids overwhelming other softwares which do not scale
as well in term of Input/Output operation per seconds.
Here are details of the tables composing Cassandra MailQueue View data-model:
- **enqueuedMailsV3** holds the time series. The primary key holds the queue name, the (rounded) time of enqueue
designed as a slice, and a bucketCount. Slicing enables listing a large amount of items from a given point in time, in an
fashion that is not achievable with a classic partition approach. The bucketCount enables sharding and avoids all writes
=====================================================
== File: src/adr/0004-distributed-tasks-listing.md
=====================================================
# 4. Distributed Tasks listing
Date: 2019-10-02
## Status
Accepted (lazy consensus) & implemented
## Context
By switching the task manager to a distributed implementation, we need to be able to `list` all `Task`s running on the cluster.
## Decision
* Read a Cassandra projection to get all `Task`s and their `Status`
## Consequences
* A Cassandra projection has to be done
* The `EventSourcingSystem` should have a `Listener` updating the `Projection`
## References
* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)
=====================================================
== File: src/adr/0027-eventBus-error-handling-upon-dispatch.md
=====================================================
# 27. EventBus error handling upon dispatch
Date: 2020-04-03
## Status
Accepted (lazy consensus) & implemented
## Context
James allows asynchronous processing for mailbox events via MailboxListener. This processing is abstracted by the
EventBus.
If the processing of an event via a mailbox listener fails, it is retried, until it succeeds. If a maxRetries parameter
is exceeded, the event is stored in deadLetter and no further processing is attended.
The administrator can then look at the content of deadLetter to diagnose processing issues and schedule a reDelivery in
order to retry their processing via webAdmin APIs.
However no such capabilities are supported upon dispatching the event on the eventbus. A failed dispatch will result in message loss.
More information about this component can be found in [ADR 0036](0037-eventbus.md).
## Decision
Upon dispatch failure, the eventBus should save events in dead letter using a dedicated group.
Reprocessing this group an admin can re-trigger these events dispatch.
In order to ensure auto healing, James will periodically check the corresponding group in deadLetter is empty. If not a
re-dispatching of these events will be attempted.
## Consequence
In distributed James Guice project an administrator have a way to be eventually consistent upon rabbitMQ failure.
## References
- [JIRA](https://issues.apache.org/jira/browse/JAMES-3139)
=====================================================
== File: src/adr/0021-cassandra-acl-inconsistency.md
=====================================================
# 21. Cassandra ACL inconsistencies
Date: 2020-02-27
## Status
Proposed
Not implemented yet.
## Context
Mailboxes ACLs are denormalized in Cassandra in order to:
- given a mailbox, list its ACL (enforcing rights for example)
- discover which mailboxes are delegated to a given user (used to list mailboxes)
Here is the tables organisation:
- `acl` stores the ACLs of a given mailbox
- `UserMailboxACL` stores which mailboxes had been delegated to which user
Failures during the denormalization process will lead to inconsistencies between the two tables.
This can lead to the following user experience:
```
ALICE delegates her INBOX mailbox to BOB
The denormalisation process fails
ALICE INBOX does not appear in BOB mailbox list
Given a delegated mailbox INBOX.delegated
ALICE undo the sharing of her INBOX.delegated mailbox
The denormalisation process fails
ALICE INBOX.delegated mailbox still appears in BOB mailbox list
When BOB tries to select it, he is being denied
```
## Decision
We can adopt a retry policy of the `UserMailboxACL` projection update as a mitigation strategy.
Using `acl` table as a source of truth, we can rebuild the `UserMailboxACL` projection:
- Iterating `acl` entries, we can rewrite entries in `UserMailboxACL`
- Iterating `UserMailboxACL` we can remove entries not referenced in `acl`
- Adding a delay and a re-check before the actual fix can decrease the occurrence of concurrency issues
We will expose a webAdmin task for doing this.
=====================================================
== File: src/adr/0023-cassandra-mailbox-counters-inconsistencies.md
=====================================================
# 23. Cassandra Mailbox Counters inconsistencies
Date: 2020-03-07
## Status
Accepted (lazy consensus) & implemented
## Context
Cassandra maintains a per mailbox projection for message count and unseen message count.
As with any projection, it can go out of sync, leading to inconsistent results being returned to the client, which is not acceptable.
Here is the table organisation:
- `mailbox` Lists the mailboxes
- `messageIdTable` Holds mailbox and flags for each message, lookup by mailbox ID + UID
- `imapUidTable` Holds mailbox and flags for each message, lookup by message ID and serves as a source of truth
- `mailboxCounters` Holds messages count and unseen message count for each mailbox.
Failures during the denormalization process will lead to inconsistencies between the counts and the content of `imapUidTable`
This can lead to the following user experience:
- Invalid message count can be reported in the Mail User Agent (IMAP & JMAP)
- Invalid message unseen count can be reported in the Mail User Agent (IMAP & JMAP)
## Decision
Implement a webadmin exposed task to recompute mailbox counters.
This endpoints will:
- List existing mailboxes
- List their messages using `messageIdTable`
- Check them against their source of truth `imapUidTable`
- Compute mailbox counter values
- And reset the value of the counter if needed in `mailboxCounters`
## Consequences
This endpoint is subject to data races in the face of concurrent operations. Concurrent increments & decrements will be
ignored during a single mailbox processing. However the source of truth is unaffected hence, upon rerunning the task,
the result will be eventually correct. To be noted that Cassandra counters can't be reset in an atomic manner anyway.
We rely on the "listing messages by mailbox" projection (that we recheck). Missing entries in there will
be ignored until the given projection is healed (currently unsupported).
We furthermore can piggy back a partial check of the message denormalization described in
=====================================================
== File: src/adr/0063-temporary-file-leaks.md
=====================================================
# 63. Prevent temporary file leaks
Date: 2022-09-13
## Status
Accepted (lazy consensus).
Implemented.
## Context
In order to reduce memory allocation, Apache James buffers big emails into temporary files, in both SMTP
and during the email processing.
This means that all James entities relying on `Mail` object needs to have resource management in place
to prevent temporary file leaks. If not this can result in both unreasonable disk occupation and file
descriptor leaks.
Core components were found to badly manage those resources. Some mailets (bounce), mail queue APIs, mail
repository APIs were found to be causing temporary file leaks.
James allows users to define custom mailets, that them too can badly manage emails. If insiders tend to
commit such errors, then we should expect our users to commit them too.
This points toward the need of a systematic approach to detect and mitigate temporary file leaks.
Similar leak detection is performed by other libraries. One can mention here Netty buffer libraries,
which relies on phantom references to detect leaks. Phantom references allows the Java garbage collector
to report recently GCed object. Upon phantom reference allocation, a check can then be done to check recently
GCed object, and release related resources if need be.
## Decision
Implement a leak detector "a la Netty" using phantom references.
Allow several modes:
- Off: does nothing which is James 3.6.x behaviour.
- Simple: logs leaks and deletes associated files
- Advanced: Same as simple but with the allocation stack trace which comes at a performance cost.
Useful for diagnostic.
- Testing: Assertion errors upon leaks. Can be used to streangthen test suite and detect leaks as part
of a build.
## Consequences
Makes James core components "leak proofed".
Allows user to safely write extensions involving emails (eg duplication / sending).
=====================================================
== File: src/adr/0069-crowdsec-IP-filtering.md
=====================================================
# 69. Crowdsec
Date: 2022-10-26
## Status
Accepted (lazy consensus).
Implemented.
## Context
Currently, there is no mechanism to check harmful IP addresses implementing attacks like bruteforce attacks, dictionary attacks, etc.
- Bruteforce attack: A hacker attempts to guess the user's login credentials.
- Dictionary attacks: A dictionary attack tries to find out the list of valid mail addresses.
## Decision
To that end, we will integrate James with [Crowdsec](https://www.crowdsec.net/). Crowdsec will check James logs, based on defined scenarios, Crowdsec can detect malevolent behaviors, and block them from accessing James at various levels (infrastructure - firewall, system, applicative). To ease end user configuration, and propose a bundled experience independent from end user infrastructure, we implement Crowdsec remediations at application level. Willing users can very well set up remediations based on their underlying infrastructure.
A quick introduction about Crowdsec:
```
CrowdSec Security Engine is an open-source and lightweight software that allows you to detect peers with malevolent behaviors and block them from accessing your systems at various levels (infrastructural, system, applicative).
To achieve this, the Security Engine reads logs from different sources (files, streams ...) to parse, normalize and enrich them before matching them to threats patterns called scenarios.
```
CrowdSec ships by default with scenarios (brute force, port scan, web scan, etc.) adapted for most contexts, but we can easily extend it by picking more of them from the [HUB](https://app.crowdsec.net/hub/collections). It is also easy to adapt an existing one or create one ourselves.
Set up a new maven project dedicated to Crowdsec extension. This allows to be embedded in a James server as a soft dependency
using the external-jar loading mechanism. With this way, the extension could be dropped in one's James installation, and not a runtime dependency.
### How does Crowdsec apply?
- Many attacks on James via IMAP, SMTP, JMAP can be detected by Crowdsec
- Crowdsec analyzes logs from James, then based on their patterns in parsers, it can detect each behavior in James.
- Scenarios are YAML files that allow to detect a specific behavior, usually an attack. With James, we detect bruteforce login attack and Dictionary attack.
- Each line log is an event in Crowdsec. If an event triggers the condition in Crowdsec, Crowdsec will send an alert to the Local API, and make a decision (ban)
- James connects to Crowdsec via https protocol with reactor http client to query the decision from Crowdsec
## Consequences
- James will be more secure by blocking threats at various levels (applicative, system, infrastructural).
- We can document and share Crowdsec scenario thus allowing users to benefit from each other decisions. Also we can get dangerous IP detected by community via using Central API
- Crowdsec natively supports distributed deployments (reference: ) by setting up an agent per node gathering logs of local containers and forwarding them to the crowdsec API that decides if remediations should be applied.
- This architecture is not horizontally scalable in itself but should already be able to analyse over 1000 relevant logs per seconds (metric obtained by discussing with Crowdsec team), which should allow leveraging very large scale James deployments.
## Alternatives
=====================================================
== File: src/adr/0037-eventbus.md
=====================================================
# 37. Event bus
Date: 2020-05-05
## Status
Accepted (lazy consensus) & implemented
## Context
Many features rely on behaviors triggered by interactions with the mailbox API main interfaces (`RightManager`,
`MailboxManager`, `MessageManager`, `MessageIdManager`). We need to provide a convenient extension mechanism for
organizing the execution of these behaviours, provide retries and advanced error handling.
Also, protocols enable notifications upon mailbox modifications. This is for instance the case for `RFC-2177 IMAP IDLE`,
leveraged for `RFC-3501 IMAP unsolicitated notifications` when selecting a Mailbox, as well as maintaining the
`IMAP Message Sequence Number <-> Unique IDentifier` MSN <-> UID mapping. Changes happening for a specific entity
(mailbox) need to be propagated to the relevant listeners.
## Decision
James mailbox component, a core component of James handling the storage of mails and mailboxes, should use an event
driven architecture.
It means every meaningful action on mailboxes or messages triggers an event for any component to react to that event.
`MailboxListener` allows executing actions upon mailbox events. They could be used for a wide variety of purposes, like
enriching mailbox managers features or enabling user notifications upon mailboxes operations performed by other devices
via other protocol sessions.
Interactions happen via the managers (`RightManager`, `MailboxManager`, `MessageManager`, `MessageIdManager`) which emit an
event on the `EventBus`, which will ensure the relevant `MailboxListener`s will be executed at least once.
`MailboxListener` can be registered in a work queue fashion on the `EventBus`. Each work queue corresponds to a given
MailboxListener class with the same configuration, identified by their group. Each event is executed at least once
within a James cluster, errors are retried with an exponential back-off delay. If the execution keeps failing, the event
is stored in `DeadLetter` for later reprocessing, triggered via WebAdmin.
Guice products enable the registration of additional mailbox listeners. A user can furthermore define its own
mailboxListeners via the use of `extension-jars`.
MailboxListener can also be registered to be executed only on events concerning a specific entity (eg. a mailbox). The
`registrationKey` is identifying entities concerned by the event. Upon event emission, the manager will indicate the
`registrationKey` this event should be sent to. A mailboxListener will thus only receive the event for the registration
key it is registered to, in an at least once fashion.
## Consequences
We need to provide an `In VM` implementation of the EventBus for single server deployments.
=====================================================
== File: src/adr/0049-deduplicated-blobs-gs-with-bloom-filters.md
=====================================================
# 49. Deduplicated blobs garbage collection with bloom filters
Date: 2021-07-21
## Status
Accepted (lazy consensus).
Implemented.
Proposes a simple way to implement an alternative to [39. Distributed blob garbage collector](0039-distributed-blob-garbage-collector.md)
### Changes
2021-08-25: Edited to mention Cuckoo filters (Alternative).
## Context
The body, headers, attachments of the mails are stored as blobs in a blob store.
In order to save space in those stores, those blobs are de-duplicated using a hash of their content.
To attain that the current blob store will read the content of the blob before saving it, and generate its id based on
a hash of this content. This way two blobs with the same content will share the same id and thus be saved only once.
This makes the safe deletion of one of those blobs a non-trivial problem as we can't delete one blob without ensuring
that all references to it are themselves deleted. For example if two messages share the same blob, when we delete
one message there is at the time being no way to tell if the blob is still referenced by another message.
## Decision
To solve this, we will propose a simple two steps algorithms to provide a background deduplication job.
The **first step** consists in building a bloom filter using the entities referencing the blobs.
In the **second step** we iterate over blobs and check in the bloom filter to predict if they are referenced on not.
**Bloom filters** are probabilistic data structures. Here the reference prediction can produce false positives: we might
skip some non referenced blobs that should have been garbage collected. However, the associated probability can be tuned
and by adding a salt we can ensure subsequent runs will have different sets of false positives and thus that all blobs is
eventually garbage collected.
To avoid concurrency issues, where we could garbage collect a blob at the same time a new reference to it appear,
a `reference generation` notion will be added. The de-duplicating id of the blobs which before where constructed
using only the hash of their content, will now include this `reference generation` too. To avoid synchronization
issues, the `generation` will be time based.
So only blobs belonging to the `reference generation` `n-2` will be eligible for garbage collection to avoid
concurrency issues, and allow for a clock skew.
=====================================================
== File: src/adr/0024-polyglot-strategy.md
=====================================================
# 24. Polyglot codebase
Date: 2020-03-17
## Status
Proposed
We rely on scala in parts of the code base.
## Context & Problem Statement
James is written in Java for a very long time. In recent years, Java modernized a lot after a decade of slow progress.
However, in the meantime, most software relying on the JVM started supporting alternative JVM languages to keep being relevant.
It includes Groovy, Clojure, Scala and more recently Kotlin, to name a few.
Not being open to those alternative languages can be a problem for James adoption.
## Decision drivers
Nowadays, libraries and framework targeting the JVM are expected to support usage of one or several of these alternative languages.
James being not only a mail server but also a development framework needs to reach those expectations.
At the same time, more and more developers and languages adopt Function Programming (FP) idioms to solve their problems.
## Considered options
### Strategies
1. Let the users figure out how to make polyglot setups
2. Document the usage of polyglot mailets for some popular languages
3. Document the usage of polyglot components for some popular languages
4. Actually implement some mailets in some popular languages
5. Actually implement some components in some popular languages
### Languages:
[upperroman]
I. Clojure
II. Groovy
III. Kotlin
IV. Scala
## Decision
We decide for options 4, 5 and IV.
=====================================================
== File: src/adr/0060-adopt-bounded-elastic.md
=====================================================
# 60. Adopt bounded elastic
Date: 2022-09-13
## Status
Accepted (lazy consensus).
Implemented.
## Context
See description of blocking vs reactive programming odel described in [ADR-57](0057-reactive-imap.md).
Sometimes reactive code needs to execute blocking tasks.
- This is the case when inter-operating with blocking libraries
- James reactive adoption is progressive, some parts of our application
are thus not reactive yet, which can result in reactive code calling
blocking code calling reactive code.
Historically James used the elastic scheduler for scheduling such blocking calls. This scheduler
starts a thread for each task submitted (and attempt to reuse threads when possible) and results
in high thread count.
That is why project reactor deprecated the elastic scheduler in favor of bounded-elastic (similar to
a thread pool).
## Decision
Migrate from elastic scheduler to bounded-elastic scheduler.
## Consequences
We expect a reduction in used threads under load from such a change.
Also, getting rid of elastic scheduler might be a requirement to upgrade to reactor 3.5 upward.
Associated risk:
- In some places, James protocol code is reactive, calls blocking intermediates API, to
end up calling reactive data access code. This results in nested blocking calls. Nested blocking
calls, when using the same scheduler with a bounded thread cap, can result in a dead lock.
To prevent such a dead-lock code executed on bounded-elastic should not depend on scheduling nested
blocking call on bounded-elastic scheduler for its completion. We can thus avoid such a situation by
using a scheduler dedicated by nested blocking calls.
## Alternatives
Alternatives to the "blocking call wrapper" scheduler described above includes a full reactive
=====================================================
== File: src/adr/0058-upgrade-to-netty-4.md
=====================================================
# 58. Upgrade to netty 4
Date: 2022-09-13
## Status
Accepted (lazy consensus).
Implemented.
## Context
James 3.7.0 uses Netty 3 for its TCP stacks (IMAP, SMTP, LMTP, MANAGESIEVE, POP3).
Latests Netty 3 minor releases dates from 20XX. This brings concerns regarding security
(unmaintained dependency).
Netty 4 delivers many enhancements compared to Netty 3.
- We can mention here the buffer APIs
- Netty 4 empowers the use of native SSL, native event loops
## Decision
Upgrade James to Netty 4.
## Consequences
Significant rewrite of the protocol stack. Though the count of lines of code involved is low, the code is
tricky and would need several iteration to be stabilized. For this reason, James 3.7.0 was released prior
the Netty 4 adoption.
Associated risk:
- Buffer leaks. Manual buffer management can be error prone. Netty project includes relevant
tooling.
- We encountered issues with write ordering (when execute on, or outside of, the event loop)
Benefits: Netty 4 natively supports graceful shutdown, which enables easily implementing such a feature in
James.
Netty 4 upgrades was also the opportunity to significantly improve test coverage for IMAP protocol stacks
and IMAP 4 extensions, which allowed fixing numerous bugs. To be mentioned:
- COMPRESSION
- STARTTLS and SSL
- IMAP IDLE
- QRESYNC and CONDSTORE
To be noted that Netty version used by James needs to be aligned with those of our dependencies:
- S3 driver
=====================================================
== File: src/adr/0042-applicative-read-repairs.md
=====================================================
# 42. Applicative read repairs (POC mailbox & mailbox-counters)
Date: 2020-09-25
## Status
Adopted (lazy consensus) & implemented
Completes [20. Cassandra Mailbox object consistency](0020-cassandra-mailbox-object-consistency.md),
[23. Cassandra Mailbox Counters inconsistencies](0023-cassandra-mailbox-counters-inconsistencies.md)
## Context
Cassandra eventual consistency is all about "replication", but "denormalization" consistency needs
to be handled at the applicative layer (due to the lack of transactions in a NoSQL database).
In the past we did set up "Solve inconsistency" tasks that can be assimilated to Cassandra repairs. Such
tasks, after being scheduled, ensure that the according entity denormalization is correctly denormalized.
However, the inconsistencies persist between runs. We experienced inconsistencies in some production platform
for both the mailbox entity, and the mailbox counter entity (whose table structure is exposed in
[these](0020-cassandra-mailbox-object-consistency.md), [ADRs](0023-cassandra-mailbox-counters-inconsistencies.md)).
Monitoring is required to detect when to run them and is time consuming for the platform administrator.
Given a large dataset, it could even be impossible to run such tasks in a timely fashion.
Another classic eventual consistency mechanism, that enables auto-healing is read-repair. Randomly piggy back upon reads
synchronous or asynchronous consistency checks. If missed a repair is performed.
In order to achieve denormalization auto-healing, we thus need to implement "applicative read repairs".
## Decision
Provide a Proof of concept for "Applicative read repairs" for the mailbox and mailbox-counters entities.
This enables read path simplification (and performance enhancements) for the mailbox object.
IMAP LIST should not read mailbox counters. This information is uneeded and we should avoid paying the
price of read repairs for this operation.
Provide a comprehensive documentation page regarding "Distributed James consistency model".
## Consequences
The expected **auto-healing** inconsistencies on existing deployments (at a limited configuration cost).
This should ease operation of the Distributed James server.
A configuration for James Distributed server will be added to control read repairs, per entity.
## Alternatives
=====================================================
== File: src/adr/0048-cleanup-jmap-uploads.md
=====================================================
# 48. Cleanup of JMAP uploads
Date: 2021-07-21
## Status
Accepted (lazy consensus).
Implemented.
Overridden by [Quota for JMAP uploads](0067-quota-for-jmap-uploads.md)
## Context
JMAP allows users to upload binary content called blobs to be later referenced via method calls. This includes but is not
limited to `Email/set` for specifying the blobId of attachments and `Email/import`.
The [specification](https://jmap.io/spec-core.html#binary-data) strongly encourages enforcing the cleanup of these uploads:
```
A blob that is not referenced by a JMAP object (e.g., as a message attachment) MAY be deleted by the server to free up
resources. Uploads (see below) are initially unreferenced blobs.
[...] An unreferenced blob MUST NOT be deleted for at least 1 hour from the time of upload; if reuploaded, the same
blobId MAY be returned, but this SHOULD reset the expiry time.
```
Deleting such uploads in a timely manner is important as:
- It enables freeing server resources.
- failing to do so may compromise privacy: content the user have uploaded and long forgotten might still be accessible
in the underlying data-store. Failing to delete uploads in a timely fashion may jeopardize for instance GDPR compliance.
Today, uploads are stored along side email attachments. This means:
- We can hardly apply a specific lifecycle that cleans up uploads, as distinguishing attachment from uploads is not
trivial.
- We currently have a complex right resolution system on attachment, handling both the upload case (were the attachment
is linked to a user) and the 'true' attachment case (linked to a message, those who can access the message can access
the attachment). This leads to sub-optimal code (slow).
## Decision
We need to create a separate interface `UploadRepository` in `data-jmap` to store uploads for each user. We would provide a memory
implementation as well as a distributed implementation of it.
The distributed implementation would host metadata of the upload in Cassandra, and the content using the BlobStore API,
so object storage.
This `UploadRepository` would be used by JMAP RFC-8620 to back uploads (instead of the attachment manager), we will
provide a `BlobResolver` to enable interactions with the uploaded blob. Similarly, we will use the `UploadRepository` to
=====================================================
== File: src/adr/0072-postgresql-flags-update-concurrency-control.md
=====================================================
# 72. Postgresql flags update concurrency control mechanism
Date: 2023-12-19
## Status
Not-Implemented
## Context
We are facing a concurrency issue when update flags concurrently.
The multiple queries from clients simultaneously access the `user_flags` column of the `message_mailbox` table in PostgreSQL.
Currently, the James fetches the current data, performs changes, and then updates to database.
However, this approach does not ensure thread safety and may lead to concurrency issues.
CRDT (conflict-free replicated data types) principles semantic can lay the ground to solving concurrency issues in a lock-free manner, and could thus be used for the problem at hand. This explores a different paradigm for addressing concurrency challenges without resorting to traditional transactions.
## Decision
To address the concurrency issue when clients make changes to the user_flags column,
we decide to use PostgreSQL's built-in functions to perform direct operations on the `user_flags` array column
(without fetching the current data and recalculating on James application).
Specifically, we will use PostgreSQL functions such as
`array_remove`, `array_cat`, or `array_append` to perform specific operations as requested by the client (e.g., add, remove, replace elements).
Additionally, we will create a custom function, say `remove_elements_from_array`,
for removing elements from the array since PostgreSQL does not support `array_remove` with an array input.
## Consequences
Pros:
- This solution reduces the complexity of working with the evaluate new user flags on James.
- Eliminates the step of fetching the current data and recalculating the new value of user_flags before updating.
- Ensures thread safety and reduces the risk of concurrency issues.
Cons:
- The performance will depend on the performance of the PostgreSQL functions.
## Alternatives
- Optimistic Concurrency Control (OCC): Using optimistic concurrency control to ensure that only one version of the data is updated at a time.
However, this may increase the complexity of the code and require careful management of data versions.
The chosen solution using PostgreSQL functions was preferred for its simplicity and direct support for array operations.
- Read-Then-Write Logic into Transactions: Transactions come with associated costs, including extra locking, coordination overhead,
and dependency on connection pooling. By avoiding the use of transactions, we aim to reduce these potential drawbacks
and explore other mechanisms for ensuring data consistency.
## References
=====================================================
== File: src/adr/0015-objectstorage-blobid-list.md
=====================================================
# 15. Persist BlobIds for avoiding persisting several time the same blobs within ObjectStorage
Date: 2019-10-09
## Status
Rejected (leads to concurrency issues)
Adoption needs to be backed by some performance tests.
## Context
A given mail is often written to the blob store by different components. And mail traffic is heavily duplicated (several recipients receiving similar email, same attachments). This causes a given blob to often be persisted several times.
Cassandra was the first implementation of the blobStore. Cassandra is a heavily write optimized NoSQL database. One can assume writes to be fast on top of Cassandra. Thus we assumed we could always overwrite blobs.
This usage pattern was also adopted for BlobStore on top of ObjectStorage.
However writing in Object storage:
- Takes time
- Is billed by most cloud providers
Thus choosing a right strategy to avoid writing blob twice is desirable.
However, ObjectStorage (OpenStack Swift) `exist` method was not efficient enough to be a real cost and performance saver.
## Decision
Rely on a StoredBlobIdsList API to know which blob is persisted or not in object storage. Provide a Cassandra implementation of it.
Located in blob-api for convenience, this it not a top level API. It is intended to be used by some blobStore implementations
(here only ObjectStorage). We will provide a CassandraStoredBlobIdsList in blob-cassandra project so that guice products combining
object storage and Cassandra can define a binding to it.
- When saving a blob with precomputed blobId, we can check the existence of the blob in storage, avoiding possibly the expensive "save".
- When saving a blob too big to precompute its blobId, once the blob had been streamed using a temporary random blobId, copy operation can be avoided and the temporary blob could be directly removed.
Cassandra is probably faster doing "write every time" rather than "read before write" so we should not use the stored blob projection for it
Some performance tests will be run in order to evaluate the improvements.
## Consequences
We expect to reduce the amount of writes to the object storage. This is expected to improve:
- operational costs on cloud providers
- performance improvement
- latency reduction under load
As id persistence in StoredBlobIdsList will be done once the blob successfully saved, inconsistencies in StoredBlobIdsList
will lead to duplicated saved blobs, which is the current behaviour.
=====================================================
== File: src/adr/0017-file-mail-queue-deprecation.md
=====================================================
# 17. FileMailQueue deprecation
Date: 2019-12-04
## Status
Accepted (lazy consensus) & removed
## Context
James offers several implementation for MailQueue, a component allowing asynchronous mail processing upon smtp mail
reception. These includes:
- Default embedded ActiveMQ mail queue implementation, leveraging the JMS APIs and using the filesystem.
- RabbitMQMailQueue allowing several James instances to share their MailQueue content.
- And FileMailQueue directly leveraging the file system.
We introduced a junit5 test contract regarding management features, concurrency issues, and FileMailQueue do not meet this
contract. This results in some tests being disabled and in an unstable test suite.
FileMailQueue tries to implement a message queue within James code, which does not really makes sense as some other projects
already provides one.
## Decision
Deprecate FileMailQueue components.
Disable FileMailQueue tests.
Target a removal as part of 3.6.0.
## Consequences
FileMailQueue is not exposed to the end user, be it over Spring or Guice, the impact of this deprecation + removal should
be limited.
We also expect our test suite to be more stable.
## Reference
Issues listing FileMailQueue defects:
- https://issues.apache.org/jira/browse/JAMES-2298 Unsupported remove management feature
- https://issues.apache.org/jira/browse/JAMES-2954 Incomplete browse implementation + Mixing concurrent operation might lead to a deadlock and missing fields
- https://issues.apache.org/jira/browse/JAMES-2979 dequeue is not thread safe
=====================================================
== File: src/adr/0020-cassandra-mailbox-object-consistency.md
=====================================================
# 20. Cassandra Mailbox object consistency
Date: 2020-02-27
## Status
Accepted (lazy consensus) & implemented
## Context
Mailboxes are denormalized in Cassandra in order to access them both by their immutable identifier and their mailbox
path (name):
- `mailbox` table stores mailboxes by their immutable identifier
- `mailboxPathV2` table stores mailboxes by their mailbox path
We furthermore maintain two invariants on top of these tables:
- **mailboxPath** unicity. Each mailbox path can be used maximum once. This is ensured by writing the mailbox path first
using Lightweight Transactions.
- **mailboxId** unicity. Each mailbox identifier is used by only a single path. We have no real way to ensure a given mailbox
is not referenced by two paths.
Failures during the denormalization process will lead to inconsistencies between the two tables.
This can lead to the following user experience:
```
BOB creates mailbox A
Denormalization fails and an error is returned to A
BOB retries mailbox A creation
BOB is being told mailbox A already exist
BOB tries to access mailbox A
BOB is being told mailbox A does not exist
```
## Decision
We should provide an offline (meaning absence of user traffic via for exemple SMTP, IMAP or JMAP) webadmin task to
solve mailbox object inconsistencies.
This task will read `mailbox` table and adapt path registrations in `mailboxPathV2`:
- Missing registrations will be added
- Orphan registrations will be removed
- Mismatch in content between the two tables will require merging the two mailboxes together.
## Consequences
As an administrator, if some of my users reports the bugs mentioned above, I have a way to sanitize my Cassandra
=====================================================
== File: src/adr/0047-jmap-push-over-websockets.md
=====================================================
# 47. JMAP PUSH over WebSockets
Date: 2021-01-26
## Status
Accepted (lazy consensus).
Implemented.
Relates to [45. Support JMAP Push with Mailbox/changes implementation](0045-support-jmap-push-with-mailbox-changes-implementation.md)
Requires [46. Generalize EventBus](0046-generalize-event-bus.md)
## Context
JMAP Push notifications allow clients to efficiently update (almost) instantly to stay in sync with data changes on the server.
In order to support this, we need to have the server emit newest state changes to the client over a PUSH channel.
## Decision
We will implement [RFC-8887 - A JSON Meta Application Protocol (JMAP) Subprotocol for WebSocket](https://tools.ietf.org/html/rfc8887)
as a transport mechanism for PUSH notifications.
We will [generalize EventBus](0046-generalize-event-bus.md) in order to achieve an out-of-the box Publish-Subscribe
system for JMAP related events, that does not fit in the mailbox API.
We will implement listeners registered on the JMAP event bus for WebSocket clients in order to carry over state changes
to the client.
## Consequences
We expect clients using the PUSH to lead to a drastic performance enhancement, as less data needs to be transmitted upon
resynchronisation.
As mentioned in RFC-8887 the usage of webSockets allows other performance optimizations:
- Requests can easily be compressed, which is not doable over HTTP for most available implementation (HTTP request
compression is not ubiquitous).
- WebSockets being connected, authentication can be performed once, when establishing the connection. This can allow to
reduce the load, if needed, on authentication systems. It might ease the use for instance of custom OpenId connect
providers.
People deploying JMAP need to be aware that load-balancing webSockets requires session stickiness.
## Sequence
1. Bob authenticates against the `ws://` endpoints. Upgrade to websockets is granted.
2. Bob registers Email and Mailbox updates. A listener listens for state changes related to Bob account.
3. Bob receives a mail. The MailboxManager adds it to Bob's mailbox. An `Added` event is fired on the mailbox event bus.
=====================================================
== File: src/adr/0009-disable-elasticsearch-dynamic-mapping.md
=====================================================
# 9. Disable ElasticSearch dynamic mapping
Date: 2019-10-10
## Status
Accepted (lazy consensus) & implemented
## Context
We rely on dynamic mappings to expose our mail headers as a JSON map. Dynamic mapping is enabled for adding not yet encountered headers in the mapping.
This causes a serie of functional issues:
- Maximum field count can easily be exceeded
- Field type 'guess' can be wrong, leading to subsequent headers omissions [1]
- Document indexation needs to be paused at the index level during mapping changes to avoid concurrent changes, impacting negatively performance.
## Decision
Rely on nested objects to represent mail headers within a mapping
## Consequences
The index needs to be re-created. Document reIndexation is needed.
This solves the aforementionned bugs [1].
Regarding performance:
- Default message list performance is unimpacted
- We noticed a 4% performance improvment upon indexing throughput
- We noticed a 7% increase regarding space per message
## References
- [1]: https://github.com/linagora/james-project/pull/2726 JAMES-2078 Add an integration test to prove that dynamic mapping can lead to ignored header fields
- [JIRA](https://issues.apache.org/jira/browse/JAMES-2078)
* [PR discussing this ADR](https://github.com/apache/james-project/pull/171)
=====================================================
== File: src/adr/0006-task-serialization.md
=====================================================
# 6. Task serialization
Date: 2019-10-02
## Status
Accepted (lazy consensus) & implemented
## Context
By switching the task manager to a distributed implementation, we need to be able to execute a `Task` on any node of the cluster.
We need to have a way to describe the `Task` to be executed and serialize it in order to be able to store it in the `Created` event. Which will be persisted in the Event Store, and will be send in the event bus.
At this point in time a `Task` can contain any arbitrary code. It's not an element of a finite set of actions.
## Decision
* Create a `Factory` for one `Task`
* Inject a `Factory` `Registry` via a Guice Module
* The `Task` `Serialization` will be done in JSON, We will get inspired by `EventSerializer`
* Every `Task`s should have a specific integration test demonstrating that serialization works
* Each `Task` is responsible of eventually dealing with the different versions of the serialized information
## Consequences
* Every `Task`s should be serializable.
* Every `Task`s should provide a `Factory` which would be responsible to deserialize the task and instantiate it.
* Every `Factory` should be registered through a Guice module to be created for each project containing a `Factory`
## References
* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)
=====================================================
== File: src/adr/0057-reactive-imap.md
=====================================================
# 57. Reactive IMAP
Date: 2022-09-13
## Status
Accepted (lazy consensus).
Implemented.
## Context
Classic java programming involves doing some blocking calls. When performing some input-output, the
thread performing the tasks at hand will hang until a response is received. This means that a server
performing IOs, which is the case of James, would end up with a high number of threads: for an IMAP
server, one IMAP request in flight equals one thread.
The widely documented issue with such an approach is that, in Java threads correspond to system threads,
and are expensive. Typically, each thread takes up to ~1MB of memory. To cap the count of threads at
hand, the Thread Pool model is used to cap the count of threads. Process at most N IMAP requests with
N threads, and queue requests that cannot yet be handled.
The blocking thread pool model was the concurrency paradigm used by James IMAP implementation in 3.7.x.
Reactive programming instead does not perform blocking operation, thus one thread can handle several
IO tasks. This can be seen as callbacks executed once the request is received. Reactive programming model,
amongst others, leads to efficient resource usage. It helps keeping the count of applicative threads
low, helps reduce context switches.
James have been, among the past few years, transitioning to a reactive programming model using the
Reactor library. Migrated components involves:
- Cassandra/Distributed storage
- JMAP protocol stacks
- Some (webadmin) tasks also relies on Reactor
It is to be noted that our IMAP network stack uses Netty 4.x library that allows handling requests
asynchronously.
## Decision
Migrate IMAP to a reactive model.
Implement a way to limit IMAP concurrency to protect James server from bursts.
## Consequences
Significant rewrite of the IMAP stack.
Going reactive on the IMAP stacks yields the following improvements:
- Reduced thread count. IMAP request handling can now be dealt with from the Netty IO threads.
=====================================================
== File: src/adr/0051-oidc.md
=====================================================
# 51. Integrate James with OIDC
Date: 2021-12-06
## Status
Accepted (lazy consensus).
Implemented.
Complemented by [ADR-62](0062-oidc-token-introspection.md).
## Context
Authentication is a critical item regarding security. The overall internet community have been refining authentication
standards in order to improve overall safety. We can mention here
[OIDC standard](https://openid.net/specs/openid-connect-core-1_0.html), based on OAUTH, that
[RFC-7628](https://datatracker.ietf.org/doc/html/rfc7628) allows applying on IMAP and SMTP.
Regarding HTTP applications (including JMAP clients) the industry commonly requires "Single Sign On" and "Single Log
Out" features.
Nowadays, James only supports plain auth for IMAP, SMTP. In JMAP, we do support HTTP basic authentication, and a set of
custom authentication methods, one being based on custom JWT. None matches the constraints mentioned above.
We believe having more control on authentication methods, and the option to choose state-of-the-art authentication
methods would ultimately increase the overall security of the James server and ease adoption.
## Decision
Provide OIDC integration for the following email protocols: IMAP, SMTP, JMAP.
Regarding JMAP, we propose ourselves to make authentication methods extensible and configurable. We will provide a
simple authentication method blindly following the value of the `X-User` header. This would allow us to configure an
API gateway in front of James and delegate it the OIDC management.
Regarding IMAP and SMTP we will implement RFC-7628 within James. We will validate the validity of the Authorization
Bearer token against the public exposed by the JWKS endpoint.
We will document such a setup, and provide a working example under the form of a docker-compose using
[Keycloack](https://www.keycloak.org/) as an OIDC provider and [Krakend](https://www.krakend.io/) as an API gateway.
We will allow configuring and un-configuring any of the configuration mechanism. For instance, it will be possible to
operate an OIDC-only James server.
## Consequences
The `X-User` authentication mechanism should be enabled with care as it allows the API gateway to bypass authentication
with the James server. Given such an OIDC setup, an attacker gaining direct access to the James server would trivially
access user accounts. Client headers propagation furthermore needs to be done with care.
=====================================================
== File: src/adr/0019-reactor-netty-adoption.md
=====================================================
# 19. Reactor-netty adoption for JMAP server implementation
Date: 2020-02-28
## Status
Accepted (lazy consensus) & implemented
## Context
After adopting the last specifications of JMAP (see
[new JMAP specifications adoption ADR](https://github.com/apache/james-project/blob/master/src/adr/0018-jmap-new-specs.md)),
it was agreed that we need to be able to serve both `jmap-draft` and the new `jmap` with a reactive server.
The current outdated implementation of JMAP in James is currently using a non-reactive [Jetty server](https://www.eclipse.org/jetty/).
There are many possible candidates as reactive servers. Among the most popular ones for Java:
* [Spring](https://spring.io)
* [Reactor-netty](https://github.com/reactor/reactor-netty)
* [Akka HTTP](https://doc.akka.io/docs/akka-http/current/introduction.html)
* ...
## Decision
We decide to use `reactor-netty` for the following reasons:
* It's a reactive server
* It's using [Reactor](https://projectreactor.io/), which is the same technology that we use in the rest of our codebase
* Implementing JMAP does not require high level HTTP server features
## Consequences
* Porting current `jmap-draft` to use a `reactor-netty` server instead of a Jetty server
* The `reactor-netty` server should serve as well the new `jmap` implementation
* We will be able to refactor and get end-to-end reactive operations for JMAP, unlocking performance gains
## References
* JIRA: [JAMES-3078](https://issues.apache.org/jira/browse/JAMES-3078)
* JMAP new specifications adoption ADR: https://github.com/apache/james-project/blob/master/src/adr/0018-jmap-new-specs.md
=====================================================
== File: src/adr/0054-elasticsearch-search-overrides.md
=====================================================
# 54. ElasticSearch search overrides
Date: 2022-05-16
## Status
Accepted (lazy consensus).
Implemented.
## Context
IMAP SEARCH requests can of course be used for user searches. But many applications (eg Samsung email client) also uses
IMAP SEARCH for resynchronization.
The use of ElasticSearch in the context of resynchronization is a problem as:
- Resynchronization incurs many requests that ElasticSearch is not made to cope with.
- This has a performance impact, and some 60+ seconds can be spotted.
- ElasticSearch indexing is asynchronous which is not ideal for resynchronization
- An ElasticSearch downtime would imply a full downtime for these clients.
Those resynchronization queries would better be served by the metadata database
## Decision
Define an API, `SearchOverride` that can be called on matching search queries and thus offload ElasticSearch.
Provide an extension mechanism for search overrides, where potentially custom implementations can be loaded from the
configuration.
Provide well targeted `SearchOverride`, implemented on top of `Cassandra` database.
## Consequences
We expect to :
- Observe less IMAP SEARCH slow requests
- ElasticSearch downtime should not impact IMAP clients using IMAP SEARCH like IMAP Samsung application
- Thus also be able to support a higher IMAP workload as Cassandra is more suited to resynchronisation requests
## Sample IMAP requests
```
SearchOperation{key=SearchKey{type=TYPE_UID, date=null, size=0, value=null, seconds=-1, modSeq=-1, uids=[IdRange : TYPE: FROM UID: MessageUid{uid=1}:MessageUid{uid=9223372036854775807}], sequences=null, keys=Optional.empty}, options=[]}
```
```
SearchOperation{key=SearchKey{type=TYPE_AND, date=null, size=0, value=null, seconds=-1, modSeq=-1, uids=null, sequences=null, keys=Optional[[
=====================================================
== File: src/adr/0040-quality-levels-definitions.md
=====================================================
# 40. Quality levels definition
Date: 2020-06-21
## Status
Accepted (lazy consensus)
## Context
We hereby define as an artifact compiled artifact that external people consumes. This includes:
- libraries
- Mail servers
- Extensions for James Mail Servers
- Command line tools
We designate as a feature an optional, opt-in behaviour of a James server that can be configured by
user willing to rely on it.
James as a project delivers several artifacts, and features. In order for project users to better
understand the underlying quality of the artifact they use, as well as the level of risk associated,
we need to better define some quality levels.
## Decision
For a given artifact or feature, by **mature** we mean that:
- *interfaces* in components need a contract test suite
- *interfaces* have several implementations
- *implementation* of these interfaces need to pass this contract test suite which provides unit tests
- Decent integration tests coverage is needed
- Performance tests need to be conducted out
- Quality Assurance with external clients needs to be conducted out
- known existing production deployments/usages
- usable documentation
This is the maximum quality level delivered by the James project. Users should feel confident using these
artifacts or features.
By **experimental** we designate an artifact or feature not matching yet the above requirements. However some
active contributors are willing to raise the quality level of this component, and eventually make it
mature. Or at least are willing to support users.
Users should have low expectations regarding experimental artifacts or features. They are encouraged to contribute to them
in order to raise its quality.
By **unsupported** we mean that an artifact or feature do not match most of the *mature* quality conditions. Active
contributors do not feel confident delivering support for it. This artifact or feature might be deprecated and
removed from future James releases. Users are strongly encouraged to contribute to the artifact development.
=====================================================
== File: src/adr/0056-opensearch-migration.md
=====================================================
# 56. OpenSearch migration
Date: 2022-08-11
## Status
Accepted (lazy consensus).
Implemented.
Migration from OpenSearch high-level-rest-client to OpenSearch rest-client remains to be done.
## Context
James distributed server historically uses ElasticSearch software to empower search features. As off Apache James
3.7.0, we relied on ElasticSearch 7.10.
However, [ElasticSearch changed their licenses terms](https://www.elastic.co/pricing/faq/licensing), both for the servers
and driver libraries, choosing the SSPL (Server Side Public License), a [non-OSI compliant license](https://opensource.org/node/1099).
As such, this clashes from a requirement for Apache projects to rely on ASF v2 compatible client libraries. Similarly,
requiring a non-free software as a dependency would have been allowed but is a clear infringement to the ASF philosophy
when free-er alternatives are available.
Alternative forks have emerged from ElasticSearch 7.10, one could mention
[Open Distro for ElasticSearch](https://opendistro.github.io/for-elasticsearch/) which was renamed
[OpenSearch](https://opensearch.org/), whose 1.x release line is fully compatible with ElasticSearch 7.10 driver,
meaning that Apache James 3.7.0 users can use OpenSearch as an alternative to OpenSearch.
However, to fix security issues in its dependencies, we need to upgrade the ElasticSearch driver, which cannot be done
without license infringement and hurting OpenSearch compatibility.
Similarly, OpenSearch 2.x introduces subtle differences that makes its driver no longer compatible with ElasticSearch 7.10.
## Decision
Switch to OpenSearch drivers and fully adopt OpenSearch as the search backend for the Distributed James server.
First, conduct the easy migration toward OpenSearch high-level-rest-client (with dependencies to the whole openSearch
eco-system), then conduct the more expensive migration to the rest-client (only dependencies to an http client and JSON
parsing libraries).
## Consequences
Users are expected to deploy and use OpenSearch. Configuration need to be adapted too.
Users will not be able to use James Distributed server on top of ElasticSearch product anymore.
## Alternatives
Not upgrading exposes us to security vulnerabilities and as such is not an option.
=====================================================
== File: src/adr/0042-james-cli-based-on-webadmin.md
=====================================================
# 42. James CLI based on webadmin API
Date: 2020-10-05
## Status
Accepted (lazy consensus).
Partially implemented.
## Context
James servers offer a command-line interface in order to interact with the server. However, it relies on the JMX protocol, which is known to be insecure. The JMX server embedded in Apache James, also used by the command line client is exposed to a java de-serialization issue according to [NVD-CVE-2017-12628 Detail](https://nvd.nist.gov/vuln/detail/CVE-2017-12628), and thus can be used to execute arbitrary commands.
Besides, the current CLI interface is also not optimal for users. It places actions in front of entities with contiguous syntax, making it harder for the user to remember the command (for example, which entity the GET action command can interact with). If we design to place the entity first and the outgoing actions can interact with that entity afterward, the user will easily imagine what he/she can do with each entity. This creates an intuitive interface that is easier to remember.
Webadmin APIs use HTTP protocol, which is more secure than JMX protocol to interact with James servers.
Webadmin command-line interface is an upcoming replacement for the outdated, security-vulnerable JMX command-line interface.
## Decision
We decided to write a new CLI client, running on top of the JVM, communicating with James via the webadmin protocol, using http.
* What libraries will we use?
* http client: ***Feign library***. We used it as an http client in other parts of James so we continue to use it.
* CLI: ***Picocli library***. Picocli is a one-file command line parsing framework written in Java that allows us to create command line applications with almost no code. It allows mixing Options with positional Parameters (Eg: no need to the follow order Options then Parameters), [automatic type conversion](https://picocli.info/#_strongly_typed_everything) of command line arguments to the type of the annotated field, provide Automatic Help and better Subcommand Support, easily handle Exceptions.
* How will we limit breaking changes this new CLI will cause?
* Work on a wrapper to adapt the old CLI API.
* Where will we locate this cli code?
* server/protocols/webadmin-cli
* Write a man page.
* Picocli generates beautiful documentation for our CLI (HTML, PDF and Unix man pages).
* We decided to adopt a more modern, modular CLI syntax:
```
$ ./james-cli [OPTION] ENTITY ACTION {ARGUMENT}
```
where
OPTION: optional parameter when running the command line,
=====================================================
== File: src/adr/0003-distributed-workqueue.md
=====================================================
# 3. Distributed WorkQueue
Date: 2019-10-02
## Status
Accepted (lazy consensus) & implemented
Superceded by [16. Distributed WorkQueue](0016-distributed-workqueue.md)
## Context
By switching the task manager to a distributed implementation, we need to be able to run a `Task` on any node of the cluster.
## Decision
For the time being we will keep the sequential execution property of the task manager.
This is an intermediate milestone toward the final implementation which will drop this property.
* Use a RabbitMQ queue as a workqueue where only the `Created` events are pushed into.
This queue will be exclusive and events will be consumed serially. Technically this means the queue will be consumed with a `prefetch = 1`.
The queue will listen to the worker on the same node and will ack the message only once it is finished (`Completed`, `Failed`, `Cancelled`).
## Consequences
* It's a temporary and not safe to use in production solution: if the node promoted to exclusive listener of the queue dies, no more tasks will be run
* The serial execution of tasks does not leverage cluster scalability.
## References
* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)
=====================================================
== File: src/adr/0009-java-11-migration.md
=====================================================
# 9. Migration to Java Runtime Environment 11
Date: 2019-10-24
## Status
Accepted & implemented
## Context
Java 11 is the only "Long Term Support" java release right now so more and more people will use it exclusively.
James is known to build with Java Compiler 11 for some weeks.
## Decision
We adopt Java Runtime Environment 11 for James as a runtime to benefits from a supported runtime and new features
of the languages and the platform.
## Consequences
* It requires the upgrade of Spring to 4.3.x.
* All docker images should be updated to adoptopenjdk 11.
* The documentation should be updated accordingly.
## References
* [Mailing list thread](https://www.mail-archive.com/server-dev@james.apache.org/msg62611.html)
* [Mailing list thread](https://www.mail-archive.com/server-dev@james.apache.org/msg61335.html)
* [PR discussing this ADR](https://github.com/apache/james-project/pull/171)
=====================================================
== File: src/adr/0065-changing-username.md
=====================================================
# 65. Changing username
Date: 2023-03-17
## Status
Accepted (lazy consensus).
Implemented.
## Context
Changing username is a desired feature for an email server. It is a common practice especially when a user marries or divorces. For example:
Alice MARTINEZ have an email address `alice.martinez@domain.tld` and gets married to Bob ERNANDEZ. She thus wants to
change her email address to `alice.ernandez@domain.tld` while preserving her email data.
Nowadays, James uses username as an identifier for user data. Therefore, this feature is hard to implement because of changing
directly identifier to another value is difficult and could break data consistency if we do not do it carefully.
## Decision
We decided to do changing username with two steps: first, create new username, then migrate the old user's data to the new account -
the way we expect that is less dangerous to current data consistency. The data in the old account need to be truncated after migrating to the new account.
For the data migration step, we decided to form it under a webadmin task with a modular design. A big data migration task contains
many small tasks that implement `UsernameChangeTaskStep` interface. This modular design for migration steps could help developers easier
to manage/test each step, and help other tailor James servers can implement their own steps as well.
Today, implemented migration steps are:
- `ForwardUsernameChangeTaskStep`: creates forward from the old user to the new user and migrates existing forwards
- `FilterUsernameChangeTaskStep`: migrates users filtering rules
- `DelegationUsernameChangeTaskStep`: migrates delegations where the impacted user is either delegatee or delegator
- `MailboxUsernameChangeTaskStep`: migrates mailboxes belonging to the old user to the account of the new user. It also
migrates users' mailbox subscriptions.
- `ACLUsernameChangeTaskStep`: migrates ACLs on mailboxes the migrated user has access to and updates subscriptions accordingly.
We introduce `fromStep` query parameter that allows skipping previous steps, allowing the operator to resume the username change from a failed step.
This option could ease operators in case the data migration fails in the middle.
## Consequences
- Add one more useful feature to James rich feature set: Users can change their name while preserving their email data.
- Modular design for changing username is extension friendly for tailor James servers.
- Users would be aware that they have a new account through a new username/password. No implicit migration without user attention is archived today.
- JMAP Identity data is not migrated because they are tightly coupled to the old username, users should create identities again themselves.
- Some data considered not critical like Push subscription, Vacation response,... are not migrated today. Contributions for them are welcome.
## Alternatives
We could have another choice for implementing this topic: create an account identifier not linked directly to the username (e.g a hash value points to a username),
so changing the pointer value would be easier than changing the pointer itself. However, that approach has two great concerns:
- Huge refactoring/breaking change is required: nowadays username as an identifier is used everywhere in tables schema and code.
=====================================================
== File: src/adr/0025-cassandra-blob-store-cache.md
=====================================================
# 25. Cassandra Blob Store Cache
Date: 2020-04-03
## Status
Accepted (lazy consensus) & implemented
Supercedes [14. Add storage policies for BlobStore](0014-blobstore-storage-policies.md)
## Context
James exposes a simple BlobStore API for storing raw data. However such raw data often vary in size and access patterns.
As an example:
- Mailbox message headers are expected to be small and frequently accessed
- Mailbox message body are expected to have sizes ranging from small to big but are unfrequently accessed
- DeletedMessageVault message headers are expected to be small and unfrequently accessed
The access pattern of some of these kind of blobs does not fit Object Storage characteristics: good at storing big blobs, but
it induces high latencies for reading small blobs. We observe latencies of around 50-100ms while Cassandra latency is of 4ms.
This gets some operations slow (for instance IMAP FETCH headers, or listing JMAP messages).
## Decision
Implement a write through cache to have better read latency for smaller objects.
Such a cache needs to be distributed in order to be more efficient.
Given that we don't want to introduce new technologies, we will implement it using Cassandra.
The cache should be implemented as a key-value table on a dedicated 'cache' keyspace, with a replication factor of 1,
and be queried with a consistency level of ONE.
We will leverage a configurable TTL as an eviction policy. Cache will be populated upon writes and missed read, if the
blob size is below a configurable threashold. We will use the TimeWindow compaction strategy.
Failure to read the cache, or cache miss will result in a read in the object storage.
## Consequences
Metadata queries are expected not to query the object storage anymore.
[Performance tests](https://github.com/linagora/james-project/pull/3031#issuecomment-572865478) proved such strategies
to be highly effective. We expect comparable performance improvements compared to an un-cached ObjectStorage blob store.
HybridBlobStore should be removed.
=====================================================
== File: src/adr/0029-Cassandra-mailbox-deletion-cleanup.md
=====================================================
# 29. Cassandra mailbox deletion cleanup
Date: 2020-04-12
## Status
Accepted (lazy consensus) & implemented
## Context
Cassandra is used within distributed James product to hold messages and mailboxes metadata.
Cassandra holds the following tables:
- mailboxPathV2 + mailbox allowing to retrieve mailboxes informations
- acl + UserMailboxACL hold denormalized information
- messageIdTable & imapUidTable allow to retrieve mailbox context information
- messageV2 table holds message metadata
- attachmentV2 holds attachments for messages
- References to these attachments are contained within the attachmentOwner and attachmentMessageId tables
Currently, the deletion only deletes the first level of metadata. Lower level metadata stay unreachable. The data looks
deleted but references are actually still present.
Concretely:
- Upon mailbox deletion, only mailboxPathV2 & mailbox content is deleted. messageIdTable, imapUidTable, messageV2,
attachmentV2 & attachmentMessageId metadata are left undeleted.
- Upon mailbox deletion, acl + UserMailboxACL are not deleted.
- Upon message deletion, only messageIdTable & imapUidTable content are deleted. messageV2, attachmentV2 &
attachmentMessageId metadata are left undeleted.
This jeopardize efforts to regain disk space and privacy, for example through blobStore garbage collection.
## Decision
We need to cleanup Cassandra metadata. They can be retrieved from dandling metadata after the delete operation had been
conducted out. We need to delete the lower levels first so that upon failures undeleted metadata can still be reached.
This cleanup is not needed for strict correctness from a MailboxManager point of view thus it could be carried out
asynchronously, via mailbox listeners so that it can be retried.
## Consequences
Mailbox listener failures lead to eventBus retrying their execution, we need to ensure the result of the deletion to be
idempotent.
## References
- [JIRA](https://issues.apache.org/jira/browse/JAMES-3148)
=====================================================
== File: src/adr/0064-account-delegation.md
=====================================================
# 64. Account Delegation
Date: 2022-11-15
## Status
Accepted (lazy consensus).
Implemented.
## Context
The account delegation is a feature that gives another permission to access your account.
The user that had been granted access begin accessing that account then read, send, respond to, and delete email messages... on your behalf.
This feature is useful for VIP (who have secretaries), admins, etc...
James currently supports account delegation in IMAP / SMTP through SASL OIDC as well as SASL AUTH PLAIN (https://github.com/apache/james-project/blob/master/src/adr/0061-delegation.md)
Current now James support `urn:apache:james:params:jmap:mail:shares extension`, but it only affects the mailbox scope.
## Decision
Based on DelegationStore API, provide a James specific JMAP extension for managing delegation.
- Provide JMAP methods:
- Delegate/get: list email addresses can the user access
- Delegate/set (create/delete): please note that only the owner of the account should be able to interact with the delegation settings
+ Delegate my account to other people
+ Revoke delegation of my account on another person's account (revoke a right given to me)
+ Revoke delegation of another people's account on my account (revoke a right given to others)
- DelegatedAccount/get: the method for getting delegated accounts
- DelegatedAccount/set-delete: the method for delete delegated account
JMAP endpoints should support being called with accountIds of delegated accounts and needs to proceed authorization logic according to delegations.
## Consequences
The account delegation will help owner and delegated account:
- Multi-users can use a shared account
- Can give different limited access to each user
- Bring some commonly expected collaborative features
- We would need a way to "list accounts delegated to me" in the delegation store. We could use Cassandra LOGGED batch to keep this eventually consistent
- The mailboxSession needs to cary over information regarding logged-in user to allow restricting access to the delegation JMAP methods to only the account owner.
## References
- [JIRA](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3756)
- [JMAP Sharing](https://datatracker.ietf.org/doc/draft-ietf-jmap-sharing/)
- [James Delegation](https://github.com/apache/james-project/blob/master/src/adr/0061-delegation.md)
=====================================================
== File: src/adr/0046-generalize-event-bus.md
=====================================================
#46. Generalize EventBus
Date: 2020-06-11
## Status
Implemented, used for JMAP notifications, however not yet used on top of the user entity as
described in this document.
## Context
User email storage usage is limited both in size and count via quotas (IMAP RFC-2087). In order to ease administrating large user bases, the quota search extension allows administrator
to retrieve all users whose email usages are exceeding a given occupation ratio.
When searching for users by quota ratio if we set the value of the parameters to 0, for example: `/quotas/users?minOccupationRatio=0&maxOccupationRatio=0`, the search feature is supposed to return newly created users
who have not received any email yet at that point. However, this is not the case because the quotas are currently being initialized only after
a user has received the first email.
We need to initialize user quotas upon user creation time. The problem is: there is currently no event at user creation
and since the quota-search feature is a plugin of James, it cannot be hardwired into the domain logic of user management to initialize the quota for a just created user.
## Decision
For quota-search to be initialized/removed for a given user while keeping this feature as a plugin, we decided to adopt the Event Driven pattern we already use in Mailbox-api.
We can create new events related to user management (UserCreated, UserRemoved and so on).
To achieve that, we will extract the EventBus out of mailbox-api in order to make it a utility component (eventbus-api), then we will make both mailbox-api and data-api depend on that new module.
## Consequences
Mailbox-api would leverage the EventBus to keep exposing the mailbox-listener-api without changes on top of the generified EventBus. We need to define a common Event interface in eventbus-api,
then each EventBus usage will define its own sealed event hierarchy implementing Event.
DeadLetter storage needs to be reworked in order to store events of various EventBus separately (which is needed for knowing which EventBus the event should be reprocessed on
and knowing which sealed hierarchy an event belongs to.)
As a consequence, we will need a Cassandra data migration to add the EventBus name as part of the EventDeadLetter primary key.
We could rely on the EventBus reliability for building any feature in James.
=====================================================
== File: src/adr/0001-record-architecture-decisions.md
=====================================================
# 1. [JAMES-2909] Record architecture decisions
Date: 2019-10-02
## Status
Proposed
## Context
In order to be more community-oriented, we should adopt a process to have a structured way to have open architectural decisions.
Using an Architectural Decision Records-based process as a support of discussion on the developers mailing-lists.
## Decision
We will use Architecture Decision Records, as [described by Michael Nygard](https://web.archive.org/web/20190824074401/http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions).
Each ADR will be discussed on the Apache James' developers mailing-list before being accepted.
Following [Apache Decision Making process](https://community.apache.org/committers/decisionMaking.html), we provide the following possible status, with their associated meaning:
- `Proposed`: The decision is being discussed on the mailing list.
- `Accepted (lazy consensus)` : the architecture decision was proposed on the mailing list, and a consensus emerged from people involved in the discussion on the mailing list.
- `Accepted (voted)` : the architecture undergo a voting process.
- `Rejected` : Consensus built up against that proposal.
## Consequences
See Michael Nygard's article, linked above. For a lightweight ADR toolset, see Nat Pryce's [adr-tools](https://github.com/npryce/adr-tools).
We should provide in a mutable `References` section links to related JIRA meta-ticket (not necessarily to all related sub-tickets) as well as a link to the mail archive discussion thread.
JIRA tickets implementing that architecture decision should also link the related Architecture Decision Record.
## References
* [JAMES-2909](https://jira.apache.org/jira/browse/JAMES-2909)
* [PR discussing this ADR](https://github.com/apache/james-project/pull/166)
=====================================================
== File: src/adr/0034-mailbox-api-visibility-and-usage.md
=====================================================
# 34. Mailbox API visibility and usage
Date: 2020-04-27
## Status
Accepted (lazy consensus) & implemented
## Context
All mailboxes implementations rely on `mailbox-store` module that defines some common tools to implement the `mailbox-api`
(representing the API defining how to use a mailbox).
For example, a `CassandraMailboxmanager` has to extend `StoreMailboxManager` (that implements `Mailboxmanager` from the
`mailbox-api`) that requires the implementation of some `Mapper`s.
`Mapper`s are designed to provide low-level functions and methods on mailboxes. It's recurrent that we are tempted in
James, outside of the `mailbox` modules, to rely on some of those common tools located in `mailbox-store` to have an
easier access on some user's mailboxes or messages.
Like for example, using a `Mapper` outside to be able to retrieve a message with only its `MessageId`, which is not
currently possible at the `Manager`'s level, which tends to violate `mailbox-api`'s role and primary mission.
As a matter of fact, we have currently such uses of `mailbox-store` in James:
* `mailbox-adapter` because `Authenticator` and `Authorizator` are part of the `mailbox-store`
The manager layer do further validation including right checking, event dispatching (resulting in message search index
indexing, current quota calculation mainly), quota validation. Not relying on the manager layer is thus error prone
and can lead to security vulnerabilities.
## Decision
We should never rely on classes defined in `mailbox-store` outside of the `mailbox` modules (except on some cases
limited to the test scope). The right way would be to always rely on the `Manager`s defined in `mailbox-api` module to
access mailboxes and messages, as the `mailbox-api` module defines the API on how to use a mailbox.
We should ensure the correctness of `Manager`s implementations by providing contract tests and not by sharing abstract
classes.
Regarding the modules wrongly relying already on `mailbox-store`, we can:
* `mailbox-adapter`: move `Authenticator` and `Authorizator` to `mailbox-api`
## Consequences
We need to introduce some refactorings to be able to rely fully on `mailbox-api` in new emerging cases. For example,
our `mailbox-api` still lacks APIs to handle messages by their MessageId. It
creates some issues for rebuilding a single message fast view projection, or the reindexation of a single message.
=====================================================
== File: src/adr/0018-jmap-new-specs.md
=====================================================
# 18. New JMAP specifications adoption
Date: 2020-02-06
## Status
Accepted (lazy consensus) & partially implemented
## Context
Historically, James has been an early adopter for the JMAP specification, and a first partial implementation was conducted when JMAP was just a draft.
But with time, the IETF draft went with radical changes and the community could not keep this implementation up to date with the spec changes.
As of summer 2019, JMAP core ([RFC 8620](https://tools.ietf.org/html/rfc8620)) and JMAP mail ([RFC 8621](https://tools.ietf.org/html/rfc8621)) have been officially published.
Thus we should implement these new specifications to claim JMAP support.
We need to keep in mind though that part of the community actively relies on the actual 'draft' implementation of JMAP existing in James.
## Decision
We decided to do as follow:
* Rename packages `server/protocols/jmap*` and guice packages `server/container/guice/protocols/jmap*` to `jmap-draft`. `JMAPServer` should also be renamed to `JMAPDraftServer` (this has already been contributed [here](https://github.com/apache/james-project/pull/164), thanks to @cketti).
* Port `jmap-draft` to be served with a reactive technology
* Implement a JMAP meta project to select the JMAP version specified in the accept header and map it to the correct implementation
* Create a new `jmap` package
* Implement the new JMAP request structure with the [echo](https://jmap.io/spec-core.html#the-coreecho-method) method
* Implement authentication and session of the new JMAP protocol
* Implement protocol-level error handling
* Duplicate and adapt existing mailbox methods of `jmap-draft` to `jmap`
* Duplicate and adapt existing email methods of `jmap-draft` to `jmap`
* Duplicate and adapt existing vacation methods of `jmap-draft` to `jmap`
* Support uploads/downloads
Then when we finish to port our existing methods to the new JMAP specifications, we can implement these new features:
* Accounts
* Identities
* EmailSubmission
* Push and queryChanges
* Threads
We decided to support `jmap` on top of memory-guice and distributed-james products for now.
We should ensure no changes is done to `jmap-draft` while implementing the new `jmap` one.
Regarding the versioning in the accept headers:
* `Accept: application/json;jmapVersion=draft` would redirect to `jmap-draft`
* `Accept: application/json;jmapVersion=rfc-8621` would redirect to `jmap`
=====================================================
== File: src/adr/0035-distributed-listeners-configuration.md
=====================================================
# 35. Distributed Mailbox Listeners Configuration
Date: 2020-04-23
## Status
Proposed
Supercedes [26. Removing a configured additional MailboxListener](0026-removing-configured-additional-mailboxListeners.md)
Not implemented yet.
## Context
James enables a user to register additional mailbox listeners.
The distributed James server is handling mailbox event processing (mailboxListener execution) using a RabbitMQ work-queue
per listener.
Mailbox listeners can be registered to be triggered every time an event is generated by user interaction with their
mailbox. They are being executed in a distributed fashion following the workqueue messaging pattern. The "group" is an
attribute of the mailbox listener identifying to which work queue they belong.
More information about this component can be found in [ADR 0036](0037-eventbus.md).
Currently, mailbox listeners are determined by the guice bindings of the server and additional mailbox listeners defined
via configuration files.
While the configuration might be specific for each James server, what actually is defined in RabbitMQ is common.
Heterogeneous configuration might then result in unpredictable RabbitMQ resource status. This was left as a limitation
of [26. Removing a configured additional MailboxListener](0026-removing-configured-additional-mailboxListeners.md).
## Decision
We need to centralize the definition of mailbox listeners.
An event sourcing system will track the configured mailbox listeners.
It will have the following commands:
- **AddListener**: Add a given listener. This should be rejected if the group is already used.
- **RemoveListener**: Remove a given listener.
Configuration changes are not supported. The administrator is expected to remove the given listener, then add it again.
It will have the following events:
- **ListenerAdded**: A mailbox listener is added
- **ListenerRemoved**: A mailbox listener is removed
=====================================================
== File: src/adr/0062-oidc-token-introspection.md
=====================================================
# 62. OIDC token introspection
Date: 2022-09-13
## Status
Accepted (lazy consensus).
Implemented.
Complements [ADR 51](0051-oidc.md).
## Context
[ADR 51](0051-oidc.md) describes work required for OIDC adoption within James.
This work enables the uses of an OIDC access token to authenticate using IMAP and SMTP.
It validates the signature of the token using cryptographic materials exposes by the
Identity Provider server through the mean of a JWKS endpoint. Yet no effort is made to
see if the access token in question was revoked or not, which can pause a security threat.
OIDC ecosystem can support the following mechanisms to determine if an access token had been
revoked:
- Use of an introspection endpoint: the application asks the OIDC server to validate the token
through an HTTP call. This result in load on the identity provider, which becomes central to the
authentication process. This can be assimilated to a 'synchronous' mode.
- Use of back-channel upon token revocation. The OIDC provider is then responsible to call an
applicative endpoint to invalidate a token. Invalidated tokens are then stored by the application
and access token are challenged against that storage. This approach scales better yet is harder
to implement and can be seen as less secure (a network incident can prevent revoked token
propagation to applications for instance). This can be seen as an 'asynchronous' mode.
Also, we need to keep in mind that OIDC validation is only done upon establishing the connection in
IMAP/SMTP (as they are connected protocols) which defers from stateless protocols like HTTP. Performance
impact of token introspection is thus lower for connected protocols.
## Decision
Allow opt-in use of an introspection endpoint to further secure IMAP/SMTP OIDC implementation.
## Consequences
Security gains for the IMAP/SMTP OIDC implementation in James.
## References
- [JIRA JAMES-3755](https://issues.apache.org/jira/browse/JAMES-3755)
- [RFC-7628](https://www.rfc-editor.org/rfc/rfc7628.html) SASL OATH mechanism for SMTP and IMAP: https://datatracker.ietf.org/doc/html/rfc7628
- [RFC-7662](https://datatracker.ietf.org/doc/html/rfc7662) OAUTH token introspection
=====================================================
== File: src/adr/0041-replace-jcloud-with-s3.md
=====================================================
# 41. Replace JCloud-based ObjectStorage backend with AWS-S3 SDK backend
Date: 2020-02-11
## Status
Accepted (lazy consensus) & implemented
Adoption had been backed by some performance tests.
## Context
James has an interface called blob-store that allows to choose how Blobs are stored between several implementations.
For Distributed product, the default backend is Cassandra because it's fast and it doesn't require yet another
server.
When storage cost concerns are more important than raw performances, James can store Blobs in S3 or Swift
Object Storage technologies.
Object Storage is known to be cheap and yet offers guarantee about durability.
When we implemented Object Storage blob-store in the past, we decided to implement it with
[Apache jcloud library](https://jclouds.apache.org/) because we wanted to target both S3 and Swift API.
However, we found that our implementation was complex and it didn't fit the Reactive style we now have in the codebase.
It also contribute negatively to the project build time.
At the same time, we figured out Swift was providing a good compatibility layer for S3 and that we may drop
our Swift code without dropping Swift support at the same time.
## Decision
* Use AWS S3 v2 SDK to implement a Reactive S3 blob-store (`blobstore-s3`).
* Replace current `blob-store-objectstorage` with `blobstore-s3`
* Run load tests to ensure there's no penalty when switching from Swift to S3 over Swift
## Consequences
* We have to document carefully how to transition from `blob-store-objectstorage` with `blobstore-s3` in the
configuration and how to handle existing data
* We need to work on a new implementation of blob encryption.
## References
* [JAMES](https://issues.apache.org/jira/browse/JAMES-3028)
* [Pull request tree](https://github.com/linagora/james-project/pull/3773)
=====================================================
== File: src/adr/0036-against-use-of-conditional-statements-in-guice-modules.md
=====================================================
# 36. Against the use of conditional statements in Guice modules
Date: 2019-12-29
## Status
Accepted (lazy consensus) & implemented
## Context
James products rely historically on Spring for dependency injection. It doesn't use last major Spring version (4.x instead of 5.x).
James uses Spring in a way that enables overriding any class via a configuration file thus endangering overall correctness by giving too much
power to the user.
James proposes several implementations for each of the interfaces it defines. The number of possible combinations of
implementations is thus really high (like factorial(n) with n > 10). It makes it unpractical to run tests for each
possible component combination. We run integration tests for combinations that we decide brings the more value to
the users. Spring product defeats this testing logic
by allowing the user arbitrary classes combination, which is likely not being tested.
Instead of having a single product allowing all component combination, we rather have
several products each one exposing a single component combination. Components are defined by code in a static fashion.
We thus can provide a decent level of QA for these products. Overriding components requires explicit code modification
and recompilation, warning the user about the impact of the choices he does, and lowering the project's responsibility.
Guice had been enacted as a way to reach that goal.
With Guice we expose only supported, well tested combinations of components, thus addressing the combination issue.
Spring application often bring dependencies conflicts, for example between Lucene and ElasticSearch
components, leading to potential runtime or compile time issues. Instead of having a single big application being able
to instantiate each and every component application, we have several products defining their dependencies in a
minimalistic way, relying only on the components implementation that are needed.
Here is the list of products we provide:
- In-Memory: A memory based James server, mainly for testing purposes
- Distributed James: A scalable James server, storing data in various data stores. Cassandra is used for metadata,
ElasticSearch for search, RabbitMQ for messaging, and ObjectStorage for blobs.
- Cassandra: An implementation step toward Distributed James. It does not include messaging and ObjectStorage and
should not be run in a cluster way but is still relevant for good performance.
- JPA: A JPA and Lucene based implementation of James. Only Derby driver is currently supported.
- JPA with SMTP only using Derby: A minimalist SMTP server based on JPA storage technology and Derby driver
- JPA with SMTP only using MariaDB: A minimalist SMTP server based on JPA storage technology and MariaDB driver
Some components however do have several implementations a user can choose from in a given product. This is the case for:
- BlobExport: Exporting a blob from the blobStore to an external user. Two implementations are currently supported:
localFiles and LinShare.
- Text extraction: Extracting text from attachment to enable attachment search. There is a Tika implementation, but
lighter JSOUP based, as well as no text extraction options are also available.
=====================================================
== File: src/adr/0011-remove-elasticsearch-document-source.md
=====================================================
# 11. Disable ElasticSearch source
Date: 2019-10-17
## Status
Rejected
The benefits do not outweigh the costs.
## Context
Though very handy to have around, the source field does incur storage overhead within the index.
## Decision
Disable `_source` for ElasticSearch indexed documents.
## Consequences
Given a dataset composed of small text/plain messages, we notice a 20% space reduction of data stored on ElasticSearch.
However, patch updates can no longer be performed upon flags updates. Upon flag update we need to fully read the mail
content, then mime-parse it, potentially html parse it, extract attachment content again and finally index again the full
document.
Without `_source` field, flags update is two times slower, 99 percentile 4 times slower, and this impact negatively other
requests.
Note please that `_source` allows admin flexibility like performing index level changes without downtime, amongst others:
- Increase shards
- Modifying replication factor
- Changing analysers (IE allows an admin to configure FR analyser instead of EN analyser)
## References
- https://www.elastic.co/guide/en/elasticsearch/reference/6.3/mapping-source-field.html
- [JIRA](https://issues.apache.org/jira/browse/JAMES-2906)
- [PR discussing this ADR](https://github.com/apache/james-project/pull/171)
=====================================================
== File: src/adr/0059-upgrade-to-cassadra-driver-4.md
=====================================================
# 59. Upgrade to Cassandra driver 4
Date: 2022-09-13
## Status
Accepted (lazy consensus).
Implemented.
## Context
Cassandra driver 3 latest release took pace in 201X. An outdated dependency pauses a security risk.
Moreover Cassandra driver 4:
- Have prime reactive support and do not need to pass through an intermediate "CompletableFuture"
representation which is more optimised.
- In Cassandra driver 3, paging is blocking. Handling paging the reactive way means we do not
need to aggressively switch the processing to an elastic thread, which helps keeping the count of
threads low.
- Cassandra driver 4 has built in support for advanced driver configuration tuning without the
need for the application to programmatically configure the driver. This means great flexibility without
the need for the application to proxy the driver configuration parameters.
## Decision
Upgrade James to Cassandra driver 4.
Handle Cassandra requests callbacks on the Cassandra driver thread.
## Consequences
We expect a performance enhancement for native reactive support from the Cassandra driver, as well
as a better thread handling which translate to improved latencies/throughput.
This code change needs a rewrite of all the Cassandra data access layer.
Associated risk:
- Blocking on the Cassandra driver thread is prohibited. Tools like Blockhound can be adapted to
mitigate this.
- Blocking a Cassandra request from within a Cassandra driver thread result in a request timeout.
- Long running computation should be switched to other threads as it can prevent other Cassandra
requests from being executed.
Mechanisms related to Cassandra driver configuration will need to be reworked. This leads to a breaking
change but our Cassandra driver configuration will be simpler and more standard.
## References
- [JIRA JAMES-3774](https://issues.apache.org/jira/browse/JAMES-3774)
=====================================================
== File: src/adr/0071-postgresql-mailbox-tables-structure.md
=====================================================
# 71. Postgresql Mailbox tables structure
Date: 2023-12-14
## Status
Implemented
## Context
As described in [ADR-70](link), we are willing to provide a Postgres implementation for Apache James.
The current document is willing to detail the inner working of the mailbox of the target implementation.
## Decision

Table list:
- mailbox
- mailbox_annotations
- message
- message_mailbox
- subscription
Indexes in table message_mailbox:
- message_mailbox_message_id_index (message_id)
- mailbox_id_mail_uid_index (mailbox_id, message_uid)
- mailbox_id_is_seen_mail_uid_index (mailbox_id, is_seen, message_uid)
- mailbox_id_is_recent_mail_uid_index (mailbox_id, is_recent, message_uid)
- mailbox_id_is_delete_mail_uid_index (mailbox_id, is_deleted, message_uid)
Indexes are used to find records faster.
The table structure is mostly normalized which mitigates storage costs and achieves consistency easily.
Foreign key constraints (mailbox_id in mailbox_annotations, message_id in message_mailbox) help to ensure data consistency. For example, message_id 1 in table message_mailbox could not exist if message_id 1 in table message does not exist
For some fields, hstore data type are used. Hstore is key-value hashmap data structure. Hstore allows us to model complex data types without the need for complex joins.
Special postgres clauses such as RETURNING, ON CONFLICT are used to ensure consistency without the need of combining multiple queries in a single transaction.
## Consequences
Pros:
- Indexes could increase query performance significantly
Cons:
- Too many indexes in a table could reduce the performance of updating data in the table
## Alternatives
=====================================================
== File: src/adr/0016-distributed-workqueue.md
=====================================================
# 16. Distributed WorkQueue
Date: 2019-12-03
## Status
Accepted (lazy consensus) & implemented
Supercedes [3. Distributed WorkQueue](0003-distributed-workqueue.md)
## Context
By switching the task manager to a distributed implementation, we need to be able to run a `Task` on any node of the cluster.
## Decision
For the time being we will keep the sequential execution property of the task manager.
This is an intermediate milestone toward the final implementation which will drop this property.
* Use a RabbitMQ queue as a workqueue where only the `Created` events are pushed into.
Instead of using the brittle exclusive queue mechanism described in [3. Distributed WorkQueue](0003-distributed-workqueue.md), we will
now use the natively supported [Single Active Consumer](https://www.rabbitmq.com/consumers.html#single-active-consumer) mechanism.
## Consequences
* This solution is safer to use in production: if the active consumer dies, an other one is promoted instead.
* This change needs RabbitMQ version to be at least 3.8.0.
* The serial execution of tasks still does not leverage cluster scalability.
## References
* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)
* [PR discussing this ADR](https://github.com/apache/james-project/pull/259)
=====================================================
== File: src/adr/0052-pulsar-mailqueue.md
=====================================================
# 52. Pulsar MailQueue
Date: 2022-01-07
## Status
Accepted (lazy consensus).
Implemented.
Provides an alternative to [ADR-31 Distributed MailQueue (RabbitMQ + Cassandra)](0031-distributed-mail-queue.md).
## Context
### Mail Queue
MailQueue is a central component of SMTP infrastructure allowing asynchronous mail processing. This enables a short
SMTP reply time despite a potentially longer mail processing time. It also works as a buffer during SMTP peak workload
to not overload a server.
Furthermore, when used as a Mail Exchange server (MX), the ability to add delays being observed before dequeing elements
allows, among others:
- Delaying retries upon MX delivery failure to a remote site.
- Throttling, which could be helpful for not being considered a spammer.
A mailqueue also enables advanced administration operations like traffic review, discarding emails, resetting wait
delays, purging the queue, etc.
### Existing distributed MailQueue
Distributed James currently ships a distributed MailQueue composing the following software with the following
responsibilities:
- **RabbitMQ** for messaging. A rabbitMQ consumer will trigger dequeue operations.
- A time series projection of the queue content (order by time list of mail metadata) will be maintained in **Cassandra** .
Time series avoid the aforementioned tombstone anti-pattern, and no polling is performed on this projection.
- **ObjectStorage** (Swift or S3) holds large byte content. This avoids overwhelming other software which do not scale
as well in term of Input/Output operation per seconds.
This implementation suffers from the following pitfall:
- **RabbitMQ** is hard to reliably operate in a cluster. Cluster queues were only added in the 3.8 release line. Consistency
guaranties for exchanges are unclear.
- The RabbitMQ Java driver is boiler plate and error prone. Things like retries,
exponential back-offs, dead-lettering do not come out of the box. Publish confirms are tricky. Blocking calls are
often performed. The driver is not cluster aware and would operate connected to a single host.
- The driver reliability is questionable: we experienced some crashed consumers that are never restarted.
- Throughput and scalability of RabbitMQ is questionable.
- The current implementation does not support priorities, delays.
=====================================================
== File: src/adr/0014-blobstore-storage-policies.md
=====================================================
# 14. Add storage policies for BlobStore
Date: 2019-10-09
## Status
Accepted
Adoption had been backed by some performance tests, as well as data repartition between Cassandra and object storage shifts.
## Context
James exposes a simple BlobStore API for storing raw data. However such raw data often vary in size and access patterns.
As an example:
- Mailbox message headers are expected to be small and frequently accessed
- Mailbox message body are expected to have sizes ranging from small to big but are unfrequently accessed
- DeletedMessageVault message headers are expected to be small and unfrequently accessed
Also, the capabilities of the various implementations of BlobStore have different strengths:
- CassandraBlobStore is efficient for small blobs and offers low latency. However it is known to be expensive for big blobs. Cassandra storage is expensive.
- Object Storage blob store is good at storing big blobs, but it induces higher latencies than Cassandra for small blobs for a cost gain that isn't worth it.
Thus, significant performance and cost ratio refinement could be unlocked by using the right blob store for the right blob.
## Decision
Introduce StoragePolicies at the level of the BlobStore API.
The proposed policies include:
- SizeBasedStoragePolicy: The blob underlying storage medium will be chosen depending on its size.
- LowCostStoragePolicy: The blob is expected to be saved in low cost storage. Access is expected to be unfrequent.
- PerformantStoragePolicy: The blob is expected to be saved in performant storage. Access is expected to be frequent.
An HybridBlobStore will replace current UnionBlobStore and will allow to choose between Cassandra and ObjectStorage implementations depending on the policies.
DeletedMessageVault, BlobExport & MailRepository will rely on LowCostStoragePolicy. Other BlobStore users will rely on SizeBasedStoragePolicy.
Some performance tests will be run in order to evaluate the improvements.
## Consequences
We expect small frequently accessed blobs to be located in Cassandra, allowing ObjectStorage to be used mainly for large costly blobs.
In case of a less than 5% improvement, the code will not be added to the codebase and the proposal will get the status 'rejected'.
We expect more data to be stored in Cassandra. We need to quantify this for adoption.
=====================================================
== File: src/adr/0008-distributed-task-await.md
=====================================================
# 8. Distributed Task await
Date: 2019-10-02
## Status
Accepted (lazy consensus) & implemented
## Context
By switching the task manager to a distributed implementation, we need to be able to `await` a `Task` running on any node of the cluster.
## Decision
* Broadcast `Event`s in `RabbitMQ`
## Consequences
* `RabbitMQTaskManager` should broadcast termination `Event`s (`Completed`|`Failed`|`Canceled`)
* `RabbitMQTaskManager.await` should: first, check the `Task`'s state; and if it's not terminated, listen to RabbitMQ
* The await should have a timeout limit
## References
* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)
=====================================================
== File: src/adr/0053-email-rate-limiting.md
=====================================================
# 53. Email rate limiting
Date: 2021-01-10
## Status
Accepted (lazy consensus).
Implemented.
## Context
Rate limiting is one of the common features expected from an email system. Examples: SaaS is
one https://www.fastmail.help/hc/en-us/articles/1500000277382-Account-limits#sending/receiving
, https://support.google.com/mail/answer/22839
They limit how many emails users can send/receive from/to each email account over a given period of time.
We believe the rate-limiting will help James to have more benefits:
- Control of the resources
- Easy to configure dynamically the user policy.
- Complements the storage quota
- Can be a security requirement for SaaS deployments.
- Minimise impacts of Open-relay types of compression.
- Limiting the amount of emails sent to third parties can also prevent them from considering you as an open relay and can
be beneficial as well.
## Decision
Set up a new maven project dedicated to rating limiting. This allows the rate limiting mailets to be embedded in a James
server as a soft dependency using the external-jar loading mechanism. Please note that this will take the form of an
extension jar, that could be dropped in one's James installation, and thus is optional, and not a runtime dependency.
Rate limiting will be enabled per sender, per receiver and globally. For each we will provide options for email size and
email count.
- This can be done via mailets:
- PerSenderRateLimit is per sender
- PerRecipientRateLimit is per recipient
- GlobalRateLimit is for everyone. Depending on the position in the pipeline this could allow rate limiting all emails in
transit, relayed emails or locally delivered emails.
The rate limit will be configured
in [mailetcontainer.xml](/server/apps/distributed-app/sample-configuration/mailetcontainer.xml).
- Those mailets will be based on a generic RateLimiter interface. We will propose two implementations for it:
- In memory implementation: suitable for single instance deployments.
- [Redis](https://redis.io) based implementation: suitable for distributed deployments.
We will base on [RateLimitJ](https://github.com/mokies/ratelimitj) to provide the implementation.
It is a Java library for rate limiting, assembled using extensible storage (Redis) and application framework adaptors.
=====================================================
== File: src/adr/0013-precompute-jmap-preview.md
=====================================================
# 13. Precompute JMAP Email preview
Date: 2019-10-09
## Status
Accepted (lazy consensus) & implemented
## Context
JMAP messages have a handy preview property displaying the firsts 256 characters of meaningful test of a message.
This property is often displayed for message listing in JMAP clients, thus it is queried a lot.
Currently, to get the preview, James retrieves the full message body, parse it using MIME parsers, removes HTML and keep meaningful text.
## Decision
We should pre-compute message preview.
A MailboxListener will compute the preview and store it in a MessagePreviewStore.
We should have a Cassandra and memory implementation.
When the preview is precomputed then for these messages we can consider the "preview" property as a metadata.
When the preview is not precomputed then we should compute the preview for these messages, and save the result for later.
We should provide a webAdmin task allowing to rebuild the projection. The computing and storing in MessagePreviewStore
is idempotent and the task can be run in live without any concurrency problem.
Some performance tests will be run in order to evaluate the improvements.
## Consequences
Given the following scenario played by 2500 users per hour (constant rate)
- Authenticate
- List mailboxes
- List messages in one of their mailboxes
- Get 8 times the properties expected to be fast to fetch with JMAP
We went from:
- A 7% failure and timeout rate before this change to almost no failure
- Mean time for GetMessages went from 9 710 ms to 434 ms (22 time improvment), for all operation from
12 802 ms to 407 ms (31 time improvment)
- P99 is a metric that did not make sense because the initial simulation exceeded Gatling (the performance measuring tool
we use) timeout (60s) at the p95 percentile. After this proposal p99 for the entire scenario is of 1 747 ms
As such, this changeset significantly increases the JMAP performance.
=====================================================
== File: src/adr/0067-quota-for-jmap-uploads.md
=====================================================
# 67. Quota for JMAP uploads
Date: 2023-08-17
## Status
Accepted (lazy consensus).
Implemented.
Overrides [ADR-48 Cleaup JMAP uploads](0048-cleanup-jmap-uploads.md).
## Context
The [JMAP] protocol offers a distinct API to upload blobs, that can later be referenced when creating emails. The
specification mentions that implementers `SHOULD` enforce a quota for this use case. For security reason this quota is
set by user, and exceeded his quota should result in older data being deleted.
Apache James currently do not implement limitations on data being uploaded by users, meaning that authenticated user can
essentially store unlimited amount of binary data. This is especially problematic for deployments whose users can be
attackers (eg SAAS).
## Decision
Implement quota for JMAP uploads. We need a generic interface for JMAP upload quota current values that existing
implementation can implement.
Store current values on a per user basis. Current value is increased upon uploads, and decreased when a blob is deleted.
Limit is set globally via the JMAP configuration. Default value: 10MB.
## Consequences
Improved security for SaaS operation.
Storing such values in Cassandra incurs a cost as it needs extra tables. The count of tables shall be limited (memory and
operational overhead per table.) We plan complementary work to expose a technical Cassandra storage interface for quota,
that can be used to implement arbitrary quota-like use cases.
Cassandra counters that would be used to keep track of users current space usage are easy to get out of synchronisation
(namely because of counters consistency level ONE usage and non-idempotence causing the driver not to retry failed
updates). We thus need a corrective task in order to recompute the current values.
Care needs to be taken with concurrency. Given the nature of the quota, we expect data races (because 100MB of storage
space is not much, exceeding the quota should be considered a regular operation. Clients uploading files parallely might
trigger data races upon older data deletion). In practice this means:
- Be eventually consistent and cleanup data after the upload returns as upfront quota validation with JMAP upload
constraints on to of Cassandra counter data model is especially prone to data races
- Upon cleanup, free at least 50% of the space: this would decrease the frequency of updates
- Expose a configurable probability of recomputing the upload quota
=====================================================
== File: src/adr/0028-Recompute-mailbox-quotas.md
=====================================================
# 28. Recompute mailbox quotas
Date: 2020-04-03
## Status
Accepted (lazy consensus) & implemented
## Context
JMAP custom quota extension, as well as IMAP [RFC-2087](https://tools.ietf.org/html/rfc2087) enables a user to monitor
the amount of space and message count he is allowed to use, and that he is effectively using.
To track the quota values a user is effectively using, James relies on the
[eventBus](../site/markdown/server/manage-guice-distributed-james.md#mailbox-event-bus) to increment a Cassandra counter
corresponding to this user.
However, upon Cassandra failure, this value can be incorrect, hence the need of correcting it.
## Data model details
Table: imapUidTable: Holds mailbox and flags for each message, lookup by message ID
Table: messageV2: Holds message metadata, independently of any mailboxes. Content of messages is stored in `blobs`
and `blobparts` tables.
Table: currentQuota: Holds per quota-root current values. Quota-roots defines groups of mailboxes which share quotas
limitations.
Operation:
- Quota updates are done asynchronously (event bus + listener) for successful mailbox operations.
- If the quota update is not applied, then we are inconsistent
- EventBus errors are retried upon errors, counters being non-indempotent, this can result in inconsistent quotas
## Decision
We will implement a generic corrective task exposed via webadmin.
This task can reuse the `CurrentQuotaCalculator` and call it for each and every quotaRoot of each user.
This way, non-Cassandra implementation will also benefit from this task.
## Consequences
This task is not concurrent-safe. Concurrent operations will result in an invalid quota to be persisted.
However, as the source of truth is not altered, re-running this task will eventually return the correct result.
## References
=====================================================
== File: src/adr/0070-postgresql-adoption.md
=====================================================
# 70. Native PostgreSQL adoption
Date: 2023-10-31
## Status
Accepted (lazy consensus).
Not implemented yet.
## Context
Today, Apache James is mostly developed towards [the Distributed variant](https://james.staged.apache.org/james-distributed-app/3.8.0/index.html)
which targets big enterprises/organizations with a big and scalable deployment.
Meanwhile, there are still great needs for small/medium mail server deployments in the market.
However, nowadays, Apache James is not really great at serving that small/medium deployments. Obviously, Distributed James with the shiny big data
technologies like Apache Cassandra, OpenSearch, RabbitMQ... is too costly for that size of deployment. JPA James should be the feasible variant that
could fit those deployments. Despite the JPA implementation allowing to deploy James on top of various popular RDBMS which is useful, JPA with the
Object Relational Mapping nature which makes optimizing SQL queries hard and a backed JDBC blocking driver is usually a bad fit for applications requiring high performance like a mail server.
Besides that, JPA as an abstraction layer prevents James from using advanced features of a given RDBMS e.g. search engine, or blob storage...
From a development aspect, bad developing experience with JPA also limited James community from contributing more to JPA James e.g. JMAP is not supported for JPA James.
It has been [a long-term desire of the James community](https://issues.apache.org/jira/browse/JAMES-2586) to have a James variant that fit small/medium deployments without relying on JPA.
## Decision
We would implement a PostgresSQL-specific backend.
PostgreSQL is a rock-solid well-known, proven, and mature open source relational database with great adoption on the market.
Besides a traditional SQL database, PostgreSQL could serve as [a blob storage](https://www.postgresql.org/docs/current/largeobjects.html), [a search engine](https://www.postgresql.org/docs/current/textsearch.html) and [a message queue](https://www.postgresql.org/docs/current/sql-notify.html).
We would start implementing James mailbox backed by PostgreSQL:
- We implement it step by step on a feature branch of James called `postgresql`.
- We start from a copy of JPA modules into new Postgres ones, then migrate code step by step from JPA to Postgresql implementation. This means that during the dev process, both JPA and Postgresql implementation will cohabit until we finally get rid of the JPA code.
- The [r2dbc-postgresql](https://github.com/pgjdbc/r2dbc-postgresql) reactive client would be used, alongside [jOOQ](https://www.jooq.org/) (which supports `r2dbc-postgresql` under the hood) for higher level SQL queries.
- We at first would start with a simple connection pool implementation: 1 fixed Postgresql connection per domain.
The connection pool implementation could be backed by [r2dbc-pool](https://github.com/r2dbc/r2dbc-pool).
- Row Level Security usage would be optional, which enforces strict tenant isolation: domain A won't access domain B data even if we screw up James access control layer.
- We would need to do some benchmarks along the road to prove the gains we get from the Postgres implementation compared to the JPA one.
Once the Postgres mailbox implementation is stable, we will continue to invest in using Postgres on other blocks:
- Blob storage implementation
- Full-text search implementation
- Message queue implementation
## Consequences
=====================================================
== File: src/adr/0022-cassandra-message-inconsistency.md
=====================================================
# 22. Cassandra Message inconsistencies
Date: 2020-02-27
## Status
Accepted (lazy consensus) & implemented
## Context
Messages are denormalized in Cassandra in order to:
- access them by their unique identifier (messageId), for example through the JMAP protocol
- access them by their mailbox identifier and Unique IDentifier within that mailbox (mailboxId + uid), for example
through the IMAP protocol
Here is the table organisation:
- `messageIdTable` Holds mailbox and flags for each message, lookup by mailbox ID + UID
- `imapUidTable` Holds mailbox and flags for each message, lookup by message ID
Failures during the denormalization process will lead to inconsistencies between the two tables.
This can lead to the following user experience:
```
BOB receives a message
The denormalization process fails
BOB can read the message via JMAP
BOB cannot read the message via IMAP
BOB marks a message as SEEN
The denormalization process fails
The message is SEEN in JMAP
The message is UNSEEN in IMAP
```
### Current operations
- Adding a message:
- (CassandraMessageMapper) First reference the message in `messageIdTable` then in `imapUidTable`.
- (CassandraMessageIdMapper) First reference the message in `imapUidTable` then in `messageIdTable`.
- Deleting a message:
- (CassandraMessageMapper) First delete the message in `imapUidTable` then in `messageIdTable`.
- (CassandraMessageIdMapper) Read the message metadata using `imapUidTable`, then first delete the message in
`imapUidTable` then in `messageIdTable`.
- Copying a message:
- (CassandraMessageMapper) Read the message first, then first reference the message in `messageIdTable` then
in `imapUidTable`.
- Moving a message:
=====================================================
== File: src/adr/0005-distributed-task-termination-ackowledgement.md
=====================================================
# 5. Distributed Task termination ackowledgement
Date: 2019-10-02
## Status
Accepted (lazy consensus) & implemented
## Context
By switching the task manager to a distributed implementation, we need to be able to execute a `Task` on any node of the cluster.
We need a way for nodes to be signaled of any termination event so that we can notify blocking clients.
## Decision
* Creating a `RabbitMQEventHandler` which publish `Event`s pushed to the task manager's event system to RabbitMQ
* All the events which end a `Task` (`Completed`, `Failed`, and `Canceled`) have to be transmitted to other nodes
## Consequences
* A new kind of `Event`s should be created: `TerminationEvent` which includes `Completed`, `Failed`, and `Canceled`
* `TerminationEvent`s will be broadcasted on an exchange which will be bound to all interested components later
* `EventSourcingSystem.dipatch` should use `RabbitMQ` to dispatch `Event`s instead of triggering local `Listener`s
* Any node can be notified when a `Task` emits a termination event
## References
* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)
=====================================================
== File: src/adr/0033-use-scala-in-event-sourcing-modules.md
=====================================================
# 33. Use scala in event sourcing modules
Date: 2019-12-13
## Status
Accepted (lazy consensus) & implemented
## Context
At the time being James use the scala programming language in some parts of its code base, particularily for implementing the Distributed Task Manager,
which uses the event sourcing modules.
The module `event-store-memory` already uses Scala.
## Decision
What is proposed here, is to convert in Scala the event sourcing modules.
The modules concerned by this change are:
- `event-sourcing-core`
- `event-sourcing-pojo`
- `event-store-api`
- `event-store-cassandra`
## Rationales
This will help to standardize the `event-*` modules as `event-store-memory` is already written in Scala.
This change will avoid interopability concerns with the main consumers of those modules which are already written in Scala: see the distributed task manager.
In the long run this will allow to have a stronger typing in those parts of the code and to have a much less verbose code.
## Consequences
We will have to mitigate the pervading of the Scale API in the Java code base by implementing Java facade.
## References
* [JIRA](https://issues.apache.org/jira/browse/JAMES-3009)
=====================================================
== File: src/adr/0061-delegation.md
=====================================================
# 61. Delegation
Date: 2022-09-13
## Status
Accepted (lazy consensus).
Implemented.
## Context
Delegation is a common feature for email servers:
```
As user A I want to access mailbox of user B.
```
James currently supports a similar feature called impersonation:
```
As an administrator I want to acces mailbox of user B.
```
Impersonation can for instance be used to perform migrations with tools like IMAP-Sync.
## Decision
Implement delegation in Apache James (opt in).
Reuse APIs used for impersonation to also back delegation up. Technically if user B delegates his
account to user A then user A can impersonate user B.
Stored delegated access in a Cassandra database and expose it through webadmin.
Support delegation while logging in IMAP/SMTP. Both LOGIN/PLAIN authentication and OIDC
authentication are supported.
## Consequences
Logging traces belongs to the target user and not the user that really authenticated
though an intermediate log upon logging should allow a correlation.
Associated risk:
- Special care needs to be paid to delegation as it can fall into the `improper authorization`
attack class and might result in data leaks / modification / deletion. However, as delegation
is performed upon logging the attack surface is limited, and typically simpler than traditional
right management systems.
## Follow-up work
=====================================================
== File: src/adr/0071-objectstorage-sse-c.md
=====================================================
# 71. SSE-C for S3 Object Storage
Date: 2024-11-15
## Status
Accepted (lazy consensus)
## Context
To enhance data security for users, Apache James currently supports client-side encryption through AESBlobStoreDAO. However, this solution consumes significant CPU resources for encryption and decryption, impacting overall system performance. Moreover, it pushes synchronous concepts like `InputStream` into an otherwise reactive interface.
Some object storage providers offer Server-Side Encryption with Customer-provided keys (SSE-C), where users supply their own encryption keys, while the service performs encryption and securely stores the data.
## Decision
We have decided to integrate SSE-C option for James S3 Object Storage implement.
James will manage the master key and salt, using them to create customer keys when calling S3 APIs, such as PUT, GET, and HEAD on objects.
In order to provide the customer key, we have made it an interface to allow for potential variations in key and salt derivation. The default implementation will be:
- Single customer key: A single master key and salt will be used across all objects in the system. These values will be configured in the configuration file, similar to the current `AESBlobStoreDAO` approach.
The current library (`awssdk s3`), fully supports the required APIs for this feature, enabling seamless integration of SSE-C without any compatibility issues.
Enabling SSE-C is fully optional. By default, it is disabled and requires configuration changes to activate, allowing users to retain their existing configuration without enabling SSE-C automatically.
## Consequences
### Benefits
- Potential Performance Improvement: SSE-C leverages S3’s security capabilities, potentially reducing CPU load on James servers by offloading encryption and decryption tasks to S3.
- Security: Provides robust security without fully shifting encryption to the client or to S3 alone.
### Limitations
- Data Migration Challenges: Currently, S3 APIs do not support migrating encrypted data from AESBlobStoreDAO (client-side encryption) to the new SSE-C endpoint.
- Replication: Some object storage provider does not support bucket replication when enable SSE-C. Eg: OVH Object Storage, S3-Minio only support from version 2024-03-30.
- SSE-C may be considered less secure than AESBlobStoreDAO (Client-Side Encryption) because the encryption key must be provided to the S3 service for encryption and decryption operations. Even if the S3 storage provider do not persist the keys.
## Alternatives
- Continue using client-side encryption with AESBlobStoreDAO.
- Using SSE-S3 (Server-Side Encryption with S3-managed keys) for enhanced security eliminates the need for client-side key management. However, this trade-off means SSE-S3 relies entirely on Object storage provider for key management, which may not satisfy stricter security or compliance requirements.
## References
- [AWS SSE-C Documentation](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html)
=====================================================
== File: src/adr/0045-support-jmap-push-with-mailbox-changes-implementation.md
=====================================================
# 45. Support JMAP Push with Mailbox/changes implementation
Date: 2020-12-08
## Status
Accepted (lazy consensus).
Implemented.
## Context
JMAP Push notifications allow clients to efficiently update (almost) instantly to stay in sync with data changes on the server.
In order to support this, we need to handle the **state** property that comes with JMAP get/set request. This means that James needs to be able
to record a new state for objects whenever a change happens as well as return the most recent state to the client when fetching objects.
First step is to implement Mailbox/changes.
## Decision
We will implement a mechanism to record all the changes happening to Mailbox objects in the form of a list of **mailboxId**. When an event such as
created/updated/destroyed occur, or when message is appended to a mailbox we will store their **mailboxIds** along with a **state** object
in a Cassandra table.
Each state will have a list of changes, and all the **mailboxId** will be stored as separated lists corresponding to the change which they represent: **created**, **updated**, **destroyed**.
For the case when messages are appended to a mailbox, it will be counted as an updated event and that mailboxId should be stored in **updated** list.
Leveraging the **MailboxChanges** table, we can now fetch all the changes that have occurred since a particular **state**.
States are stored in Cassandra as time based UUID (**TimeUUID**). This ensures that no conflicting changes will happen in the case when two or more events occur at the same point in time.
**TimeUUID** also allows **state** to be sorted in chronological order.
Components that need to be implemented:
- MailboxChangesRepository: Allows storing and fetching the **state** along with the lists of **mailboxId** in **MailboxChanges** table.
- MailboxChangeListener: Listens to changes and triggers the record creation in **MailboxChanges** table.
- MailboxChangeMethod: Handles the **state** property, allowing client to fetch the changes since a particular state.
- MailboxSetMethod/MailboxGetMethod needs to query the MailboxChangesRepository for their states properties.
## Example of a Mailbox/changes request/response
**Request**
```
[["Mailbox/changes", {
"accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
"sinceState": "dd3721a6-b3ee-4884-8762-fccc0c576438"
}, "t0"]]
```
=====================================================
== File: src/adr/0010-enable-elasticsearch-routing.md
=====================================================
# 10 Enable ElasticSearch routing
Date: 2019-10-17
## Status
Accepted (lazy consensus) & implemented
Additional performance testing is required for adoption.
## Context
Our queries are mostly bounded to a mailbox or a user. We can easily
limit the number of ElasticSearch nodes involved in a given query by
grouping the underlying documents on the same node using a routing key.
Without a routing key, each shard needs to execute the query. The coordinator
needs also to be waiting for the slowest shard.
Using the routing key unlocks significant throughput enhancement (proportional
to the number of shards) and also a possible high percentile latency enhancement.
As most requests are restricted to a single coordination, most search requests will
hit a single shard, as opposed to non routed searches which would have hit each shards
(each shard would return the number of searched documents, to be ordered and limited
again in the coordination node). This allows to be more linearly scalable.
## Decision
Enable ElasticSearch routing.
Messages should be indexed by mailbox.
Quota Ratio should be indexed by user.
## Consequences
A data reindex is needed.
On a single ElasticSearch node with 5 shards, we noticed latency reduction for mailbox search (2x mean time and 3x 99
percentile reduction)
## References
- https://www.elastic.co/guide/en/elasticsearch/reference/6.3/mapping-routing-field.html
- [JIRA](https://issues.apache.org/jira/browse/JAMES-2917)
- [PR discussing this ADR](https://github.com/apache/james-project/pull/171)
=====================================================
== File: protocols/smtp/src/test/resources/a50.eml
=====================================================
Subject: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Message-ID: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
X-Sender: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
User-Agent: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
=====================================================
== File: server/README.crypto
=====================================================
This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See <http://www.wassenaar.org/> for more information.
The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache Software Foundation distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.
The following provides more details on the included cryptographic software:
Apache James Server uses third party cryptography software including
bcjmail and bcprov libraries by "The Legion of the Bouncy Castle" http://www.bouncycastle.org,
jasypt library by "Jasypt.org" http://www.jasypt.org/
and the Java Runtime Environment.
=====================================================
== File: server/queue/queue-pulsar/README.adoc
=====================================================
= Apache James Pulsar MailQueue
This project offers an implementation of the james mailqueue backed by https://pulsar.apache.org/[apache pulsar].
== Overview
This implementation honors both
- MailQueue
- ManageableMailQueue.
== Implementation notes
=== Reactive
The implementation is built on top of reactive streams and is therefore natively reactive. The blocking dequeue semantics are achieved by an explicit await on the reactive version of the method.
=== Storage
Pulsar is not well suited to store arbitrarily large messages. Since email sizes can quickly inflate, especially with attachments, we chose to store the actual content of the mail in a blob storage of some kind, while only storing metadata in Pulsar.
When browsing or dequeueing, the implementation will fetch the corresponding blob and combine it with the necessary metadata to rebuild the whole mail.
The initial implementation stores both MimeMessage and headers in separate storages. This can definitely be improved to store the whole blob in one place and simplify the read logic (both dequeue and browse)
=== Remove
We chose to implement the storage and distribution of the removals through a mechanism of filters which are themselves distributed through pulsar. This choice means that this implementation is only eventually consistent on removals and not strongly consistent.
=== Browse
The iterator for browse is dynamically backed by the pulsar queue it pulls items from the queue as they are asked applying any removal filters as needed.
This means that dequeued items will not be returned by the iterator even if the iterator was retrieved before the dequeue happens. It also means that once filters have reached eventual consistency they will automatically apply to the ongoing iterator.
=====================================================
== File: server/queue/queue-memory/pom.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.james</groupId>
<artifactId>james-server</artifactId>
<version>3.10.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>james-server-queue-memory</artifactId>
<name>Apache James :: Server :: Mail Queue :: Memory</name>
<dependencies>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-mailet-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-core</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-queue-api</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-queue-api</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-testing</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>testing-base</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
</dependency>
<dependency>
=====================================================
== File: server/apps/memory-app/docker-configuration/logback-cli.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
</appender>
<root level="ERROR">
<appender-ref ref="ASYNC" />
</root>
<logger name="org.apache.james" level="INFO" />
</configuration>
=====================================================
== File: server/apps/memory-app/src/main/extensions-jars/README.md
=====================================================
# Adding Jars to JAMES
The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.
You can use it to add your custom Mailets/Matchers.
=====================================================
== File: server/apps/memory-app/src/main/scripts/james-cli
=====================================================
#!/bin/bash
unset JAVA_TOOL_OPTIONS
java -cp /root/resources:/root/classes:/root/libs/* -Dlogback.configurationFile=/root/conf/logback-cli.xml org.apache.james.cli.ServerCmd "$@"
=====================================================
== File: server/apps/memory-app/src/test/resources/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----
=====================================================
== File: server/apps/memory-app/src/test/resources/eml/otherDomainDkimLocalFrom.eml
=====================================================
Return-Path: <SRS0=fiQ1=NJ=preprod-avocat.fr=sonde-supervision-preprod.linagora@ik2.com>
org.apache.james.rspamd.flag: NO
org.apache.james.rspamd.status: No, actions=no action score=-0.700093 requiredScore=15.0
Delivered-To: btellier@linagora.com
Received: from 172.17.0.1 (EHLO incoming.linagora.com) ([172.17.0.1])
by incoming.linagora.com (JAMES SMTP Server ) with ESMTP ID aec1ac7b
for <btellier@linagora.com>;
Fri, 07 Jun 2024 06:32:41 +0000 (UTC)
Received: from obm3-ui.linagora.dc1 (arathi.linagora.com [54.36.8.82])
by incoming.linagora.com (Postfix) with ESMTP id 07BDE140137
for <btellier@linagora.com>; Fri, 7 Jun 2024 06:32:41 +0000 (UTC)
Received: from s602g.ik2.com (s602g.ik2.com [66.37.25.74])
by obm3-ui.linagora.dc1 (Postfix) with ESMTP id 830051D5C6
for <btellier@linagora.com>; Fri, 7 Jun 2024 08:32:33 +0200 (CEST)
Received: from s214b.ik2.com
by s602g.ik2.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256)
(envelope-from <sonde-supervision-preprod.linagora@preprod-avocat.fr>)
id 1sFT9N-0007vZ-O9
for btellier@linagora.com; Fri, 07 Jun 2024 06:32:38 +0000
Received: from 185.60.151.64 by s214b.ik2.com (IK2 SMTP Server); Fri, 7 Jun 2024 06:32:33 +0000
Received: from outgoing.preprod-avocat.fr (unknown [100.96.59.32])
by outgoing.preprod-avocat.fr (Postfix) with ESMTP id 090772C00FA
for <btellier@linagora.com>; Fri, 7 Jun 2024 08:32:30 +0200 (CEST)
DKIM-Signature: a=rsa-sha256; b=t91ocFueqOR3c2K2TDUz3SUxcVxY5QhaKCrbd9u40WAO11MLxUiEgK7aYTRN/GJJJo6l0sL81kSQbsNPBlcjEGUKhv4wPU34BQko5iAK4gkIGTZ3kWfC1rQo52QK17EqKd9OG9q7vAJh1eA4la5P1Z8DJzxxCB39E0bl9SEtb6s=; s=s1; d=preprod-avocat.fr; v=1; bh=DOV1GxCvw1QI/ZiqKmKwXLguFsLSCuRTQ978r2J4NGs=; h=from : reply-to : subject : date : to : cc : resent-date : resent-from : resent-sender : resent-to : resent-cc : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive;
MIME-Version: 1.0
Subject: DKIM signature of another domain
X-LINAGORA-Copy-Delivery-Done: 1
From: "Compte Test 15 (Linagora)" <comptetest15.linagora@avocat.fr>
To: "btellier@linagora.com" <btellier@linagora.com>
Reply-To: sonde-supervision-preprod.linagora@preprod-avocat.fr
Date: Fri, 7 Jun 2024 06:32:23 +0000
Message-ID: <Mime4j.19.f679494c3e9bb11d.18ff165fa26@preprod-avocat.fr>
User-Agent: Team-Mail/0.11.3 Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
Disposition-Notification-To:
sonde-supervision-preprod.linagora@preprod-avocat.fr
Content-Type: multipart/alternative;
boundary="-=Part.1a.56f2e38fc73ec684.18ff165fa26.911900ebfe468c22=-"
X-SF-RX-Return-Path: <sonde-supervision-preprod.linagora@preprod-avocat.fr>
X-SF-Originating-IP: 185.60.151.64
X-SF-WhiteListedReason: Whitelisted EmailTO
X-SF-Score:
X-SF-SRS: Sender address rewritten from <sonde-supervision-preprod.linagora@preprod-avocat.fr> to <SRS0=fiQ1=NJ=preprod-avocat.fr=sonde-supervision-preprod.linagora@ik2.com>
X-SF-Domain: qgwlxqsyyb
---=Part.1a.56f2e38fc73ec684.18ff165fa26.911900ebfe468c22=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
=====================================================
== File: server/apps/memory-app/src/test/resources/eml/otherDomainDkim.eml
=====================================================
Return-Path: <SRS0=fiQ1=NJ=preprod-avocat.fr=sonde-supervision-preprod.linagora@ik2.com>
org.apache.james.rspamd.flag: NO
org.apache.james.rspamd.status: No, actions=no action score=-0.700093 requiredScore=15.0
Delivered-To: btellier@linagora.com
Received: from 172.17.0.1 (EHLO incoming.linagora.com) ([172.17.0.1])
by incoming.linagora.com (JAMES SMTP Server ) with ESMTP ID aec1ac7b
for <btellier@linagora.com>;
Fri, 07 Jun 2024 06:32:41 +0000 (UTC)
Received: from obm3-ui.linagora.dc1 (arathi.linagora.com [54.36.8.82])
by incoming.linagora.com (Postfix) with ESMTP id 07BDE140137
for <btellier@linagora.com>; Fri, 7 Jun 2024 06:32:41 +0000 (UTC)
Received: from s602g.ik2.com (s602g.ik2.com [66.37.25.74])
by obm3-ui.linagora.dc1 (Postfix) with ESMTP id 830051D5C6
for <btellier@linagora.com>; Fri, 7 Jun 2024 08:32:33 +0200 (CEST)
Received: from s214b.ik2.com
by s602g.ik2.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256)
(envelope-from <sonde-supervision-preprod.linagora@preprod-avocat.fr>)
id 1sFT9N-0007vZ-O9
for btellier@linagora.com; Fri, 07 Jun 2024 06:32:38 +0000
Received: from 185.60.151.64 by s214b.ik2.com (IK2 SMTP Server); Fri, 7 Jun 2024 06:32:33 +0000
Received: from outgoing.preprod-avocat.fr (unknown [100.96.59.32])
by outgoing.preprod-avocat.fr (Postfix) with ESMTP id 090772C00FA
for <btellier@linagora.com>; Fri, 7 Jun 2024 08:32:30 +0200 (CEST)
DKIM-Signature: a=rsa-sha256; b=t91ocFueqOR3c2K2TDUz3SUxcVxY5QhaKCrbd9u40WAO11MLxUiEgK7aYTRN/GJJJo6l0sL81kSQbsNPBlcjEGUKhv4wPU34BQko5iAK4gkIGTZ3kWfC1rQo52QK17EqKd9OG9q7vAJh1eA4la5P1Z8DJzxxCB39E0bl9SEtb6s=; s=s1; d=preprod-avocat.fr; v=1; bh=DOV1GxCvw1QI/ZiqKmKwXLguFsLSCuRTQ978r2J4NGs=; h=from : reply-to : subject : date : to : cc : resent-date : resent-from : resent-sender : resent-to : resent-cc : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive;
MIME-Version: 1.0
Subject: DKIM signature of another domain
X-LINAGORA-Copy-Delivery-Done: 1
From: rgqer <sonde-supervision-preprod.linagora@preprod-avocat.fr>
To: "btellier@linagora.com" <btellier@linagora.com>
Reply-To: sonde-supervision-preprod.linagora@preprod-avocat.fr
Date: Fri, 7 Jun 2024 06:32:23 +0000
Message-ID: <Mime4j.19.f679494c3e9bb11d.18ff165fa26@preprod-avocat.fr>
User-Agent: Team-Mail/0.11.3 Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
Disposition-Notification-To:
sonde-supervision-preprod.linagora@preprod-avocat.fr
Content-Type: multipart/alternative;
boundary="-=Part.1a.56f2e38fc73ec684.18ff165fa26.911900ebfe468c22=-"
X-SF-RX-Return-Path: <sonde-supervision-preprod.linagora@preprod-avocat.fr>
X-SF-Originating-IP: 185.60.151.64
X-SF-WhiteListedReason: Whitelisted EmailTO
X-SF-Score:
X-SF-SRS: Sender address rewritten from <sonde-supervision-preprod.linagora@preprod-avocat.fr> to <SRS0=fiQ1=NJ=preprod-avocat.fr=sonde-supervision-preprod.linagora@ik2.com>
X-SF-Domain: qgwlxqsyyb
---=Part.1a.56f2e38fc73ec684.18ff165fa26.911900ebfe468c22=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
=====================================================
== File: server/apps/memory-app/src/test/resources/eml/badDkim.eml
=====================================================
Return-Path: <SRS0=7v5G=NB=avocat.fr=comptetest15.linagora@ik2.com>
org.apache.james.rspamd.flag: NO
org.apache.james.rspamd.status: No, actions=no action score=-1.20399 requiredScore=15.0
Delivered-To: btellier@linagora.com
Received: from 172.17.0.1 (EHLO incoming.linagora.com) ([172.17.0.1])
by incoming.linagora.com (JAMES SMTP Server ) with ESMTP ID 6dffcf4c
for <btellier@linagora.com>;
Thu, 30 May 2024 13:14:36 +0000 (UTC)
Received: from obm3-ui.linagora.dc1 (arathi.linagora.com [54.36.8.82])
by incoming.linagora.com (Postfix) with ESMTP id 760D11400C0
for <btellier@linagora.com>; Thu, 30 May 2024 13:14:36 +0000 (UTC)
Received: from s602f.ik2.com (s602f.ik2.com [66.37.25.73])
by obm3-ui.linagora.dc1 (Postfix) with ESMTP id EF3C21D5C6
for <btellier@linagora.com>; Thu, 30 May 2024 15:14:29 +0200 (CEST)
Received: from s602e.ik2.com
by s602f.ik2.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256)
(envelope-from <comptetest15.linagora@avocat.fr>)
id 1sCfc1-0002uc-JM
for btellier@linagora.com; Thu, 30 May 2024 13:14:34 +0000
Received: from 185.60.149.69 by s602e.ik2.com (IK2 SMTP Server); Thu, 30 May 2024 13:14:33 +0000
Received: from outgoing.avocat.fr (unknown [100.96.73.31])
by outgoing.avocat.fr (Postfix) with ESMTP id 2FA1440BB5
for <btellier@linagora.com>; Thu, 30 May 2024 15:14:31 +0200 (CEST)
DKIM-Signature: a=rsa-sha256; b=yKWUdoSJWU22yD2pYralgzwT7HtfiVaYM2Z/UFpeTbGCCrUFH0MfiZV6xpUrj7yjvXKetoP8fBFaz0CCmMCwyQmuDPA7LDZtaspCKrnnpJ4jbXd1EETNTOnkPGHTtwmDXOiGfLQwYtVTnt8ZjFs0aqWQ7x0hf/J7B1yrrQHXzow=; s=s2; d=avocat.fr; v=1; bh=J/vybCAsPL7Fd5sQielJMVcFwAfk7/HdExYRnLVmMls=; h=from : reply-to : subject : date : to : cc : resent-date : resent-from : resent-sender : resent-to : resent-cc : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive;
MIME-Version: 1.0
Subject: Test DKIM
X-LINAGORA-Copy-Delivery-Done: 1
From: "Compte Test 15 (Linagora)" <comptetest15.linagora@avocat.fr>
To: btellier@linagora.com
Reply-To: comptetest15.linagora@avocat.fr
Date: Thu, 30 May 2024 13:14:29 +0000
Message-ID: <Mime4j.10cd.83efd28a96e1b4a9.18fc9a33dcd@avocat.fr>
User-Agent: Team-Mail/0.11.3 Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
Disposition-Notification-To: comptetest15.linagora@avocat.fr
Content-Type: multipart/alternative;
boundary="-=Part.10ce.b972756a9ae65a4e.18fc9a33dcd.74debedca650c627=-"
X-SF-RX-Return-Path: <comptetest15.linagora@avocat.fr>
X-SF-Originating-IP: 185.60.149.69
X-SF-WhiteListedReason: Whitelisted EmailTO
X-SF-Score:
X-SF-SRS: Sender address rewritten from <comptetest15.linagora@avocat.fr> to <SRS0=7v5G=NB=avocat.fr=comptetest15.linagora@ik2.com>
X-SF-Domain: qgwlxqsyyb
---=Part.10ce.b972756a9ae65a4e.18fc9a33dcd.74debedca650c627=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
ALTERED body
=====================================================
== File: server/apps/memory-app/src/test/resources/eml/goodDkim.eml
=====================================================
Return-Path: <SRS0=7v5G=NB=avocat.fr=comptetest15.linagora@ik2.com>
org.apache.james.rspamd.flag: NO
org.apache.james.rspamd.status: No, actions=no action score=-1.20399 requiredScore=15.0
Delivered-To: btellier@linagora.com
Received: from 172.17.0.1 (EHLO incoming.linagora.com) ([172.17.0.1])
by incoming.linagora.com (JAMES SMTP Server ) with ESMTP ID 6dffcf4c
for <btellier@linagora.com>;
Thu, 30 May 2024 13:14:36 +0000 (UTC)
Received: from obm3-ui.linagora.dc1 (arathi.linagora.com [54.36.8.82])
by incoming.linagora.com (Postfix) with ESMTP id 760D11400C0
for <btellier@linagora.com>; Thu, 30 May 2024 13:14:36 +0000 (UTC)
Received: from s602f.ik2.com (s602f.ik2.com [66.37.25.73])
by obm3-ui.linagora.dc1 (Postfix) with ESMTP id EF3C21D5C6
for <btellier@linagora.com>; Thu, 30 May 2024 15:14:29 +0200 (CEST)
Received: from s602e.ik2.com
by s602f.ik2.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256)
(envelope-from <comptetest15.linagora@avocat.fr>)
id 1sCfc1-0002uc-JM
for btellier@linagora.com; Thu, 30 May 2024 13:14:34 +0000
Received: from 185.60.149.69 by s602e.ik2.com (IK2 SMTP Server); Thu, 30 May 2024 13:14:33 +0000
Received: from outgoing.avocat.fr (unknown [100.96.73.31])
by outgoing.avocat.fr (Postfix) with ESMTP id 2FA1440BB5
for <btellier@linagora.com>; Thu, 30 May 2024 15:14:31 +0200 (CEST)
DKIM-Signature: a=rsa-sha256; b=yKWUdoSJWU22yD2pYralgzwT7HtfiVaYM2Z/UFpeTbGCCrUFH0MfiZV6xpUrj7yjvXKetoP8fBFaz0CCmMCwyQmuDPA7LDZtaspCKrnnpJ4jbXd1EETNTOnkPGHTtwmDXOiGfLQwYtVTnt8ZjFs0aqWQ7x0hf/J7B1yrrQHXzow=; s=s2; d=avocat.fr; v=1; bh=J/vybCAsPL7Fd5sQielJMVcFwAfk7/HdExYRnLVmMls=; h=from : reply-to : subject : date : to : cc : resent-date : resent-from : resent-sender : resent-to : resent-cc : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive;
MIME-Version: 1.0
Subject: Test DKIM
X-LINAGORA-Copy-Delivery-Done: 1
From: "Compte Test 15 (Linagora)" <comptetest15.linagora@avocat.fr>
To: btellier@linagora.com
Reply-To: comptetest15.linagora@avocat.fr
Date: Thu, 30 May 2024 13:14:29 +0000
Message-ID: <Mime4j.10cd.83efd28a96e1b4a9.18fc9a33dcd@avocat.fr>
User-Agent: Team-Mail/0.11.3 Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
Disposition-Notification-To: comptetest15.linagora@avocat.fr
Content-Type: multipart/alternative;
boundary="-=Part.10ce.b972756a9ae65a4e.18fc9a33dcd.74debedca650c627=-"
X-SF-RX-Return-Path: <comptetest15.linagora@avocat.fr>
X-SF-Originating-IP: 185.60.149.69
X-SF-WhiteListedReason: Whitelisted EmailTO
X-SF-Score:
X-SF-SRS: Sender address rewritten from <comptetest15.linagora@avocat.fr> to <SRS0=7v5G=NB=avocat.fr=comptetest15.linagora@ik2.com>
X-SF-Domain: qgwlxqsyyb
---=Part.10ce.b972756a9ae65a4e.18fc9a33dcd.74debedca650c627=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Test DKIM body
=====================================================
== File: server/apps/memory-app/src/assemble/README.adoc
=====================================================
= Guice-Memory Module How-to
== Requirements
* Java 11 SDK
== Running
To run james, you have to create a directory containing required configuration files.
James requires the configuration to be in a subfolder of working directory that is called
**conf**. A [sample directory](https://github.com/apache/james-project/tree/master/server/container/guice/memory-guice/sample-configuration)
is provided with some default values you may need to replace. You will need to update its content to match your needs.
You also need to generate a keystore with the following command:
[source]
----
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
----
Once everything is set up, you just have to run the jar with:
[source]
----
$ java -Dworking.directory=. -Dlogback.configurationFile=conf/logback.xml -Djdk.tls.ephemeralDHKeySize=2048 -jar james-server-memory-guice.jar
----
Note that binding ports below 1024 requires administrative rights.
=====================================================
== File: server/apps/memory-app/src/assemble/extensions-jars.txt
=====================================================
# Adding Jars to JAMES
The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.
You can use it to add you customs Mailets/Matchers.
=====================================================
== File: server/apps/memory-app/README.md
=====================================================
# James Memory server
In order to build both the ZIP and docker packaging, run:
```
mvn clean install -DskipTests
```
## ZIP distribution
Available in `target` directory, the ZIP include detailed instructions.
## Docker distribution
To import the image locally:
```
docker image load -i target/jib-image.tar
```
Then run it:
```
docker run apache/james:memory-latest
```
For security reasons you are required to generate your own keystore, that you can mount into the container via a volume:
```
keytool -genkey -alias james -keyalg RSA -keystore keystore
docker run -v $PWD/keystore:/root/conf/keystore apache/james:memory-latest
```
In the case of quick start James without manually creating a keystore (e.g. for development),
James memory server will auto-generate keystore file with the default setting that is declared in `jmap.properties` (tls.keystoreURL, tls.secret)
Hence just run docker command:
```
docker run apache/james:memory-latest
```
Use the [JAVA_TOOL_OPTIONS environment option](https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#jvm-flags)
to pass extra JVM flags. For instance:
```
docker run -e "JAVA_TOOL_OPTIONS=-Xmx500m -Xms500m" apache/james:memory-latest
```
=====================================================
== File: server/apps/memory-app/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.
# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes
# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.
#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=
=====================================================
== File: server/apps/memory-app/sample-configuration/deletedMessageVault.properties
=====================================================
# ============================================= Deleted Messages Vault Configuration ==================================
# Retention period for your deleted messages into the vault, after which they expire and can be potentially cleaned up
# Optional, default 1y
# retentionPeriod=1y
=====================================================
== File: server/apps/memory-app/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.
# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever
# The delimiter used to separate parent/child folders.
# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
# WARNING: This value should only be changed when setting up a new deployment. Changing the parameter for an existing deployments
# will likely lead to failure of some system components, as occurrences of old delimiter will still be present in the database/data store.
# james.mailbox.folder.delimiter=dot
# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K
# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false
# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
# - none: Disables resource leak detection.
# - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
# - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
# - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple
# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true
# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE
# Should James exit on Startup error? Boolean, defaults to true.
# james.exit.on.startup.error=true
# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true
# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
=====================================================
== File: server/apps/memory-app/sample-configuration/jmap.properties
=====================================================
# Configuration file for JMAP
# Read https://james.apache.org/server/config-jmap.html for further details
enabled=true
tls.keystoreURL=file://conf/keystore
tls.secret=james72laBalle
delay.sends.enabled=true
# Alternatively TLS keys can be supplied via PEM files
# tls.privateKey=file://conf/private.nopass.key
# tls.certificates=file://conf/certs.self-signed.csr
# An optional secret might be specified for the private key
# tls.secret=james72laBalle
#
# If you wish to use OAuth authentication, you should provide a valid JWT public key.
# The following entry specify the link to the URL of the public key file,
# which should be a PEM format file.
#
#jwt.publickeypem.url=file://conf/jwt_publickey
# Should simple Email/query be resolved against a Cassandra projection, or should we resolve them against ElasticSearch?
# This enables a higher resilience, but the projection needs to be correctly populated. False by default.
# view.email.query.enabled=true
# If you want to specify authentication strategies for Jmap rfc-8621 version
# For custom Authentication Strategy not inside package "org.apache.james.jmap.http", you have to specify its FQDN
# authentication.strategy.rfc8621=JWTAuthenticationStrategy,BasicAuthenticationStrategy
# Prevent server side request forgery by preventing calls to the private network ranges. Defaults to true, can be disabled for testing.
# webpush.prevent.server.side.request.forgery=false
=====================================================
== File: server/apps/memory-app/sample-configuration/droplists.properties
=====================================================
# Configuration file for DropLists
enabled=false
=====================================================
== File: server/apps/webadmin-cli/src/test/resources/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----
=====================================================
== File: server/apps/webadmin-cli/src/test/resources/valid_token_admin_false.jwt
=====================================================
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbkBvcGVu
LXBhYXMub3JnIiwiYWRtaW4iOmZhbHNlLCJpYXQiOjE0ODkwNDA4Njd9.reQc3DiVvbQHF08oW1qOUyDJyv3tfzDNk8jhVZequiCdOI9vXnRlOe
-yDYktd4WT8MYhqY7MgS-wR0vO9jZFv8ZCgd_MkKCvCO0HmMjP5iQPZ0kqGkgWUH7X123tfR38MfbCVAdPDba-K3MfkogV1xvDhlkPScFr_6MxE
xtedOK2JnQZn7t9sUzSrcyjWverm7gZkPptkIVoS8TsEeMMME5vFXe_nqkEG69q3kuBUm_33tbR5oNS0ZGZKlG9r41lHBjyf9J1xN4UYV8n866d
a7RPPCzshIWUtO0q9T2umWTnp-6OnOdBCkndrZmRR6pPxsD5YL0_77Wq8KT_5__fGA
=====================================================
== File: server/apps/webadmin-cli/src/test/resources/valid_token_admin_true.jwt
=====================================================
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbkBvcGVuL
XBhYXMub3JnIiwiYWRtaW4iOnRydWUsImlhdCI6MTQ4OTAzODQzOH0.rgxCkdWEa-92a4R-72a9Z49k4LRvQDShgci5Y7qWRUP9IGJCK-lMkrHF
4H0a6L87BYppxVW701zaZ6dNxRMvHnjLBBWnPsC2B0rkkr2hEL2zfz7sb-iNGV-J4ICx97t8-TfQ5rz3VOX0FwdusPL_rJtmlGEGRivPkR6_aBe1
kQnvMlwpqF_3ox58EUqYJk6lK_6rjKEV3Xfre31IMpuQUy6c7TKc95sL2-13cknelTierBEmZ00RzTtv9SHIEfzZTfaUK2Wm0PvnQjmU2nIdEvU
EqE-jrM3yYXcQzoO-YTQnEhdl-iqbCfmEpYkl2Bx3eIq7gRxxnr7BPsX6HrCB0w
=====================================================
== File: server/apps/webadmin-cli/README.md
=====================================================
# A WebAdmin based CLI for Apache James
## Development
Webadmin command-line interface is an upcoming replacement for the outdated, security-vulnerable JMX command-line interface. It also aims at providing a more modern and intuitive interface.
## Run the command line
## Syntax
General syntax to run the command line
```
$ ./james-cli [OPTION] ENTITY ACTION {ARGUMENT}
```
where
OPTION: optional parameter when running the command line,
ENTITY: represents the entity to perform action on,
ACTION: name of the action to perform,
ARGUMENT: arguments needed for the action.
Example:
```
$ ./james-cli --url http://127.0.0.1:9999 domain list
```
The above command lists all domain names available on domain route at address http://127.0.0.1:9999.
It does not require any argument to execute.
The following options can be used:
--url : Without it, the default value is http://127.0.0.1:8000.
When James server's jwt setting is enabled, jwt options are required:
--jwt-token : pass the jwt token directly as plain text. E.g:
```
$ ./james-cli --url http://127.0.0.1:8000 --jwt-token eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJlc24iLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNjA0Mjg3OTU3fQ.IY3AWg9lQE4muXg8iRu1nbluTm786_6aLcoEylCGcbtGcEOp81Neani1-_17xGp2aF6kxBJva0_f_ADUplhfirGXwoxM8evcsdmQBhNGDfa-oXT_a-dd6n7MMPweGOFGhjxnTRvNHpyqDcfNuGGGcB8OfzOsN5epWNkhlivk2OSuY8vR8fHB9Es1Oiv1i8D5H93-K5IXParVLpAtj7uLZT9b7G-kjxlQagApH8USx6JlqIjMwhvM--79SrzPKZ2AtM59NfDT4g6GPaMNntQvXr06Xu3Leys97cot2rsXNfXY1OohorXiYiZ66-eMRcQ7pHF-NyS6dlg87rnMQlpKHw domain list
```
Commands with valid token with admin=true claim should pass James's authentication.
--jwt-from-file : pass the jwt token through a file (such as token.jwt). E.g:
```
$ ./james-cli --url http://127.0.0.1:8000 --jwt-from-file token.jwt domain list
```
=====================================================
== File: server/apps/webadmin-cli/james-cli
=====================================================
#!/bin/bash
unset JAVA_TOOL_OPTIONS
java -jar target/james-cli.jar "$@"
=====================================================
== File: server/apps/scaling-pulsar-smtp/docker-compose.yml
=====================================================
version: '3'
services:
james:
depends_on:
- s3
- pulsar
- postgres
image: apache/james:scaling-pulsar-smtp-latest
container_name: james
hostname: james.local
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
- "5005:5005"
environment:
#- JDK_JAVA_OPTIONS=-Dlogback.configurationFile=/root/conf/logback.xml -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=0.0.0.0:5005 -Dworking.directory=/root/
- JDK_JAVA_OPTIONS=-Dlogback.configurationFile=/root/conf/logback.xml -Dworking.directory=/root/ --add-opens java.base/sun.net=ALL-UNNAMED
- OBJECTSTORAGE_S3_ENDPOINT=http://s3.docker.test:8000/
- OBJECTSTORAGE_S3_REGION=us-east-1
- OBJECTSTORAGE_S3_ACCESSKEYID=accessKey1
- OBJECTSTORAGE_S3_SECRETKEY=secretKey1
- POSTGRESQL_DATABASE_NAME=postgres
- POSTGRESQL_DATABASE_SCHEMA=public
- POSTGRESQL_HOST=postgres
- POSTGRESQL_PORT=5432
- POSTGRESQL_USERNAME=postgres
- POSTGRESQL_PASSWORD=password
- PULSAR_BROKER_URI=pulsar://pulsar:6650
- PULSAR_ADMIN_URI=http://pulsar:8080/
- PULSAR_NAMESPACE=public/default
volumes:
#- $PWD/mariadb-java-client-2.7.2.jar:/root/libs/mariadb-java-client-2.7.2.jar
#- $PWD/sample-configuration/james-database.properties:/root/conf/james-database.properties
#- $PWD/sample-configuration/pulsar.properties:/root/conf/pulsar.properties
#- $PWD/sample-configuration/blob.properties:/root/conf/blob.properties
#- $PWD/sample-configuration/mailetcontainer.xml:/root/conf/mailetcontainer.xml
#- $PWD/sample-configuration/mailrepositorystore.xml:/root/conf/mailrepositorystore.xml
#- $PWD/sample-configuration/jvm.properties:/root/conf/jvm.properties
#- $PWD/keystore:/root/conf/keystore
- ./sample-configuration:/root/conf
s3:
=====================================================
== File: server/apps/scaling-pulsar-smtp/README.adoc
=====================================================
= Pulsar backed SMTP processing
== App goals
This app provides an easily scalable SMTP processing module based on Apache Pulsar for small to large deployments. The idea being that it is easy enough to operate this assembly at a "reasonable" cost in the cloud until the scale is large enough to warrant switching to the fully distributed app.
In order to support such small deployments destined to grow this app relies on :
- Apache pulsar as there are cost-efficient SAAS deployments that make this app easy to deploy
- A Blobstore (for mail repository) as they are very cost-efficient and available at most providers in the Cloud market.
- A PostgresSQL database for reference data (domain list, recipient rewrite table and users). PostgreSQL databases as a service is available on multiple cloud platform and for this kind of information entry tiers should allow to operate a reasonable service.
== Building
In order to build the docker packaging, run:
----
mvn clean install -DskipTests
----
== ZIP distribution
Available in `target` directory, the ZIP include detailed instructions.
== Docker distribution
To import the image locally:
----
docker image load -i target/jib-image.tar
----
Then run it:
----
docker run apache/james:scaling-pulsar-smtp-latest
----
For security reasons you are required to generate your own keystore, that you can mount into the container via a volume:
----
keytool -genkey -alias james -keyalg RSA -keystore keystore
docker run -v $PWD/keystore:/root/conf/keystore apache/james:scaling-pulsar-smtp-latest
----
In the case of quick start James without manually creating a keystore (e.g. for development), just input the command argument `--generate-keystore` when running,
James will auto-generate keystore file with the default setting that is declared in `jmap.properties` (tls.keystoreURL, tls.secret)
=====================================================
== File: server/apps/scaling-pulsar-smtp/src/main/scripts/james-cli
=====================================================
#!/bin/bash
unset JAVA_TOOL_OPTIONS
java -cp /root/resources:/root/classes:/root/libs/* org.apache.james.cli.ServerCmd "$@"
=====================================================
== File: server/apps/scaling-pulsar-smtp/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.
# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes
# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.
#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=
=====================================================
== File: server/apps/scaling-pulsar-smtp/sample-configuration/pulsar.properties
=====================================================
#broker.uri=pulsar://pulsar:6650
broker.uri=${env:PULSAR_BROKER_URI}
#admin.uri=http://pulsar:8080/
admin.uri=${env:PULSAR_ADMIN_URI}
#namespace=public/default
namespace=${env:PULSAR_NAMESPACE}
=====================================================
== File: server/apps/scaling-pulsar-smtp/sample-configuration/scriptFile.scala
=====================================================
<?xml version="1.0"?>
=====================================================
== File: server/apps/scaling-pulsar-smtp/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.
# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever
# The delimiter used to separate parent/child folders.
# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
# WARNING: This value should only be changed when setting up a new deployment. Changing the parameter for an existing deployments
# will likely lead to failure of some system components, as occurrences of old delimiter will still be present in the database/data store.
# james.mailbox.folder.delimiter=dot
# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K
# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false
# Mode level of resource leak detection. It is used to detect a resource not be di sposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
# - none: Disables resource leak detection.
# - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
# - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
# - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple
# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true
# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE
# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true
# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true
# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
#sun.rmi.dgc.server.gcInterval=3600000000
=====================================================
== File: server/apps/scaling-pulsar-smtp/sample-configuration/postgres.properties
=====================================================
# String. Optional, default to 'postgres'. Database name.
#database.name=james
database.name=${env:POSTGRESQL_DATABASE_NAME}
# String. Optional, default to 'public'. Database schema.
#database.schema=public
database.schema=${env:POSTGRESQL_DATABASE_SCHEMA}
# String. Optional, default to 'localhost'. Database host.
#database.host=postgres
database.host=${env:POSTGRESQL_HOST}
# Integer. Optional, default to 5432. Database port.
#database.port=5432
database.port=${env:POSTGRESQL_PORT}
# String. Required. Database username.
#database.username=james
database.username=${env:POSTGRESQL_USERNAME}
# String. Required. Database password of the user.
#database.password=secret1
database.password=${env:POSTGRESQL_PASSWORD}
# Boolean. Optional, default to false. Whether to enable row level security.
row.level.security.enabled=false
# String. It is required when row.level.security.enabled is true. Database username with the permission of bypassing RLS.
#database.by-pass-rls.username=bypassrlsjames
# String. It is required when row.level.security.enabled is true. Database password of by-pass-rls user.
#database.by-pass-rls.password=secret1
# Integer. Optional, default to 10. Database connection pool initial size.
pool.initial.size=10
# Integer. Optional, default to 15. Database connection pool max size.
pool.max.size=15
# Integer. Optional, default to 5. rls-bypass database connection pool initial size.
by-pass-rls.pool.initial.size=5
# Integer. Optional, default to 10. rls-bypass database connection pool max size.
by-pass-rls.pool.max.size=10
# String. Optional, defaults to allow. SSLMode required to connect to the Postgresql db server.
# Check https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION for a list of supported SSLModes.
ssl.mode=allow
## Duration. Optional, defaults to 10 second. jOOQ reactive timeout when executing Postgres query. This setting prevent jooq reactive bug from causing hanging issue.
=====================================================
== File: server/apps/scaling-pulsar-smtp/sample-configuration/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/logs/james.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
<appender-ref ref="LOG_FILE" />
</appender>
<root level="WARN">
<appender-ref ref="ASYNC" />
</root>
<logger name="org.apache.james" level="INFO" />
</configuration>
=====================================================
== File: server/apps/scaling-pulsar-smtp/sample-configuration/blob.properties
=====================================================
# ============================================= BlobStore Implementation ==================================
# Read https://james.apache.org/server/config-blobstore.html for further details
# Choose your BlobStore implementation
# Mandatory, allowed values are: cassandra, s3
# *WARNING*: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
# alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)
implementation=s3
# ========================================= Deduplication ========================================
# If you choose to enable deduplication, the mails with the same content will be stored only once.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
# the mails sharing the same content once one is deleted.
# Mandatory, Allowed values are: true, false
deduplication.enable=false
# deduplication.family needs to be incremented every time the deduplication.generation.duration is changed
# Positive integer, defaults to 1
# deduplication.gc.generation.family=1
# Duration of generation.
# Deduplication only takes place within a singe generation.
# Only items two generation old can be garbage collected. (This prevent concurrent insertions issues and
# accounts for a clock skew).
# deduplication.family needs to be incremented everytime this parameter is changed.
# Duration. Default unit: days. Defaults to 30 days.
# deduplication.gc.generation.duration=30days
# ========================================= Encryption ========================================
# If you choose to enable encryption, the blob content will be encrypted before storing them in the BlobStore.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to all content being
# encrypted. This comes at a performance impact but presents you from leaking data if, for instance the third party
# offering you a S3 service is compromised.
# Optional, Allowed values are: true, false, defaults to false
encryption.aes.enable=false
# Mandatory (if AES encryption is enabled) salt and password. Salt needs to be an hexadecimal encoded string
#encryption.aes.password=xxx
#encryption.aes.salt=73616c7479
# ========================================= Cassandra BlobStore Cache ======================================
# A cassandra cache can be enabled to reduce latency when reading small blobs frequently
# A dedicated keyspace with a replication factor of one is then used
# Cache eviction policy is TTL based
# Only blobs below a given threshold will be stored.
# To be noted that blobs are stored within a single Cassandra row, hence a low threshold should be used.
# Enable the cache? Optional and default to false. Must be a boolean.
cache.enable=false
=====================================================
== File: server/apps/spring-app/README.crypto
=====================================================
This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See <http://www.wassenaar.org/> for more information.
The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache Software Foundation distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.
The following provides more details on the included cryptographic software:
Apache James Server uses third party cryptography software including
bcjmail and bcprov libraries by "The Legion of the Bouncy Castle" http://www.bouncycastle.org,
jasypt library by "Jasypt.org" http://www.jasypt.org/
and the Java Runtime Environment.
=====================================================
== File: server/apps/spring-app/src/main/resources/log4j2.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO" monitorInterval="30">
<Properties>
<Property name="logDir">${sys:app.home}/log</Property>
<Property name="logLayoutTomcat">%d{dd-MMM-yyyy HH:mm:ss.SSS} %level [%t] %C.%M:%L - %msg%n</Property>
<Property name="logLayout1">%d %-7level %logger{36} - %msg%n</Property>
<Property name="logLayout2">%d %-7level [%t] %C.%M:%L - %msg%n</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${logLayoutTomcat}" />
</Console>
<RollingFile name="SpringFramework" fileName="${logDir}/springframework.log"
filePattern="${logDir}/springframework.%d{yyyy-MM-dd}-%i.log.gz"
ignoreExceptions="false">
<PatternLayout pattern="${logLayoutTomcat}"
charset="UTF-8" />
<Policies>
<!-- <OnStartupTriggeringPolicy /> -->
<!-- <SizeBasedTriggeringPolicy size="20 MB" /> -->
<!-- <TimeBasedTriggeringPolicy /> -->
</Policies>
<!-- <DefaultRolloverStrategy> -->
<!-- <Delete basePath="${logDir}" maxDepth="2"> -->
<!-- <IfFileName -->
<!-- glob="target/log4j2/roll-by-time-and-size/app.*.log.gz" /> -->
<!-- <IfLastModified age="20d" /> -->
<!-- </Delete> -->
<!-- </DefaultRolloverStrategy> -->
</RollingFile>
<RollingFile name="openjpa" fileName="${logDir}/openjpa.log"
filePattern="${logDir}/openjpa.%d{yyyy-MM-dd}-%i.log.gz"
ignoreExceptions="false">
<PatternLayout pattern="${logLayoutTomcat}"
charset="UTF-8" />
<Policies>
<!-- <OnStartupTriggeringPolicy /> -->
<!-- <SizeBasedTriggeringPolicy size="20 MB" /> -->
<!-- <TimeBasedTriggeringPolicy /> -->
</Policies>
<!-- <DefaultRolloverStrategy> -->
<!-- <Delete basePath="${logDir}" maxDepth="2"> -->
<!-- <IfFileName -->
<!-- glob="target/log4j2/roll-by-time-and-size/app.*.log.gz" /> -->
<!-- <IfLastModified age="20d" /> -->
<!-- </Delete> -->
<!-- </DefaultRolloverStrategy> -->
</RollingFile>
<RollingFile name="James" fileName="${logDir}/james.log"
=====================================================
== File: server/apps/spring-app/src/main/resources/jmxremote.access
=====================================================
james-admin readwrite
=====================================================
== File: server/apps/spring-app/src/main/resources/jmxremote.password
=====================================================
james-admin changeme
=====================================================
== File: server/apps/spring-app/src/main/licensing/app/notice-for-binary.txt
=====================================================
=========================================================================
== NOTICE file for use with the Apache License, Version 2.0, ==
=========================================================================
Apache JAMES Server
Copyright 1999-2011 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
Download the source for:
jakarta.mail-${version}.jar from https://github.com/eclipse-ee4j/mail/releases
jakarta.activation-${version}.jar from https://github.com/eclipse-ee4j/jaf/releases
This distribution contains third party resources requiring the following notices:
For
jasypt-1.6.jar
This distribution includes cryptographic software. The country in
which you currently reside may have restrictions on the import,
possession, use, and/or re-export to another country, of
encryption software. BEFORE using any encryption software, please
check your country's laws, regulations and policies concerning the
import, possession, or use, and re-export of encryption software, to
see if this is permitted. See http://www.wassenaar.org/ for more
information.
The U.S. Government Department of Commerce, Bureau of Industry and
Security (BIS), has classified this software as Export Commodity
Control Number (ECCN) 5D002.C.1, which includes information security
software using or performing cryptographic functions with asymmetric
algorithms. The form and manner of this distribution makes it
eligible for export under the License Exception ENC Technology
Software Unrestricted (TSU) exception (see the BIS Export
Administration Regulations, Section 740.13) for both object code and
source code.
The following provides more details on the cryptographic software
used (note that this software is not included in the distribution):
* The PBE Encryption facilities require the Java Cryptography
extensions: http://java.sun.com/javase/technologies/security/.
---------------------------------
=====================================================
== File: server/apps/spring-app/src/debian/control/control
=====================================================
Source: apache-james
Package: ${artifactId}
Version: ${project.version}
Section: contrib/java
Priority: optional
Maintainer: Apache James Team <server-dev@james.apache.org>
Uploaders: Ioan Eugen Stan <ieugen@apache.org>
Architecture: all
Homepage: http://james.apache.org
Depends: default-jre-headless | java6-runtime-headless | java-6-runtime
Provides: imap-server, mail-transport-agent, pop3-server
Conflicts: mail-transport-agent
Description: Hi-performance, modular and extensible Java based email server.
The Apache James Project delivers a rich set of open source modules and
libraries, written in Java, related to Internet mail communication which build
into an advanced enterprise mail server.
James Server provides a mailet container: the email processing is delegated to
independent, extensible, pluggable agents specified by the Mailet API. Any
function which is not already available (from James or from a third party) can
be developed.
=====================================================
== File: server/apps/distributed-pop3-app/docker-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.
# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever
# The delimiter used to separate parent/child folders.
# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
# WARNING: This value should only be changed when setting up a new deployment. Changing the parameter for an existing deployments
# will likely lead to failure of some system components, as occurrences of old delimiter will still be present in the database/data store.
# james.mailbox.folder.delimiter=dot
# Required to locate Cassandra driver configuration
config.file=/root/conf/cassandra-driver.conf
# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K
# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false
# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
# - none: Disables resource leak detection.
# - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
# - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
# - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple
# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true
# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE
# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true
# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true
=====================================================
== File: server/apps/distributed-pop3-app/docker-configuration/logback-cli.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
</appender>
<root level="ERROR">
<appender-ref ref="ASYNC" />
</root>
<logger name="org.apache.james" level="INFO" />
</configuration>
=====================================================
== File: server/apps/distributed-pop3-app/docker-compose.yml
=====================================================
version: '3'
services:
james:
depends_on:
cassandra:
condition: service_healthy
opensearch:
condition: service_started
tika:
condition: service_started
rabbitmq:
condition: service_started
s3:
condition: service_started
image: apache/james:distributed-pop3-latest
container_name: james
hostname: james.local
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
command:
- --generate-keystore
networks:
- james
opensearch:
image: opensearchproject/opensearch:2.19.2
environment:
- discovery.type=single-node
- DISABLE_INSTALL_DEMO_CONFIG=true
- DISABLE_SECURITY_PLUGIN=true
networks:
james:
aliases:
- elasticsearch
cassandra:
image: cassandra:4.1.9
ports:
- "9042:9042"
healthcheck:
test: ["CMD", "cqlsh", "-e", "describe keyspaces"]
=====================================================
== File: server/apps/distributed-pop3-app/README.adoc
=====================================================
= Guice-Distributed POP3 Server How-to
This server diverges from the distributed server by only using MessageId backed by a TimeUUID as a message identifier,
thus is multi-datacenter friendly, however comes with a reduced feature set (only supports SMTP protocol).
== Requirements
* Java 21 SDK
Firstly, create your own user network on Docker for the James environment:
$ docker network create --driver bridge james
Third party compulsory dependencies:
* Cassandra 4.0
* RabbitMQ-Management 3.8.18
* Zenko Cloudserver or AWS S3
[source]
----
$ docker run -d --network james -p 9042:9042 --name=cassandra cassandra:4.1.9
$ docker run -d --network james -p 5672:5672 -p 15672:15672 --name=rabbitmq rabbitmq:4.1.1-management
$ docker run -d --network james --env 'REMOTE_MANAGEMENT_DISABLE=1' --env 'SCALITY_ACCESS_KEY_ID=accessKey1' --env 'SCALITY_SECRET_ACCESS_KEY=secretKey1' --name=s3 ghcr.io/scality/cloudserver:c1ba296859690c1cbbec609aaae430f6b04b4745
----
== Docker distribution
To import the image locally:
[source]
----
docker image load -i target/jib-image.tar
----
Then run it:
[source]
----
docker run --network james apache/james:distributed-pop3-latest
----
For security reasons you are required to generate your own keystore, that you can mount into the container via a volume:
[source]
----
keytool -genkey -alias james -keyalg RSA -keystore keystore
docker run --network james -v $PWD/keystore:/root/conf/keystore apache/james:distributed-pop3-latest
----
=====================================================
== File: server/apps/distributed-pop3-app/src/main/extensions-jars/README.md
=====================================================
# Adding Jars to JAMES
The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.
You can use it to add your custom Mailets/Matchers.
=====================================================
== File: server/apps/distributed-pop3-app/src/main/scripts/james-cli
=====================================================
#!/bin/bash
unset JAVA_TOOL_OPTIONS
java -cp /root/resources:/root/classes:/root/libs/* -Dlogback.configurationFile=/root/conf/logback-cli.xml org.apache.james.cli.ServerCmd "$@"
=====================================================
== File: server/apps/distributed-pop3-app/src/test/resources/attachment.eml
=====================================================
=====================================================
== File: server/apps/distributed-pop3-app/src/test/resources/big.eml
=====================================================
=====================================================
== File: server/apps/distributed-pop3-app/src/test/resources/batchsizes.properties
=====================================================
# Those properties let you configure the number of messages queried at the same time.
# IMAP FETCH command
fetch.metadata=200
fetch.headers=200
fetch.body=100
fetch.full=50
# IMAP COPY command
copy=100
# IMAP MOVE command
move=100
=====================================================
== File: server/apps/distributed-pop3-app/src/test/resources/rabbitmq.properties
=====================================================
uri=amqp://james:james@rabbitmq_host:5672
management.uri=http://james:james@rabbitmq_host:15672/api/
=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.
# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes
# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.
#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=
=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties
=====================================================
# ============================================= Deleted Messages Vault Configuration ==================================
enabled=false
# Enable work queue to be used with deleted message vault
# Default to false
# workQueueEnabled=false
# Retention period for your deleted messages into the vault, after which they expire and can be potentially cleaned up
# Optional, default 1y
# retentionPeriod=1y
# Mailbox that will contain messages restored from the vault, will be created if it does not exist yet
# Optional, default 'Restored-Messages' ; must be set to INBOX for POP3
restoreLocation=INBOX
=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.
# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever
# The delimiter used to separate parent/child folders.
# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
# WARNING: This value should only be changed when setting up a new deployment. Changing the parameter for an existing deployments
# will likely lead to failure of some system components, as occurrences of old delimiter will still be present in the database/data store.
# james.mailbox.folder.delimiter=dot
# Required to locate Cassandra driver configuration
config.file=conf/cassandra-driver.conf
# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K
# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false
# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
# - none: Disables resource leak detection.
# - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
# - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
# - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple
# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true
# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE
# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true
# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true
=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/logs/james.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
<appender-ref ref="LOG_FILE" />
</appender>
<root level="WARN">
<appender-ref ref="ASYNC" />
</root>
<logger name="org.apache.james" level="INFO" />
<logger name="com.datastax.driver.core.QueryLogger.SLOW" level="DEBUG" />
</configuration>
=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/cassandra-driver.conf
=====================================================
# James reference configuration for the DataStax Java driver for Apache Cassandra®.
#
# Unless you use a custom mechanism to load your configuration (see
# SessionBuilder.withConfigLoader), all the values declared here will be used as defaults.
#
# See https://docs.datastax.com/en/developer/java-driver/4.13/manual/core/configuration/ for
# available options.
#
# Please note that contact point and authentication needs to be set in cassandra.properties for now.
datastax-java-driver {
basic.request {
timeout = 5 seconds
consistency = QUORUM
page-size = 5000
serial-consistency = SERIAL
}
advanced.connection {
connect-timeout = 5 seconds
init-query-timeout = 5 seconds
pool {
local.size = 2
remote.size = 2
}
max-requests-per-connection = 1024
max-orphan-requests = 256
warn-on-init-error = true
}
advanced.throttler {
// class = org.apache.james.backends.cassandra.utils.LockLessConcurrencyLimitingRequestThrottler
class = ConcurrencyLimitingRequestThrottler
max-queue-size = 10000
max-concurrent-requests = 192
}
advanced.reconnect-on-init = true
=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/batchsizes.properties
=====================================================
# Those properties let you configure the number of messages queried at the same time.
# IMAP FETCH command
fetch.metadata=200
fetch.headers=200
fetch.body=100
fetch.full=50
# IMAP COPY command
copy=100
# IMAP MOVE command
move=100
=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/blob.properties
=====================================================
# ============================================= BlobStore Implementation ==================================
# Read https://james.apache.org/server/config-blobstore.html for further details
# Choose your BlobStore implementation
# Mandatory, allowed values are: cassandra, s3
# *WARNING*: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
# alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)
implementation=s3
# ========================================= Deduplication ========================================
# If you choose to enable deduplication, the mails with the same content will be stored only once.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
# the mails sharing the same content once one is deleted.
# Mandatory, Allowed values are: true, false
deduplication.enable=false
# ========================================= Encryption ========================================
# If you choose to enable encryption, the blob content will be encrypted before storing them in the BlobStore.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to all content being
# encrypted. This comes at a performance impact but presents you from leaking data if, for instance the third party
# offering you a S3 service is compromised.
# Optional, Allowed values are: true, false, defaults to false
encryption.aes.enable=false
# Mandatory (if AES encryption is enabled) salt and password. Salt needs to be an hexadecimal encoded string
#encryption.aes.password=xxx
#encryption.aes.salt=73616c7479
# Optional, defaults to PBKDF2WithHmacSHA512
#encryption.aes.private.key.algorithm=PBKDF2WithHmacSHA512
# ========================================= Cassandra BlobStore Cache ======================================
# A cassandra cache can be enabled to reduce latency when reading small blobs frequently
# A dedicated keyspace with a replication factor of one is then used
# Cache eviction policy is TTL based
# Only blobs below a given threshold will be stored.
# To be noted that blobs are stored within a single Cassandra row, hence a low threshold should be used.
# Enable the cache? Optional and default to false. Must be a boolean.
cache.enable=false
# Cache eviction policy is TTL based. Optional and defaults to 7 days. Must be a duration.
# Valid units: ms, sec, min, hour, day, week, month, year
# cache.cassandra.ttl=7days
# Maximum size of stored objects expressed in bytes. Must be strictly positive. Defaults to 8192.
# Units: bytes, Kib, MiB, GiB, TiB
# cache.sizeThresholdInBytes=8 KiB
# ============================================== ObjectStorage ============================================
=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/cassandra.properties
=====================================================
# Configuration file for cassandra mailbox
# Read https://james.apache.org/server/config-cassandra.html for further details
# Advanced Cassandra driver option needs to be set via cassandra-driver.conf configuration file
cassandra.nodes=cassandra
cassandra.keyspace.create=true
cassandra.keyspace=apache_james
#cassandra.user=cassandra
#cassandra.password=cassandra
cassandra.replication.factor=1
cassandra.retryConnection.maxRetries=200
cassandra.retryConnection.minDelay=5000
# Optional. Allows specifying consistency level ONE for reads in Cassandra BlobStore.
# Falls back to default read consistency level if the blob is missing.
# Defaults to false.
# optimistic.consistency.level.enabled=false
# Optional. Allows not to use lightweight transactions in CassandraMailRepository.
# If disabled we implement an idempotent behaviour (duplicates are overridden, missing entries upon deletes are ignored).
# Defaults to true.
# mailrepository.strong.consistency=true
=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/rabbitmq.properties
=====================================================
# RabbitMQ configuration
# Read https://james.apache.org/server/config-rabbitmq.html for further details
# Mandatory
uri=amqp://rabbitmq:5672
# If you use a vhost, specify it as well at the end of the URI
# uri=amqp://rabbitmq:5672/vhost
# Vhost to use for creating queues and exchanges
# Optional, only use this if you have invalid URIs containing characters like '_'
# vhost=vhost1
# Optional, default to the host specified as part of the URI.
# Allow creating cluster aware connections.
# hosts=ip1:5672,ip2:5672
# RabbitMQ Administration Management
# Mandatory
management.uri=http://rabbitmq:15672
# Mandatory
management.user=guest
# Mandatory
management.password=guest
# Configure retries count to retrieve a connection. Exponential backoff is performed between each retries.
# Optional integer, defaults to 10
#connection.pool.retries=10
# Configure initial duration (in ms) between two connection retries. Exponential backoff is performed between each retries.
# Optional integer, defaults to 100
#connection.pool.min.delay.ms=100
# Configure retries count to retrieve a channel. Exponential backoff is performed between each retries.
# Optional integer, defaults to 3
#channel.pool.retries=3
# Configure timeout duration (in ms) to obtain a rabbitmq channel. Defaults to 30 seconds.
# Optional integer, defaults to 30 seconds.
#channel.pool.max.delay.ms=30000
# Configure the size of the channel pool.
# Optional integer, defaults to 3
#channel.pool.size=3
# Optional, non-negative integer, default to 100ms.
# The interval (in ms) that RabbitMQ driver will automatic recovery wait before attempting to reconnect.
# See https://www.rabbitmq.com/client-libraries/java-api-guide#connection-recovery
#driver.network.recovery.interval=100
# Boolean. Whether to activate Quorum queue usage for all queues.
# Quorum queues enables high availability.
# False (default value) results in the usage of classic queues.
#quorum.queues.enable=true
=====================================================
== File: server/apps/migration/core-data-jpa-to-pg/README.adoc
=====================================================
= James Core Data migration tool
== Introduction ==
Starting with James 3.9, a new SQL database backend was introduced. The new backend only targets PostgresSQL a modern, fully opensource, production ready database suitable for small to rather large deployments.
The database schema for the new backend has been rebuilt from scratch and does not match the schema used by the legacy JPA stack.
To facilitate migrating from any database backed by the JPA backend to PostgreSQL on the new backend, this migration tool will convert all the data from the JPA schema to the Jooq/PostgreSQL schema.
The recommended migration process is to :
- stop your server,
- backup your database (and make sure you can restore your backup),
- run the migration tool,
- start your server with the new version.
This tool is non-destructive (it only reads the JPA data), it is also designed to be idempotent.
Running the migration several times will not crash because data already exists.
Therefore, if an error occur you can quickly restart your service using the old version of your app.
You can then analyse the problem and solve it before attempting the migration again.
Once the migration is successful, you will have to delete the old tables using your usual DBA tools.
== Building the application
In order to build the packages, run:
----
mvn clean install -DskipTests
----
== ZIP distribution
Available in `target` directory, the ZIP include detailed instructions.
== Docker distribution
To import the image locally:
----
docker image load -i target/jib-image.tar
----
Then run it:
----
docker run apache/james:migration-core-data-jpa-to-pg-latest
=====================================================
== File: server/apps/migration/core-data-jpa-to-pg/src/main/scripts/james-migration
=====================================================
#!/usr/bin/env bash
unset JAVA_TOOL_OPTIONS
java -cp /root/resources:/root/classes:/root/libs/* \
-Dworking.directory=/root/conf \
-Dlogback.configurationFile=/root/conf/logback.xml \
org.apache.james.JpaToPgCoreDataMigration "$@"
=====================================================
== File: server/apps/migration/core-data-jpa-to-pg/src/assemble/README.adoc
=====================================================
= Guice-Memory Module How-to
== Requirements
* Java SDK, the minimum version can be found in the https://github.com/apache/james-project/blob/master/pom.xml#L612[build descriptor]
== Running
To run james, you have to create a directory containing required configuration files.
James requires the configuration to be in a subfolder of working directory that is called
**conf**. A https://github.com/apache/james-project/tree/master/server/apps/migration/migration-core-data-jpa-to-pg/sample-configuration[sample directory]
is provided with some default values you may need to replace. You will need to update its content to match your needs.
Once everything is set up, you just have to run the jar with:
[source]
----
$ java -Dworking.directory=. -Dlogback.configurationFile=conf/logback.xml -Djdk.tls.ephemeralDHKeySize=2048 -jar migration-core-data-jpa-to-pg.jar
----
=====================================================
== File: server/apps/migration/core-data-jpa-to-pg/src/assemble/extensions-jars.txt
=====================================================
# Adding Jars to JAMES
The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.
You can use it to add you customs Mailets/Matchers.
=====================================================
== File: server/apps/migration/core-data-jpa-to-pg/sample-configuration/postgres.properties
=====================================================
# String. Optional, default to 'postgres'. Database name.
database.name=james
#database.name=${env:POSTGRESQL_DATABASE_NAME}
# String. Optional, default to 'public'. Database schema.
database.schema=public
#database.schema=${env:POSTGRESQL_DATABASE_SCHEMA}
# String. Optional, default to 'localhost'. Database host.
database.host=postgres
#database.host=${env:POSTGRESQL_HOST}
# Integer. Optional, default to 5432. Database port.
database.port=5432
#database.port=${env:POSTGRESQL_PORT}
# String. Required. Database username.
database.username=james
#database.username=${env:POSTGRESQL_USERNAME}
# String. Required. Database password of the user.
database.password=secret1
#database.password=${env:POSTGRESQL_PASSWORD}
# Boolean. Optional, default to false. Whether to enable row level security.
row.level.security.enabled=false
# String. It is required when row.level.security.enabled is true. Database username with the permission of bypassing RLS.
#database.by-pass-rls.username=bypassrlsjames
# String. It is required when row.level.security.enabled is true. Database password of by-pass-rls user.
#database.by-pass-rls.password=secret1
# Integer. Optional, default to 10. Database connection pool initial size.
pool.initial.size=10
# Integer. Optional, default to 15. Database connection pool max size.
pool.max.size=15
# Integer. Optional, default to 5. rls-bypass database connection pool initial size.
by-pass-rls.pool.initial.size=5
# Integer. Optional, default to 10. rls-bypass database connection pool max size.
by-pass-rls.pool.max.size=10
# String. Optional, defaults to allow. SSLMode required to connect to the Postgresql db server.
# Check https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION for a list of supported SSLModes.
ssl.mode=allow
## Duration. Optional, defaults to 10 second. jOOQ reactive timeout when executing Postgres query. This setting prevent jooq reactive bug from causing hanging issue.
=====================================================
== File: server/apps/migration/core-data-jpa-to-pg/sample-configuration/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/james.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
<appender-ref ref="LOG_FILE" />
</appender>
<root level="WARN">
<appender-ref ref="ASYNC" />
</root>
<logger name="org.apache.james" level="INFO" />
</configuration>
=====================================================
== File: server/apps/migration/core-data-jpa-to-pg/sample-configuration/blob.properties
=====================================================
# ============================================= BlobStore Implementation ==================================
# Read https://james.apache.org/server/config-blobstore.html for further details
# Choose your BlobStore implementation
# Mandatory, allowed values are: file, s3, postgres.
implementation=postgres
# ========================================= Deduplication ========================================
# For the migration tool, deduplication must be disabled. This is ok since JPA doesn't support
# blobstore storage and you can enable deduplication afterwards in the app.
deduplication.enable=false
# deduplication.family needs to be incremented every time the deduplication.generation.duration is changed
# Positive integer, defaults to 1
# deduplication.gc.generation.family=1
# Duration of generation.
# Deduplication only takes place within a singe generation.
# Only items two generation old can be garbage collected. (This prevent concurrent insertions issues and
# accounts for a clock skew).
# deduplication.family needs to be incremented everytime this parameter is changed.
# Duration. Default unit: days. Defaults to 30 days.
# deduplication.gc.generation.duration=30days
# ========================================= Encryption ========================================
# If you choose to enable encryption, the blob content will be encrypted before storing them in the BlobStore.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to all content being
# encrypted. This comes at a performance impact but presents you from leaking data if, for instance the third party
# offering you a S3 service is compromised.
# Optional, Allowed values are: true, false, defaults to false
encryption.aes.enable=false
# Mandatory (if AES encryption is enabled) salt and password. Salt needs to be an hexadecimal encoded string
#encryption.aes.password=xxx
#encryption.aes.salt=73616c7479
# Optional, defaults to PBKDF2WithHmacSHA512
#encryption.aes.private.key.algorithm=PBKDF2WithHmacSHA512
# ============================================ Blobs Exporting ==============================================
# Read https://james.apache.org/server/config-blob-export.html for further details
# Choosing blob exporting mechanism, allowed mechanism are: localFile, linshare
# LinShare is a file sharing service, will be explained in the below section
# Optional, default is localFile
blob.export.implementation=localFile
# ======================================= Local File Blobs Exporting ========================================
# Optional, directory to store exported blob, directory path follows James file system format
# default is file://var/blobExporting
blob.export.localFile.directory=file://var/blobExporting
=====================================================
== File: server/apps/jpa-smtp-app/docker-configuration/logback-cli.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
</appender>
<root level="ERROR">
<appender-ref ref="ASYNC" />
</root>
<logger name="org.apache.james" level="INFO" />
</configuration>
=====================================================
== File: server/apps/jpa-smtp-app/docker-compose.yml
=====================================================
version: '3'
# In order to start James JPA app on top of mariaDB:
# 1. Download the driver: `wget https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/2.7.2/mariadb-java-client-2.7.2.jar`
# 2. Generate the keystore with the default password `james72laBalle`: `keytool -genkey -alias james -keyalg RSA -keystore keystore`
# 3. Start MariaDB: `docker-compose up -d mariadb`
# 4. Start James: `docker-compose up james`
services:
james:
depends_on:
- mariadb
image: apache/james:jpa-smtp-latest
container_name: james
hostname: james.local
volumes:
- $PWD/mariadb-java-client-2.7.2.jar:/root/libs/james-jdbc-driver.jar
- $PWD/sample-configuration/james-database-mariadb.properties:/root/conf/james-database.properties
- $PWD/keystore:/root/conf/keystore
mariadb:
image: mariadb:10.6
environment:
- MARIADB_ROOT_PASSWORD=test
- MARIADB_DATABASE=test
- MARIADB_USER=test
- MARIADB_PASSWORD=test
=====================================================
== File: server/apps/jpa-smtp-app/README.adoc
=====================================================
= Guice-JPA SMTP Server How-to
This server target single node James deployments. By default, the derby database is used.
This server acts as a Mail Transfer Agent and do not embed the mailbox component.
== Requirements
* Java 21 SDK
== Running
To run james, you have to create a directory containing required configuration files.
James requires the configuration to be in a subfolder of working directory that is called
**conf**. A [sample directory](https://github.com/apache/james-project/tree/master/server/apps/jpa-smtp-app/sample-configuration)
is provided with some default values you may need to replace. You will need to update its content to match your needs.
You also need to generate a keystore with the following command:
[source]
----
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
----
Once everything is set up, you just have to run the jar with:
[source]
----
$ java -javaagent:james-server-jpa-smtp-app.lib/openjpa-4.1.1.jar \
-Dworking.directory=. \
-Djdk.tls.ephemeralDHKeySize=2048 \
-Dlogback.configurationFile=conf/logback.xml \
-jar james-server-jpa-smtp-app.jar
----
Note that binding ports below 1024 requires administrative rights.
== Docker distribution
To import the image locally:
[source]
----
docker image load -i target/jib-image.tar
----
Then run it:
[source]
=====================================================
== File: server/apps/jpa-smtp-app/src/main/extensions-jars/README.md
=====================================================
# Adding Jars to JAMES
The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.
You can use it to add your custom Mailets/Matchers.
=====================================================
== File: server/apps/jpa-smtp-app/src/main/scripts/james-cli
=====================================================
#!/bin/bash
unset JAVA_TOOL_OPTIONS
java -cp /root/resources:/root/classes:/root/libs/* -Dlogback.configurationFile=/root/conf/logback-cli.xml org.apache.james.cli.ServerCmd "$@"
=====================================================
== File: server/apps/jpa-smtp-app/src/assemble/extensions-jars.txt
=====================================================
# Adding Jars to JAMES
The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.
You can use it to add you customs Mailets/Matchers.
=====================================================
== File: server/apps/jpa-smtp-app/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.
# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes
# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.
#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=
=====================================================
== File: server/apps/jpa-smtp-app/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.
# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever
# The delimiter used to separate parent/child folders.
# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
# WARNING: This value should only be changed when setting up a new deployment. Changing the parameter for an existing deployments
# will likely lead to failure of some system components, as occurrences of old delimiter will still be present in the database/data store.
# james.mailbox.folder.delimiter=dot
# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K
# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false
# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
# - none: Disables resource leak detection.
# - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
# - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
# - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple
# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true
# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE
# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true
# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true
# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
=====================================================
== File: server/apps/jpa-smtp-app/sample-configuration/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/logs/james.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
<appender-ref ref="LOG_FILE" />
</appender>
<root level="WARN">
<appender-ref ref="ASYNC" />
</root>
<logger name="org.apache.james" level="INFO" />
</configuration>
=====================================================
== File: server/apps/postgres-app/clean_up.sql
=====================================================
-- This is a script to delete old rows from some tables. One of the attempts to clean up the never-used data after a long time.
DO
$$
DECLARE
days_to_keep INTEGER;
BEGIN
-- Set the number of days dynamically
days_to_keep := 60;
-- Delete rows older than the specified number of days in email_change
DELETE
FROM email_change
WHERE date < current_timestamp - interval '1 day' * days_to_keep;
-- Delete rows older than the specified number of days in mailbox_change
DELETE
FROM email_change
WHERE date < current_timestamp - interval '1 day' * days_to_keep;
-- Delete outdated vacation notifications (older than the current UTC timestamp)
DELETE
FROM vacation_notification_registry
WHERE expiry_date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC';
END
$$;
=====================================================
== File: server/apps/postgres-app/sample-configuration-single/search.properties
=====================================================
# not for production purposes. To be replaced by PG based search.
implementation=scanning
=====================================================
== File: server/apps/postgres-app/docker-compose.yml
=====================================================
version: '3'
services:
james:
depends_on:
- postgres
image: apache/james:postgres-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
volumes:
- ./sample-configuration-single/search.properties:/root/conf/search.properties
- ./sample-configuration/blob.properties:/root/conf/blob.properties
postgres:
image: postgres:16.9
ports:
- "5432:5432"
environment:
- POSTGRES_DB=james
- POSTGRES_USER=james
- POSTGRES_PASSWORD=secret1
=====================================================
== File: server/apps/postgres-app/README.adoc
=====================================================
= Guice-Postgres Server How-to
This server targets reactive James deployments with postgresql database.
== Requirements
* Java 11 SDK
=== With Postgresql only
Firstly, create your own user network on Docker for the James environment:
$ docker network create --driver bridge james
Third party compulsory dependencies:
* Postgresql 16.0
[source]
----
$ docker run -d --network james -p 5432:5432 --name=postgres --env 'POSTGRES_DB=james' --env 'POSTGRES_USER=james' --env 'POSTGRES_PASSWORD=secret1' postgres:16.9
----
=== Distributed version
Here you have the choice of using other third party softwares to handle object data storage, search indexing and event bus.
For now, dependencies supported are:
* OpenSearch 2.8.0
[source]
----
$ docker run -d --network james -p 9200:9200 --name=opensearch --env 'discovery.type=single-node' opensearchproject/opensearch:2.19.2
----
* Zenko Cloudserver or AWS S3
[source]
----
$ docker run -d --network james --env 'REMOTE_MANAGEMENT_DISABLE=1' --env 'SCALITY_ACCESS_KEY_ID=accessKey1' --env 'SCALITY_SECRET_ACCESS_KEY=secretKey1' --name=s3 registry.scality.com/cloudserver/cloudserver:8.7.25
----
* RabbitMQ 3.12.1
[source]
----
$ docker run -d --network james -p 5672:5672 -p 15672:15672 --name=rabbitmq rabbitmq:4.1.1-management
----
=====================================================
== File: server/apps/postgres-app/sample-configuration-distributed/blob.properties
=====================================================
# ============================================= BlobStore Implementation ==================================
# Read https://james.apache.org/server/config-blobstore.html for further details
# Choose your BlobStore implementation
# Mandatory, allowed values are: file, s3, postgres.
implementation=s3
# ========================================= Deduplication ========================================
# If you choose to enable deduplication, the mails with the same content will be stored only once.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
# the mails sharing the same content once one is deleted.
# Mandatory, Allowed values are: true, false
deduplication.enable=true
# deduplication.family needs to be incremented every time the deduplication.generation.duration is changed
# Positive integer, defaults to 1
# deduplication.gc.generation.family=1
# Duration of generation.
# Deduplication only takes place within a singe generation.
# Only items two generation old can be garbage collected. (This prevent concurrent insertions issues and
# accounts for a clock skew).
# deduplication.family needs to be incremented everytime this parameter is changed.
# Duration. Default unit: days. Defaults to 30 days.
# deduplication.gc.generation.duration=30days
# ========================================= Encryption ========================================
# If you choose to enable encryption, the blob content will be encrypted before storing them in the BlobStore.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to all content being
# encrypted. This comes at a performance impact but presents you from leaking data if, for instance the third party
# offering you a S3 service is compromised.
# Optional, Allowed values are: true, false, defaults to false
encryption.aes.enable=false
# Mandatory (if AES encryption is enabled) salt and password. Salt needs to be an hexadecimal encoded string
#encryption.aes.password=xxx
#encryption.aes.salt=73616c7479
# Optional, defaults to PBKDF2WithHmacSHA512
#encryption.aes.private.key.algorithm=PBKDF2WithHmacSHA512
# ============================================== ObjectStorage ============================================
# ========================================= ObjectStorage Buckets ==========================================
# bucket names prefix
# Optional, default no prefix
# objectstorage.bucketPrefix=prod-
# Default bucket name
# Optional, default is bucketPrefix + `default`
# objectstorage.namespace=james
=====================================================
== File: server/apps/postgres-app/sample-configuration-distributed/rabbitmq.properties
=====================================================
# RabbitMQ configuration
# Read https://james.apache.org/server/config-rabbitmq.html for further details
# Mandatory
uri=amqp://rabbitmq:5672
# If you use a vhost, specify it as well at the end of the URI
# uri=amqp://rabbitmq:5672/vhost
# Vhost to use for creating queues and exchanges
# Optional, only use this if you have invalid URIs containing characters like '_'
# vhost=vhost1
# Optional, default to the host specified as part of the URI.
# Allow creating cluster aware connections.
# hosts=ip1:5672,ip2:5672
# RabbitMQ Administration Management
# Mandatory
management.uri=http://rabbitmq:15672
# Mandatory
management.user=guest
# Mandatory
management.password=guest
# Configure retries count to retrieve a connection. Exponential backoff is performed between each retries.
# Optional integer, defaults to 10
#connection.pool.retries=10
# Configure initial duration (in ms) between two connection retries. Exponential backoff is performed between each retries.
# Optional integer, defaults to 100
#connection.pool.min.delay.ms=100
# Configure retries count to retrieve a channel. Exponential backoff is performed between each retries.
# Optional integer, defaults to 3
#channel.pool.retries=3
# Configure timeout duration (in ms) to obtain a rabbitmq channel. Defaults to 30 seconds.
# Optional integer, defaults to 30 seconds.
#channel.pool.max.delay.ms=30000
# Configure the size of the channel pool.
# Optional integer, defaults to 3
#channel.pool.size=3
# Boolean. Whether to activate Quorum queue usage for use cases that benefits from it (work queue).
# Quorum queues enables high availability.
# False (default value) results in the usage of classic queues.
#quorum.queues.enable=true
# Strictly positive integer. The replication factor to use when creating quorum queues.
#quorum.queues.replication.factor
# Parameters for the Cassandra administrative view
=====================================================
== File: server/apps/postgres-app/src/main/extensions-jars/README.md
=====================================================
# Adding Jars to JAMES
The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.
You can use it to add your custom Mailets/Matchers.
=====================================================
== File: server/apps/postgres-app/src/main/scripts/james-cli
=====================================================
#!/bin/bash
unset JAVA_TOOL_OPTIONS
java -cp /root/resources:/root/classes:/root/libs/* org.apache.james.cli.ServerCmd "$@"
=====================================================
== File: server/apps/postgres-app/src/test/resources/eml/htmlMail.eml
=====================================================
Delivered-To: mister@james.org
Received: by 10.28.170.202 with SMTP id t193csp327634wme;
Thu, 4 Jun 2015 00:36:15 -0700 (PDT)
X-Received: by 10.180.77.195 with SMTP id u3mr5042880wiw.30.1433403375307;
Thu, 04 Jun 2015 00:36:15 -0700 (PDT)
Return-Path: <bounces+1453977-062b-mister=james.org@email.airbnb.com>
Received: from o7.email.airbnb.com (o7.email.airbnb.com. [167.89.32.249])
by mx.google.com with ESMTPS id i2si5691730wjz.123.2015.06.04.00.36.13
for <mister@james.org>
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Thu, 04 Jun 2015 00:36:15 -0700 (PDT)
Received-SPF: pass (google.com: domain of bounces+1453977-062b-mister=james.org@email.airbnb.com designates 167.89.32.249 as permitted sender) client-ip=167.89.32.249;
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of bounces+1453977-062b-mister=james.org@email.airbnb.com designates 167.89.32.249 as permitted sender) smtp.mail=bounces+1453977-062b-mister=james.org@email.airbnb.com;
dkim=pass header.i=@email.airbnb.com;
dmarc=pass (p=REJECT dis=NONE) header.from=airbnb.com
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=email.airbnb.com;
h=from:to:subject:mime-version:content-type:content-transfer-encoding;
s=s20150428; bh=2mhWUwzjtQTC0KljgpaEsuvrqok=; b=EhC2QHKb5+63egDD
qDCAepUELCeUZXCkw8+31kGT+O1va3iAKvQSAvzXJ3qJlIL9FgdeFk8sR78Vszn/
A73vp6NGjAW60M4gUZjxEOIPzGKIS95KfmHxg10fXUOFW0uePojNEg4ZPCcuitrZ
HuWvzHK5I2siGnqupiivwxDgs5c=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sendgrid.info;
h=from:to:subject:mime-version:content-type:content-transfer-encoding:x-feedback-id;
s=smtpapi; bh=2mhWUwzjtQTC0KljgpaEsuvrqok=; b=FPiYMmNJLCrL2e8v/0
DQC4voofe8nuuE7rhXZ25oqNAhAQja4oKIysJ1qAME2aEaqh+N5aJlCEuHrSG/7+
NAQ0OY8KaJ2zlnxAbmgJETOjnf4oGdAa+nU/nVVEPfN2NRcBCNLGQZ80U4T5k8Xi
PakIuZvKDTRq7PiosSCSHT/FQ=
Received: by filter0490p1mdw1.sendgrid.net with SMTP id filter0490p1mdw1.13271.556FFFE7B
2015-06-04 07:36:09.249601779 +0000 UTC
Received: from i-dee0850e.inst.aws.airbnb.com (ec2-54-90-154-187.compute-1.amazonaws.com [54.90.154.187])
by ismtpd-017 (SG) with ESMTP id 14dbd7fa6b4.779a.254b43
for <mister@james.org>; Thu, 04 Jun 2015 07:36:09 +0000 (UTC)
Received: by i-dee0850e.inst.aws.airbnb.com (Postfix, from userid 1041)
id 19CBA24C60; Thu, 4 Jun 2015 07:36:09 +0000 (UTC)
Date: Thu, 04 Jun 2015 07:36:08 +0000
From: Airbnb <discover@airbnb.com>
To: mister@james.org
Message-ID: <556fffe8cac78_7ed0e0fe204457be@i-dee0850e.mail>
Subject: Text and Html not similar
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--==_mimepart_556fffe8c7e84_7ed0e0fe20445637";
charset=UTF-8
Content-Transfer-Encoding: 7bit
X-User-ID: 32692788
X-Locale: fr
X-Category: engagement
X-Template: low_intent_top_destinations
recipients:
=====================================================
== File: server/apps/postgres-app/src/assemble/extensions-jars.txt
=====================================================
# Adding Jars to JAMES
The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.
You can use it to add you customs Mailets/Matchers.
=====================================================
== File: server/apps/postgres-app/provision.sh
=====================================================
#!/bin/bash
export WEBADMIN_BASE_URL="http://localhost:8000"
export DOMAIN_NAME="domain.org"
export USERS_COUNT=1000
echo "Start provisioning users."
user_file="./imap-provision-conf/users.csv"
# Remove old users.csv file
if [ -e "$user_file" ]; then
echo "Removing old users.csv file"
rm $user_file
fi
# Create domain
curl -X PUT ${WEBADMIN_BASE_URL}/domains/${DOMAIN_NAME}
for i in $(seq 1 $USERS_COUNT)
do
# Create user
echo "Creating user $i"
username=user${i}@$DOMAIN_NAME
curl -XPUT ${WEBADMIN_BASE_URL}/users/$username \
-d '{"password":"secret"}' \
-H "Content-Type: application/json"
# Append user to users.csv
echo -e "$username,secret" >> $user_file
done
echo "Finished provisioning users."
# Provisioning IMAP mailboxes and messages.
echo "Start provisioning IMAP mailboxes and messages..."
docker run --rm -it --name james-provisioning --network host -v ./imap-provision-conf/provisioning.properties:/conf/provisioning.properties \
-v $user_file:/conf/users.csv linagora/james-provisioning:latest
echo "Finished provisioning IMAP mailboxes and messages."
=====================================================
== File: server/apps/postgres-app/imap-provision-conf/provisioning.properties
=====================================================
# IMAP (S) URL of the James server. Certificates are blindly trusted
url=imaps://localhost:993
# Count of mailboxes to create per user
mailbox.count=4
# Count of messages to create per folder
message.per.folder.count=5
# Count of messages to create in INBOX
message.inbox.count=5
# Count of threads of the IMAP client
thread.count=8
# Concurrent count of users to provision simultaneously
concurrent.user.count=10
# Connections to use per user
connection.per.user.count=2
# Read timeout of IMAP connections.
read.timeout.ms=180000
# Connect timeout
connect.timeout.ms=30000
# Count of users to offset (ignore) in the provisioning.
users.offset=0
# Count of users to provision
# users.limit=100
=====================================================
== File: server/apps/postgres-app/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.
# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes
# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.
#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=
=====================================================
== File: server/apps/postgres-app/sample-configuration/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----
=====================================================
== File: server/apps/postgres-app/sample-configuration/deletedMessageVault.properties
=====================================================
# ============================================= Deleted Messages Vault Configuration ==================================
enabled=false
# Retention period for your deleted messages into the vault, after which they expire and can be potentially cleaned up
# Optional, default 1y
# retentionPeriod=1y
=====================================================
== File: server/apps/postgres-app/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.
# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever
# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K
# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false
# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
# - none: Disables resource leak detection.
# - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
# - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
# - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple
# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true
# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE
# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true
# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true
# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
sun.rmi.dgc.client.gcInterval=3600000000
# Automatically generate a JMX password upon start. CLI is able to retrieve this password.
james.jmx.credential.generation=true
# Disable Remote Code Execution feature from JMX
=====================================================
== File: server/apps/postgres-app/sample-configuration/postgres.properties
=====================================================
# String. Optional, default to 'postgres'. Database name.
database.name=james
# String. Optional, default to 'public'. Database schema.
database.schema=public
# String. Optional, default to 'localhost'. Database host.
database.host=postgres
# Integer. Optional, default to 5432. Database port.
database.port=5432
# String. Required. Database username.
database.username=james
# String. Required. Database password of the user.
database.password=secret1
# Boolean. Optional, default to false. Whether to enable row level security.
row.level.security.enabled=false
# String. It is required when row.level.security.enabled is true. Database username with the permission of bypassing RLS.
#database.by-pass-rls.username=bypassrlsjames
# String. It is required when row.level.security.enabled is true. Database password of by-pass-rls user.
#database.by-pass-rls.password=secret1
# Integer. Optional, default to 10. Database connection pool initial size.
pool.initial.size=10
# Integer. Optional, default to 15. Database connection pool max size.
pool.max.size=15
# Integer. Optional, default to 5. rls-bypass database connection pool initial size.
by-pass-rls.pool.initial.size=5
# Integer. Optional, default to 10. rls-bypass database connection pool max size.
by-pass-rls.pool.max.size=10
# String. Optional, defaults to allow. SSLMode required to connect to the Postgresql db server.
# Check https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION for a list of supported SSLModes.
ssl.mode=allow
## Duration. Optional, defaults to 10 second. jOOQ reactive timeout when executing Postgres query. This setting prevent jooq reactive bug from causing hanging issue.
#jooq.reactive.timeout=10second
=====================================================
== File: server/apps/postgres-app/sample-configuration/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/logs/james.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
<appender-ref ref="LOG_FILE" />
</appender>
<root level="WARN">
<appender-ref ref="ASYNC" />
</root>
<logger name="org.apache.james" level="INFO" />
</configuration>
=====================================================
== File: server/apps/postgres-app/sample-configuration/jmap.properties
=====================================================
# Configuration file for JMAP
# Read https://james.apache.org/server/config-jmap.html for further details
enabled=true
tls.keystoreURL=file://conf/keystore
tls.secret=james72laBalle
# only not work for RabbitMQ mail queue
#delay.sends.enabled=true
# Alternatively TLS keys can be supplied via PEM files
# tls.privateKey=file://conf/private.nopass.key
# tls.certificates=file://conf/certs.self-signed.csr
# An optional secret might be specified for the private key
# tls.secret=james72laBalle
#
# If you wish to use OAuth authentication, you should provide a valid JWT public key.
# The following entry specify the link to the URL of the public key file,
# which should be a PEM format file.
#
# jwt.publickeypem.url=file://conf/jwt_publickey
# Should simple Email/query be resolved against a Cassandra projection, or should we resolve them against OpenSearch?
# This enables a higher resilience, but the projection needs to be correctly populated. False by default.
# view.email.query.enabled=true
# If you want to specify authentication strategies for Jmap rfc-8621 version
# For custom Authentication Strategy not inside package "org.apache.james.jmap.http", you have to specify its FQDN
# authentication.strategy.rfc8621=JWTAuthenticationStrategy,BasicAuthenticationStrategy
# Prevent server side request forgery by preventing calls to the private network ranges. Defaults to true, can be disabled for testing.
# webpush.prevent.server.side.request.forgery=false
=====================================================
== File: server/apps/postgres-app/sample-configuration/droplists.properties
=====================================================
# Configuration file for DropLists
enabled=false
=====================================================
== File: server/apps/postgres-app/sample-configuration/blob.properties
=====================================================
# ============================================= BlobStore Implementation ==================================
# Read https://james.apache.org/server/config-blobstore.html for further details
# Choose your BlobStore implementation
# Mandatory, allowed values are: file, s3, postgres.
implementation=postgres
# ========================================= Deduplication ========================================
# If you choose to enable deduplication, the mails with the same content will be stored only once.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
# the mails sharing the same content once one is deleted.
# Mandatory, Allowed values are: true, false
deduplication.enable=true
# deduplication.family needs to be incremented every time the deduplication.generation.duration is changed
# Positive integer, defaults to 1
# deduplication.gc.generation.family=1
# Duration of generation.
# Deduplication only takes place within a singe generation.
# Only items two generation old can be garbage collected. (This prevent concurrent insertions issues and
# accounts for a clock skew).
# deduplication.family needs to be incremented everytime this parameter is changed.
# Duration. Default unit: days. Defaults to 30 days.
# deduplication.gc.generation.duration=30days
# ========================================= Encryption ========================================
# If you choose to enable encryption, the blob content will be encrypted before storing them in the BlobStore.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to all content being
# encrypted. This comes at a performance impact but presents you from leaking data if, for instance the third party
# offering you a S3 service is compromised.
# Optional, Allowed values are: true, false, defaults to false
encryption.aes.enable=false
# Mandatory (if AES encryption is enabled) salt and password. Salt needs to be an hexadecimal encoded string
#encryption.aes.password=xxx
#encryption.aes.salt=73616c7479
# Optional, defaults to PBKDF2WithHmacSHA512
#encryption.aes.private.key.algorithm=PBKDF2WithHmacSHA512
# ============================================ Blobs Exporting ==============================================
# Read https://james.apache.org/server/config-blob-export.html for further details
# Choosing blob exporting mechanism, allowed mechanism are: localFile, linshare
# LinShare is a file sharing service, will be explained in the below section
# Optional, default is localFile
blob.export.implementation=localFile
# ======================================= Local File Blobs Exporting ========================================
# Optional, directory to store exported blob, directory path follows James file system format
=====================================================
== File: server/apps/postgres-app/docker-compose-distributed.yml
=====================================================
version: '3'
services:
james:
depends_on:
postgres:
condition: service_started
opensearch:
condition: service_healthy
s3:
condition: service_started
rabbitmq:
condition: service_started
image: apache/james:postgres-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
volumes:
- ./sample-configuration-distributed/opensearch.properties:/root/conf/opensearch.properties
- ./sample-configuration-distributed/blob.properties:/root/conf/blob.properties
- ./sample-configuration-distributed/rabbitmq.properties:/root/conf/rabbitmq.properties
networks:
- james
opensearch:
image: opensearchproject/opensearch:2.19.2
container_name: opensearch
healthcheck:
test: curl -s http://opensearch:9200 >/dev/null || exit 1
interval: 3s
timeout: 10s
retries: 5
environment:
- discovery.type=single-node
- DISABLE_INSTALL_DEMO_CONFIG=true
- DISABLE_SECURITY_PLUGIN=true
networks:
- james
=====================================================
== File: server/apps/postgres-app/performance-test.md
=====================================================
# Performance test Postgres app
To provision and benchmark an IMAP server backed by PostgreSQL, please have a look at following steps:
1. Build and extract the Postgres app docker image.
- `mvn clean install -DskipTests -Dmaven.skip.doc=true`
- `docker load -i ./target/jib-image.tar`
2. Run the Postgres app: `docker compose up`
3. Provision users and IMAP mailboxes + messages: `./provision.sh`
4. Performance test IMAP server using [james-gatling](https://github.com/linagora/james-gatling)
Sample IMAP simulation: `gatling:testOnly org.apache.james.gatling.simulation.imap.PlatformValidationSimulation`.
=====================================================
== File: server/apps/demo/initialdata.sh
=====================================================
#!/bin/bash
james-cli adddomain james.local
james-cli adduser user01@james.local 1234
james-cli adduser user02@james.local 1234
james-cli adduser user03@james.local 1234
=====================================================
== File: server/apps/demo/Dockerfile
=====================================================
# Run James
#
# VERSION 1.0
FROM apache/james:jpa-latest
# Install git
RUN apt-get update
RUN apt-get install -y git openssl
WORKDIR /root
RUN git clone https://github.com/vishnubob/wait-for-it.git wait-for-it
RUN cp /root/wait-for-it/wait-for-it.sh /usr/bin/wait-for-it.sh
COPY startup.sh /root
COPY initialdata.sh /root
COPY imapserver.xml /root/conf
COPY smtpserver.xml /root/conf
COPY pop3server.xml /root/conf
RUN chmod +x /root/startup.sh
RUN chmod +x /root/initialdata.sh
ENTRYPOINT ["./startup.sh"]
=====================================================
== File: server/apps/demo/startup.sh
=====================================================
#!/bin/bash
if [[ ! -e /root/conf/private.key ]]; then
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=Apache/L=Fundation/O=/CN=james.apache.org" -keyout /root/conf/private.key -out /root/conf/private.csr
fi
wait-for-it.sh --host=localhost --port=9999 --strict --timeout=0 -- ./initialdata.sh &
java -Djdk.tls.ephemeralDHKeySize=2048 \
-classpath '/root/resources:/root/classes:/root/libs/*' \
-javaagent:/root/libs/openjpa-4.1.1.jar \
-Dlogback.configurationFile=/root/conf/logback.xml \
-Dworking.directory=/root/ org.apache.james.JPAJamesServerMain
=====================================================
== File: server/apps/cli/README.adoc
=====================================================
== Apache James Server Command Line Interface
To invoke the James CLI from shell during your development process:
[source]
----
java -jar james-server-cli.jar -h localhost -p 9999 help
----
=====================================================
== File: server/apps/distributed-app/docker-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.
# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever
# The delimiter used to separate parent/child folders.
# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
# WARNING: This value should only be changed when setting up a new deployment. Changing the parameter for an existing deployments
# will likely lead to failure of some system components, as occurrences of old delimiter will still be present in the database/data store.
# james.mailbox.folder.delimiter=dot
# Required to locate Cassandra driver configuration
config.file=/root/conf/cassandra-driver.conf
# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K
# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false
# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
# - none: Disables resource leak detection.
# - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
# - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
# - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple
# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true
# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE
# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true
# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true
=====================================================
== File: server/apps/distributed-app/docker-configuration/logback-cli.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
</appender>
<root level="ERROR">
<appender-ref ref="ASYNC" />
</root>
<logger name="org.apache.james" level="INFO" />
</configuration>
=====================================================
== File: server/apps/distributed-app/docker-compose.yml
=====================================================
version: '3'
services:
james:
depends_on:
cassandra:
condition: service_healthy
opensearch:
condition: service_started
tika:
condition: service_started
rabbitmq:
condition: service_started
s3:
condition: service_started
image: apache/james:distributed-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
networks:
- james
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
opensearch:
image: opensearchproject/opensearch:2.19.2
environment:
- discovery.type=single-node
- DISABLE_INSTALL_DEMO_CONFIG=true
- DISABLE_SECURITY_PLUGIN=true
networks:
james:
aliases:
- elasticsearch
cassandra:
image: cassandra:4.1.9
ports:
- "9042:9042"
healthcheck:
test: [ "CMD", "cqlsh", "-e", "describe keyspaces" ]
=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/secrets.yaml
=====================================================
apiVersion: v1
data:
jwt_publickey: "{{ .Values.james.secret.jwtPublicKey | b64enc }}"
jwt_privatekey: "{{ .Values.james.secret.jwtPrivateKey | b64enc }}"
kind: Secret
type: Opaque
metadata:
name: james-jwt-key
---
apiVersion: v1
data:
james-user: "{{ .Values.james.secret.cassandraUser | b64enc }}"
james-password: "{{ .Values.james.secret.cassandraPassword | b64enc }}"
kind: Secret
type: Opaque
metadata:
name: db-cassandra-account-james
---
{{- if and (.Values.james.secret.esUser) (.Values.james.secret.esPassword) }}
apiVersion: v1
data:
james-user: "{{ .Values.james.secret.esUser | b64enc }}"
james-password: "{{ .Values.james.secret.esPassword | b64enc }}"
kind: Secret
type: Opaque
metadata:
name: db-es-account-james
{{- end }}
---
apiVersion: v1
data:
dkim.key: "{{ .Values.james.secret.dkimPrivateKey | b64enc }}"
kind: Secret
type: Opaque
metadata:
name: dkim-private-key
---
apiVersion: v1
data:
OS_S3_ENDPOINT: {{ .Values.james.secret.s3.endpoint | b64enc }}
OS_S3_REGION: {{ .Values.james.secret.s3.region | b64enc }}
OS_S3_ACCESSKEYID: {{ .Values.james.secret.s3.accessKeyId | b64enc }}
OS_S3_SECRETKEY: {{ .Values.james.secret.s3.secretKey | b64enc }}
kind: Secret
type: Opaque
metadata:
name: s3-james-credentials
---
apiVersion: v1
data:
=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/servicemonitor.yaml
=====================================================
{{- if .Values.serviceMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: james-service-monitor
labels:
{{- toYaml .Values.serviceMonitor.additionalLabels | nindent 4 }}
spec:
jobLabel: jobLabel
selector:
matchLabels:
app: james
namespaceSelector:
matchNames:
- {{ .Release.Namespace }}
endpoints:
- port: web
path: /metrics
{{- end }}
=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/james-admin-ingress.yaml
=====================================================
{{- if .Values.adminIngress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: james-admin
{{- with .Values.adminIngress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- if .Values.adminIngress.ingressClassName }}
ingressClassName: {{ .Values.adminIngress.ingressClassName }}
{{- end }}
{{- if .Values.adminIngress.tls }}
tls:
- hosts:
- {{ .Values.dns.adminUrl }}
{{ toYaml .Values.adminIngress.tls }}
{{- end }}
rules:
- host: {{ .Values.dns.adminUrl }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: james-admin
port:
number: 8000
{{- end }}
=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/_docker-secrets.tpl
=====================================================
{{- define "imagePullSecret" }}
{{- printf "{\"auths\": {\"%s\": {\"auth\": \"%s\"}}}" .Values.dockerCredentials.registry (printf "%s:%s" .Values.dockerCredentials.username .Values.dockerCredentials.password | b64enc) | b64enc }}
{{- end }}
=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/_helpers.tpl
=====================================================
{{/*
Builds up the JAVA_TOOL_OPTIONS env variable for java tunning James
*/}}
{{- define "james.jvmOpts" -}}
{{- if .Values.james.env.glowroot.enabled }}
{{- printf "%s -javaagent:/root/glowroot/glowroot.jar" .Values.james.env.jvmOpts }}
{{- else }}
{{- .Values.james.env.jvmOpts }}
{{- end }}
{{- end }}
=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/jmap-ingress.yaml
=====================================================
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: jmap
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- if .Values.ingress.ingressClassName }}
ingressClassName: {{ .Values.ingress.ingressClassName }}
{{- end }}
{{- if .Values.ingress.tls }}
tls:
- hosts:
- {{ .Values.dns.jmapUrl }}
{{ toYaml .Values.ingress.tls }}
{{- end }}
rules:
- host: {{ .Values.dns.jmapUrl }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: jmap
port:
number: 80
{{- end }}
=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/deployment.yaml
=====================================================
{{- $elasticsearchUrl := include "elasticsearch.url.list" . }}
{{- $cassandraUrl := include "cassandra.url.list" . }}
{{- $jamesOpts := include "james.jvmOpts" . }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: james-jmap
spec:
selector:
matchLabels:
instance: james-jmap
replicas: {{ .Values.james.replicaJmapInstanceCount }}
template:
metadata:
labels:
app: james
instance: james-jmap
spec:
{{- if .Values.dockerCredentials }}
imagePullSecrets:
- name: docker-registry-secret
{{- end }}
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- james
topologyKey: "kubernetes.io/hostname"
containers:
- name: james-jmap
image: {{ .Values.james.image }}
readinessProbe:
httpGet:
path: /healthcheck/checks/Guice%20application%20lifecycle
port: 8000
initialDelaySeconds: 60
periodSeconds: 10
livenessProbe:
httpGet:
path: /healthcheck/checks/Guice%20application%20lifecycle
port: 8000
initialDelaySeconds: 91
periodSeconds: 30
=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/service.yaml
=====================================================
kind: Service
apiVersion: v1
metadata:
name: james-client
spec:
selector:
instance: james-imap-smtp
type: ClusterIP
ports:
- protocol: TCP
port: 465
name: "smtp-ssl"
---
apiVersion: v1
kind: Service
metadata:
name: james-imap
spec:
selector:
instance: james-imap-smtp
ports:
- protocol: TCP
port: 993
name : "imap-ssl"
---
kind: Service
apiVersion: v1
metadata:
name: james-admin
spec:
selector:
app: james
ports:
- protocol: TCP
port: 8000
targetPort: 8000
name: "web"
---
kind: Service
apiVersion: v1
metadata:
name: jmap
spec:
selector:
instance: james-jmap
ports:
- protocol: TCP
port: 80
targetPort: 80
name: "web"
=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/_urls.tpl
=====================================================
{{/*
Contruct a temporary URL for Cassandra. This URL ends with a comma.
*/}}
{{- define "cassandra.url.list" -}}
{{- $port := "9042" }}
{{- $ns := .Values.cassandra.namespace }}
{{- if eq .Values.cassandra.deploy "as-pod" }}
{{- $count := int .Values.cassandra.replicaCount }}
{{- range $index := until $count }}
{{- printf "cassandra-%d.%s:%s," $index $ns $port }}
{{- end }}
{{- else }}
{{- range $ip := .Values.cassandra.ips }}
{{- printf "%s:%s," $ip $port }}
{{- end }}
{{- end }}
{{- end -}}
{{/*
Contruct a temporary URLfor Elastic Search. This URL ends with a comma
*/}}
{{- define "elasticsearch.url.list" -}}
{{- $port := "9200" }}
{{- $ns := .Values.cassandra.namespace }}
{{- if eq .Values.elasticsearch.deploy "as-pod" }}
{{- $count := int .Values.elasticsearch.replicaCount }}
{{- range $index := until $count }}
{{- printf "elasticsearch-%d.%s:%s," $index $ns $port }}
{{- end }}
{{- else }}
{{- range $ip := .Values.elasticsearch.ips }}
{{- printf "%s:%s," $ip $port }}
{{- end }}
{{- end }}
{{- end -}}
=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/configmaps.yaml
=====================================================
apiVersion: v1
kind: ConfigMap
metadata:
name: james-configs
data:
{{ (.Files.Glob "configs/*").AsConfig | indent 2 }}
=====================================================
== File: server/apps/distributed-app/helm-chart/james/secrets.sample.yaml
=====================================================
james:
secret:
jwtPublicKey: |-
-----BEGIN PUBLIC KEY-----
change-me
-----END PUBLIC KEY-----
jwtPrivateKey: |-
-----BEGIN PUBLIC KEY-----
change-me
-----END PUBLIC KEY-----
cassandraUser: change-me
cassandraPassword: change-me
esUser: change-me
esPassword: change-me
dkimPrivateKey: |-
-----BEGIN PRIVATE KEY-----
change-me
-----END PRIVATE KEY-----
s3:
endpoint: "http://s3-us-east-1.amazonaws.com"
region: "US"
accessKeyId: "change-me"
secretKey: "change-me"
bucketNameSuffix: "change-me"
ldap:
secret:
ldapUser: change-me
ldapPassword: change-me
rabbitmq:
secret:
jamesUser: change-me
jamesPassword: change-me
=====================================================
== File: server/apps/distributed-app/helm-chart/james/Chart.yaml
=====================================================
apiVersion: v2
name: james
description: A Helm chart for Distributed Apache James.
type: application
version: 0.2.0
=====================================================
== File: server/apps/distributed-app/helm-chart/james/values.yaml
=====================================================
dns:
## Default domain for all emailing components
emailDomain: "example.com"
jmapUrl: "jmap.example.com"
adminUrl: "admin.example.com"
smtpHostname: "smtp.example.com"
# Default values for james
james:
replicaJmapInstanceCount: 1
replicaImapSmtpInstanceCount: 1
image: apache/james:distributed-3.8.0
## Environment for James
env:
jamesCassandraKeyspace: sandbox_james
jamesCassandraCacheKeyspace: sandbox_james_cache
jamesEsMailboxIndex: "mailbox_v1"
jamesEsClusterName: "change-me"
jamesEsHostScheme: "http"
jamesEsSslValidationStrategy: "default"
jamesEsHostNameVerifier: "default"
jamesEsNbShards: 5
jamesEsNbReplica: 1
jamesEsMailboxReadAlias: "read-mailbox"
jamesEsMailboxWriteAlias: "write-mailbox"
jamesRabbitHost: "change-me"
jamesMessageSize: 25M
jamesDkimSignSmtp: "dkimselector"
jamesDkimSignDomain: "mail.example.com"
cassandraReplicationFactor: 3
jamesHELOMessage: "change-me"
jvmOpts: "-Xms3g -Xmx3g"
glowroot:
enabled: false
jamesResources:
limits:
cpu: "2000m"
memory: "4Gi"
requests:
cpu: "1000m"
memory: "4Gi"
tls:
secretName: the-name-of-a-secret
# Requires Prometheus Operator to be installed
serviceMonitor:
enabled: false
# Labels for Prometheus Operator to detect ServiceMonitor. Cannot be empty
additionalLabels:
change-me: change-me
=====================================================
== File: server/apps/distributed-app/helm-chart/james/configs/webadmin.properties
=====================================================
enabled=true
port=8000
cors.enable=true
cors.origin=*
jwt.enabled=true
extensions.routes=org.apache.james.webadmin.dropwizard.MetricsRoutes
=====================================================
== File: server/apps/distributed-app/helm-chart/james/configs/jmap.properties
=====================================================
# Configuration file for JMAP
enabled=${env:JAMES_JMAP_ENABLED}
tls.keystoreURL=file://secrets-jwt/keystore
tls.secret=${env:JAMES_KEYSTORE_PASSWORD}
#
# If you wish to use OAuth authentication, you should provide a valid JWT public key.
# The following entry specify the link to the URL of the public key file,
# which should be a PEM format file.
#
jwt.publickeypem.url=file://conf/jwt_publickey
jwt.privatekeypem.url=file://conf/jwt_privatekey
jmap.port=80
view.email.query.enabled=true
email.send.max.size=${env:JAMES_MESSAGE_SIZE}
upload.max.size=${env:JAMES_MESSAGE_SIZE}
=====================================================
== File: server/apps/distributed-app/helm-chart/james/configs/batchsizes.properties
=====================================================
# Those properties let you configure the number of messages queried at the same time.
# IMAP FETCH command
fetch.metadata=200
fetch.headers=30
fetch.body=30
fetch.full=30
# IMAP COPY command
copy=50
# IMAP MOVE command
move=50
=====================================================
== File: server/apps/distributed-app/helm-chart/james/configs/blob.properties
=====================================================
# ============================================= BlobStore Implementation ==================================
# Choose your BlobStore implementation
# Mandatory, allowed values are: cassandra, s3
implementation=s3
# ========================================= ObjectStorage deduplication ========================================
# If you choose to enable deduplication, the mails with the same content will be stored only once.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
# the mails sharing the same content once one is deleted.
# Mandatory, Allowed values are: true, false
deduplication.enable=true
single.save.enable=true
# ========================================= Cassandra BlobStore Cache ======================================
# A cassandra cache can be enabled to reduce latency when reading small blobs frequently
# A dedicated keyspace with a replication factor of one is then used
# Cache eviction policy is TTL based
# Only blobs below a given threshold will be stored.
# To be noted that blobs are stored within a single Cassandra row, hence a low threshold should be used.
# Enable the cache? Optional and default to false. Must be a boolean.
cache.enable=true
# Cache eviction policy is TTL based. Optional and defaults to 7 days. Must be a duration.
# Valid units: ms, sec, min, hour, day, week, month, year
cache.cassandra.ttl=1year
# Maximum size of stored objects expressed in bytes. Must be strictly positive. Defaults to 8192.
# Units: bytes, Kib, MiB, GiB, TiB
cache.sizeThresholdInBytes=16 KiB
# ============================================== ObjectStorage ============================================
# ========================================= ObjectStorage Buckets ==========================================
# bucket names prefix
# Optional, default no prefix
# objectstorage.bucketPrefix=james-${env:NAMESPACE}-
# Default bucket name
# Optional, default is bucketPrefix + `default`
objectstorage.namespace=james-${env:JAMES_BUCKET_SUFFIX}
# Fallback bucket name
# Optional, read this bucket when default bukcket reads fails if configured
# objectstorage.namespace.read.fallback=james-fallback
# ========================================= ObjectStorage on S3 =============================================
# Mandatory if you choose aws-s3 storage service, S3 authentication endpoint
objectstorage.s3.endPoint=${env:OS_S3_ENDPOINT}
=====================================================
== File: server/apps/distributed-app/helm-chart/james/configs/cassandra.properties
=====================================================
# Configuration file for cassandra mailbox
# http://james.apache.org/server/config-cassandra.html
cassandra.nodes=${env:JAMES_CASSANDRA_NODES_URLS}
cassandra.keyspace.create=true
cassandra.keyspace=${env:JAMES_CASSANDRA_KEYSPACE}
cassandra.keyspace.cache=${env:JAMES_CASSANDRA_CACHE_KEYSPACE}
cassandra.user=${env:JAMES_CASSANDRA_USER}
cassandra.password=${env:JAMES_CASSANDRA_PASSWORD}
cassandra.replication.factor=${env:JAMES_CASSANDRA_REPLICATION_FACTOR}
cassandra.retryConnection.maxRetries=10
cassandra.retryConnection.minDelay=5000
mailbox.max.retry.message.flags.update=16
mailbox.max.retry.message.id.flags.update=16
mailbox.max.retry.modseq=16
mailbox.max.retry.acl=16
mailbox.max.retry.uid=16
mailbox.read.repair.chance=0.00
mailbox.counters.read.repair.chance.max=0.000
mailbox.counters.read.repair.chance.one.hundred=0.000
chunk.size.message.read=16
mailbox.read.strong.consistency=false
message.read.strong.consistency=false
message.write.strong.consistency.unsafe=false
=====================================================
== File: server/apps/distributed-app/helm-chart/james/configs/rabbitmq.properties
=====================================================
uri=amqp://${env:JAMES_AMQP_USERNAME}:${env:JAMES_AMQP_PASSWORD}@${env:JAMES_AMQP_HOST}:${env:JAMES_AMQP_PORT}
# RabbitMQ Administration Management
management.uri=http://${env:JAMES_AMQP_HOST}:${env:JAMES_AMQP_MANAGEMENT_PORT}
management.user=${env:JAMES_AMQP_USERNAME}
management.password=${env:JAMES_AMQP_PASSWORD}
# Parameters for the Cassandra administrative view
# Period of the window. Too large values will lead to wide rows while too little values might lead to many queries.
# Use the number of mail per Cassandra row, along with your expected traffic, to determine this value
# This value can only be decreased to a value dividing the current value
mailqueue.view.sliceWindow=1h
# Use to distribute the emails of a given slice within your cassandra cluster
# A good value is 2*cassandraNodeCount
# This parameter can only be increased.
mailqueue.view.bucketCount=${env:JAMES_BUCKET_COUNT}
# Determine the probability to update the browse start pointer
# Too little value will lead to unnecessary reads. Too big value will lead to more expensive browse.
# Choose this parameter so that it get's update one time every one-two sliceWindow
mailqueue.view.updateBrowseStartPace=1000
# Enables or disables the gauge metric on the mail queue size
# Computing the size of the mail queue is currently implemented on top of browse operation and thus have a linear complexity
# Metrics get exported periodically as configured in opensearch.properties, thus getSize is also called periodically
# Choose to disable it when the mail queue size is getting too big
# Note that this is as well a temporary workaround until we get 'getSize' method better optimized
# Optional, default true
mailqueue.size.metricsEnabled=false
connection.pool.retries=3
connection.pool.min.delay.ms=50
channel.pool.retries=2
channel.pool.min.delay.ms=100
channel.pool.size=10
=====================================================
== File: server/apps/distributed-app/helm-chart/README.md
=====================================================
# Helm chart for James
## Introduction
This chart bootstraps the distributed version of Apache James Mail Server on [Kubernetes](http://kubernetes.io)
cluster using [Helm](https://helm.sh) package manager.
Documentation on how to use it can be found at [Run Kubernetes](https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/run/run-kubernetes.adoc).
## Notice about mailetcontainer
You will need to add yourself manually the `mailetcontainer.xml` configuration file into
the configs folder proper to your client before installing the helm James package.
You can get the template `mailetcontainer.xml` in our [sample-configuration](https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/) folder.
NB: It should change in a near future as helm should support such an operation.
## Notice about RabbitMQ
James is linked to RabbitMQ instances for mail processing.
You need RabbitMQ to run before deploying James. The username and password for `rabbitmq-account-james` secret must be created first from RabbitMQ.
=====================================================
== File: server/apps/distributed-app/docker-compose-with-pulsar.yml
=====================================================
version: '3'
services:
james:
depends_on:
cassandra:
condition: service_healthy
opensearch:
condition: service_started
rabbitmq:
condition: service_started
s3:
condition: service_started
pulsar:
condition: service_started
image: apache/james:distributed-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
networks:
- james
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
volumes:
- ./sample-configuration/pulsar.properties:/root/conf/pulsar.properties
- ./sample-configuration/queue-pulsar.properties:/root/conf/queue.properties
opensearch:
image: opensearchproject/opensearch:2.19.2
container_name: opensearch
environment:
- discovery.type=single-node
- DISABLE_INSTALL_DEMO_CONFIG=true
- DISABLE_SECURITY_PLUGIN=true
networks:
james:
aliases:
- elasticsearch
cassandra:
container_name: cassandra
=====================================================
== File: server/apps/distributed-app/README.adoc
=====================================================
= Guice-Distributed Server How-to
== Requirements
* Java 21 SDK
Firstly, create your own user network on Docker for the James environment:
$ docker network create --driver bridge james
Third party compulsory dependencies:
* Cassandra 4.0
* OpenSearch 2.1.0
* RabbitMQ-Management 3.8.18
* Zenko Cloudserver or AWS S3
[source]
----
$ docker run -d --network james -p 9042:9042 --name=cassandra cassandra:4.1.9
$ docker run -d --network james -p 9200:9200 --name=opensearch --env 'discovery.type=single-node' --env 'DISABLE_SECURITY_PLUGIN=true' --env 'DISABLE_INSTALL_DEMO_CONFIG=true' opensearchproject/opensearch:2.19.2
$ docker run -d --network james -p 5672:5672 -p 15672:15672 --name=rabbitmq rabbitmq:4.1.1-management
$ docker run -d --network james -p 8000:8000 --env 'REMOTE_MANAGEMENT_DISABLE=1' --env 'SCALITY_ACCESS_KEY_ID=accessKey1' --env 'SCALITY_SECRET_ACCESS_KEY=secretKey1' --name=s3 ghcr.io/scality/cloudserver:c1ba296859690c1cbbec609aaae430f6b04b4745
----
== Docker distribution
To import the image locally:
[source]
----
docker image load -i target/jib-image.tar
----
Then run it along with its dependency:
[source]
----
docker compose up -d
----
Use the [JAVA_TOOL_OPTIONS environment option](https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#jvm-flags)
to pass extra JVM flags. For instance:
[source]
----
james:
...
environment:
- JAVA_TOOL_OPTIONS=-Xmx500m -Xms500m
=====================================================
== File: server/apps/distributed-app/src/main/extensions-jars/README.md
=====================================================
# Adding Jars to JAMES
The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.
You can use it to add your custom Mailets/Matchers.
=====================================================
== File: server/apps/distributed-app/src/main/scripts/james-cli
=====================================================
#!/bin/bash
unset JAVA_TOOL_OPTIONS
java -cp /root/resources:/root/classes:/root/libs/* -Dlogback.configurationFile=/root/conf/logback-cli.xml org.apache.james.cli.ServerCmd "$@"
=====================================================
== File: server/apps/distributed-app/src/test/resources/eml/htmlMail.eml
=====================================================
Delivered-To: mister@james.org
Received: by 10.28.170.202 with SMTP id t193csp327634wme;
Thu, 4 Jun 2015 00:36:15 -0700 (PDT)
X-Received: by 10.180.77.195 with SMTP id u3mr5042880wiw.30.1433403375307;
Thu, 04 Jun 2015 00:36:15 -0700 (PDT)
Return-Path: <bounces+1453977-062b-mister=james.org@email.airbnb.com>
Received: from o7.email.airbnb.com (o7.email.airbnb.com. [167.89.32.249])
by mx.google.com with ESMTPS id i2si5691730wjz.123.2015.06.04.00.36.13
for <mister@james.org>
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Thu, 04 Jun 2015 00:36:15 -0700 (PDT)
Received-SPF: pass (google.com: domain of bounces+1453977-062b-mister=james.org@email.airbnb.com designates 167.89.32.249 as permitted sender) client-ip=167.89.32.249;
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of bounces+1453977-062b-mister=james.org@email.airbnb.com designates 167.89.32.249 as permitted sender) smtp.mail=bounces+1453977-062b-mister=james.org@email.airbnb.com;
dkim=pass header.i=@email.airbnb.com;
dmarc=pass (p=REJECT dis=NONE) header.from=airbnb.com
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=email.airbnb.com;
h=from:to:subject:mime-version:content-type:content-transfer-encoding;
s=s20150428; bh=2mhWUwzjtQTC0KljgpaEsuvrqok=; b=EhC2QHKb5+63egDD
qDCAepUELCeUZXCkw8+31kGT+O1va3iAKvQSAvzXJ3qJlIL9FgdeFk8sR78Vszn/
A73vp6NGjAW60M4gUZjxEOIPzGKIS95KfmHxg10fXUOFW0uePojNEg4ZPCcuitrZ
HuWvzHK5I2siGnqupiivwxDgs5c=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sendgrid.info;
h=from:to:subject:mime-version:content-type:content-transfer-encoding:x-feedback-id;
s=smtpapi; bh=2mhWUwzjtQTC0KljgpaEsuvrqok=; b=FPiYMmNJLCrL2e8v/0
DQC4voofe8nuuE7rhXZ25oqNAhAQja4oKIysJ1qAME2aEaqh+N5aJlCEuHrSG/7+
NAQ0OY8KaJ2zlnxAbmgJETOjnf4oGdAa+nU/nVVEPfN2NRcBCNLGQZ80U4T5k8Xi
PakIuZvKDTRq7PiosSCSHT/FQ=
Received: by filter0490p1mdw1.sendgrid.net with SMTP id filter0490p1mdw1.13271.556FFFE7B
2015-06-04 07:36:09.249601779 +0000 UTC
Received: from i-dee0850e.inst.aws.airbnb.com (ec2-54-90-154-187.compute-1.amazonaws.com [54.90.154.187])
by ismtpd-017 (SG) with ESMTP id 14dbd7fa6b4.779a.254b43
for <mister@james.org>; Thu, 04 Jun 2015 07:36:09 +0000 (UTC)
Received: by i-dee0850e.inst.aws.airbnb.com (Postfix, from userid 1041)
id 19CBA24C60; Thu, 4 Jun 2015 07:36:09 +0000 (UTC)
Date: Thu, 04 Jun 2015 07:36:08 +0000
From: Airbnb <discover@airbnb.com>
To: mister@james.org
Message-ID: <556fffe8cac78_7ed0e0fe204457be@i-dee0850e.mail>
Subject: Text and Html not similar
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--==_mimepart_556fffe8c7e84_7ed0e0fe20445637";
charset=UTF-8
Content-Transfer-Encoding: 7bit
X-User-ID: 32692788
X-Locale: fr
X-Category: engagement
X-Template: low_intent_top_destinations
recipients:
=====================================================
== File: server/apps/distributed-app/src/test/resources/batchsizes.properties
=====================================================
# Those properties let you configure the number of messages queried at the same time.
# IMAP FETCH command
fetch.metadata=200
fetch.headers=200
fetch.body=100
fetch.full=50
# IMAP COPY command
copy=100
# IMAP MOVE command
move=100
=====================================================
== File: server/apps/distributed-app/src/test/resources/rabbitmq.properties
=====================================================
uri=amqp://james:james@rabbitmq_host:5672
management.uri=http://james:james@rabbitmq_host:15672/api/
=====================================================
== File: server/apps/distributed-app/src/assemble/extensions-jars.txt
=====================================================
# Adding Jars to JAMES
The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.
You can use it to add you customs Mailets/Matchers.
=====================================================
== File: server/apps/distributed-app/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.
# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes
# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.
#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=
=====================================================
== File: server/apps/distributed-app/sample-configuration/deletedMessageVault.properties
=====================================================
# ============================================= Deleted Messages Vault Configuration ==================================
enabled=false
# Enable work queue to be used with deleted message vault
# Default to false
# workQueueEnabled=false
# Retention period for your deleted messages into the vault, after which they expire and can be potentially cleaned up
# Optional, default 1y
# retentionPeriod=1y
# Messages restored from the Deleted Messages Vault are placed in a mailbox with this name (default: ``Restored-Messages``).
# The mailbox will be created if it does not exist yet.
# restoreLocation=Restored-Messages
=====================================================
== File: server/apps/distributed-app/sample-configuration/queue-pulsar.properties
=====================================================
mail.queue.choice=PULSAR
=====================================================
== File: server/apps/distributed-app/sample-configuration/pulsar.properties
=====================================================
broker.uri=pulsar://pulsar:6650
admin.uri=http://pulsar:8080
authentication.type=no-auth
#authentication.basic.userId=userId
#authentication.basic.password=password
namespace=pulsar/system
=====================================================
== File: server/apps/distributed-app/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.
# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever
# Required to locate Cassandra driver configuration
config.file=conf/cassandra-driver.conf
# The delimiter used to separate parent/child folders.
# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
# WARNING: This value should only be changed when setting up a new deployment. Changing the parameter for an existing deployments
# will likely lead to failure of some system components, as occurrences of old delimiter will still be present in the database/data store.
# james.mailbox.folder.delimiter=dot
# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K
# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false
# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
# - none: Disables resource leak detection.
# - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
# - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
# - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple
# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true
# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE
# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true
# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true
=====================================================
== File: server/apps/distributed-app/sample-configuration/queue.properties
=====================================================
mail.queue.choice=RABBITMQ
=====================================================
== File: server/apps/distributed-app/sample-configuration/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/logs/james.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
<appender-ref ref="LOG_FILE" />
</appender>
<root level="WARN">
<appender-ref ref="ASYNC" />
</root>
<logger name="org.apache.james" level="INFO" />
<logger name="com.datastax.driver.core.QueryLogger.SLOW" level="DEBUG" />
</configuration>
=====================================================
== File: server/apps/distributed-app/sample-configuration/jmap.properties
=====================================================
# Configuration file for JMAP
# Read https://james.apache.org/server/config-jmap.html for further details
enabled=true
tls.keystoreURL=file://conf/keystore
tls.secret=james72laBalle
# only not work for RabbitMQ mail queue
#delay.sends.enabled=true
# Alternatively TLS keys can be supplied via PEM files
# tls.privateKey=file://conf/private.nopass.key
# tls.certificates=file://conf/certs.self-signed.csr
# An optional secret might be specified for the private key
# tls.secret=james72laBalle
#
# If you wish to use OAuth authentication, you should provide a valid JWT public key.
# The following entry specify the link to the URL of the public key file,
# which should be a PEM format file.
#
# jwt.publickeypem.url=file://conf/jwt_publickey
# Should simple Email/query be resolved against a Cassandra projection, or should we resolve them against OpenSearch?
# This enables a higher resilience, but the projection needs to be correctly populated. False by default.
# view.email.query.enabled=true
# If you want to specify authentication strategies for Jmap rfc-8621 version
# For custom Authentication Strategy not inside package "org.apache.james.jmap.http", you have to specify its FQDN
# authentication.strategy.rfc8621=JWTAuthenticationStrategy,BasicAuthenticationStrategy
# Prevent server side request forgery by preventing calls to the private network ranges. Defaults to true, can be disabled for testing.
# webpush.prevent.server.side.request.forgery=false
=====================================================
== File: server/apps/distributed-app/sample-configuration/cassandra-driver.conf
=====================================================
# James reference configuration for the DataStax Java driver for Apache Cassandra®.
#
# Unless you use a custom mechanism to load your configuration (see
# SessionBuilder.withConfigLoader), all the values declared here will be used as defaults.
#
# See https://docs.datastax.com/en/developer/java-driver/4.13/manual/core/configuration/ for
# available options.
#
# Please note that contact point and authentication needs to be set in cassandra.properties for now.
datastax-java-driver {
basic.request {
timeout = 5 seconds
consistency = QUORUM
page-size = 5000
serial-consistency = SERIAL
}
advanced.connection {
connect-timeout = 5 seconds
init-query-timeout = 5 seconds
pool {
local.size = 2
remote.size = 2
}
max-requests-per-connection = 1024
max-orphan-requests = 256
warn-on-init-error = true
}
advanced.throttler {
// class = org.apache.james.backends.cassandra.utils.LockLessConcurrencyLimitingRequestThrottler
class = ConcurrencyLimitingRequestThrottler
max-queue-size = 10000
max-concurrent-requests = 192
}
advanced.reconnect-on-init = true
=====================================================
== File: server/apps/distributed-app/sample-configuration/batchsizes.properties
=====================================================
# Those properties let you configure the number of messages queried at the same time.
# IMAP FETCH command
fetch.metadata=200
fetch.headers=200
fetch.body=100
fetch.full=50
# IMAP COPY command
copy=100
# IMAP MOVE command
move=100
=====================================================
== File: server/apps/distributed-app/sample-configuration/droplists.properties
=====================================================
# Configuration file for DropLists
enabled=false
=====================================================
== File: server/apps/distributed-app/sample-configuration/blob.properties
=====================================================
# ============================================= BlobStore Implementation ==================================
# Read https://james.apache.org/server/config-blobstore.html for further details
# Choose your BlobStore implementation
# Mandatory, allowed values are: cassandra, s3
# *WARNING*: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
# alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)
implementation=s3
# ========================================= Deduplication ========================================
# If you choose to enable deduplication, the mails with the same content will be stored only once.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
# the mails sharing the same content once one is deleted.
# Mandatory, Allowed values are: true, false
deduplication.enable=false
# deduplication.family needs to be incremented every time the deduplication.generation.duration is changed
# Positive integer, defaults to 1
# deduplication.gc.generation.family=1
# Duration of generation.
# Deduplication only takes place within a singe generation.
# Only items two generation old can be garbage collected. (This prevent concurrent insertions issues and
# accounts for a clock skew).
# deduplication.family needs to be incremented everytime this parameter is changed.
# Duration. Default unit: days. Defaults to 30 days.
# deduplication.gc.generation.duration=30days
# ========================================= Encryption ========================================
# If you choose to enable encryption, the blob content will be encrypted before storing them in the BlobStore.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to all content being
# encrypted. This comes at a performance impact but presents you from leaking data if, for instance the third party
# offering you a S3 service is compromised.
# Optional, Allowed values are: true, false, defaults to false
encryption.aes.enable=false
# Mandatory (if AES encryption is enabled) salt and password. Salt needs to be an hexadecimal encoded string
#encryption.aes.password=xxx
#encryption.aes.salt=73616c7479
# Optional, defaults to PBKDF2WithHmacSHA512
#encryption.aes.private.key.algorithm=PBKDF2WithHmacSHA512
# ========================================= Cassandra BlobStore Cache ======================================
# A cassandra cache can be enabled to reduce latency when reading small blobs frequently
# A dedicated keyspace with a replication factor of one is then used
# Cache eviction policy is TTL based
# Only blobs below a given threshold will be stored.
# To be noted that blobs are stored within a single Cassandra row, hence a low threshold should be used.
# Enable the cache? Optional and default to false. Must be a boolean.
=====================================================
== File: server/apps/distributed-app/sample-configuration/cassandra.properties
=====================================================
# Configuration file for cassandra mailbox
# Read https://james.apache.org/server/config-cassandra.html for further details
# Advanced Cassandra driver option needs to be set via cassandra-driver.conf configuration file
cassandra.nodes=cassandra
cassandra.keyspace.create=true
cassandra.keyspace=apache_james
#cassandra.user=cassandra
#cassandra.password=cassandra
cassandra.replication.factor=1
cassandra.retryConnection.maxRetries=200
cassandra.retryConnection.minDelay=5000
## These low level tuning options controls performance related options in Cassandra related code
## The default values are documented here. Understand the effects before editing.
# mailbox.read.repair.chance=0.1
## Maximum probability of running a read repair for the mailbox counters
# mailbox.counters.read.repair.chance.max=0.1
## Probability of running a mailbox counters read repair for 100 messages.
## Inversely proportional to the count of messages
## Formula: read_repair_chance = min(mailbox.counters.read.repair.chance.max, (100/unseens)*mailbox.counters.read.repair.chance.one.hundred)
# mailbox.counters.read.repair.chance.one.hundred=0.01
# mailbox.max.retry.acl=1000
# mailbox.max.retry.modseq=100000
# mailbox.max.retry.uid=100000
# mailbox.max.retry.message.flags.update=1000
# mailbox.max.retry.message.id.flags.update=1000
# fetch.advance.row.count=1000
# chunk.size.expunge=100
# mailbox.blob.part.size=102400
# Optional. Allows specifying consistency level ONE for reads in Cassandra BlobStore.
# Falls back to default read consistency level if the blob is missing.
# Defaults to false.
# optimistic.consistency.level.enabled=false
# Optional. Allows not to use lightweight transactions in CassandraMailRepository.
# If disabled we implement an idempotent behaviour (duplicates are overridden, missing entries upon deletes are ignored).
# Defaults to true.
# mailrepository.strong.consistency=true
# Optional, default to 0. Defensive value to add to uids and modseqs generated. This can be used as an heuristic to maintain
# consistency even when consensus of Lightweight Transactions is broken, exemple during a disaster recovery process.
# uid.modseq.increment=0
=====================================================
== File: server/apps/distributed-app/sample-configuration/rabbitmq.properties
=====================================================
# RabbitMQ configuration
# Read https://james.apache.org/server/config-rabbitmq.html for further details
# Mandatory
uri=amqp://rabbitmq:5672
# If you use a vhost, specify it as well at the end of the URI
# uri=amqp://rabbitmq:5672/vhost
# Vhost to use for creating queues and exchanges
# Optional, only use this if you have invalid URIs containing characters like '_'
# vhost=vhost1
# Optional, default to the host specified as part of the URI.
# Allow creating cluster aware connections.
# hosts=ip1:5672,ip2:5672
# RabbitMQ Administration Management
# Mandatory
management.uri=http://rabbitmq:15672
# Mandatory
management.user=guest
# Mandatory
management.password=guest
# Configure retries count to retrieve a connection. Exponential backoff is performed between each retries.
# Optional integer, defaults to 10
#connection.pool.retries=10
# Configure initial duration (in ms) between two connection retries. Exponential backoff is performed between each retries.
# Optional integer, defaults to 100
#connection.pool.min.delay.ms=100
# Configure retries count to retrieve a channel. Exponential backoff is performed between each retries.
# Optional integer, defaults to 3
#channel.pool.retries=3
# Configure timeout duration (in ms) to obtain a rabbitmq channel. Defaults to 30 seconds.
# Optional integer, defaults to 30 seconds.
#channel.pool.max.delay.ms=30000
# Configure the size of the channel pool.
# Optional integer, defaults to 3
#channel.pool.size=3
# Optional, non-negative integer, default to 100ms.
# The interval (in ms) that RabbitMQ driver will automatic recovery wait before attempting to reconnect.
# See https://www.rabbitmq.com/client-libraries/java-api-guide#connection-recovery
#driver.network.recovery.interval=100
# Boolean. Whether to activate Quorum queue usage for all queues.
# Quorum queues enables high availability.
# False (default value) results in the usage of classic queues.
#quorum.queues.enable=true
=====================================================
== File: server/apps/distributed-app/docs/Dockerfile
=====================================================
ARG ANTORA_VERSION=3.1.7
FROM antora/antora:${ANTORA_VERSION} AS antora_builder
ARG JAMES_CHECKOUT=master
RUN apk update && apk add git
RUN git clone https://github.com/apache/james-project.git /james-project \
&& cd /james-project \
&& git checkout $JAMES_CHECKOUT
WORKDIR /james-project/docs
RUN antora antora-playbook-local.yml
FROM nginx:alpine
COPY --from=antora_builder /james-project/docs/build/site /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
=====================================================
== File: server/apps/distributed-app/docs/ui-overrides/partials/header-content.hbs
=====================================================
<header class="header">
<nav class="navbar">
<div class="navbar-brand">
<a class="navbar-item" href="{{{or site.url (or siteRootUrl siteRootPath)}}}"><img src="/_/img/james.svg" alt="james logo"> {{site.title}}</a>
<button class="navbar-burger" data-target="topbar-nav">
<span></span>
<span></span>
<span></span>
</button>
</div>
<div id="topbar-nav" class="navbar-menu">
<div class="navbar-end">
<a class="navbar-item" href="#">Home</a>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Products</a>
<div class="navbar-dropdown">
<div class="navbar-item"><strong>James server</strong></div>
<a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
<a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
<hr class="navbar-divider">
<a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
<a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
<a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
<a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
<a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Community</a>
<div class="navbar-dropdown">
<!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
<a class="navbar-item" href="/james-project/3.7.3/community/mailing-lists.html">Mailing lists</a>
<a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
<a class="navbar-item" href="https://twitter.com/ApacheJames">
<span class="icon">
<svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path>
</svg>
</span> Twitter
</a>
<a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> Github</a>
</div>
</div>
<!-- <div class="navbar-item">
<span class="control">
<a class="button is-primary" href="#">Download</a>
</span>
</div> -->
</div>
</div>
=====================================================
== File: server/apps/distributed-app/docs/ui-overrides/img/james.svg
=====================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
width="37px" height="31px" viewBox="0 0 37 31" enable-background="new 0 0 37 31" xml:space="preserve">
<g>
<path fill="#FFFFFF" d="M37.001,4.407c-1.435-0.966-2.92-1.75-4.473-2.153c-1.552-0.412-3.151-0.315-4.63,0.3l-0.277,0.117
l-0.139,0.062l-0.064,0.032l-0.036,0.016l-0.018,0.008l-0.008,0.004c0.008-0.007-0.028,0.016,0.02-0.012L27.37,2.783
c-0.2,0.127-0.391,0.232-0.589,0.337c-0.392,0.207-0.796,0.391-1.216,0.543c-0.836,0.295-1.737,0.503-2.664,0.389
c-0.458-0.061-0.913-0.222-1.3-0.489c-0.382-0.268-0.689-0.629-0.899-1.026C20.28,1.737,20.15,0.857,20.124,0
c0.156,0.842,0.393,1.686,0.857,2.363c0.234,0.336,0.523,0.622,0.864,0.811c0.339,0.19,0.723,0.284,1.111,0.301
c0.782,0.038,1.582-0.201,2.325-0.532c0.376-0.165,0.741-0.353,1.092-0.563c0.176-0.105,0.354-0.219,0.509-0.33l0.307-0.201
c0.1-0.057,0.194-0.122,0.293-0.173c0.801-0.433,1.702-0.731,2.627-0.793c0.925-0.069,1.856,0.063,2.716,0.357
c0.863,0.29,1.655,0.731,2.359,1.267C35.888,3.047,36.52,3.676,37.001,4.407z"/>
<path fill="#FFFFFF" d="M13.25,20.418c-5.733-4.373-9.554-8.973-9.418-9.078c0.147-0.145,4.153,4.212,9.83,8.536
c1.665,1.28,3.28,2.412,4.733,3.381c0.02-0.036,0.041-0.069,0.062-0.105c0.237-0.456,0.42-0.948,0.562-1.462
c-1.018-2.053-3.554-4.892-6.501-7.496c-0.656-0.572-1.338-1.078-2.028-1.536c-0.151,1.223-0.452,2.098-0.453,2.096
c0,0-0.335-1.163-0.306-2.579C9.266,11.892,8.8,11.63,8.336,11.389c-0.004,1.395-0.414,2.439-0.417,2.439
c0,0.002-0.833-1.414-0.922-3.071c-0.002-0.01-0.002-0.021-0.002-0.031c-2.767-1.279-5.1-1.896-5.104-1.89
C1.867,8.774,2.064,14.75,6.431,19.305c0.147-0.008,0.296-0.016,0.449-0.016c1.588,0.004,2.944,0.577,2.947,0.577
c0-0.002-0.835,0.501-2.054,0.671c0.444,0.355,0.899,0.682,1.364,0.973c1.148-0.416,2.102-0.557,2.102-0.557
c0-0.002-0.503,0.495-1.334,1.017c3.035,1.685,5.787,2.542,7.53,2.624c0.236-0.26,0.452-0.532,0.645-0.821
C16.586,22.84,14.938,21.717,13.25,20.418z"/>
<path fill="#FFFFFF" d="M33.7,4.335c-1.103,0.092-2.21,0.292-3.3,0.605c-2.173,0.623-4.31,1.725-6.062,3.396
c-0.883,0.824-1.64,1.798-2.271,2.846c-0.614,1.059-1.109,2.191-1.43,3.363c-0.327,1.168-0.529,2.363-0.595,3.548
c-0.02,0.291-0.031,0.596-0.039,0.9L19.995,19.4l-0.008,0.35c-0.012,0.462-0.051,0.918-0.122,1.358
c-0.056,0.337-0.131,0.665-0.223,0.984c-0.141,0.514-0.324,1.006-0.562,1.466c-0.02,0.036-0.043,0.066-0.062,0.102
c-0.099,0.178-0.204,0.353-0.317,0.52c-0.191,0.286-0.407,0.559-0.643,0.819c-0.17,0.186-0.348,0.366-0.544,0.541
c-1.304,1.152-3.097,1.944-5.021,2.453c-1.931,0.518-3.995,0.788-6.091,0.934c-2.1,0.145-4.234,0.166-6.404,0.112
c2.023,0.815,4.157,1.338,6.333,1.664c2.179,0.313,4.422,0.415,6.701,0.127c1.137-0.149,2.287-0.394,3.418-0.802
c1.129-0.405,2.252-0.959,3.265-1.745c1.019-0.771,1.92-1.77,2.571-2.913c0.331-0.568,0.601-1.167,0.82-1.775
c0.21-0.611,0.364-1.236,0.47-1.859c0.11-0.619,0.17-1.24,0.193-1.852c0.008-0.154,0.008-0.307,0.008-0.461v-0.398
c0.005-0.234,0.011-0.468,0.022-0.716c0.052-0.967,0.166-1.914,0.376-2.832c0.418-1.832,1.213-3.537,2.405-5.009
c1.192-1.472,2.767-2.711,4.552-3.706c1.79-0.994,3.765-1.774,5.862-2.355C35.917,4.247,34.808,4.238,33.7,4.335z"/>
</g>
</svg>
=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/nav.adoc
=====================================================
* Apache James Distributed Reference Documentation
=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/index.adoc
=====================================================
= Apache James Distributed server
The distributed server documentation had been move to
xref:3.9.0@james-project:servers:distributed/index.adoc[this location].
=====================================================
== File: server/apps/distributed-app/docs/README.md
=====================================================
# Building and serving documentation locally
## Executing within source code
(Clone `https://github.com/apache/james-project` locally, go into `docs` folder)
**Step 1**: [Install Antora](https://docs.antora.org/antora/latest/install-and-run-quickstart/)
**Step 2**: Build the Antora content locally
```
antora antora-playbook-local.yml
```
**Step 3**: Open `build/site/index.html` in your browser.
## Building with Dockerfile
To build the document from apache-james repository, you can use the Dockerfile provided in this folder.
Build the Docker image:
```
docker build --build-arg JAMES_CHECKOUT=master -f Dockerfile -t james-site-antora .
```
Then run the Docker image:
```
docker run -p 80:80 james-site-antora
```
Go to `http://localhost` in your browser.
=====================================================
== File: server/apps/distributed-app/docs/antora-playbook-local.yml
=====================================================
#
# Use this configuration for local testing / docs develop.
#
# Note: Executing Antora can only be done from within a git repository.
# When UNZIPPING the application, you will need to initialize the git repository:
#
# $ git init
# $ git add .
# $ git commit -m "First commit"
#
# You may want to update paths below too...
site:
title: Apache James Server
url: https://james.apache.org/
start_page: james-project::index.adoc
content:
sources:
# url should match the relative position for your git repository. A value for a git repo located in the docs folder would be:
# - url: ./
- url: ./../
branches: HEAD
# Must match the relative position of the Antora docs files within the git repository stated above.
# A value for a git repo located in the docs folder would be:
# start_path: ./
start_path: ./docs
ui:
bundle:
url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/master/raw/build/ui-bundle.zip?job=bundle-stable
supplemental_files: ./ui-overrides
runtime:
fetch: true
=====================================================
== File: server/apps/distributed-app/docs/antora.yml
=====================================================
name: james-distributed-app
title: Apache James Distributed Server
version: '3.9.0'
prerelease: SNAPSHOT
=====================================================
== File: server/apps/cli-integration-tests/src/test/resources/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----
=====================================================
== File: server/apps/jpa-app/docker-configuration/logback-cli.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
</appender>
<root level="ERROR">
<appender-ref ref="ASYNC" />
</root>
<logger name="org.apache.james" level="INFO" />
</configuration>
=====================================================
== File: server/apps/jpa-app/docker-compose.yml
=====================================================
version: '3'
# In order to start James JPA app on top of mariaDB:
# 1. Download the driver: `wget https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/2.7.2/mariadb-java-client-2.7.2.jar`
# 2. Generate the keystore with the default password `james72laBalle`: `keytool -genkey -alias james -keyalg RSA -keystore keystore`
# 3. Start MariaDB: `docker-compose up -d mariadb`
# 4. Start James: `docker-compose up james`
services:
james:
depends_on:
- mariadb
image: apache/james:jpa-latest
container_name: james
hostname: james.local
volumes:
- $PWD/mariadb-java-client-2.7.2.jar:/root/libs/james-jdbc-driver.jar
- $PWD/sample-configuration/james-database-mariadb.properties:/root/conf/james-database.properties
- $PWD/keystore:/root/conf/keystore
mariadb:
image: mariadb:10.6
environment:
- MARIADB_ROOT_PASSWORD=test
- MARIADB_DATABASE=test
- MARIADB_USER=test
- MARIADB_PASSWORD=test
=====================================================
== File: server/apps/jpa-app/README.adoc
=====================================================
= Guice-JPA Server How-to
This server target single node James deployments. By default, the derby database is used.
== Requirements
* Java 21 SDK
== Running
To run james, you have to create a directory containing required configuration files.
James requires the configuration to be in a subfolder of working directory that is called
**conf**. A [sample directory](https://github.com/apache/james-project/tree/master/server/apps/jpa-app/sample-configuration)
is provided with some default values you may need to replace. You will need to update its content to match your needs.
You also need to generate a keystore with the following command:
[source]
----
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
----
Once everything is set up, you just have to run the jar with:
[source]
----
$ java -javaagent:james-server-jpa-app.lib/openjpa-4.1.1.jar \
-Dworking.directory=. \
-Djdk.tls.ephemeralDHKeySize=2048 \
-Dlogback.configurationFile=conf/logback.xml \
-jar james-server-jpa-app.jar
----
Note that binding ports below 1024 requires administrative rights.
== Docker distribution
To import the image locally:
[source]
----
docker image load -i target/jib-image.tar
----
Then run it:
[source]
----
docker run apache/james:jpa-latest
=====================================================
== File: server/apps/jpa-app/src/main/extensions-jars/README.md
=====================================================
# Adding Jars to JAMES
The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.
You can use it to add your custom Mailets/Matchers.
=====================================================
== File: server/apps/jpa-app/src/main/scripts/james-cli
=====================================================
#!/bin/bash
unset JAVA_TOOL_OPTIONS
java -cp /root/resources:/root/classes:/root/libs/* -Dlogback.configurationFile=/root/conf/logback-cli.xml org.apache.james.cli.ServerCmd "$@"
=====================================================
== File: server/apps/jpa-app/src/assemble/extensions-jars.txt
=====================================================
# Adding Jars to JAMES
The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.
You can use it to add you customs Mailets/Matchers.
=====================================================
== File: server/apps/jpa-app/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.
# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes
# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.
#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=
=====================================================
== File: server/apps/jpa-app/sample-configuration/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----
=====================================================
== File: server/apps/jpa-app/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.
# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever
# The delimiter used to separate parent/child folders.
# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
# WARNING: This value should only be changed when setting up a new deployment. Changing the parameter for an existing deployments
# will likely lead to failure of some system components, as occurrences of old delimiter will still be present in the database/data store.
# james.mailbox.folder.delimiter=dot
# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K
# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false
# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
# - none: Disables resource leak detection.
# - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
# - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
# - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple
# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true
# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE
# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true
# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true
# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
=====================================================
== File: server/apps/jpa-app/sample-configuration/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/logs/james.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
<appender-ref ref="LOG_FILE" />
</appender>
<root level="WARN">
<appender-ref ref="ASYNC" />
</root>
<logger name="org.apache.james" level="INFO" />
</configuration>
=====================================================
== File: server/apps/jpa-app/sample-configuration/droplists.properties
=====================================================
# Configuration file for DropLists
enabled=false
=====================================================
== File: server/blob/blob-cassandra/src/test/resources/cassandra-driver.conf
=====================================================
datastax-java-driver {
basic.request {
timeout = 5 seconds
}
}
=====================================================
== File: server/blob/blob-s3/src/test/resources/minio/public.crt
=====================================================
-----BEGIN CERTIFICATE-----
MIICFjCCAbugAwIBAgIRAK8/sg1OIuWOQV2gWo9vDQUwCgYIKoZIzj0EAwIwTTEc
MBoGA1UEChMTQ2VydGdlbiBEZXZlbG9wbWVudDEtMCsGA1UECwwkdHVuZ3R2QE1h
Y0Jvb2stUHJvLmxvY2FsIChUcmFuIFR1bmcpMB4XDTI0MDkyNjAyNDcwNFoXDTI1
MDkyNjAyNDcwNFowTTEcMBoGA1UEChMTQ2VydGdlbiBEZXZlbG9wbWVudDEtMCsG
A1UECwwkdHVuZ3R2QE1hY0Jvb2stUHJvLmxvY2FsIChUcmFuIFR1bmcpMFkwEwYH
KoZIzj0CAQYIKoZIzj0DAQcDQgAEO4weJpvkYnqq95UH3XNcaD7IAJbTTwr1GA2c
rufdNwpC4g7oQVOlFr0D+RdfVxbfeUZGmAz73OpGtOPOTVhTG6N8MHowDgYDVR0P
AQH/BAQDAgKkMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8w
HQYDVR0OBBYEFKIu0NT9bG853GA+o10GsbDOi9zMMCMGA1UdEQQcMBqCCWxvY2Fs
aG9zdIINczNtaW5pby5sb2NhbDAKBggqhkjOPQQDAgNJADBGAiEAxLfNK4gPWw0G
8QAv0QzARY0L5+8Lmpf5SwVzrjZ+zosCIQCA41tgccZ20+W1igansLkqnSTcY8Nw
mtKwMTxUEwNRTw==
-----END CERTIFICATE-----
=====================================================
== File: server/blob/blob-s3/src/test/resources/minio/private.key
=====================================================
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgDhp6TEYrEFHMHusJ
Xstem4lh0czPokiWEdAzzMXRXxGhRANCAAQ7jB4mm+Rieqr3lQfdc1xoPsgAltNP
CvUYDZyu5903CkLiDuhBU6UWvQP5F19XFt95RkaYDPvc6ka0485NWFMb
-----END PRIVATE KEY-----
=====================================================
== File: server/task/task-postgres/pom.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.james</groupId>
<artifactId>james-server</artifactId>
<version>3.10.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>james-server-task-postgres</artifactId>
<name>Apache James :: Server :: Task :: PostgreSQL</name>
<description>Distributed task manager leveraging PostgreSQL</description>
<dependencies>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-backends-postgres</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-backends-postgres</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-json</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-json</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-guice-common</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-lifecycle-api</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-task-api</artifactId>
<type>test-jar</type>
<scope>test</scope>
=====================================================
== File: server/protocols/protocols-pop3-distributed/src/test/resources/pop3server.xml
=====================================================
<?xml version="1.0"?>
<pop3server enabled="true">
<jmxName>pop3server</jmxName>
<bind>127.0.0.1:0</bind>
<helloName>myMailServer</helloName>
<tls socketTLS="false" startTLS="true">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>
<connectiontimeout>3600</connectiontimeout>
<handlerchain>
<handler class="org.apache.james.pop3server.core.CoreCmdHandlerLoader"/>
</handlerchain>
<gracefulShutdown>false</gracefulShutdown>
</pop3server>
=====================================================
== File: server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mail.eml
=====================================================
Return-Path: <general@list.org>
MIME-Version: 1.0
From: Hello <hello@gmail.com>
Date: Thu, 4 Jun 2015 06:08:41 +0200
Message-ID: <CAN1zdnW5PW7z5msM-TjUpouygxWY6z-25A3WCB-C5BvqDuP1Qw@mail.gmail.com>
To: General Discussion <general@list.org>
Content-Type: text/plain; charset=UTF-8
Subject: [arch-general] Very important topic
Reply-To: General Discussion <general@list.org>
Sender: "arch-general" <general@list.org>
Hi all,
Very important message!!!
Thanks!
=====================================================
== File: server/protocols/webadmin/webadmin-data/src/test/resources/sieve/my_sieve
=====================================================
require ["reject"];
if size :over 100K {
reject "Email too big";
}
=====================================================
== File: server/protocols/webadmin/webadmin-pop3/README.md
=====================================================
# Pop3 fix inconsistencies
We introduced an additional webadmin endpoint allowing fixing possible inconsistencies.
In order to run this task:
```bash
curl -XPOST 'http://ip:port/mailboxes?task=fixPop3Inconsistencies'
```
Will schedule a task for deleting stale and inserting missing POP3 meta data entries.
[More details about endpoints returning a task](https://james.staged.apache.org/james-project/3.6.0/servers/distributed/operate/webadmin.html#_endpoints_returning_a_task).
The scheduled task will have the following type `Pop3MetaDataFixInconsistenciesTask` and the following additionalInformation:
```json
{
"type": "Pop3MetaDataFixInconsistenciesTask",
"runningOptions": {
"messagesPerSecond": 100
},
"processedImapUidEntries": 0,
"processedPop3MetaDataStoreEntries": 1,
"stalePOP3Entries": 1,
"missingPOP3Entries": 0,
"fixedInconsistencies": [
{
"mailboxId": "6fdae960-c72f-11eb-9b1d-973b9140e460",
"messageId": "6ffca230-c72f-11eb-9b1d-973b9140e460"
}
],
"errors": [
{
"mailboxId": "7fdae960-c72f-11eb-9b1d-973b9140e460",
"messageId": "7fdae960-c72f-11eb-2222-973b9140e460"
}
]
}
```
=====================================================
== File: server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message.eml
=====================================================
Return-Path: <mlemos@acm.org>
To: Manuel Lemos <mlemos@linux.local>
Subject: Testing Testing
From: mlemos <mlemos@acm.org>
Reply-To: mlemos <mlemos@acm.org>
Sender: mlemos@acm.org
X-Mailer: http://www.phpclasses.org/mimemessage $Revision: 1.63 $ (mail)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="652b8c4dcb00cdcdda1e16af36781caf"
Message-ID: <20050430192829.0489.mlemos@acm.org>
Date: Sat, 30 Apr 2005 19:28:29 -0300
--652b8c4dcb00cdcdda1e16af36781caf
Content-Type: multipart/related; boundary="6a82fb459dcaacd40ab3404529e808dc"
--6a82fb459dcaacd40ab3404529e808dc
Content-Type: multipart/alternative; boundary="69c1683a3ee16ef7cf16edd700694a2f"
--69c1683a3ee16ef7cf16edd700694a2f
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
This is an HTML message. Please use an HTML capable mail program to read
this message.
--69c1683a3ee16ef7cf16edd700694a2f
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<title>Testing Manuel Lemos' MIME E-mail composing and sending PHP class: H=
TML message</title>
<style type=3D"text/css"><!--
body { color: black ; font-family: arial, helvetica, sans-serif ; backgroun=
d-color: #A3C5CC }
A:link, A:visited, A:active { text-decoration: underline }
--></style>
</head>
<body>
<table background=3D"cid:4c837ed463ad29c820668e835a270e8a.gif" width=3D"100=
%">
<tr>
<td>
<center><h1>Testing Manuel Lemos' MIME E-mail composing and sending PHP cla=
ss: HTML message</h1></center>
<hr>
=====================================================
== File: server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message-without-from.eml
=====================================================
Return-Path: <mlemos@acm.org>
To: Manuel Lemos <mlemos@linux.local>
Subject: Testing Error
Reply-To: mlemos <mlemos@acm.org>
Sender: mlemos@acm.org
X-Mailer: http://www.phpclasses.org/mimemessage $Revision: 1.63 $ (mail)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="652b8c4dcb00cdcdda1e16af36781caf"
Message-ID: <20050430192829.0489.mlemos@acm.org>
Date: Sat, 30 Apr 2005 19:28:29 -0300
--652b8c4dcb00cdcdda1e16af36781caf
Content-Type: multipart/related; boundary="6a82fb459dcaacd40ab3404529e808dc"
--6a82fb459dcaacd40ab3404529e808dc
Content-Type: multipart/alternative; boundary="69c1683a3ee16ef7cf16edd700694a2f"
--69c1683a3ee16ef7cf16edd700694a2f
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
This is an HTML message. Please use an HTML capable mail program to read
this message.
--69c1683a3ee16ef7cf16edd700694a2f
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<title>Testing Manuel Lemos' MIME E-mail composing and sending PHP class: H=
TML message</title>
<style type=3D"text/css"><!--
body { color: black ; font-family: arial, helvetica, sans-serif ; backgroun=
d-color: #A3C5CC }
A:link, A:visited, A:active { text-decoration: underline }
--></style>
</head>
<body>
<table background=3D"cid:4c837ed463ad29c820668e835a270e8a.gif" width=3D"100=
%">
<tr>
<td>
<center><h1>Testing Manuel Lemos' MIME E-mail composing and sending PHP cla=
ss: HTML message</h1></center>
<hr>
<P>Hello Manuel,<br><br>
=====================================================
== File: server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message-without-tos.eml
=====================================================
Return-Path: <mlemos@acm.org>
Subject: Testing Error
From: mlemos <mlemos@acm.org>
Reply-To: mlemos <mlemos@acm.org>
Sender: mlemos@acm.org
X-Mailer: http://www.phpclasses.org/mimemessage $Revision: 1.63 $ (mail)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="652b8c4dcb00cdcdda1e16af36781caf"
Message-ID: <20050430192829.0489.mlemos@acm.org>
Date: Sat, 30 Apr 2005 19:28:29 -0300
--652b8c4dcb00cdcdda1e16af36781caf
Content-Type: multipart/related; boundary="6a82fb459dcaacd40ab3404529e808dc"
--6a82fb459dcaacd40ab3404529e808dc
Content-Type: multipart/alternative; boundary="69c1683a3ee16ef7cf16edd700694a2f"
--69c1683a3ee16ef7cf16edd700694a2f
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
This is an HTML message. Please use an HTML capable mail program to read
this message.
--69c1683a3ee16ef7cf16edd700694a2f
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<title>Testing Manuel Lemos' MIME E-mail composing and sending PHP class: H=
TML message</title>
<style type=3D"text/css"><!--
body { color: black ; font-family: arial, helvetica, sans-serif ; backgroun=
d-color: #A3C5CC }
A:link, A:visited, A:active { text-decoration: underline }
--></style>
</head>
<body>
<table background=3D"cid:4c837ed463ad29c820668e835a270e8a.gif" width=3D"100=
%">
<tr>
<td>
<center><h1>Testing Manuel Lemos' MIME E-mail composing and sending PHP cla=
ss: HTML message</h1></center>
<hr>
<P>Hello Manuel,<br><br>
=====================================================
== File: server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/BlobId.java
=====================================================
=====================================================
== File: server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMessageListMethod.java
=====================================================
=====================================================
== File: server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/BlobManagerImpl.java
=====================================================
=====================================================
== File: server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactoryTest.java
=====================================================
=====================================================
== File: server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java
=====================================================
=====================================================
== File: server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java
=====================================================
=====================================================
== File: server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
=====================================================
=====================================================
== File: server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/BlobManagerImplTest.java
=====================================================
=====================================================
== File: server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/MIMEMessageConverterTest.java
=====================================================
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/rfc/src/jmap.mdown
=====================================================
%%%
title = "The JSON Meta Application Protocol"
abbrev = "JMAP"
category = "std"
docName = "draft-ietf-jmap-core-17"
ipr= "trust200902"
area = "Applications"
workgroup = "JMAP"
keyword = ["JMAP", "JSON"]
date = 2019-03-18T00:00:00Z
[[author]]
initials="N.M."
surname="Jenkins"
fullname="Neil Jenkins"
role="editor"
organization = "Fastmail"
[author.address]
email = "neilj@fastmailteam.com"
uri = "https://www.fastmail.com"
[author.address.postal]
street = "PO Box 234, Collins St West"
city = "Melbourne"
code = "VIC 8007"
country = "Australia"
[[author]]
initials="C."
surname="Newman"
fullname="Chris Newman"
role="editor"
organization = "Oracle"
[author.address]
email = "chris.newman@oracle.com"
[author.address.postal]
street = "440 E. Huntington Dr., Suite 400"
city = "Arcadia"
code = "CA 91006"
country = "United States of America"
%%%
.# Abstract
This document specifies a protocol for clients to efficiently query, fetch, and modify JSON-based data objects, with support for push notification of changes and fast resynchronisation and for out-of-band binary data upload/download.
{mainmatter}
{{spec/jmap/intro.mdown}}
{{spec/jmap/session.mdown}}
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/rfc/src/quotas.mdown
=====================================================
%%%
title = "JMAP for Quotas"
abbrev = "JMAP Quotas"
category = "std"
docName = "draft-ietf-jmap-quotas-06"
ipr= "trust200902"
area = "Applications"
workgroup = "JMAP"
keyword = ["JMAP", "JSON", "email", "quotas"]
date = 2022-09-28T00:00:00Z
[seriesInfo]
name="Internet-Draft"
value="draft-ietf-jmap-quotas-06"
stream="IETF"
status="standard"
[[author]]
initials="R.C."
surname="Cordier"
fullname="René Cordier"
role="editor"
organization = "Linagora Vietnam"
[author.address]
email = "rcordier@linagora.com"
uri = "https://linagora.vn"
[author.address.postal]
street = "5 Dien Bien Phu"
city = "Hanoi"
code = "10000"
country = "Vietnam"
%%%
.# Abstract
This document specifies a data model for handling quotas on accounts with a server using JMAP.
{mainmatter}
{{spec/quotas/intro.mdown}}
{{spec/quotas/quota.mdown}}
{{spec/quotas/securityconsiderations.mdown}}
{{spec/quotas/ianaconsiderations.mdown}}
{backmatter}
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/rfc/src/mail.mdown
=====================================================
%%%
title = "JMAP (JSON Meta Application Protocol) for Mail"
abbrev = "JMAP Mail"
category = "std"
docName = "draft-ietf-jmap-mail-16"
updates = [5788]
ipr= "trust200902"
area = "Applications"
workgroup = "JMAP"
keyword = ["JMAP", "JSON", "email"]
date = 2019-03-08T00:00:00Z
[[author]]
initials="N.M."
surname="Jenkins"
fullname="Neil Jenkins"
role="editor"
organization = "Fastmail"
[author.address]
email = "neilj@fastmailteam.com"
uri = "https://www.fastmail.com"
[author.address.postal]
street = "PO Box 234, Collins St West"
city = "Melbourne"
code = "VIC 8007"
country = "Australia"
[[author]]
initials="C."
surname="Newman"
fullname="Chris Newman"
role="editor"
organization = "Oracle"
[author.address]
email = "chris.newman@oracle.com"
[author.address.postal]
street = "440 E. Huntington Dr., Suite 400"
city = "Arcadia"
code = "CA 91006"
country = "United States of America"
%%%
.# Abstract
This document specifies a data model for synchronising email data with a server using JMAP (the JSON Meta Application Protocol). Clients can use this to efficiently search, access, organise and send messages, and get pushed notifications for fast resynchronisation when new messages are delivered or a change is made in another client.
{mainmatter}
{{spec/mail/intro.mdown}}
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/README.md
=====================================================
# JSON Meta Application Protocol (JMAP) Specification
This repo contains the specifications for JMAP.
JMAP is a modern standard for email clients to connect to mail stores. It therefore primarily replaces IMAP + SMTP submission. It does not replace MTA-to-MTA SMTP transmission. JMAP was built by the community, and continues to improve via the [IETF standardization process](https://datatracker.ietf.org/wg/jmap/about/). Upcoming work includes adding contacts and calendars (replacing CardDAV/CalDAV).
The pretty HTML version of the spec along with more JMAP info and resources can be found at http://jmap.io.
## Get involved
JMAP is being developed within the IETF by the [JMAP Working Group](https://datatracker.ietf.org/wg/jmap/about/).
You can join the mailing list at https://www.ietf.org/mailman/listinfo/jmap. Feedback is welcome: send your thoughts or comments on anything that is imprecise, incomplete, or could simply be done better in another way. Discussion is preferred prior to pull requests, except in the case of minor typos etc.
## Contributions
This repository relates to activities in the Internet Engineering Task
Force (IETF). All material in this repository is considered Contributions
to the IETF Standards Process, as defined in the intellectual property
policies of IETF currently designated as [BCP 78](https://www.rfc-editor.org/info/bcp78), [BCP 79](https://www.rfc-editor.org/info/bcp79) and the [IETF Trust Legal Provisions (TLP) Relating to IETF Documents](http://trustee.ietf.org/trust-legal-provisions.html).
Any edit, commit, pull request, issue, comment or other change made to this
repository constitutes Contributions to the [IETF Standards Process](https://www.ietf.org/).
You agree to comply with all applicable IETF policies and procedures,
including, BCP 78, 79, the TLP, and the TLP rules regarding code
components (e.g. being subject to a Simplified BSD License) in
Contributions.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/message.mdown
=====================================================
# Emails
>:warning:
>Partially implemented
An **Email** object is a representation of a message [@!RFC5322], which allows clients to avoid the complexities of MIME parsing, transfer encoding, and character encoding.
## Properties of the Email Object
Broadly, a message consists of two parts: a list of header fields and then a body. The Email data type provides a way to access the full structure or to use simplified properties and avoid some complexity if this is sufficient for the client application.
While raw headers can be fetched and set, the vast majority of clients should use an appropriate parsed form for each of the header fields it wants to process, as this allows it to avoid the complexities of various encodings that are required in a valid message per RFC 5322.
The body of a message is normally a MIME-encoded set of documents in a tree structure. This may be arbitrarily nested, but the majority of email clients present a flat model of a message body (normally plaintext or HTML) with a set of attachments. Flattening the MIME structure to form this model can be difficult and causes inconsistency between clients. Therefore, in addition to the *bodyStructure* property, which gives the full tree, the Email object contains 3 alternate properties with flat lists of body parts:
- *textBody*/*htmlBody*: These provide a list of parts that should be
rendered sequentially as the "body" of the message. This is a list rather than a single part as messages may have headers and/or footers appended/prepended as separate parts when they are transmitted, and some clients send text and images intended to be displayed inline in the body (or even videos and sound clips) as multiple parts rather than a single HTML part with referenced images.
Because MIME allows for multiple representations of the same data (using `multipart/alternative`), there is a textBody property (which prefers a plaintext representation) and an htmlBody property (which prefers an HTML representation) to accommodate the two most common client requirements. The same part may appear in both lists where there is no alternative between the two.
- *attachments*: This provides a list of parts that should be presented as
"attachments" to the message. Some images may be solely there for embedding within an HTML body part; clients may wish to not present these as attachments in the user interface if they are displaying the HTML with the embedded images directly. Some parts may also be in htmlBody/textBody; again, clients may wish to not present these as attachments in the user interface if rendered as part of the body.
The *bodyValues* property allows for clients to fetch the value of text parts directly without having to do a second request for the blob and to have the server handle decoding the charset into unicode. This data is in a separate property rather than on the EmailBodyPart object to avoid duplication of large amounts of data, as the same part may be included twice if the client fetches more than one of bodyStructure, textBody, and htmlBody.
In the following subsections, the common notational convention for wildcards has been adopted for content types, so `foo/*` means any content type that starts with `foo/`.
Due to the number of properties involved, the set of *Email* properties is specified over the following four subsections. This is purely for readability; all properties are top-level peers.
### Metadata
These properties represent metadata about the message in the mail store and are not derived from parsing the message itself.
- **id**: `Id` (immutable; server-set)
The id of the Email object. Note that this is the JMAP object id, NOT the Message-ID header field value of the message [@!RFC5322].
- **blobId**: `Id` (immutable; server-set)
The id representing the raw octets of the message [@!RFC5322] for this Email. This may be used to download the raw original message or to attach it directly to another Email, etc.
- **threadId**: `Id` (immutable; server-set)
The id of the Thread to which this Email belongs.
>:warning:
>threadId support is not implemented yet. Default to the id of the email.
- **mailboxIds**: `Id[Boolean]`
The set of Mailbox ids this Email belongs to. An Email in the mail store MUST belong to one or more Mailboxes at all times (until it is destroyed). The set is represented as an object, with each key being a *Mailbox id*. The value for each key in the object MUST be `true`.
- **keywords**: `String[Boolean]` (default: \{\})
A set of keywords that apply to the Email. The set is represented as an object, with the keys being the *keywords*. The value for each key in the object MUST be `true`.
Keywords are shared with IMAP. The six system keywords from IMAP get special treatment. The following four keywords have their first character changed from `\` in IMAP to `$` in JMAP and have particular semantic meaning:
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/mailbox.mdown
=====================================================
# Mailboxes
A Mailbox represents a named set of Emails. This is the primary mechanism for organising Emails within an account. It is analogous to a folder or a label in other systems. A Mailbox may perform a certain role in the system; see below for more details.
For compatibility with IMAP, an Email MUST belong to one or more Mailboxes. The Email id does not change if the Email changes Mailboxes.
A **Mailbox** object has the following properties:
> :information_source:
> Implemented
- **id**: `Id` (immutable; server-set)
The id of the Mailbox.
- **name**: `String`
> :warning:
> "name" should not contain the IMAP hierarchy delimiter ".".
User-visible name for the Mailbox, e.g., "Inbox". This MUST be a Net-Unicode string [@!RFC5198] of at least 1 character in length, subject to the maximum size given in the capability object. There MUST NOT be two sibling Mailboxes with both the same parent and the same name. Servers MAY reject names that violate server policy (e.g., names containing a slash (/) or control characters).
- **parentId**: `Id|null` (default: null)
The Mailbox id for the parent of this Mailbox, or `null` if this Mailbox is at the top level. Mailboxes form acyclic graphs (forests) directed by the child-to-parent relationship. There MUST NOT be a loop.
- **role**: `String|null` (default: null)
> :warning:
> Partially implemented. Role are based on the name of the mailbox. An evolution would be to use a mailbox annotation to hold its
> value, removing the link with the name, and allow the user to define locale based system mailboxes. This value cannot be updated.
Identifies Mailboxes that have a particular common purpose (e.g., the "inbox"), regardless of the *name* property (which may be localised).
This value is shared with IMAP (exposed in IMAP via the SPECIAL-USE extension [@!RFC6154]). However, unlike in IMAP, a Mailbox MUST only have a single role, and there MUST NOT be two Mailboxes in the same account with the same role. Servers providing IMAP access to the same data are encouraged to enforce these extra restrictions in IMAP as well. Otherwise, modifying the IMAP attributes to ensure compliance when exposing the data over JMAP is implementation dependent.
The value MUST be one of the Mailbox attribute names listed in the [IANA IMAP Mailbox Name Attributes](https://www.iana.org/assignments/imap-mailbox-name-attributes/imap-mailbox-name-attributes.xhtml) registry, as established in [@!RFC8457], converted to lowercase. New roles may be established here in the future.
An account is not required to have Mailboxes with any particular roles.
- **sortOrder**: `UnsignedInt` (default: 0)
> :warning:
> Partially implemented. Based on the role. This value cannot be updated.
Defines the sort order of Mailboxes when presented in the client's UI, so it
is consistent between devices. The number MUST be an integer in the range
0 <= sortOrder < 2^31.
A Mailbox with a lower order should be displayed before a Mailbox with a higher order (that has the same parent) in any Mailbox listing in the client's UI. Mailboxes with equal order SHOULD be sorted in alphabetical order by name. The sorting should take into account locale-specific character order convention.
- **totalEmails**: `UnsignedInt` (server-set)
The number of Emails in this Mailbox.
- **unreadEmails**: `UnsignedInt` (server-set)
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/identity.mdown
=====================================================
# Identities
> :warning:
> Partially implemented.
An **Identity** object stores information about an email address or domain the user may send from. It has the following properties:
- **id**: `Id` (immutable; server-set)
The id of the Identity.
- **name**: `String` (default: "")
The "From" *name* the client SHOULD use when creating a new Email from this Identity.
- **email**: `String` (immutable)
The "From" email address the client MUST use when creating a new Email from this Identity. If the *mailbox* part of the address (the section before the "@") is the single character `*` (e.g., `*@example.com`) then the client may use any valid address ending in that domain (e.g., `foo@example.com`).
- **replyTo**: `EmailAddress[]|null` (default: null)
The Reply-To value the client SHOULD set when creating a new Email from this Identity.
- **bcc**: `EmailAddress[]|null` (default: null)
The Bcc value the client SHOULD set when creating a new Email from this Identity.
- **textSignature**: `String` (default: "")
A signature the client SHOULD insert into new plaintext messages that will be sent from this Identity. Clients MAY ignore this and/or combine this with a client-specific signature preference.
- **htmlSignature**: `String` (default: "")
A signature the client SHOULD insert into new HTML messages that will be sent from this Identity. This text MUST be an HTML snippet to be inserted into the `<body></body>` section of the HTML. Clients MAY ignore this and/or combine this with a client-specific signature preference.
- **mayDelete**: `Boolean` (server-set)
Is the user allowed to delete this Identity? Servers may wish to set this to `false` for the user's username or other default address. Attempts to destroy an Identity with `mayDelete: false` will be rejected with a standard `forbidden` SetError.
See the "Addresses" header form description in the Email object for the definition of *EmailAddress*.
Multiple identities with the same email address MAY exist, to allow for different settings the user wants to pick between (for example, with different names/signatures).
The following JMAP methods are supported.
## Identity/get
This is a standard "/get" method as described in [@!RFC8620], Section 5.1. The *ids* argument may be `null` to fetch all at once.
## Identity/changes
> :warning:
> Not implemented.
This is a standard "/changes" method as described in [@!RFC8620], Section 5.2.
## Identity/set
This is a standard "/set" method as described in [@!RFC8620], Section 5.3. The following extra *SetError* types are defined:
For **create**:
- `forbiddenFrom`: The user is not allowed to send from the address given as
the *email* property of the Identity.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/identitySortOrder.mdown
=====================================================
# Identity sort order
> :information_source:
> Implemented
### urn:apache:james:params:jmap:mail:identity:sortorder
This represents support for the extra `sortOrder` property on the `Identity` object.
Servers supporting this specification MUST add this property to the capabilities object.
This extension is specific to the Apache James server and is a temporary solution while waiting for the main work on
Identity sort order as part of the IETF group to be finalized as a proper RFC document.
### Additions to the Identity object
This specification adds the following property on `Identity` object:
- **sortOrder**: `UnsignedInt` (default: 0) Defines the sort order of Identities when presented in the client’s UI, so
it is consistent between devices. The number MUST be an integer in the range 0 <= sortOrder < 2^31.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/messagesubmission.mdown
=====================================================
# Email Submission
> :warning:
> Partially implemented
An **EmailSubmission** object represents the submission of an Email for delivery to one or more recipients. It has the following properties:
- **id**: `Id` (immutable; server-set)
The id of the EmailSubmission.
- **identityId**: `Id` (immutable)
The id of the Identity to associate with this submission.
> :warning:
> Not implemented. Submissions cannot be created with identityId. This field should be omitted.
- **emailId**: `Id` (immutable)
The id of the Email to send. The Email being sent does not have to be a draft, for example, when "redirecting" an existing Email to a different address.
- **threadId**: `Id` (immutable; server-set)
The Thread id of the Email to send. This is set by the server to the *threadId* property of the Email referenced by the *emailId*.
- **envelope**: `Envelope|null` (immutable)
Information for use when sending via SMTP.
An **Envelope** object has the following properties:
- **mailFrom**: `Address`
The email address to use as the return address in the SMTP submission, plus any parameters to pass with the MAIL FROM address. The JMAP server MAY allow the address to be the empty string.
When a JMAP server performs an SMTP message submission, it MAY use the
same id string for the ENVID parameter [@!RFC3461] and the
EmailSubmission object id. Servers that do this MAY replace a
client-provided value for ENVID with a server-provided value.
- **rcptTo**: `Address[]`
The email addresses to send the message to, and any RCPT TO parameters to pass with the recipient.
An **Address** object has the following properties:
- **email**: `String`
The email address being represented by the object. This is a "Mailbox" as used in the Reverse-path or Forward-path of the MAIL FROM or RCPT TO command in [@!RFC5321].
- **parameters**: `Object|null`
Any parameters to send with the email address (either mail-parameter or rcpt-parameter as appropriate, as specified in [@!RFC5321]). If supplied, each key in the object is a parameter name, and the value is either the parameter value (type `String`) or `null` if the parameter does not take a value. For both name and value, any xtext or unitext encodings are removed (see [@!RFC3461] and [@!RFC6533]) and JSON string encoding is applied.
> :warning:
> Not implemented. Submissions cannot be created with parameters. This field should be omitted.
If the *envelope* property is `null` or omitted on creation, the server MUST generate this from the referenced Email as follows:
- **mailFrom**: The email address in the *Sender* header field, if present;
otherwise, it's the email address in the *From* header field, if present. In either case, no parameters are added.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/rights.mdown
=====================================================
# urn:apache:james:params:jmap:mail:shares extension
<aside class="notice">
Implemented
</aside>
This extension is specific to the Apache James server as it relies on a common shared storage allowing arbitrary cross-account entity access.
This extension to the JMAP specification enables to:
- Grant access on mailboxes, and the email they contain to other users.
- Enable display of shared mailboxes, and shared messages as part of the main user account, making effectively account sharing transparent from a client perspective.
## Defined capability
The new capability `urn:apache:james:params:jmap:mail:shares` is defined.
This extension defines both behavioral changes and additional fields for the Mailbox object.
If specified, behavioral changes and additional fields defined hereafter MUST apply.
If unspecified no additional fields to the Mailbox object are returned, and the behaviour needs to be exactly the one of `urn:ietf:params:jmap:mail`.
## Addition to the capability object
Servers supporting *subaddressing* need to advertise it through the session capabilities by adding the following field to the `urn:apache:james:params:jmap:mail:shares` capability object:
- `subaddressingSupported`: *true*
If this field is not present, then it should be assumed that subaddressing is NOT supported.
## Addition to existing data types
The following data types are defined:
`Username` of type `String` corresponds to a username.
`Right` of type `String` defines an action that can be carried out on a mailbox or its content.
The following `Right`s are defined:
- `"a"` Administer: the user can view and modify the rights of this mailbox
- `"i"` Insert: the user can use the id of this mailbox in `mailboxId` fields of Emails.
- `"l"` Lookup: the user can see the name of this mailbox but information about the content of this mailbox MUST not be disclosed.
- `"r"` Read: the user can read the content of this mailbox, and see the assiociated Email and Thread counts.
- `"t"` DeleteMessages: the user can delete Email in this Mailbox
- `"w"` Write: the user can alter the Keywords of messages contained in this Mailbox, except the `$Seen` keyword
- `"s"` Seen: the user can alter the `$Seen` keyword of messages contained in this Mailbox
- `"e"` Expunge: the user can mark Email as Expunged in this Mailbox. This action is not achievable using JMAP.
- `"p"` Post: the user can send an Email to this Mailbox. This is used with the identifier `anyone` in the context of subaddressing.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/securityconsiderations.mdown
=====================================================
# Security Considerations
All security considerations of JMAP ([@!RFC8620]) apply to this specification. Additional considerations specific to the data types and functionality introduced by this document are described in the following subsections.
## EmailBodyPart Value
Service providers typically perform security filtering on incoming messages, and it's important that the detection of content-type and charset for the security filter aligns with the heuristics performed by JMAP servers. Servers that apply heuristics to determine the content-type or charset for an *EmailBodyValue* SHOULD document the heuristics and provide a mechanism to turn them off in the event they are misaligned with the security filter used at a particular mail host.
Automatic conversion of charsets that allow hidden channels for ASCII text, such as UTF-7, have been problematic for security filters in the past, so server implementations can mitigate this risk by having such conversions off-by-default and/or separately configurable.
To allow the client to restrict the volume of data it can receive in response to a request, a maximum length may be requested for the data returned for a textual body part. However, truncating the data may change the semantic meaning, for example, truncating a URL changes its location. Servers that scan for links to malicious sites should take care to either ensure truncation is not at a semantically significant point or rescan the truncated value for malicious content before returning it.
## HTML Email Display
HTML message bodies provide richer formatting for messages but present a number of security challenges, especially when embedded in a webmail context in combination with interface HTML. Clients that render HTML messages should carefully consider the potential risks, including:
* Embedded JavaScript can rewrite the message to change its content on
subsequent opening, allowing users to be mislead. In webmail systems, if run in the same origin as the interface, it can access and exfiltrate all private data accessible to the user, including all other messages and potentially contacts, calendar events, settings, and credentials. It can also rewrite the interface to undetectably phish passwords. A compromise is likely to be persistent, not just for the duration of page load, due to exfiltration of session credentials or installation of a service worker that can intercept all subsequent network requests (however, this would only be possible if blob downloads are also available on the same origin, and the service worker script is attached to the message).
* HTML documents may load content directly from the Internet, rather than just
referencing attached resources. For example, you may have an `<img>` tag with an external `src` attribute. This may leak to the sender when a message is opened, as well as the IP address of the recipient. Cookies may also be sent and set by the server, allowing tracking between different messages and even website visits and advertising profiles.
* In webmail systems, CSS can break the layout or create phishing
vulnerabilities. For example, the use of `position:fixed` can allow a message to draw content outside of its normal bounds, potentially clickjacking a real interface element.
* If in a webmail context and not inside a separate frame, any styles defined in
CSS rules will apply to interface elements as well if the selector matches, allowing the interface to be modified. Similarly, any interface styles that match elements in the message will alter their appearance, potentially breaking the layout of the message.
* The link text in HTML has no necessary correlation with the actual target of
the link, which can be used to make phishing attacks more convincing.
* Links opened from a message or embedded external content may leak private info
in the `Referer` header sent by default in most systems.
* Forms can be used to mimic login boxes, providing a potent phishing vector if
allowed to submit directly from the message display.
There are a number of ways clients can mitigate these issues, and a defence-in-depth approach that uses a combination of techniques will provide the strongest security.
* HTML can be filtered before rendering, stripping potentially malicious
content. Sanitising HTML correctly is tricky, and implementors are strongly recommended to use a well-tested library with a carefully vetted whitelist-only approach. New features with unexpected security characteristics may be added to HTML rendering engines in the future; a blacklist approach is likely to result in security issues.
Subtle differences in parsing of HTML can introduce security flaws: to filter with 100% accuracy, you need to use the same parser that the HTML rendering engine will use.
* Encapsulating the message in an `<iframe sandbox>`, as defined in
[HTML](https://www.w3.org/TR/html52/), Section 4.7.6, can help mitigate a
number of risks. This will:
* Disable JavaScript.
* Disable form submission.
* Prevent drawing outside of its bounds or conflicts between message CSS and interface CSS.
* Establish a unique anonymous origin, separate to the containing origin.
* A strong [Content Security Policy](https://www.w3.org/TR/CSP3/) can, among
other things, block JavaScript and loading of external content should it manage to evade the filter.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/thread.mdown
=====================================================
# Threads
> :warning:
> Partially implemented.
Replies are grouped together with the original message to form a Thread. In JMAP, a Thread is simply a flat list of Emails, ordered by date. Every Email MUST belong to a Thread, even if it is the only Email in the Thread.
The exact algorithm for determining whether two Emails belong to the same Thread is not mandated in this spec to allow for compatibility with different existing systems. For new implementations, it is suggested that two messages belong in the same Thread if both of the following conditions apply:
1. An identical message id [@!RFC5322] appears in both messages in any of the
Message-Id, In-Reply-To, and References header fields.
2. After stripping automatically added prefixes such as "Fwd:", "Re:",
"[List-Tag]", etc., and ignoring white space, the subjects are the same. This avoids the situation where a person replies to an old message as a convenient way of finding the right recipient to send to but changes the subject and starts a new conversation.
If messages are delivered out of order for some reason, a user may have two Emails in the same Thread but without headers that associate them with each other. The arrival of a third Email may provide the missing references to join them all together into a single Thread. Since the *threadId* of an Email is immutable, if the server wishes to merge the Threads, it MUST handle this by deleting and reinserting (with a new Email id) the Emails that change *threadId*.
A **Thread** object has the following properties:
- **id**: `Id` (immutable; server-set)
The id of the Thread.
- **emailIds**: `Id[]` (server-set)
The ids of the Emails in the Thread, sorted by the *receivedAt* date of the Email, oldest first. If two Emails have an identical date, the sort is server dependent but MUST be stable (sorting by id is recommended).
The following JMAP methods are supported.
## Thread/get
> :information_source:
> Implemented
This is a standard "/get" method as described in [@!RFC8620], Section 5.1.
### Example
Request:
[[ "Thread/get", {
"accountId": "acme",
"ids": ["f123u4", "f41u44"]
}, "#1" ]]
with response:
[[ "Thread/get", {
"accountId": "acme",
"state": "f6a7e214",
"list": [
{
"id": "f123u4",
"emailIds": [ "eaa623", "f782cbb"]
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/ianaconsiderations.mdown
=====================================================
# IANA Considerations
## JMAP Capability Registration for "mail"
IANA has registered the "mail" JMAP Capability as follows:
Capability Name: `urn:ietf:params:jmap:mail`
Specification document: this document
Intended use: common
Change Controller: IETF
Security and privacy considerations: this document, Section 9
## JMAP Capability Registration for "submission"
IANA has registered the "submission" JMAP Capability as follows:
Capability Name: `urn:ietf:params:jmap:submission`
Specification document: this document
Intended use: common
Change Controller: IETF
Security and privacy considerations: this document, Section 9
## JMAP Capability Registration for "vacationresponse"
IANA has registered the "vacationresponse" JMAP Capability as follows:
Capability Name: `urn:ietf:params:jmap:vacationresponse`
Specification document: this document
Intended use: common
Change Controller: IETF
Security and privacy considerations: this document, Section 9
## IMAP and JMAP Keywords Registry
This document makes two changes to the IMAP keywords registry as defined in [@!RFC5788].
First, the name of the registry is changed to the "IMAP and JMAP Keywords" registry.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/searchsnippet.mdown
=====================================================
# Search Snippets
> :information_source:
> Implemented
When doing a search on a `String` property, the client may wish to show the relevant section of the body that matches the search as a preview and to highlight any matching terms in both this and the subject of the Email. Search snippets represent this data.
A **SearchSnippet** object has the following properties:
- **emailId**: `Id`
The Email id the snippet applies to.
- **subject**: `String|null`
If text from the filter matches the subject, this is the subject of the Email with the following transformations:
1. Any instance of the following three characters MUST be replaced by an appropriate HTML entity: & (ampersand), < (less-than sign), and > (greater-than sign) [HTML](https://www.w3.org/TR/html52/). Other characters MAY also be replaced with an HTML entity form.
2. The matching words/phrases from the filter are wrapped in HTML `<mark></mark>` tags.
If the subject does not match text from the filter, this property is `null`.
- **preview**: `String|null`
If text from the filter matches the plaintext or HTML body, this is the relevant section of the body (converted to plaintext if originally HTML), with the same transformations as the *subject* property. It MUST NOT be bigger than 255 octets in size. If the body does not contain a match for the text from the filter, this property is `null`.
What is a relevant section of the body for preview is server defined. If the server is unable to determine search snippets, it MUST return `null` for both the *subject* and *preview* properties.
Note that unlike most data types, a SearchSnippet DOES NOT have a property called `id`.
## Behavioral changes
When `urn:apache:james:params:jmap:mail:shares` is specified, it allows rendering search snippets not in his account (shared mailboxes).
The following JMAP method is supported.
## SearchSnippet/get
To fetch search snippets, make a call to `SearchSnippet/get`. It takes the following arguments:
- **accountId**: `Id`
The id of the account to use.
- **filter**: `FilterOperator|FilterCondition|null`
The same filter as passed to Email/query; see the description of this method in Section 4.4 for details.
- **emailIds**: `Id[]`
The ids of the Emails to fetch snippets for.
The response has the following arguments:
- **accountId**: `Id`
The id of the account used for the call.
- **list**: `SearchSnippet[]`
An array of SearchSnippet objects for the requested Email ids. This may not be in the same order as the ids that were in the request.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/vacationresponse.mdown
=====================================================
# Vacation Response
> :information_source:
> Implemented
A vacation response sends an automatic reply when a message is delivered to the mail store, informing the original sender that their message may not be read for some time.
Automated message sending can produce undesirable behaviour. To avoid this, implementors MUST follow the recommendations set forth in [@!RFC3834].
The **VacationResponse** object represents the state of vacation-response-related settings for an account. It has the following properties:
- **id**: `Id` (immutable; server-set)
The id of the object. There is only ever one VacationResponse object, and its id is `"singleton"`.
- **isEnabled**: `Boolean`
Should a vacation response be sent if a message arrives between the *fromDate* and *toDate*?
- **fromDate**: `UTCDate|null`
If *isEnabled* is `true`, messages that arrive on or after this date-time (but before the *toDate* if defined) should receive the user's vacation response. If `null`, the vacation response is effective immediately.
- **toDate**: `UTCDate|null`
If *isEnabled* is `true`, messages that arrive before this date-time (but on or after the *fromDate* if defined) should receive the user's vacation response. If `null`, the vacation response is effective indefinitely.
- **subject**: `String|null`
The subject that will be used by the message sent in response to messages when the vacation response is enabled. If `null`, an appropriate subject SHOULD be set by the server.
- **textBody**: `String|null`
The plaintext body to send in response to messages when the vacation response is enabled. If this is `null`, the server SHOULD generate a plaintext body part from the *htmlBody* when sending vacation responses but MAY choose to send the response as HTML only. If both *textBody* and *htmlBody* are `null`, an appropriate default body SHOULD be generated for responses by the server.
- **htmlBody**: `String|null`
The HTML body to send in response to messages when the vacation response is enabled. If this is `null`, the server MAY choose to generate an HTML body part from the *textBody* when sending vacation responses or MAY choose to send the response as plaintext only.
The following JMAP methods are supported.
## VacationResponse/get
This is a standard "/get" method as described in [@!RFC8620], Section 5.1.
There MUST only be exactly one VacationResponse object in an account. It MUST have the id "singleton".
## VacationResponse/set
This is a standard "/set" method as described in [@!RFC8620], Section 5.3.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/delegation.mdown
=====================================================
# Delegations extension
> :information_source:
> Implemented
## Context
This extension is specific to the Apache James server which defines methods to manage users' JMAP delegation settings.
This extension to the JMAP specification enables to:
- Manage accounts that a user delegates access to.
- Manage accounts that a user is allowed access.
## Addition capability
The URN `urn:apache:james:params:jmap:delegation` represents support for the Delegation data type and associated API methods.
Servers supporting this specification MUST add this property to the capabilities object.
## Addition to the Session object
Servers supporting this specification MUST add the delegated accounts to the `accounts` property of the Session object.
## Behavioral changes
When `urn:apache:james:params:jmap:delegation` is specified, access to a delegated account is enabled through standard JMAP API calls
but MUST except API calls to manage delegated account's delegation setting to avoid privilege escalation.
## Delegation methods
A **Delegation** object stores information about an email address that either has access to the user's account or delegates access
to the user. The semantics for this object depends on the context of usage methods: either manage delegate accounts or delegated accounts.
The delegation object MUST have the following properties:
- **id**: `Id` (immutable; server-set)
The id of the Delegation.
- **username**: `String` (immutable)
The email address of the user that either delegates or is delegated to this user account.
The **Delegate** object follows the structure of **Delegation** and represents delegations accessing this account (allowing the listed user to connect as the current account owner).
The **DelegatedAccount** object follows the structure of **Delegation** and represents delegations active for this account (allowing the current account owner to connect as the listed user).
A user can delegate his account to multiple users as well as be allowed to access other accounts.
A user can manage his delegations to other users to access his account by creating, deleting and retrieving **Delegate** objects.
Meanwhile, a user can only retrieve and delete **DelegatedAccount** objects.
A server MUST not allow a delegated user to access and manage the owner user's delegation setting to avoid privilege escalation.
The following JMAP methods are supported:
### Delegate/get
This method returns **Delegate** objects of the user.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/intro.mdown
=====================================================
# Introduction
The JSON Meta Application Protocol (JMAP) [@!RFC8620] is a generic protocol for synchronising data, such as mail, calendars, or contacts between a client and a server. It is optimised for mobile and web environments and aims to provide a consistent interface to different data types.
This specification defines a data model for accessing a mail store over JMAP,
allowing you to query, read, organise, and submit mail for sending.
The data model is designed to allow a server to provide consistent access to
the same data via IMAP [@?RFC3501] as well as JMAP. As in IMAP, a message
must belong to a Mailbox; however, in JMAP, its id does not change if you move
it between Mailboxes, and the server may allow it to belong to multiple
Mailboxes simultaneously (often exposed in a user agent as labels rather than
folders).
As in IMAP, messages may also be assigned zero or more keywords: short arbitrary
strings. These are primarily intended to store metadata to inform client
display, such as unread status or whether a message has been replied to. An
IANA registry allows common semantics to be shared between clients and extended
easily in the future.
A message and its replies are linked on the server by a common Thread id.
Clients may fetch the list of messages with a particular Thread id to more
easily present a threaded or conversational interface.
Permissions for message access happen on a per-Mailbox basis. Servers may give
the user restricted permissions for certain Mailboxes, for example, if another
user's inbox has been shared as read-only with them.
## Notational Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [@!RFC2119] [@!RFC8174] when, and only when, they appear in all capitals, as shown here.
Type signatures, examples, and property descriptions in this document follow the conventions established in Section 1.1 of [@!RFC8620]. Data types defined in the core specification are also used in this document.
Servers MUST support all properties specified for the new data types defined in this document.
## Terminology
This document uses the same terminology as in the core JMAP specification.
The terms Mailbox, Thread, Email, SearchSnippet, EmailSubmission and VacationResponse (with that specific capitalisation) are used to refer to the data types defined in this document and instances of those data types.
The term message refers to a document in Internet Message Format, as described in [@!RFC5322]. The Email data type represents messages in the mail store and associated metadata.
## Additions to the Capabilities Object
The capabilities object is returned as part of the JMAP Session object; see [@!RFC8620], Section 2.
This document defines three additional capability URIs.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/custom-quotas/quotas.mdown
=====================================================
# Introduction
<aside class="notice">
Implemented, deprecated
</aside>
This specification defines a data model for handling mail quotas over JMAP, allowing you to read quota information.
This specification does not address quota administration, which should be handled by other means.
This specification is not official and proper to the James project usage at the moment.
## Terminology
### Quota
A quota is a numeric upper limit that the server is enforcing. Quotas are applied to JMAP Mailbox objects.
## Addition to the capabilities object
The capabilities object is returned as part of the JMAP Session object; see [@!RFC8620], section 2.
This document defines one additional capability URI.
### urn:apache:james:params:jmap:mail:quota
This represents support for the Quota data type and associated API methods.
Servers supporting this specification MUST add this property to the capabilities object.
This extension is specific to the Apache James server and is a temporary solution while waiting for the main work on
quotas as part of the IETF group to be finalized as a proper RFC document.
This extension enables to:
* read quotas usage and limits on mailboxes.
If specified, behavioral changes and additional fields defined hereafter MUST apply.
If unspecified no additional fields to the Mailbox object are returned, and the behaviour needs to be exactly the one of `urn:ietf:params:jmap:mail`.
# Quotas definition
The quota is an addition to the Mailbox object that displays the limit set to a mailbox usage as well as the current usage in regard to that limit.
## The QuotaId Data Type
The **QuotaId** is a `String` defined with the name of the **QuotaRoot** (as defined in [RFC2087](https://tools.ietf.org/html/rfc2087.html)) it represents.
It usually represents the ID attached to one or more **Quota** objects defined for that Mailbox.
## The Quotas.Type Data Type
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/securityconsiderations.mdown
=====================================================
# Security considerations
All security considerations of JMAP ([@!RFC8620]) apply to this specification.
Implementors should be careful to make sure the implementation of that extension does not violate the site's security policy.
The resource usage of other users is likely to be considered confidential information and should not be divulged to
unauthorized persons.
As for any resource shared across users (for example, a quota with the `domain` or `global` scope), a user that can consume
the resource can affect the resources available to the other users. For example, a user could spam himself with events and
make the shared resource hit the limit and unusable for others (implementors could mitigate that with some rate limiting
implementation on the server).
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/ianaconsiderations.mdown
=====================================================
# IANA Considerations
## JMAP Capability Registration for "quota"
IANA will register the "quota" JMAP Capability as follows:
Capability Name: `urn:ietf:params:jmap:quota`
Specification document: this document
Intended use: common
Change Controller: IETF
Security and privacy considerations: this document, section 4.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/quota.mdown
=====================================================
# Quota
> :warning:
> Partially implemented
The quota is an object that displays the limit set to an account usage as well as the current usage in regard to that limit.
The quota object **MUST** contain the following fields:
* **id**: `Id` The unique identifier for this object.
* **resourceType**: `String` The resource type of the quota.
* **used**: `UnsignedInt` The current usage of the defined quota, using the "resourceType" defined as unit of measure. Computation of this value is handled by the server.
* **hardLimit**: `UnsignedInt` The hard limit set by this quota, using the "resourceType" defined as unit of measure. Objects in scope may not be created or updated if this limit is reached.
* **scope**: `String` The "Scope" of this quota.
* **name**: `String` The name of the quota. Useful for managing quotas and using queries for searching.
* **types**: `String[]` A list of all the type names as defined in the "JMAP Types Names" registry (e.g., Email, Calendar, etc.) to which this quota applies. This allows the quotas to be assigned to distinct or shared data types.
The server **MUST** filter out any types for which the client did not request the associated capability in the "using" section of the request. Further, the server **MUST NOT** return Quota objects for which there are no types recognized by the client.
The quota object **MAY** contain the following field:
* **warnLimit**: `UnsignedInt|null` The warn limit set by this quota, using the "resourceType" defined as unit of measure.
It can be used to send a warning to an entity about to reach the hard limit soon, but with no action taken yet.
If set, it **SHOULD** be lower than the "softLimit" (if present and different from null) and the "hardLimit".
* **softLimit**: `UnsignedInt|null` The soft limit set by this quota, using the "resourceType" defined as unit of measure.
It can be used to still allow some operations but refuse some others. What is allowed or not is up to the server.
For example, it could be used for blocking outgoing events of an entity (sending emails, creating calendar events, etc.) while still receiving incoming events (receiving emails, receiving calendars events, etc.).
If set, it **SHOULD** be higher than the "warnLimit" (if present and different from null) but lower than the "hardLimit".
* **description**: `String|null` Arbitrary, free, human-readable description of this quota. It might be used to explain where the different limits come from and explain the entities and data types this quota applies to.
The description **MUST** be encoded in UTF-8 [RFC3629] as described in [RFC8620], Section 1.5, and selected based on an Accept-Language header in the request (as defined in [RFC9110], Section 12.5.4) or out-of-band information about the user's language or locale.
The following JMAP methods are supported.
## Quota/get
> :information_source:
> Implemented
Standard “/get” method as described in [@!RFC8620] section 5.1. The id's argument may be "null" to fetch all quotas of the account at once, as demonstrated in Section 5.1.
## Quota/changes
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/intro.mdown
=====================================================
# Introduction
> :warning:
> Partially implemented
JMAP ([@!RFC8620] – JSON Meta Application Protocol) is a generic protocol for synchronising data, such as mails,
calendars or contacts, between a client and a server. It is optimised for mobile and web environments, and aims
to provide a consistent interface to different data types.
This specification defines a data model for handling quotas over JMAP, allowing you to read and explain quota information.
This specification does not address quota administration, which should be handled by other means.
## Notational conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP
14 [@!RFC2119] [@!RFC8174] when, and only when, they appear in all
capitals, as shown here.
Type signatures, examples and property descriptions in this document follow the conventions established in section 1.1
of [@!RFC8620]. Data types defined in the core specification are also used in this document.
Servers MUST support all properties specified for the new data types defined in this document.
## Terminology
The same terminology is used in this document as in the core JMAP specification.
The term Quota (with that specific capitalization) is used to refer to the data type defined in this document and instance of that data type.
## Addition to the capabilities object
The capabilities object is returned as part of the JMAP Session object; see [@!RFC8620], section 2.
This document defines one additional capability URI.
### urn:ietf:params:jmap:quota
This represents support for the Quota data type and associated API methods. Servers supporting this specification **MUST** add a property called `urn:ietf:params:jmap:quota` to the capabilities object.
The value of this property is an empty object in both the JMAP session capabilities property and an account’s accountCapabilities property.
## Sub-types of the Quota Data Type
There are two fields within the `Quota` data type, which have an enumerated set of possible values. These are:
### Scope
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/push.mdown
=====================================================
# Push
> :information_source:
> Implemented.
>
> Some limitations for event source are described below.
Push notifications allow clients to efficiently update (almost) instantly to stay in sync with data changes on the server. The general model for push is simple and sends minimal data over the push channel: just enough for the client to know whether it needs to resync. The format allows multiple changes to be coalesced into a single push update and the frequency of pushes to be rate limited by the server. It doesn't matter if some push events are dropped before they reach the client; the next time it gets/sets any records of a changed type, it will discover the data has changed and still sync all changes.
There are two different mechanisms by which a client can receive push notifications, to allow for the different environments in which a client may exist. An event source resource (see Section 7.3) allows clients that can hold transport connections open to receive push notifications directly from the JMAP server. This is simple and avoids third parties, but it is often not feasible on constrained platforms such as mobile devices. Alternatively, clients can make use of any push service supported by their environment. A URL for the push service is registered with the JMAP server (see Section 7.2), then the server then POSTs each notification to that URL. The push service is then responsible for routing these to the client.
## The StateChange Object
When something changes on the server, the server pushes a **StateChange** object to the client. A **StateChange** object has the following properties:
- **@type**: `String`
This MUST be the string "StateChange".
- **changed**: `Id[TypeState]`
A map of an *account id* to an object encoding the state of data types that have changed for that account since the last StateChange object was pushed, for each of the accounts to which the user has access and for which something has changed.
A **TypeState** object is a map. The keys are the type name `Foo` (e.g., "Mailbox" or "Email"), and the value is the *state* property that would currently be returned by a call to *Foo/get*.
The client can compare the new state strings with its current values to see whether it has the current data for these types. If not, the changes can then be efficiently fetched in a single standard API request (using the */changes* type methods).
### Example
In this example, the server has amalgamated a few changes together across two different accounts the user has access to, before pushing the following StateChange object to the client:
{
"@type": "StateChange",
"changed": {
"a3123": {
"Email": "d35ecb040aab",
"EmailDelivery": "428d565f2440",
"CalendarEvent": "87accfac587a"
},
"a43461d": {
"Mailbox": "0af7a512ce70",
"CalendarEvent": "7a4297cecd76"
}
}
}
The client can compare the state strings with its current state for the Email, CalendarEvent, etc., object types in the appropriate accounts to see if it needs to fetch changes.
If the client is itself making changes, it may receive a StateChange object while the /set API call is in flight. It can wait until the call completes and then compare if the new state string after the /set is the same as was pushed in the StateChange object; if so, and the old state of the /set response matches the client's previous state, it does not need to waste a request asking for changes it already knows.
## PushSubscription
Clients may create a *PushSubscription* to register a URL with the JMAP server. The JMAP server will then make an HTTP POST request to this URL for each push notification it wishes to send to the client.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/securityconsiderations.mdown
=====================================================
# Security Considerations
## Transport Confidentiality
To ensure the confidentiality and integrity of data sent and received via JMAP, all requests MUST use TLS 1.2 [@!RFC5246] [@!RFC8446] or later, following the recommendations in [@!RFC7525]. Servers SHOULD support TLS 1.3 [@!RFC8446] or later.
Clients MUST validate TLS certificate chains to protect against man-in-the-middle attacks [@!RFC5280].
## Authentication Scheme
A number of HTTP authentication schemes have been standardised (see https://www.iana.org/assignments/http-authschemes/). Servers should take care to assess the security characteristics of different schemes in relation to their needs when deciding what to implement.
Use of the Basic authentication scheme is NOT RECOMMENDED. Services that choose to use it are strongly recommended to require generation of a unique "app password" via some external mechanism for each client they wish to connect. This allows connections from different devices to be differentiated by the server and access to be individually revoked.
## Service Autodiscovery
Unless secured by something like DNSSEC, autodiscovery of server
details using SRV DNS records is vulnerable to a DNS poisoning attack, which can lead to the client talking to an attacker's server instead of the real JMAP server. The attacker may then intercept requests to execute man-in-the-middle attacks and, depending on the authentication scheme, steal credentials to generate its own requests.
Clients that do not support SRV lookups are likely to try just using the `/.well-known/jmap` path directly against the domain of the username over HTTPS. Servers SHOULD ensure this path resolves or redirects to the correct JMAP Session resource to allow this to work. If this is not feasible, servers MUST ensure this path cannot be controlled by an attacker, as again it may be used to steal credentials.
## JSON Parsing
The Security Considerations of [@!RFC8259] apply to the use of JSON as the data interchange format.
As for any serialization format, parsers need to thoroughly check the
syntax of the supplied data. JSON uses opening and closing tags for
several types and structures, and it is possible that the end of supplied
data will be reached when scanning for a matching closing tag; this is an
error condition, and implementations need to stop scanning at the end of the
supplied data.
JSON also uses a string encoding with some escape sequences to encode
special characters within a string. Care is needed when processing these
escape sequences to ensure that they are fully formed before
the special processing is triggered, with special care taken when the
escape sequences appear adjacent to other (non-escaped) special characters
or adjacent to the end of data (as in the previous paragraph).
If parsing JSON into a non-textual structured data format, implementations
may need to allocate storage to hold JSON string elements. Since JSON
does not use explicit string lengths, the risk of denial of service due to
resource exhaustion is small, but implementations may still wish to place
limits on the size of allocations they are willing to make in any given
context, to avoid untrusted data causing excessive memory allocation.
## Denial of Service
A small request may result in a very large response and require considerable
work on the server if resource limits are not enforced. JMAP provides mechanisms for advertising and enforcing a wide variety of limits for mitigating this threat, including limits on the number of objects fetched in a single method call, number of methods in a single request, number of concurrent requests, etc.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/session.mdown
=====================================================
# The JMAP Session Resource
> :information_source:
> Implemented
You need two things to connect to a JMAP server:
1. The URL for the JMAP Session resource. This may be requested directly from
the user or discovered automatically based on a username domain (see Section 2.2 below).
2. Credentials to authenticate with. How to obtain credentials is out of scope
for this document.
A successful authenticated GET request to the JMAP Session resource MUST return a JSON-encoded **Session** object, giving details about the data and capabilities the server can provide to the client given those credentials. It has the following properties:
- **capabilities**: `String[Object]`
An object specifying the capabilities of this server. Each key is a URI for a capability supported by the server. The value for each of these keys is an object with further information about the server's capabilities in relation to that capability.
The client MUST ignore any properties it does not understand.
The capabilities object MUST include a property called `urn:ietf:params:jmap:core`. The value of this property is an object that MUST contain the following information on server capabilities (suggested minimum values for limits are supplied that allow clients to make efficient use of the network):
- **maxSizeUpload**: `UnsignedInt`
> :warning:
> Not enforced yet
The maximum file size, in octets, that the server will accept for a single file upload (for any purpose). Suggested minimum: 50,000,000.
- **maxConcurrentUpload**: `UnsignedInt`
> :warning:
> Not enforced yet
The maximum number of concurrent requests the server will accept to the upload endpoint. Suggested minimum: 4.
- **maxSizeRequest**: `UnsignedInt`
> :warning:
> Not enforced yet
The maximum size, in octets, that the server will accept for a single
request to the API endpoint. Suggested minimum: 10,000,000.
- **maxConcurrentRequests**: `UnsignedInt`
> :warning:
> Not enforced yet
The maximum number of concurrent requests the server will accept to
the API endpoint. Suggested minimum: 4.
- **maxCallsInRequest**: `UnsignedInt`
> :warning:
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/ianaconsiderations.mdown
=====================================================
# IANA Considerations
## Assignment of jmap Service Name
IANA has assigned the 'jmap' service name in the "Service Name and Transport Protocol Port Number Registry" [@!RFC6335].
Service Name: jmap
Transport Protocol(s): tcp
Assignee: IESG
Contact: IETF Chair
Description: JSON Meta Application Protocol
Reference: [@!RFC8620]
Assignment Notes: This service name was previously assigned under the name *JSON Mail Access Protocol*. This has been de-assigned and re-assigned with the approval of the previous assignee.
## Registration of Well-Known URI suffix for JMAP
IANA has registered the following suffix in the "Well-Known URIs" registry for JMAP, as described in [@!RFC8615]:
URI Suffix: jmap
Change Controller: IETF
Specification Document: [@!RFC8620], Section 2.2.
## Registration of the jmap URN Sub-namespace
IANA has registered the following URN sub-namespace in the "IETF URN Sub-namespace for Registered Protocol Parameter Identifiers" registry within the "Uniform Resource Name (URN) Namespace for IETF Use" registry as described in [@!RFC3553].
Registered Parameter Identifier: jmap
Reference: [@!RFC8620], Section 9.4
IANA Registry Reference: http://www.iana.org/assignments/jmap
## Creation of "JMAP Capabilities" Registry
IANA has created the "JMAP Capabilities" registry as described in Section 2. JMAP capabilities are advertised in the *capabilities* property of the Session object. They are used to extend the functionality of a JMAP server. A capability is referenced by a URI. The JMAP capability URI can be a URN starting with `urn:ietf:params:jmap:` plus a unique suffix that is the index value in the jmap URN sub-namespace. Registration of a JMAP capability with another form of URI has no impact on the jmap URN sub-namespace.
This registry follows the expert review process unless the "intended use" field is *common* or *placeholder*, in which case registration follows the specification required process.
A JMAP capability registration can have an intended use of *common*, *placeholder*, *limited*, or *obsolete*. IANA will list common-use registrations prominently and separately from those with other intended use values.
The JMAP capability registration procedure is not a formal standards process but rather an administrative procedure intended to allow community comment and sanity checking without excessive time delay.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/binary.mdown
=====================================================
# Binary Data
> :information_source:
> Implemented
Binary data is referenced by a *blobId* in JMAP and uploaded/downloaded separately to the core API. The blobId solely represents the raw bytes of data, not any associated metadata such as a file name or content type. Such metadata is stored alongside the blobId in the object referencing it. The data represented by a blobId is immutable.
Any blobId that exists within an account may be used when creating/updating another object in that account. For example, an Email type may have a blobId that represents the object in Internet Message Format [@!RFC5322]. A client could create a new Email object with an attachment and use this blobId, in effect attaching the old message to the new one. Similarly, it could attach any existing attachment of an old message without having to download and upload it again.
When the client uses a blobId in a create/update, the server MAY assign a new blobId to refer to the same binary data within the new/updated object. If it does so, it MUST return any properties that contain a changed blobId in the created/updated response, so the client gets the new ids.
A blob that is not referenced by a JMAP object (e.g., as a message attachment) MAY be deleted by the server to free up resources. Uploads (see below) are initially unreferenced blobs. To ensure interoperability:
* The server SHOULD use a separate quota for unreferenced blobs to the
account's usual quota. In the case of shared accounts, this quota SHOULD be separate per user.
* This quota SHOULD be at least the maximum total size that a single
object can reference on this server. For example, if supporting JMAP Mail, this should be at least the maximum total attachments size for a message.
* When an upload would take the user over quota, the server MUST delete
unreferenced blobs in date order, oldest first, until there is room for the new blob.
* Except where quota restrictions force early deletion, an unreferenced blob
MUST NOT be deleted for at least 1 hour from the time of upload; if reuploaded, the same blobId MAY be returned, but this SHOULD reset the expiry time.
* A blob MUST NOT be deleted during the method call that removed the last
reference, so that a client can issue a create and a destroy that both reference the blob within the same method call.
## Uploading Binary Data
There is a single endpoint that handles all file uploads for an account, regardless of what they are to be used for. The Session object (see Section 2) has an *uploadUrl* property in URI Template (level 1) format [@!RFC6570], which MUST contain a variable called `accountId`. The client may use this template in combination with an *accountId* to get the URL of the file upload resource.
To upload a file, the client submits an authenticated POST request to the file upload resource.
A successful request MUST return a single JSON object with the following properties as the response:
- **accountId**: `Id`
The id of the account used for the call.
- **blobId**: `Id`
The id representing the binary data uploaded. The data for this id is immutable. The id *only* refers to the binary data, not any metadata.
- **type**: `String`
The media type of the file (as specified in [@!RFC6838], Section 4.2) as set in the Content-Type header of the upload HTTP request.
- **size**: `UnsignedInt`
The size of the file in octets.
If identical binary content to an existing blob in the account is uploaded, the existing blobId MAY be returned.
Clients should use the blobId returned in a timely manner. Under rare circumstances, the server may have deleted the blob before the client uses it; the client should keep a reference to the local file so it can upload it again in such a situation.
When an HTTP error response is returned to the client, the server SHOULD return a JSON "problem details" object as the response body, as per [@!RFC7807].
As access controls are often determined by the object holding the reference to a blob, unreferenced blobs MUST only be accessible to the uploader, even in shared accounts.
## Downloading Binary Data
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/api.mdown
=====================================================
# Structured Data Exchange
The client may make an API request to the server to get or set structured data. This request consists of an ordered series of method calls. These are processed by the server, which then returns an ordered series of responses.
## Making an API Request
To make an API request, the client makes an authenticated POST request to the API resource, which is defined by the *apiUrl* property in the Session object (see Section 2).
The request MUST be of type `application/json` and consist of a single JSON-encoded **Request** object, as defined in Section 3.3. If successful, the response MUST also be of type `application/json` and consist of a single **Response** object, as defined in Section 3.4.
## The Invocation Data Type
> :information_source:
> Implemented
Method calls and responses are represented by the **Invocation** data type. This is a tuple, represented as a JSON array containing three elements:
1. A `String` **name** of the method to call or of the response.
2. A `String[*]` object containing *named* **arguments** for that method or
response.
3. A `String` **method call id**: an arbitrary string from the client to be
echoed back with the responses emitted by that method call (a method may return 1 or more responses, as it may make implicit calls to other methods; all responses initiated by this method call get the same method call id in the response).
## The Request Object
> :information_source:
> Implemented
A **Request** object has the following properties:
- **using**: `String[]`
The set of capabilities the client wishes to use. The client MAY include capability identifiers even if the method calls it makes do not utilise those capabilities.
The server advertises the set of specifications it supports in the Session object (see Section 2), as keys on the *capabilities* property.
- **methodCalls**: `Invocation[]`
An array of method calls to process on the server. The method calls MUST be processed sequentially, in order.
- **createdIds**: `Id[Id]` (optional)
A map of a (client-specified) creation id to the id the server assigned when a record was successfully created.
As described later in this specification, some records may have a property that contains the id of another record. To allow more efficient network usage, you can set this property to reference a record created earlier in the same API request. Since the real id is unknown when the request is created, the client can instead specify the creation id it assigned, prefixed with a `#` (see Section 5.3 for more details).
As the server processes API requests, any time it successfully creates a new record, it adds the creation id to this map (see the *create* argument to "/set" in Section 5.3), with the server-assigned real id as the value. If it comes across a reference to a creation id in a create/update, it looks it up in the map and replaces the reference with the real id, if found.
The client can pass an initial value for this map as the *createdIds* property of the Request object. This may be an empty object. If given in the request, the response will also include a createdIds property. This allows proxy servers to easily split a JMAP request into multiple JMAP requests to send to different servers. For example, it could send the first two method calls to server A, then the third to server B, before sending the fourth to server A again. By passing the createdIds of the previous response to the next request, it can ensure all of these still resolve. See Section 5.8 for further discussion of proxy considerations.
Future specifications MAY add further properties to the Request object to extend the semantics. To ensure forwards compatibility, a server MUST ignore any other properties it does not understand on the JMAP Request object.
### Example Request
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/intro.mdown
=====================================================
# Introduction
The JSON Meta Application Protocol (JMAP) is used for synchronising data, such as mail, calendars, or contacts, between a client and a server. It is optimised for mobile and web environments and aims to provide a consistent interface to different data types.
This specification is for the generic mechanism of data synchronisation. Further specifications define the data models for different data types that may be synchronised via JMAP.
JMAP is designed to make efficient use of limited network resources. Multiple API calls may be batched in a single request to the server, reducing round trips and improving battery life on mobile devices. Push connections remove the need for polling, and an efficient delta update mechanism ensures a minimum amount of data is transferred.
JMAP is designed to be horizontally scalable to a very large number of users. This is facilitated by separate endpoints for users after login, the separation of binary and structured data, and a data model for sharing that does not allow data dependencies between accounts.
## Notational Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [@!RFC2119] [@!RFC8174] when, and only when, they appear in all capitals, as shown here.
The underlying format used for this specification is JSON. Consequently, the terms "object" and "array" as well as the four primitive types (strings, numbers, booleans, and null) are to be interpreted as described in Section 1 of [@!RFC8259]. Unless otherwise noted, all the property names and values are case sensitive.
Some examples in this document contain "partial" JSON documents used for illustrative purposes. In these examples, three periods "..." are used to indicate a portion of the document that has been removed for compactness.
For compatibility with publishing requirements, line breaks have been inserted inside long JSON strings, with the following continuation lines indented. To form the valid JSON example, any line breaks inside a string must be replaced with a space and any other white space after the line break removed.
Unless otherwise specified, examples of API exchanges only show the methodCalls array of the Request object or the methodResponses array of the Response object. For compactness, the rest of the Request/Response object is omitted.
Type signatures are given for all JSON values in this document. The following conventions are used:
* `*` – The type is undefined (the value could be any type, although permitted
values may be constrained by the context of this value).
* `String` – The JSON string type.
* `Number` – The JSON number type.
* `Boolean` – The JSON boolean type.
* `A[B]` – A JSON object where the keys are all of type `A`, and the values
are all of type `B`.
* `A[]` – An array of values of type `A`.
* `A|B` – The value is either of type `A` or of type `B`.
Other types may also be given, with their representation defined elsewhere in this document.
Object properties may also have a set of attributes defined along with the type
signature. These have the following meanings:
* `server-set` – Only the server can set the value for this property. The
client MUST NOT send this property when creating a new object of this type.
* `immutable` – The value MUST NOT change after the object is created.
* `default` – (This is followed by a JSON value). The value that will be used
for this property if it is omitted in an argument or when creating a new object of this type.
## The Id Data Type
> :information_source:
> Implemented
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/authentication.mdown
=====================================================
# Authentication
JMAP RFC-8620 deliberately does not address authentication concerns, and only assumes authenticated requests are handled.
Discovery of available authentication mechanism is not part of the JMAP specification.
This document summarizes available authentication mechanism on top of JMAP RFC-8621 implementation as part of the James
project.
## Basic authentication
James JMAP RFC-8621 supports [Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication).
Please note that while convenient for testing purpose, this authentication mechanism should not be used for production
workflow: the credentials are transmitted again and over again, should be retained in memory, authentication is
challenged for each request...
## JWT authentication
We rely on a third party software to supply a signed JWT token, valid according to the James JWT public key.
If valid, the request is blindly trusted.
[Read more](https://github.com/apache/james-project/blob/master/docs/modules/servers/pages/distributed/configure/jmap.adoc#generating-a-jwt-key-pair).
## Implementing new authentication mechanisms
Administrator might need to adapt authentication to their needs.
To implement custom authentication mechanisms, you need to implement `org.apache.james.jmap.http.AuthenticationStrategy`
and register it in `RFC8621MethodsModule::provideAuthenticator`.
Note that the Apache James project would happily welcome contributions regarding support of other authentication flows.
=====================================================
== File: server/protocols/jmap-rfc-8621/doc/README.md
=====================================================
Annotated JMAP documentation
============================
This directory contains annotated JMAP documentation as found on https://jmap.io/.
Officially finalized specifications so far regarding JMAP are:
* [The core protocol](https://jmap.io/spec-core.html) [[RFC 8620](https://tools.ietf.org/html/rfc8620)]
* [JMAP Mail](https://jmap.io/spec-mail.html) [[RFC 8621](https://tools.ietf.org/html/rfc8621)]
Annotations aim at tracking implementation progress in James project.
Annotations are usually represented in the documentation by an `aside` tag. That tag can have two classes:
* `notice` More like an informative annotation, usually used to mark that a feature has been implemented
* `warning` To get the developer's attention, usually to say that maybe a point or detail of an implemented feature has
not been implemented, or partially
=====================================================
== File: server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetCreatePerformer.scala
=====================================================
package org.apache.james.jmap.method
import java.nio.charset.StandardCharsets
import eu.timepit.refined.auto._
import jakarta.inject.Inject
import org.apache.james.jmap.api.model.{DeviceClientIdInvalidException, ExpireTimeInvalidException, PushSubscriptionCreationRequest, PushSubscriptionExpiredTime, PushSubscriptionId, PushSubscriptionKeys, PushSubscriptionServerURL, VerificationCode}
import org.apache.james.jmap.api.pushsubscription.PushSubscriptionRepository
import org.apache.james.jmap.core.SetError.SetErrorDescription
import org.apache.james.jmap.core.{Properties, PushSubscriptionCreation, PushSubscriptionCreationId, PushSubscriptionCreationParseException, PushSubscriptionCreationResponse, PushSubscriptionSetRequest, SetError}
import org.apache.james.jmap.json.{PushSerializer, PushSubscriptionSerializer}
import org.apache.james.jmap.method.PushSubscriptionSetCreatePerformer.{CreationFailure, CreationResult, CreationResults, CreationSuccess}
import org.apache.james.jmap.pushsubscription.{PushRequest, PushTTL, WebPushClient}
import org.apache.james.mailbox.MailboxSession
import org.slf4j.LoggerFactory
import play.api.libs.json.{JsObject, JsPath, Json, JsonValidationError}
import reactor.core.scala.publisher.{SFlux, SMono}
object PushSubscriptionSetCreatePerformer {
private val LOGGER = LoggerFactory.getLogger(classOf[PushSubscriptionSetCreatePerformer])
trait CreationResult
case class CreationSuccess(clientId: PushSubscriptionCreationId, response: PushSubscriptionCreationResponse) extends CreationResult
case class CreationFailure(clientId: PushSubscriptionCreationId, e: Throwable) extends CreationResult {
def asMessageSetError: SetError = e match {
case e: PushSubscriptionCreationParseException =>
LOGGER.info("Failure to parse PushSubscription/set create", e)
e.setError
case e: ExpireTimeInvalidException =>
LOGGER.info("Invalid time expiracy for push subscription: {}", e.getMessage)
SetError.invalidArguments(SetErrorDescription(e.getMessage), Some(Properties("expires")))
case e: DeviceClientIdInvalidException =>
LOGGER.info("Invalid deviceId for push subscription: {}", e.getMessage)
SetError.invalidArguments(SetErrorDescription(e.getMessage))
case e: IllegalArgumentException =>
LOGGER.info("Illegal argument in PushSubscription/set create", e)
SetError.invalidArguments(SetErrorDescription(e.getMessage))
case e =>
LOGGER.error("Failed to create push subscription", e)
SetError.serverFail(SetErrorDescription(e.getMessage))
}
}
case class CreationResults(results: Seq[CreationResult]) {
def created: Option[Map[PushSubscriptionCreationId, PushSubscriptionCreationResponse]] =
Option(results.flatMap {
case result: CreationSuccess => Some((result.clientId, result.response))
case _ => None
}.toMap)
=====================================================
== File: server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/DelegatedAccountSet.scala
=====================================================
package org.apache.james.jmap.delegation
import org.apache.james.jmap.core.{AccountId, SetError, UuidState}
import org.apache.james.jmap.method.{SetRequest, WithAccountId}
case class DelegatedAccountSetRequest(accountId: AccountId,
destroy: Option[Seq[UnparsedDelegateId]]) extends WithAccountId with SetRequest {
override def idCount: Int = destroy.map(_.size).getOrElse(0)
}
case class DelegatedAccountSetResponse(accountId: AccountId,
oldState: Option[UuidState],
newState: UuidState,
destroyed: Option[Seq[DelegationId]],
notDestroyed: Option[Map[UnparsedDelegateId, SetError]])
=====================================================
== File: server/protocols/jmap-rfc-8621/src/test/resources/spamMail.eml
=====================================================
Return-Path: <root-bounces@listes.minet.net>
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
Wed, 03 Jun 2015 11:05:45 +0200
X-Sieve: CMU Sieve 2.4
Received: from smtp.minet.net (smtp.minet.net [192.168.102.18])
by mx1.minet.net (Postfix) with ESMTP id F06FE610F72;
Wed, 3 Jun 2015 11:05:48 +0200 (CEST)
Received: from listes.minet.net (listes.minet.net [192.168.102.29])
by smtp.minet.net (Postfix) with ESMTP id AAB15610F70;
Wed, 3 Jun 2015 09:05:48 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=minet.net; s=mail;
t=1433322348; bh=8OtmVRMX7IWWyQo8WQIi5rKeDEQFghSX2r1WN9/pqUk=;
h=From:Date:To:Subject:List-Id:List-Unsubscribe:List-Post:List-Help:
List-Subscribe:From;
b=UkthSFXn5mtPnn7sYvDJIxgCk1O36L0p+hTOnI/xTF2WRMGJyXtLyCdFdE5jQ5gE4
EGNdhwmfjaKsoE7IDtc/4GrPvbnM8i9ojpSOBW1hXJPOeYnRgah/4gsXsMJWvmmq/A
4oTnw8ZswFXiShDmBMyaSEZuVrWTdaPBgUhVhGw8=
Received: from listes.minet.net (listes.minet.net [127.0.0.1])
by listes.minet.net (Postfix) with ESMTP id 9CD5BA27FF9;
Wed, 3 Jun 2015 09:05:48 +0000 (UTC)
X-Original-To: root@listes.minet.net
Delivered-To: root@listes.minet.net
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
by listes.minet.net (Postfix) with ESMTP id B8C1FA27FEF
for <root@listes.minet.net>; Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
Received: from localhost (spam.minet.net [192.168.102.97])
by mx1.minet.net (Postfix) with ESMTP id AD28B610F6D
for <root@listes.minet.net>; Wed, 3 Jun 2015 11:05:46 +0200 (CEST)
Content-Type: multipart/mixed; boundary="----------=_1433322346-12583-0"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
From: "Content-filter at spam.minet.net" <postmaster@minet.net>
Date: Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
To: <root@listes.minet.net>
Message-ID: <VASs-IZaXqmZao@spam.minet.net>
Subject: Original subject
X-BeenThere: root@listes.minet.net
X-Mailman-Version: 2.1.15
Errors-To: root-bounces@listes.minet.net
Sender: "root" <root-bounces@listes.minet.net>
This is a multi-part message in MIME format...
------------=_1433322346-12583-0
Content-Type: text/plain; charset="UTF-8"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit
No viruses were found.
=====================================================
== File: server/protocols/jmap-rfc-8621/src/test/resources/fullMessage.eml
=====================================================
Reply-to: alice <alice@local>
In-reply-to: bob@local
Mime-Version: 1.0
To: bob <bob@local>
From: alice <alice@local>
Cc: jack <jack@local>, jacob <jacob@local>
Bcc: alice <alice@local>
Subject: Full message
Message-ID: <1cc7f114-dbc4-42c2-99bd-f1100db6d0c1@open-paas.org>
Date: Tue, 7 Jun 2016 16:23:37 +0200
Content-Type: multipart/mixed;
boundary="------------7AF1D14DE1DFA16229726B54"
This is a multi-part message in MIME format.
--------------7AF1D14DE1DFA16229726B54
Content-Type: multipart/alternative;
boundary="------------172F9470CFA3BF3417835D92"
--------------172F9470CFA3BF3417835D92
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
/blabla/
*bloblo*
--------------172F9470CFA3BF3417835D92
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit
<i>blabla</i>
<b>bloblo</b>
--------------172F9470CFA3BF3417835D92--
--------------7AF1D14DE1DFA16229726B54
Content-Type: image/jpeg;
name="4037_014.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="4037_014.jpg"
/9j/4X2cRXhpZgAASUkqAAgAAAANAA8BAgAKAAAAqgAAABABAgAJAAAAtAAAABIBAwABAAAA
AQAAABoBBQABAAAAvgAAABsBBQABAAAAxgAAACgBAwABAAAAAgAAADEBAgAKAAAAzgAAADIB
AgAUAAAA2AAAABMCAwABAAAAAgAAAGmHBAABAAAAfAIAAKXEBwDQAAAA7AAAANLGBwBAAAAA
vAEAANPGBwCAAAAA/AEAAEwqAABQYW5hc29uaWMARE1DLUZaNDUAALQAAAABAAAAtAAAAAEA
AABWZXIuMS4wICAAMjAxNDowMjoyNSAxMDozMjowOQBQcmludElNADAyNTAAAA4AAQAWABYA
AgAAAAAAAwBkAAAABwAAAAAACAAAAAAACQAAAAAACgAAAAAACwCsAAAADAAAAAAADQAAAAAA
DgDEAAAAAAEFAAAAAQEBAAAAEAGAAAAACREAABAnAAALDwAAECcAAJcFAAAQJwAAsAgAABAn
AAABHAAAECcAAF4CAAAQJwAAiwAAABAnAADLAwAAECcAAOUbAAAQJwAAAAAAAAAAAAAAAAAA
=====================================================
== File: server/protocols/jmap-rfc-8621/src/test/resources/example.html
=====================================================
<div class="section">
<h3>Why a new Logo?<a name="Why_a_new_Logo"></a></h3>
<p>We are happy with our current logo, but for the
upcoming James Server 3.0 release, we would like to
give our community the opportunity to create a new image for James.</p>
<p>Don't be shy, take your inkscape and gimp, and send us on
the <a href="mail.html">James Server User mailing list</a>
your creations. We will publish them on this page.</p>
<p>We need an horizontal logo (100p height) to be show displayed on the upper
left corner of this page, an avatar (48x48p) to be used on a Twitter stream for example.
The used fonts should be redistributable (or commonly available on Windows and Linux).
The chosen logo should be delivered in SVG format.
We also like the <a class="externalLink" href="http://www.apache.org/foundation/press/kit/">Apache feather</a>.</p>
</div>
=====================================================
== File: server/protocols/jmap-rfc-8621/src/test/resources/emptyBodyMessageWithOneAttachment.eml
=====================================================
Reply-to: alice <alice@local>
In-reply-to: bob@local
Mime-Version: 1.0
To: bob <bob@local>
From: alice <alice@local>
Cc: jack <jack@local>, jacob <jacob@local>
Bcc: alice <alice@local>
Subject: Full message
Message-ID: <1cc7f114-dbc4-42c2-99bd-f1100db6d0c1@open-paas.org>
Date: Tue, 7 Jun 2016 16:23:37 +0200
Content-Type: multipart/mixed;
boundary="------------7AF1D14DE1DFA16229726B54"
This is a multi-part message in MIME format.
--------------7AF1D14DE1DFA16229726B54
Content-Type: multipart/alternative;
boundary="------------172F9470CFA3BF3417835D92"
--------------172F9470CFA3BF3417835D92
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
--------------172F9470CFA3BF3417835D92--
--------------7AF1D14DE1DFA16229726B54
Content-Type: image/jpeg;
name="4037_014.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="4037_014.jpg"
/9j/4X2cRXhpZgAASUkqAAgAAAANAA8BAgAKAAAAqgAAABABAgAJAAAAtAAAABIBAwABAAAA
AQAAABoBBQABAAAAvgAAABsBBQABAAAAxgAAACgBAwABAAAAAgAAADEBAgAKAAAAzgAAADIB
AgAUAAAA2AAAABMCAwABAAAAAgAAAGmHBAABAAAAfAIAAKXEBwDQAAAA7AAAANLGBwBAAAAA
vAEAANPGBwCAAAAA/AEAAEwqAABQYW5hc29uaWMARE1DLUZaNDUAALQAAAABAAAAtAAAAAEA
AABWZXIuMS4wICAAMjAxNDowMjoyNSAxMDozMjowOQBQcmludElNADAyNTAAAA4AAQAWABYA
AgAAAAAAAwBkAAAABwAAAAAACAAAAAAACQAAAAAACgAAAAAACwCsAAAADAAAAAAADQAAAAAA
DgDEAAAAAAEFAAAAAQEBAAAAEAGAAAAACREAABAnAAALDwAAECcAAJcFAAAQJwAAsAgAABAn
AAABHAAAECcAAF4CAAAQJwAAiwAAABAnAADLAwAAECcAAOUbAAAQJwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
=====================================================
== File: server/protocols/jmap-rfc-8621/src/test/resources/calendar.eml
=====================================================
Return-Path: <local@localhost.com>
MIME-Version: 1.0
Delivered-To: to@localhost.com
From: User From <fromUser@localhost.com>
Message-ID: <2d0fa16c-4c37-58de-1acc-50b5f6a23a60@localhost.com>
To: User To <toUser@linagora.com>
Date: Wed, 26 Jul 2017 10:34:02 +0200
Subject: Any subject
Content-class: urn:content-classes:calendarmessage
Content-Type: text/calendar; method=REPLY; charset=UTF-8
Content-transfer-encoding: 8BIT
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
METHOD:REPLY
BEGIN:VEVENT
CREATED:20170726T081145Z
LAST-MODIFIED:20170726T083402Z
DTSTAMP:20170726T083402Z
UID:f1514f44bf39311568d6407249cb76c48103fcd1fb398c3c501cb72b2d293f36e04
b2aab16e43439a608f28671ab7c10e754cbc85ddee4a07fa8cf8f4f7af05bfb502b8f6
SUMMARY:[A CONFIRMER] Call OVH
PRIORITY:5
ORGANIZER;CN=User;X-OBM-ID=id:mailto:userTo@localhost.com
ATTENDEE;CN=User;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL;X-OBM-ID=810:
mailto:user1To@linagora.com
DTSTART:20170727T130000Z
DURATION:PT1H
TRANSP:OPAQUE
SEQUENCE:2
X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for X property. Rem
oving entire property:
CLASS:PUBLIC
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:uuid_value
LOCATION:01.78.14.42.61 / 1586
X-OBM-ALERT;X-OBM-ID=486:600
END:VEVENT
END:VCALENDAR
=====================================================
== File: server/protocols/protocols-smtp/src/test/resources/smtpserver-requireTls.xml
=====================================================
<smtpserver enabled="true">
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<auth>
<announce>forUnauthorizedAddresses</announce>
<requireSSL>false</requireSSL>
</auth>
<verifyIdentity>true</verifyIdentity>
<smtpGreeting>Apache JAMES awesome SMTP Server</smtpGreeting>
<handlerchain>
<handler class="org.apache.james.smtpserver.tls.SmtpRequireTlsEhloHook"/>
<handler class="org.apache.james.smtpserver.tls.SmtpRequireTlsParameterHook"/>
<handler class="org.apache.james.smtpserver.tls.SmtpRequireTlsMessageHook"/>
<handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>
</handlerchain>
<gracefulShutdown>false</gracefulShutdown>
</smtpserver>
=====================================================
== File: server/protocols/protocols-smtp/src/test/resources/log4j.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %-5p [%-11t] [%-50c{4}] %L %m%n" />
</layout>
</appender>
<logger name="james" additivity="false">
<level value="info"></level>
<appender-ref ref="stdout" />
</logger>
<logger name="org.apache.james" additivity="false">
<level value="info"></level>
<appender-ref ref="stdout" />
</logger>
<root>
<priority value="info" />
<appender-ref ref="stdout" />
</root>
</log4j:configuration>
=====================================================
== File: server/protocols/protocols-smtp/src/test/resources/smtpserver-advancedSecurity.xml
=====================================================
<smtpserver enabled="true">
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<auth>
<announce>always</announce>
<requireSSL>true</requireSSL>
<plainAuthEnabled>false</plainAuthEnabled>
<!--OIDC path will be add dynamically in Tests-->
</auth>
<verifyIdentity>true</verifyIdentity>
<smtpGreeting>Apache JAMES awesome SMTP Server</smtpGreeting>
<handlerchain>
<handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>
</handlerchain>
<gracefulShutdown>false</gracefulShutdown>
</smtpserver>
=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
=====================================================
=====================================================
== File: server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
=====================================================
=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerTLSDefaultAuth.xml
=====================================================
<testserver enabled="true">
<tls socketTLS="true" startTLS="false">
<keystore>file://conf/keystore</keystore>
<keystoreType>JKS</keystoreType>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
<clientAuth/>
</tls>
</testserver>
=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerDisabled.xml
=====================================================
<testserver enabled="false">
</testserver>
=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerStartTLS.xml
=====================================================
<testserver enabled="true">
<tls socketTLS="false" startTLS="true">
<keystore>file://conf/keystore</keystore>
<keystoreType>JKS</keystoreType>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
</testserver>
=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerTLSNeedAuth.xml
=====================================================
<testserver enabled="true">
<tls socketTLS="true" startTLS="false">
<keystore>file://conf/keystore</keystore>
<keystoreType>JKS</keystoreType>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
<clientAuth>
<truststore>file://conf/truststore</truststore>
<truststoreType>JKS</truststoreType>
<truststoreSecret>james72laBalle</truststoreSecret>
</clientAuth>
</tls>
</testserver>
=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerDefaults.xml
=====================================================
<testserver enabled="true">
</testserver>
=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerPlain.xml
=====================================================
<testserver enabled="true">
<jmxName>testserver-custom</jmxName>
<bind>0.0.0.0:0</bind>
<connectionBacklog>150</connectionBacklog>
<connectiontimeout>360</connectiontimeout>
<connectionLimit>100</connectionLimit>
<connectionLimitPerIP>5</connectionLimitPerIP>
<helloName autodetect="false">custom-mailer</helloName>
</testserver>
=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerTLS.xml
=====================================================
<testserver enabled="true">
<tls socketTLS="true" startTLS="false">
<keystore>file://conf/keystore</keystore>
<keystoreType>JKS</keystoreType>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
</testserver>
=====================================================
== File: server/protocols/protocols-managesieve/pom.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.james</groupId>
<artifactId>james-server</artifactId>
<version>3.10.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>james-server-protocols-managesieve</artifactId>
<name>Apache James :: Server :: ManageSieve</name>
<dependencies>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-filesystem-api</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-protocols-library</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-util</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>testing-base</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.protocols.groupId}</groupId>
<artifactId>protocols-managesieve</artifactId>
</dependency>
<dependency>
<groupId>${james.protocols.groupId}</groupId>
<artifactId>protocols-netty</artifactId>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-handler</artifactId>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
</dependency>
<dependency>
<groupId>jakarta.inject</groupId>
=====================================================
== File: server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----
=====================================================
== File: server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/eml/emailWithOnlyAttachment.eml
=====================================================
Return-Path: <abc@apache.org>
Subject: 29989 btellier
From: <any@mail.com>
Content-Disposition: attachment
MIME-Version: 1.0
Date: Sun, 02 Apr 2017 22:09:04 -0000
Content-Type: application/zip; name="9559333830.zip"
To: <abc@apache.org>
Message-ID: <149117094410.10639.6001033367375624@any.com>
Content-Transfer-Encoding: base64
UEsDBBQAAgAIAEQeg0oN2YT/EAsAAMsWAAAIABwAMjIwODUuanNVVAkAAxBy4VgQcuFYdXgLAAEE
AAAAAAQAAAAApZhbi1zHFYWfY/B/MP3i7kwj1/2CokAwBPIQ+sGPkgJ1tURkdeiMbYzQf8+3q8+M
ZmQllgn2aHrqnNq1L2uvtavnj2/b7evz26/Op5M6q/P+8OUX77784g8/lQtLisXTU/68vfzCv/Lg
D9vqs/3b8fNXf92273ey4XTCykk9w9LpfD7tX+zGzU83b8pPg39uBr/Kmxe7w9PLuP3xwpFKTJ32
AAEEAAAAAAQAAAAAUEsFBgAAAAABAAEATgAAAFILAAAAAA==
=====================================================
== File: server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----
=====================================================
== File: server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----
=====================================================
== File: server/protocols/webadmin-integration-test/postgres-webadmin-integration-test/src/test/resources/eml/emailWithOnlyAttachment.eml
=====================================================
Return-Path: <abc@apache.org>
Subject: 29989 btellier
From: <any@mail.com>
Content-Disposition: attachment
MIME-Version: 1.0
Date: Sun, 02 Apr 2017 22:09:04 -0000
Content-Type: application/zip; name="9559333830.zip"
To: <abc@apache.org>
Message-ID: <149117094410.10639.6001033367375624@any.com>
Content-Transfer-Encoding: base64
UEsDBBQAAgAIAEQeg0oN2YT/EAsAAMsWAAAIABwAMjIwODUuanNVVAkAAxBy4VgQcuFYdXgLAAEE
AAAAAAQAAAAApZhbi1zHFYWfY/B/MP3i7kwj1/2CokAwBPIQ+sGPkgJ1tURkdeiMbYzQf8+3q8+M
ZmQllgn2aHrqnNq1L2uvtavnj2/b7evz26/Op5M6q/P+8OUX77784g8/lQtLisXTU/68vfzCv/Lg
D9vqs/3b8fNXf92273ey4XTCykk9w9LpfD7tX+zGzU83b8pPg39uBr/Kmxe7w9PLuP3xwpFKTJ32
AAEEAAAAAAQAAAAAUEsFBgAAAAABAAEATgAAAFILAAAAAA==
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
=====================================================
# Configuration urlPrefix for JMAP routes.
url.prefix=http://domain.com
websocket.url.prefix=ws://domain.com
upload.max.size=20M
webpush.maxTimeoutSeconds=10
webpush.maxConnections=10
dynamic.jmap.prefix.resolution.enabled=true
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/resources/rabbitmq.properties
=====================================================
uri=amqp://james:james@rabbitmq_host:5672
management.uri=http://james:james@rabbitmq_host:15672/api/
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested.eml
=====================================================
Return-Path: <me@linagora.com>
Delivered-To: me@linagora.com
Content-Type: multipart/mixed; boundary="------------8Z6SfsfcYTjrhgeuagphvHB4"
Message-ID: <bb76dd1c-044f-316f-c4aa-12d143256e0f@linagora.com>
Date: Wed, 3 May 2023 07:37:27 +0700
MIME-Version: 1.0
References: <ed24d4ad-53c0-48c7-2fc9-39f762e4d98d@linagora.com>
Subject: Fwd: test subject
To: Me ME <me@linagora.com>
From: Me ME <me@linagora.com>
In-Reply-To: <ed24d4ad-53c0-48c7-2fc9-39f762e4d98d@linagora.com>
X-Forwarded-Message-Id: <ed24d4ad-53c0-48c7-2fc9-39f762e4d98d@linagora.com>
This is a multi-part message in MIME format.
--------------8Z6SfsfcYTjrhgeuagphvHB4
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
CF the attachment
--------------8Z6SfsfcYTjrhgeuagphvHB4
Content-Type: message/rfc822; name="test subject.eml"
Content-Disposition: attachment; filename="test subject.eml"
Content-Transfer-Encoding: 7bit
Return-Path: <me@linagora.com>
Delivered-To: me@linagora.com
Content-Type: multipart/mixed; boundary="------------F6Ykx4Sf21a3Ovh9U5C4q1Qb"
Message-ID: <ed24d4ad-53c0-48c7-2fc9-39f762e4d98d@linagora.com>
Date: Wed, 3 May 2023 07:36:49 +0700
MIME-Version: 1.0
To: Me ME <me@linagora.com>
From: Me ME <me@linagora.com>
Subject: test subject
This is a multi-part message in MIME format.
--------------F6Ykx4Sf21a3Ovh9U5C4q1Qb
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
test body
--------------F6Ykx4Sf21a3Ovh9U5C4q1Qb
Content-Type: text/plain; charset=UTF-8; name="whatever.txt"
Content-Disposition: attachment; filename="whatever.txt"
Content-Transfer-Encoding: base64
dGVzdCBhdHRhY2htZW50Cg==
--------------F6Ykx4Sf21a3Ovh9U5C4q1Qb--
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/inlined-single-attachment.eml
=====================================================
Date: Wed, 26 Jan 2022 12:21:37 +0100
From: Bob <bob@domain.tld>
To: Alice <alice@domain.tld>
Subject: My subject
Message-ID: <20220126112137.wookj26xellphlam@W0248292>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="7f4cfz6rtfqdbqxn"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
--7f4cfz6rtfqdbqxn
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Main test message...
--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="yyy.txt"
Content-Transfer-Encoding: quoted-printable
[
{
"Id": "2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
]
--7f4cfz6rtfqdbqxn
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_complex.eml
=====================================================
Return-Path: <tungexplorer@linagora.com>
X-JAMES-MDN-JMAP-MESSAGE-ID: 49c73510-9108-11eb-a5a7-11eb7059e7ef
Delivered-To: magiclan@linagora.com
MIME-Version: 1.0
Content-Type: multipart/report; report-type=disposition-notification;
boundary="-=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-"
To: magiclan@linagora.com
X-LINAGORA-Copy-Delivery-Done: 1
From: tungexplorer@linagora.com
Subject: Read: test
Date: Tue, 30 Mar 2021 03:31:50 +0000
Message-ID: <Mime4j.f.9089aa43e656a14b.1788130035c@linagora.com>
---=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-
Content-Type: text/plain; charset=UTF-8
To: magiclan@linagora.com
Subject: test
Message was displayed on Tue Mar 30 2021 10:31:50 GMT+0700 (Indochina Time)
---=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-
Content-Type: message/disposition-notification; charset=UTF-8
Reporting-UA: OpenPaaS Unified Inbox; UA_Product
Original-Recipient: rfc822; tungexplorer@linagora.com
Final-Recipient: rfc822; tungexplorer@linagora.com
Original-Message-ID: <633c6811-f897-ec7c-642a-2360366e1b93@linagora.com>
Disposition: manual-action/MDN-sent-manually;displayed
Error: Message1
Error: Message2
X-OPENPAAS-IP: 177.177.177.77
X-OPENPAAS-PORT: 8000
---=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-
Content-Type: message/rfc822
Subject: test
To: magiclan@linagora.com
Content-Type: text/plain
This is content of original message, that already on third bodypart
---=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/related_in_alternative_multipart.eml
=====================================================
Return-Path: <from@linagora.com>
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----sinikael-?=_1-16049770230370.5904051543231188"
This is a multi-part message in MIME format.
------sinikael-?=_1-16049770230370.5904051543231188
Content-Type: multipart/alternative;
boundary="----sinikael-?=_2-16049770230370.5904051543231188"
------sinikael-?=_2-16049770230370.5904051543231188
Content-Type: multipart/related; type="text/html";
boundary="----sinikael-?=_3-16049770230370.5904051543231188"
------sinikael-?=_3-16049770230370.5904051543231188
Content-Type: text/html
Content-Transfer-Encoding: base64
PHRhYmxlPjwvdGFibGU+
------sinikael-?=_3-16049770230370.5904051543231188--
------sinikael-?=_2-16049770230370.5904051543231188
Content-Type: text/calendar; charset=UTF-8; method=CANCEL
Content-Transfer-Encoding: base64
QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjIuMA0KUFJPRElEOi0vL1NhYnJlLy9TYWJyZSBWT2Jq
ZWN0IDQuMS4zLy9FTg0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6Q0FOQ0VMDQpCRUdJTjpW
VElNRVpPTkUNClRaSUQ6QXNpYS9KYWthcnRhDQpCRUdJTjpTVEFOREFSRA0KVFpPRkZTRVRGUk9N
OiswNzAwDQpUWk9GRlNFVFRPOiswNzAwDQpUWk5BTUU6V0lCDQpEVFNUQVJUOjE5NzAwMTAxVDAw
MDAwMA0KRU5EOlNUQU5EQVJEDQpFTkQ6VlRJTUVaT05FDQpCRUdJTjpWRVZFTlQNClVJRDpkYTdj
MzljNS0xNzg3LTQ0MDktYjAwNS05MjBmZTBiMmMxYTINCkRUU1RBTVA6MjAyMDExMTBUMDI1NzAx
Wg0KU0VRVUVOQ0U6MQ0KU1VNTUFSWTo8QVQ+IFZlcmlmeSBVc2VyIFNlbmQgRW1haWwgVG8gQXR0
ZW5kZWVzIFR1ZSBOb3ZlbWJlciAxMCAwOTo1MjoxMiBVDQogVEMgMjAyMA0KRFRTVEFSVDoyMDIw
MTIwNlQwMzAwMDBaDQpEVEVORDoyMDIwMTIwNlQwNDAwMDBaDQpPUkdBTklaRVI7Q049VXNlciBB
Om1haWx0bzp1c2VyYUBxYS5vcGVuLXBhYXMub3JnDQpBVFRFTkRFRTtDTj06bWFpbHRvOnVzZXJk
QHFhLm9wZW4tcGFhcy5vcmcNCkVORDpWRVZFTlQNCkVORDpWQ0FMRU5EQVINCg==
------sinikael-?=_2-16049770230370.5904051543231188--
------sinikael-?=_1-16049770230370.5904051543231188
Content-Type: application/ics; name=meeting.ics
Content-Disposition: attachment; filename=meeting.ics
Content-Transfer-Encoding: base64
QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjIuMA0KUFJPRElEOi0vL1NhYnJlLy9TYWJyZSBWT2Jq
ZWN0IDQuMS4zLy9FTg0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6Q0FOQ0VMDQpCRUdJTjpW
VElNRVpPTkUNClRaSUQ6QXNpYS9KYWthcnRhDQpCRUdJTjpTVEFOREFSRA0KVFpPRkZTRVRGUk9N
OiswNzAwDQpUWk9GRlNFVFRPOiswNzAwDQpUWk5BTUU6V0lCDQpEVFNUQVJUOjE5NzAwMTAxVDAw
MDAwMA0KRU5EOlNUQU5EQVJEDQpFTkQ6VlRJTUVaT05FDQpCRUdJTjpWRVZFTlQNClVJRDpkYTdj
MzljNS0xNzg3LTQ0MDktYjAwNS05MjBmZTBiMmMxYTINCkRUU1RBTVA6MjAyMDExMTBUMDI1NzAx
Wg0KU0VRVUVOQ0U6MQ0KU1VNTUFSWTo8QVQ+IFZlcmlmeSBVc2VyIFNlbmQgRW1haWwgVG8gQXR0
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/alternative.cal.eml
=====================================================
Return-Path: <j@linagora.com>
MIME-version: 1.0
X-LINAGORA-Copy-Delivery-Done: 1
From: J <j@linagora.com>
Message-ID: <00ecbe90-cdbc-7222-75c4-0e297c5a8eef@linagora.com>
To: B <b@linagora.com>
Date: Thu, 14 Oct 2021 16:04:30 +0200
Subject: A little explanation
Content-type: multipart/mixed; boundary="Boundary_(ID_qyG4ZdjoAsiZ+Jo19dCbWQ)"
--Boundary_(ID_qyG4ZdjoAsiZ+Jo19dCbWQ)
Content-type: multipart/alternative;
boundary="Boundary_(ID_ryU4ZdJoASiZ+Jo21dCbwA)"
--Boundary_(ID_ryU4ZdJoASiZ+Jo21dCbwA)
Content-type: text/plain; charset=UTF-8
Content-transfer-encoding: 8BIT
J <j@linagora.com> a accepté votre invitation.
--Boundary_(ID_ryU4ZdJoASiZ+Jo21dCbwA)
Content-type: text/calendar; method=REPLY; charset=UTF-8
Content-transfer-encoding: 8BIT
BEGIN:VCALENDAR
VERSION:2.0
METHOD:REPLY
BEGIN:VTIMEZONE
END:VTIMEZONE
BEGIN:VEVENT
UID:08985ae5-8e62-4f3e-971d-27c8b40cf838
END:VEVENT
END:VCALENDAR
--Boundary_(ID_ryU4ZdJoASiZ+Jo21dCbwA)--
--Boundary_(ID_qyG4ZdjoAsiZ+Jo19dCbWQ)
Content-type: application/ics; name=invite.ics
Content-transfer-encoding: 8BIT
Content-disposition: attachment; filename=invite.ics
BEGIN:VCALENDAR
VERSION:2.0
METHOD:REPLY
BEGIN:VTIMEZONE
END:VTIMEZONE
BEGIN:VEVENT
UID:08985ae5-8e62-4f3e-971d-27c8b40cf838
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/html.eml
=====================================================
Return-Path: <from@linagora.com>
To: to@linagora.com
From: Lina <from@linagora.com>
Subject: MultiAttachment
Message-ID: <13d4375e-a4a9-f613-06a1-7e8cb1e0ea93@linagora.com>
Date: Mon, 27 Feb 2017 11:24:48 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.2.0
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------64D8D789FC30153D6ED18258"
This is a multi-part message in MIME format.
--------------64D8D789FC30153D6ED18258
Content-Type: text/html; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
<p>Send<br/>concerted from html</p>
--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=UTF-8;
name="text1"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="text1"
LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBeDdQRzAr
RS8vRU1wbTdJZ0k1UTlUTURTRnlhLzFoRSt2dlRKcmswaUdGbGxQZUhMCkE1L1ZsVE0wWVdn
RzZYNTBxaU1mRTNWTGF6ZjJjMTlpWHJUMG1xLzIxUFoxd0Zub2d2NHp4VU5haWgrQm5nNjIK
RjBTeXJ1RS9PL05qcXhoL0NjcTZLL2UwNVRWNFQ2NDNVU3hBZUcwS3BwbVlXOXg4SEEvR3ZW
ODMyYXBadXhrVgppNk5Wa0RCcmZ6YVVDd3U0ekgrSHdPdi9wSTg3RTdLY2NIWUMrK0JpYWoz
Cg==
--------------64D8D789FC30153D6ED18258
Content-Type: application/vnd.ms-publisher;
name="text2"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="text2"
c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCQVFESHM4YlQ0VC84UXltYnNp
QWpsRDFNd05JWEpyL1dFVDYrOU1tdVRTSVlXV1U5NGNzRG45V1ZNelJoYUFicGZuU3FJeDhU
ZFV0ck4vWnpYMkpldFBTYXIvYlU5blhBV2VpQy9qUEZRMXFLSDRHZURyWVhSTEt1NFQ4Nzgy
T3JHSDhKeXJvcjk3VGxOWGhQcmpkUkxFQjRiUXFtbVpoYjNId2NEOGE5WHpmWnFsbTdHUldM
bzFXUU1HdC9OcFFMQzdqTWY0ZkE2LytranpzVHNweHdkZ0w3NEdKcVBmT1hPaXdnTEhYOENa
Ni81UnlUcWhUNnBEM01rdFNOV2F6L3pJSFBORXFmNUJZOUNCTTFURlI1dys2TURIbzBnbWlJ
c1hGRUpUUG5maEJ2SERoU2pCMVJJMEt4VUNseVlySjRmQmxVVmVLZm5hd29WY3U3WXZDcUY0
RjUgcXV5bmhubkBsaW5hZ29yYQo=
--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=UTF-8;
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/inlined-mixed.eml
=====================================================
Date: Wed, 26 Jan 2022 12:21:37 +0100
From: Bob <bob@domain.tld>
To: Alice <alice@domain.tld>
Subject: My subject
Message-ID: <20220126112137.wookj26xellphlam@W0248292>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="7f4cfz6rtfqdbqxn"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
--7f4cfz6rtfqdbqxn
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Main test message...
--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="yyy.txt"
Content-Transfer-Encoding: quoted-printable
[
{
"Id": "2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
]
--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="xxx.txt"
Content-Transfer-Encoding: quoted-printable
[
{
"Id": "3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
]
--7f4cfz6rtfqdbqxn--
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_simple.eml
=====================================================
Return-Path: <from@linagora.com>
To: to@linagora.com
From: Lina <from@linagora.com>
Subject: MultiAttachment
Message-ID: <13d4375e-a4a9-f613-06a1-7e8cb1e0ea93@linagora.com>
Date: Mon, 27 Feb 2017 11:24:48 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.2.0
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------64D8D789FC30153D6ED18258"
This is a multi-part message in MIME format.
--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Send
--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=UTF-8;
name="text1"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="text1"
LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBeDdQRzAr
RS8vRU1wbTdJZ0k1UTlUTURTRnlhLzFoRSt2dlRKcmswaUdGbGxQZUhMCkE1L1ZsVE0wWVdn
RzZYNTBxaU1mRTNWTGF6ZjJjMTlpWHJUMG1xLzIxUFoxd0Zub2d2NHp4VU5haWgrQm5nNjIK
RjBTeXJ1RS9PL05qcXhoL0NjcTZLL2UwNVRWNFQ2NDNVU3hBZUcwS3BwbVlXOXg4SEEvR3ZW
ODMyYXBadXhrVgppNk5Wa0RCcmZ6YVVDd3U0ekgrSHdPdi9wSTg3RTdLY2NIWUMrK0JpYWoz
Cg==
--------------64D8D789FC30153D6ED18258
Content-Type: application/vnd.ms-publisher;
name="text2"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="text2"
c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCQVFESHM4YlQ0VC84UXltYnNp
QWpsRDFNd05JWEpyL1dFVDYrOU1tdVRTSVlXV1U5NGNzRG45V1ZNelJoYUFicGZuU3FJeDhU
ZFV0ck4vWnpYMkpldFBTYXIvYlU5blhBV2VpQy9qUEZRMXFLSDRHZURyWVhSTEt1NFQ4Nzgy
T3JHSDhKeXJvcjk3VGxOWGhQcmpkUkxFQjRiUXFtbVpoYjNId2NEOGE5WHpmWnFsbTdHUldM
bzFXUU1HdC9OcFFMQzdqTWY0ZkE2LytranpzVHNweHdkZ0w3NEdKcVBmT1hPaXdnTEhYOENa
Ni81UnlUcWhUNnBEM01rdFNOV2F6L3pJSFBORXFmNUJZOUNCTTFURlI1dys2TURIbzBnbWlJ
c1hGRUpUUG5maEJ2SERoU2pCMVJJMEt4VUNseVlySjRmQmxVVmVLZm5hd29WY3U3WXZDcUY0
RjUgcXV5bmhubkBsaW5hZ29yYQo=
--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=UTF-8;
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_simple.eml
=====================================================
Return-Path: <tungexplorer@linagora.com>
X-JAMES-MDN-JMAP-MESSAGE-ID: 49c73510-9108-11eb-a5a7-11eb7059e7ef
Delivered-To: magiclan@linagora.com
MIME-Version: 1.0
Content-Type: multipart/report; report-type=disposition-notification;
boundary="-=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-"
To: magiclan@linagora.com
X-LINAGORA-Copy-Delivery-Done: 1
From: tungexplorer@linagora.com
Subject: Read: test
Date: Tue, 30 Mar 2021 03:31:50 +0000
Message-ID: <Mime4j.f.9089aa43e656a14b.1788130035c@linagora.com>
---=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-
Content-Type: text/plain; charset=UTF-8
This is simple body of human-readable part
---=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-
Content-Type: message/disposition-notification; charset=UTF-8
Final-Recipient: rfc822; tungexplorer@linagora.com
Disposition: manual-action/MDN-sent-manually;displayed
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_complex.eml
=====================================================
Date: Tue, 03 Jan 2017 16:05:01 +0100
From: sender <sender@james.org>
MIME-Version: 1.0
To: David DOLCIMASCOLO <david.ddo@linagora.com>
Subject: Re: [Internet] Rendez-vous
References: <9b6a4271-69fb-217a-5c14-c68c68375d96@linagora.com>
In-Reply-To: <d5c6f1d6-96e7-8172-9fe6-41fa6c9bd6ec@linagora.com>
X-Gie-Attachments: none
Cc:
Content-type: multipart/mixed; boundary="----------=_1483455916-7086-3"
This is a multi-part message in MIME format...
------------=_1483455916-7086-3
Content-Type: multipart/alternative; boundary="------------060506070600060108040700"
This is a multi-part message in MIME format.
--------------060506070600060108040700
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
/blabla/
*bloblo*
--------------060506070600060108040700
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
<i>blabla</i>
<b>bloblo</b>
--------------060506070600060108040700--
------------=_1483455916-7086-3
Content-ID: <14672787885774e5c4d4cee471352039@linagora.com>
Content-Type: text/plain; charset="iso-8859-1"; name="avertissement.txt"
Content-Disposition: inline; filename="avertissement.txt"
Content-Transfer-Encoding: binary
inline attachment
------------=_1483455916-7086-3--
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_relate_original_message.eml
=====================================================
Return-Path: <return.path@james.apache.org>
Mailing-List: contact contact1@james.apache.org; run by ABC
Message-ID: <messageId1@Atlassian.JIRA>
In-Reply-To: <JIRA.12781874.1426269127000@Atlassian.JIRA>
References: <JIRA.12781874.1426269127000@Atlassian.JIRA> <JIRA.12781874.1426269127444@arcas>
Subject: This is subject of original message that mdn has been related
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394
----------------------------------
This is body content
---------------------------------------------------------------------
To unsubscribe, e-mail: server1@james.apache.org
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/attachment-filename-in-content-type.eml
=====================================================
MIME-Version: 1.0
Subject: test send mail with attachment filename search
From: Bob <bob@linagora.com>
To: "alice@gmail.com" <alice@gmail.com>
Reply-To: bob@linagora.com
Message-ID: <Mime4j.7.2182050b7626964a.196e6b48459@linagora.com>
User-Agent: Twake-Mail/0.15.3 Mozilla/5.0 (Macintosh; Intel Mac OS X
10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0
Safari/537.36
Content-Type: multipart/mixed;
boundary="-=Part.9.facdaad4d7d1e26d.196e6b48470.15f465553d6bace6=-"
---=Part.9.facdaad4d7d1e26d.196e6b48470.15f465553d6bace6=-
Content-Type: multipart/alternative;
boundary="-=Part.8.8fd856f88f8fdedd.196e6b48470.d48dd74354571387=-"
---=Part.8.8fd856f88f8fdedd.196e6b48470.d48dd74354571387=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT, de-DE
Content-Language: vi-VN
body
---=Part.8.8fd856f88f8fdedd.196e6b48470.d48dd74354571387=-
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT, de-DE
Content-Language: vi-VN
<div>body<br><br></div>
---=Part.8.8fd856f88f8fdedd.196e6b48470.d48dd74354571387=---
---=Part.9.facdaad4d7d1e26d.196e6b48470.15f465553d6bace6=-
Content-Type: text/plain; name="=?US-ASCII?Q?filename.txt?=";
charset=windows-1252
Content-Disposition: attachment
Content-Transfer-Encoding: base64
d2hhdGV2ZXIgY29udGVudCA1OTUzNjI0NzY0Cg==
---=Part.9.facdaad4d7d1e26d.196e6b48470.15f465553d6bace6=---
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/html_body.eml
=====================================================
Return-Path: <hmavu@example.com>
org.apache.james.rspamd.flag: NO
org.apache.james.rspamd.status: No, actions=no action score=0.0 requiredScore=15.0
Delivered-To: dphamhoang@example.com
Received: from 172.17.0.1 (EHLO incoming.example.com) ([172.17.0.1])
by incoming.example.com (JAMES SMTP Server ) with ESMTP ID c8ca0690;
Wed, 10 May 2022 03:16:53 +0000 (UTC)
Received: from smtp.example.com (smtp.example.com [54.36.8.78])
by incoming.example.com (Postfix) with ESMTPS id 48A1C9C401;
Wed, 10 May 2022 03:16:53 +0000 (UTC)
Received: from ?Open?PaaS?SMTP?server?for?example? (unknown [51.83.109.124])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.example.com (Postfix) with ESMTPSA id 0F0B73EE62;
Wed, 10 May 2022 05:16:54 +0200 (CEST)
DKIM-Signature: a=rsa-sha256; b=clyJAm7d7I1D+H1Q9461DlJT10TYuocQAkK0z1ybeYYKqrjax6BjH3t+Cxkq/B1qt5hibD6Hg9rSVKMn6nG8ye3ghzYSGJg5CYNl/ozEWIUM976+JVpf2qDmTlukRzs25GAESKeBt0UTmsn6lusiXtf0kR5hWr0j8ryT5Z8UpzaaLlnMtWBXvx3mQzVltj7OTyd4mx8JRiZE5bV65dS1S0SZOmp9iCEq9+vNQaL3M3m6N7s1xGV2J5Htz7tRVy3NWczJdDVtRHY0u3xJNetYjSVbzxCsciqPy+xSFYj1DHyPMVqVjLGxALBpJ953qFBZi4d17D9BfRONbg6yCmbxkg==; s=smtpoutjames; d=example.com; v=1; bh=A/3l3MmJvs/qsqAqSuiuPhfTOrrap3TVn5YAOKn155E=; h=from : reply-to : subject : date : to : cc : resent-date : resent-from : resent-sender : resent-to : resent-cc : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive;
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-example-Copy-Delivery-Done: 1
From: Ha Minh Anh VU <hmavu@example.com>
Sender: Ha Minh Anh VU <hmavu@example.com>
Reply-To: hmavu@example.com
To: Anton SHEPILOV <ashepilov@example.com>
Cc: Dat PHAM HOANG <dphamhoang@example.com>, The Dat VU
<tdvu@example.com>, VN HR <vnhr@example.com>,
=?ISO-8859-1?Q?Beno=EEt_TELLIER?= <btellier@example.com>
Subject: Re: Cong hoa Xa Hoi Chu Nghia Viet Nam
Message-ID: <Mime4j.7a.a9c00d8d7ab83180.18803a95977@example.com>
Date: Wed, 10 May 2022 03:16:50 +0000
References: <Mime4j.671.1acd13bc529da6f9.187fa2ec03e@example.com>
<Mime4j.49.89784d872ecab223.1880019b684@example.com>
<p>Dear Anton, </p><p>Can we arrange an interview for you and XXXXXXXXXXXX =
XXXXXXXXXXXX Developer at 04 p=2Em (Paris Time) on this Thursday (11/05/202=
3)?</p><p>If you are not available at that time, kindly suggest us your ava=
ilable time</p><p>Thank you & Best regards,</p><div class=3D"openpaas-s=
ignature">--
<p><span style=3D"color:rgb(51, 51, 51);">Vu Ha Minh Anh (Ms)=
</span><br style=3D"color:rgb(51, 51, 51);"><span style=3D"color:rgb(=
51, 51, 51);">HR Department </span><br style=3D"color:rgb(51, 51, 51);=
"><font color=3D"#9c0000"><b>example VIETNAM</b></font><br style=3D"color:=
rgb(51, 51, 51);"><span style=3D"color:rgb(51, 51, 51);">5 Dien Bien Phu St=
r=2E, Ba Dinh Dist=2E, Ha Noi</span><br style=3D"color:rgb(51, 51, 51);"><s=
pan style=3D"color:rgb(51, 51, 51);">(+84) 901735987 </span><br style=
=3D"color:rgb(51, 51, 51);"><font color=3D"#424242">https://example=2Evn</=
font><br></p></div><cite>On May 10, 2023 6:35 AM, from gagagagagaga@example=
=2Ecom</cite><blockquote>Hi Anton, <div><br></div><div>Because at that=
time, before the barcamp, we was considering about the Matrix, about organ=
ization, =E2=80=A6 so we postponed the process=2E </div><div>At the mo=
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/simple-inlined-attachment.eml
=====================================================
Date: Wed, 26 Jan 2022 12:21:37 +0100
From: Bob <bob@domain.tld>
To: Alice <alice@domain.tld>
MIME-Version: 1.0
Subject: inlined attachment
Message-ID: <Mime4j.16b.d30609c122843f4e.196a380f8b9@domain.tld>
Content-Type: multipart/related;
boundary="-=Part.16d.b16547c587c987fd.196a380f8d4.b92d6af2f0294389=-"
---=Part.16d.b16547c587c987fd.196a380f8d4.b92d6af2f0294389=-
Content-Type: multipart/alternative;
boundary="-=Part.16c.d54cec4b999aebb5.196a380f8d2.7189347f48aceda7=-"
---=Part.16c.d54cec4b999aebb5.196a380f8d2.7189347f48aceda7=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT, de-DE
Content-Language: vi-VN
start[Screenshot 2025-05-06 at 09]end
---=Part.16c.d54cec4b999aebb5.196a380f8d2.7189347f48aceda7=-
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT, de-DE
Content-Language: vi-VN
<div><br></div><div>start</div><div><img src=3D"cid:e612b3e0-2a24-11f0-aacf=
-77a69744ec20" alt=3D"Screenshot 2025-05-06 at 09" style=3D"max-width:770px=
;" data-mimetype=3D"image/png"></div><div>end</div><div><br></div><div><br>=
</div>
---=Part.16c.d54cec4b999aebb5.196a380f8d2.7189347f48aceda7=---
---=Part.16d.b16547c587c987fd.196a380f8d4.b92d6af2f0294389=-
Content-Type: image/png;
name="=?US-ASCII?Q?Screenshot_2025-05-06_at_09.50.27.png?="; charset=base64
Content-Disposition: inline
Content-Transfer-Encoding: base64
Content-ID: e612b3e0-2a24-11f0-aacf-77a69744ec20
iVBORw0KGgoAAAANSUhEUgAAALIAAABMCAYAAADJEu0BAAAMS2lDQ1BJQ0MgUHJvZmlsZQAASImV
VwdYU8kWnltSIQQIREBK6E0QkRJASggtgPQiiEpIAoQSY0JQsaOLCq5dRLCiqyCKHRCxYVcWxe5a
FgsqK+tiwa68CQF02Ve+N/nmzp9/zvxzzrlz79wBgN7Ol0pzUE0AciV5sphgf9a4pGQWqRPgQBv+
bMBIvkAu5URFhQNYBtq/l3c3AaJsrzkotf7Z/1+LllAkFwCAREGcJpQLciE+CADeJJDK8gAgSiFv
PjVPqsSrIdaRQQchrlLiDBVuUuI0Fb7SZxMXw4X4CQBkdT5flgGARjfkWfmCDKhDh9ECJ4lQLIHY
D2Kf3NzJQojnQmwDbeCcdKU+O+0HnYy/aaYNavL5GYNYFUtfIQeI5dIc/vT/Mx3/u+TmKAbmsIZV
PVMWEqOMGebtSfbkMCVWh/iDJC0iEmJtAFBcLOyzV2JmpiIkXmWP2gjkXJgzwIR4jDwnltfPxwj5
AWEQG0KcLsmJCO+3KUwXByltYP7QMnEeLw5iPYirRPLA2H6bE7LJMQPz3kyXcTn9/HO+rM8Hpf43
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/alternative.eml
=====================================================
Return-Path: <from@linagora.com>
To: to@linagora.com
From: Lina <from@linagora.com>
Subject: MultiAttachment
Message-ID: <13d4375e-a4a9-f613-06a1-7e8cb1e0ea93@linagora.com>
Date: Mon, 27 Feb 2017 11:24:48 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.2.0
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="------------64D8D789FC30153D6ED18258"
This is a multi-part message in MIME format.
--------------64D8D789FC30153D6ED18258
Content-Type: text/html; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
<p>Send<br/>concerted from html</p>
--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=UTF-8;
name="text1"
Content-Transfer-Encoding: 7bit
I am the text plain part!
--------------64D8D789FC30153D6ED18258
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested2.eml
=====================================================
Content-Type: multipart/mixed; boundary="------------6a0Tq7Y8z9M0dIG10PnZ7l7E"
Message-ID: <b3493b24-116a-4d6b-a61c-1a3b09e44619@linagora.com>
Date: Wed, 21 Feb 2024 22:58:55 +0100
MIME-Version: 1.0
References: <Mime4j.8f3.69abfdd624c15c44.18dcdad3859@linagora.com>
Subject: Fwd: Will be nested
To: btellier@linagora.com
From: "btellier@linagora.com" <btellier@linagora.com>
In-Reply-To: <Mime4j.8f3.69abfdd624c15c44.18dcdad3859@linagora.com>
X-Forwarded-Message-Id: <Mime4j.8f3.69abfdd624c15c44.18dcdad3859@linagora.com>
This is a multi-part message in MIME format.
--------------6a0Tq7Y8z9M0dIG10PnZ7l7E
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
--------------6a0Tq7Y8z9M0dIG10PnZ7l7E
Content-Type: message/rfc822; name="Will be nested.eml"
Content-Disposition: attachment; filename="Will be nested.eml"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
Subject: Will be nested
From: Benoit TELLIER <bxxxx@linagora.com>
To: =?ISO-8859-1?Q?Beno=EEt_TELLIER?= <bxxxx@linagora.com>
Reply-To: btellier@linagora.com
Date: Wed, 21 Feb 2024 21:58:17 +0000
Message-ID: <Mime4j.8f3.69abfdd624c15c44.18dcdad3859@linagora.com>
Content-Type: multipart/mixed;
boundary="-=Part.8f5.4ee8b8343a133e4f.18dcdad38b0.f1b9fcef27eb8231=-"
---=Part.8f5.4ee8b8343a133e4f.18dcdad38b0.f1b9fcef27eb8231=-
Content-Type: multipart/alternative;
boundary="-=Part.8f4.9ab3439f1c0c1361.18dcdad38b0.b6d054e4dd1744c7=-"
---=Part.8f4.9ab3439f1c0c1361.18dcdad38b0.b6d054e4dd1744c7=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Nested body
--=C2=A0
Best regards,
Benoit TELLIER
---=Part.8f4.9ab3439f1c0c1361.18dcdad38b0.b6d054e4dd1744c7=-
Content-Type: text/html; charset=UTF-8
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
=====================================================
# Configuration urlPrefix for JMAP routes.
url.prefix=http://domain.com
websocket.url.prefix=ws://domain.com
upload.max.size=20M
webpush.maxTimeoutSeconds=10
webpush.maxConnections=10
dynamic.jmap.prefix.resolution.enabled=true
=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
=====================================================
# Configuration urlPrefix for JMAP routes.
url.prefix=http://domain.com
websocket.url.prefix=ws://domain.com
upload.max.size=20M
dynamic.jmap.prefix.resolution.enabled=true
=====================================================
== File: server/protocols/protocols-pop3/src/test/resources/pop3server.xml
=====================================================
<?xml version="1.0"?>
<pop3server enabled="true">
<jmxName>pop3server</jmxName>
<bind>127.0.0.1:0</bind>
<helloName>myMailServer</helloName>
<tls socketTLS="false" startTLS="true">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>
<connectiontimeout>3600</connectiontimeout>
<handlerchain>
<handler class="org.apache.james.pop3server.core.CoreCmdHandlerLoader"/>
</handlerchain>
<gracefulShutdown>false</gracefulShutdown>
</pop3server>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslJKSNotFound.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>keystore.notfound.jks</keystore>
<keystoreType>JKS</keystoreType>
<secret>123456</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPEM.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<privateKey>private.key</privateKey>
<certificates>certs.self-signed.csr</certificates>
<secret>123456</secret>
</tls>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthAllowed.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<plainAuthDisallowed>false</plainAuthDisallowed>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSSLCompress.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="true" startTLS="false">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<connectionBacklog>200</connectionBacklog>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
<idleTimeInterval>120</idleTimeInterval>
<idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
<enableIdle>true</enableIdle>
<inMemorySizeLimit>64K</inMemorySizeLimit>
<literalSizeLimit>128K</literalSizeLimit>
<plainAuthDisallowed>false</plainAuthDisallowed>
<compress>true</compress>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslDefaultJKS.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>keystore.jks</keystore>
<secret>123456</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthEnabledWithoutRequireSSL.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<auth>
<plainAuthEnabled>true</plainAuthEnabled>
</auth>
<plainAuthDisallowed>false</plainAuthDisallowed>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/oauth.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<privateKey>private.key</privateKey>
<certificates>certs.self-signed.csr</certificates>
<secret>123456</secret>
</tls>
<auth>
<plainAuthEnabled>true</plainAuthEnabled>
<requireSSL>true</requireSSL>
</auth>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsTrueAndStartSSLIsFalse.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="false">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<auth>
<plainAuthEnabled>true</plainAuthEnabled>
<requireSSL>true</requireSSL>
</auth>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthDisabled.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<auth>
<plainAuthEnabled>false</plainAuthEnabled>
</auth>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMBadPass.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<privateKey>private.key</privateKey>
<certificates>certs.self-signed.csr</certificates>
<secret>badbad</secret>
</tls>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerProxy.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<connectionBacklog>200</connectionBacklog>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
<idleTimeInterval>120</idleTimeInterval>
<idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
<enableIdle>true</enableIdle>
<inMemorySizeLimit>65536</inMemorySizeLimit> <!-- 64 KB -->
<plainAuthDisallowed>false</plainAuthDisallowed>
<gracefulShutdown>false</gracefulShutdown>
<proxyRequired>true</proxyRequired>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>keystore.p12</keystore>
<keystoreType>PKCS12</keystoreType>
<secret>123456</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSSL.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="true" startTLS="false">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<connectionBacklog>200</connectionBacklog>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
<idleTimeInterval>120</idleTimeInterval>
<idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
<enableIdle>true</enableIdle>
<inMemorySizeLimit>64K</inMemorySizeLimit>
<literalSizeLimit>128K</literalSizeLimit>
<plainAuthDisallowed>false</plainAuthDisallowed>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMNoPass.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<privateKey>private.nopass.key</privateKey>
<certificates>certs.self-signed.csr</certificates>
</tls>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerCompress.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<compress>true</compress>
<connectionBacklog>200</connectionBacklog>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
<idleTimeInterval>120</idleTimeInterval>
<idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
<enableIdle>true</enableIdle>
<inMemorySizeLimit>65536</inMemorySizeLimit> <!-- 64 KB -->
<plainAuthDisallowed>false</plainAuthDisallowed>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerImapConnectCheck.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<connectionBacklog>200</connectionBacklog>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
<idleTimeInterval>120</idleTimeInterval>
<idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
<enableIdle>true</enableIdle>
<inMemorySizeLimit>64K</inMemorySizeLimit>
<literalSizeLimit>128K</literalSizeLimit>
<plainAuthDisallowed>false</plainAuthDisallowed>
<gracefulShutdown>false</gracefulShutdown>
<additionalConnectionChecks>org.apache.james.imapserver.netty.IpConnectionCheck</additionalConnectionChecks>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/private.nopass.key
=====================================================
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAsjjah2w8AKpnGKya4QG/tdRoR9pJkKWfyf17ywcYWBxcpj0Q
+dkn+CXvBafhQ2zlf+bPkWxYhBuXyMB8QNCp/sMlaQ8dGFw/LGojglHk8T4aIu+a
Ffy0hgN9yniuEHmFdjP2XECbA7UbHQPZTO/DU3QJ0FabqKO61pHB4bliNsTWGjzg
seU5kdS1Uup0AK/URO2pSLpnDPV/l0yNmxvGfO/ulPNVJyxiJuT+Rl51LlxpWhu3
G/hFX2mJP0Mn/cX3xNm2HrYIaasglum7bXN/vfiqSFAg46LgT7UJ4pCHoLI99K7Z
OpgBqK/Q4P4UxOggxkawI+JmVLTmCpz1c6JR3QIDAQABAoIBAEvx7DVfCuahtpMO
ImWVkDMUk2di/owz97ZkXRc0K8yIMXbpeM1vGxgkWgmH83b+9YEeQv9OMx4AgBqc
45XfFUGpuMxfE1/pF0Z+6CjFaxDeDNcsUPXjnK2q2TSpXktI7XVkSSwgn63hw+8G
T9f4J7ztKq1r6qLfOmPq8rqUe+SoH5tkwmJJgnxx3Qt2xZ4nmFXiuscOcVUjV3D/
EdghjcExNSgxmo8HN34DLQPZrDDwarrYJouiufe7m0Etk8m9bOWkNsoCif0wQ0mS
uQVAHMzCKqrUmAM3X1IimTnwOWu2sYle9VXYijwDkZ0PGQnS4rywz9D9MWy57ZLM
zklb5MUCgYEA5qrK9PmMGNi6ihhjkDw6b4sqOs4Dec89jdkhhYdrbPVXZzB+Shmh
CDhviXhLi7m5G5d707DLPloPR0LdNmf3YsLCvMej70O8DrDG/z1Vv++DF2XcAtvW
TLoXOcSS1E3tKRSp2Uks7osWIwUAomhkEIXsDJ+esH9wHD7rOYA02fsCgYEAxcuR
Sp0rcVqwyuINEmrvH5zxSWk0O5MqM95kyvElFuPCPAKv0EK9t8T7dv7fEtQoupqa
hbDGzatif7B4tVaeWZRYJUrr9uwIyZfVSfYUi5y2KwHGJJPH+EkoQ6sZlRw6Aqj/
AeW4/cnmhK+IrgBDKF99DiVs1nVTgeA0vEneVAcCgYBh9l0VpznJf5nRdkQqiHmk
z6ySptWxEMOqj3F+HSIRdyy0hVLNM49BR36PGoizAaBMyIvtPqNCisr8T7hVF9hn
mCFOPVcxEUo3zvnkgm79gcHh2P+UMzsTAOFGRma5RZMYJE9yGXK8qFMxcjlvv/fn
UIkMX2nsuWKqjEon9Hv9qwKBgFLk760/lVdaVMGSXzwayMCM+6pyhst477TxPXi3
+31OUrbnwVscvXno+iJyynaPp8ocxSnGXmsPqqYtBUmqVY7hVte6QI4peb1S/raS
hSXFtarsgWgO7z2lG1TQvlX5kG5Q+R6IcjEajpuJHVUfEwY2jqiBEs4GOcsydad7
pcu9AoGBANHQQS7U1o0Ks2H9iB02b72rq0Lr7d4xJ7bbeL0PdJNxnKWYtYYrNKvu
R7wWF6MBH+pfm0CzJo0Pog58wkAiKnD8nPuVUdXgi/3PQXu/ZARY0g30wqubaBeZ
UN7bL/TrIc67ldEi07A8Wo6H5Gd6jIHBnmO93an2zXlrvhrvACRX
-----END RSA PRIVATE KEY-----
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12MissingPassword.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>keystore.p12</keystore>
<keystoreType>PKCS12</keystoreType>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServer.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<connectionBacklog>200</connectionBacklog>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
<idleTimeInterval>120</idleTimeInterval>
<idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
<enableIdle>true</enableIdle>
<inMemorySizeLimit>64K</inMemorySizeLimit>
<literalSizeLimit>128K</literalSizeLimit>
<plainAuthDisallowed>false</plainAuthDisallowed>
<gracefulShutdown>false</gracefulShutdown>
<concurrentRequests>20</concurrentRequests>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslJKSBadPassword.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>keystore.jks</keystore>
<keystoreType>JKS</keystoreType>
<secret>badbad</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMExtraPass.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<privateKey>private.nopass.key</privateKey>
<certificates>certs.self-signed.csr</certificates>
<secret>123456</secret>
</tls>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerNoLimits.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<connectionBacklog>200</connectionBacklog>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
<idleTimeInterval>120</idleTimeInterval>
<idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
<enableIdle>true</enableIdle>
<inMemorySizeLimit>65536</inMemorySizeLimit> <!-- 64 KB -->
<plainAuthDisallowed>false</plainAuthDisallowed>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslNoKeys.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
</tls>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapSSL.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="true" startTLS="false">
<privateKey>private.key</privateKey>
<certificates>certs.self-signed.csr</certificates>
<secret>123456</secret>
</tls>
<auth>
<plainAuthEnabled>true</plainAuthEnabled>
<requireSSL>true</requireSSL>
</auth>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/private.key
=====================================================
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,5D8E78A6193D484A
YaZzaxmoE+/F5WUWlWAsKXY4e+9oSjYDFFcutiFgxK7UOIFnITTK15ri6VrPzh4R
/VlXVyxNp37NRLiHKG4t+w7F12Vo8j2V6n+3DInOBRjh2z7rP4k9WTefTX8QoXgT
pHXAUf8p3mcooHPhsLk2rQAPmzDXGG7fg9UMoFIVXTvyDi0alLmm8+k2HT0pllIp
drhUg5Rknm09JcD/js45r4qkOVLMh8guU5g+M7x1jOf4PzF8CWTJSLpXmXPwwEHI
DquwjDbaDN2543qOQZYPtJQ6LBlE1vfybFsy8IsYfcfrf6hkXrBdCTUx9FZgOOiF
B9c9gkxWDkZ4Gc2qC7NYebGKsvzg5sKeED/g8ynMCzSQnn6WuhWmsqCmAJR+B0vm
DeBioHW4hfbge+qfkRtcivodxFOGhJkMvBQ5nee84XK5ivZRR7YfBdNO9ES7uYgX
1zr7XvkwOW9tZKDHSPfgwWXcNY7oZ9JgIHbDKp6sndeVJDEA/pJzfNSHWmIjWmld
r7WTAZPghB+I2H2rPGYTUs1iuenyaZVYMX2RAX23zZEBx/TZSmEKp2dO12G2M0ru
LX7ft0gcj7wmT376WnJJ07OG41R041+RAlAr6Im1oUAx7PhPTj21sM8WFsmczip7
RdVBbUCdRd0UjIfd7PjNlut0RFTtctC+oTgD+bOp1jx/UB1bSu/i6JRO52zsggxP
T6yRg59a2TzZEoM4gmRKyF5TFIlTDAsRJXStL2v847pA442fA0S6kaa9sFEf9PrT
CipSCb/DJeVZxslAOZwKMWG/XK3/L3zZ9ctDvqw+OxSYGKKZHcAdNa/nJTZ7f1W9
aSMWBHViZz3nxsuJ2Q8eVGG5YETtyzqgDJ1R16bfBjDGJvR4fdghJge2Nqhliz4G
NeJWqoXdvKobj4CdoGLT6mWlyrmZ/Z9kKKtKm0Oc0MY6MijkKGwJWDjn7ybrsN5h
LG2fYoyBly95n+1phxLXxmJMrCBSyhuxIMnXmFEn/0jYDleHRR+lN95ZFWrmXpPC
vDSBLxmp03EMqj5BpVXwTA3S3WUOlk5Ao8tgvg8MXvzNbZ5Sgzix9Ms/H+ofK53k
YLfpurKZ6rfMF+tbN0cZ4WSYZUJil6vBu03xxJJ2hyGt2b9cupT1ftxewjjBvq4W
C4+eI86WRsTxRfVnsBob9Ok+A0IxxR8MNHfQVBFLTm2XgjFKdMku+eqop5nV3m3m
iltSEoJlkBmCfBsDvkeueTG3M9Gg96MJ05LZQtmdYcW79R6ynvdVeA/KFJ1I7PbM
tmZ5UjyVnbIsEjEw+O++uG7xQWQBqnI4tU6wPqYpJDND4Hsp3CWP5zW0LfFXzzdG
e473CQTJRhiyBHUUhE1+RzHNt1GY5mR9DNfwS3nJdL36k9Hnu2mo+Vzif1JLs2pE
LjKg62lYSic3g73AlnB02tAsjxRA1Pv2OZjhIMQ3WT+caqpckt1Xvqc4ABS9fT8c
4d3kQ4bcsSoRN7lyO+KPwqGl7YPK8+utih12P8ZUqgxhYuCqpWVf7YxEQVzZqmWO
uHx1fpFCbzmDnoIhUQOOMAwxMpDus8huwroycfr67ukzpwxje+6shA==
-----END RSA PRIVATE KEY-----
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerHealthCheck.xml
=====================================================
<imapservers>
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<connectionBacklog>200</connectionBacklog>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
<idleTimeInterval>120</idleTimeInterval>
<idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
<enableIdle>true</enableIdle>
<inMemorySizeLimit>64K</inMemorySizeLimit>
<literalSizeLimit>128K</literalSizeLimit>
<maxQueueSize>10</maxQueueSize>
<concurrentRequests>1</concurrentRequests>
<plainAuthDisallowed>false</plainAuthDisallowed>
<gracefulShutdown>false</gracefulShutdown>
<additionalConnectionChecks>org.apache.james.imapserver.netty.IpConnectionCheck</additionalConnectionChecks>
</imapserver>
<imapserver enabled="true">
<jmxName>imapserver2</jmxName>
<bind>0.0.0.0:0</bind>
<connectionBacklog>200</connectionBacklog>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
<idleTimeInterval>120</idleTimeInterval>
<idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
<enableIdle>true</enableIdle>
<inMemorySizeLimit>64K</inMemorySizeLimit>
<literalSizeLimit>128K</literalSizeLimit>
<maxQueueSize>10</maxQueueSize>
<concurrentRequests>1</concurrentRequests>
<plainAuthDisallowed>false</plainAuthDisallowed>
<gracefulShutdown>false</gracefulShutdown>
<additionalConnectionChecks>org.apache.james.imapserver.netty.IpConnectionCheck</additionalConnectionChecks>
</imapserver>
</imapservers>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerIdCommandResponseFields.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<connectionBacklog>200</connectionBacklog>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
<idleTimeInterval>120</idleTimeInterval>
<idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
<enableIdle>true</enableIdle>
<inMemorySizeLimit>64K</inMemorySizeLimit>
<literalSizeLimit>128K</literalSizeLimit>
<plainAuthDisallowed>false</plainAuthDisallowed>
<gracefulShutdown>false</gracefulShutdown>
<idCommandResponse>
<field name="name" value="Apache James"/>
<field name="version" value="3.9.0"/>
</idCommandResponse>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsFalseAndStartSSLIsTrue.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<auth>
<plainAuthEnabled>true</plainAuthEnabled>
<requireSSL>false</requireSSL>
</auth>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/commandsThrottling.xml
=====================================================
<perSessionCommandThrottling>
<select>
<resetOn>APPEND</resetOn>
<thresholdCount>25</thresholdCount>
<additionalDelayPerOperation>2ms</additionalDelayPerOperation>
<observationPeriod>10m</observationPeriod>
<maxDelay>1s</maxDelay>
</select>
<append>
<thresholdCount>5</thresholdCount>
<additionalDelayPerOperation>10ms</additionalDelayPerOperation>
<observationPeriod>5m</observationPeriod>
<maxDelay>2s</maxDelay>
</append>
</perSessionCommandThrottling>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsTrueAndStartSSLIsTrue.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<auth>
<plainAuthEnabled>true</plainAuthEnabled>
<requireSSL>true</requireSSL>
</auth>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthDisallowed.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="false">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<plainAuthDisallowed>true</plainAuthDisallowed>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerStartTLS.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<connectionBacklog>200</connectionBacklog>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
<idleTimeInterval>120</idleTimeInterval>
<idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
<enableIdle>true</enableIdle>
<inMemorySizeLimit>64K</inMemorySizeLimit>
<literalSizeLimit>128K</literalSizeLimit>
<plainAuthDisallowed>false</plainAuthDisallowed>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslJKS.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>keystore.jks</keystore>
<keystoreType>JKS</keystoreType>
<secret>123456</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMMissingPass.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<privateKey>private.key</privateKey>
<certificates>certs.self-signed.csr</certificates>
</tls>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/certs.csr
=====================================================
-----BEGIN CERTIFICATE REQUEST-----
MIICijCCAXICAQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx
ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBALI42odsPACqZxismuEBv7XUaEfaSZCln8n9e8sH
GFgcXKY9EPnZJ/gl7wWn4UNs5X/mz5FsWIQbl8jAfEDQqf7DJWkPHRhcPyxqI4JR
5PE+GiLvmhX8tIYDfcp4rhB5hXYz9lxAmwO1Gx0D2Uzvw1N0CdBWm6ijutaRweG5
YjbE1ho84LHlOZHUtVLqdACv1ETtqUi6Zwz1f5dMjZsbxnzv7pTzVScsYibk/kZe
dS5caVobtxv4RV9piT9DJ/3F98TZth62CGmrIJbpu21zf734qkhQIOOi4E+1CeKQ
h6CyPfSu2TqYAaiv0OD+FMToIMZGsCPiZlS05gqc9XOiUd0CAwEAAaAAMA0GCSqG
SIb3DQEBCwUAA4IBAQCLTucL2oggfXTuGZTHVv1N6U9ZlTh7ikMDex3aCTlZZG1m
rT3BJ0Z7QcvJDkUOT0iEgrES6ta61uy2l9BFbfBYgIWJUXaCijid1oaB3YaxFeHb
Y8rTGsJQqHPxjy720ZUiNXrOQuF+QA++auHIAzC2t51H6e3EjIrpNqio8IWYhmEH
wSpYERm5yQ7WSPcWWXI0GoCSYsOgJeE9VwrlXaTv62UwJKfCJM6dUgieKXxtEHpX
eAviSOqU1WJhCQqNJaqtP78Q2g95qMdf7193WigtsMqqgeyT5ewozvQCe8V9Y0H0
zjwS/1kBp50gGs5PWizQJYHra/KVzgIaobgD5u3Z
-----END CERTIFICATE REQUEST-----
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/certs.self-signed.csr
=====================================================
-----BEGIN CERTIFICATE-----
MIIDETCCAfkCFEng6ISWvEq/JkD8u64MA+x2VhS/MA0GCSqGSIb3DQEBCwUAMEUx
CzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl
cm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMjEwODMwMDQwMzIwWhcNMjIwODMwMDQw
MzIwWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UE
CgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAsjjah2w8AKpnGKya4QG/tdRoR9pJkKWfyf17ywcYWBxcpj0Q
+dkn+CXvBafhQ2zlf+bPkWxYhBuXyMB8QNCp/sMlaQ8dGFw/LGojglHk8T4aIu+a
Ffy0hgN9yniuEHmFdjP2XECbA7UbHQPZTO/DU3QJ0FabqKO61pHB4bliNsTWGjzg
seU5kdS1Uup0AK/URO2pSLpnDPV/l0yNmxvGfO/ulPNVJyxiJuT+Rl51LlxpWhu3
G/hFX2mJP0Mn/cX3xNm2HrYIaasglum7bXN/vfiqSFAg46LgT7UJ4pCHoLI99K7Z
OpgBqK/Q4P4UxOggxkawI+JmVLTmCpz1c6JR3QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQAzSrClRytVW1fzL1rXMw7rYVoyoQ6ar3+e/SYiy5p+uSlEda9M/suNSvnV
HAdoZS5Ka6v4AAsWtc6gfwa91jGzxMr5O+mvcx/VCCwahwzQe9KOm17WDhHfObq0
sWDkXSVrrXiZC7gWkB4tczHQJNJKD3aNzYmlKX6GaCKVdBT3eCgIzMkolvIQdW5r
lexckmoeEI+52UzgSyLFYzw+HLphmvszsYNLo6s6LBqgHWLdjVA1KsqSKGrqaNJd
xdjw3S5PHAgOdwxNgip5Vdg1Rq8MjtoVGSC2fn678SyZYOAqxEeKf1CtkYTLySjz
w0ipBFOo1qLHlaT5lHQxOIAmKsK1
-----END CERTIFICATE-----
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsFalseAndStartSSLIsFalse.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="false">
<keystore>classpath://keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<auth>
<plainAuthEnabled>true</plainAuthEnabled>
<requireSSL>false</requireSSL>
</auth>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12WrongPassword.xml
=====================================================
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:0</bind>
<tls socketTLS="false" startTLS="true">
<keystore>keystore.p12</keystore>
<keystoreType>PKCS12</keystoreType>
<secret>badbad</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>
<gracefulShutdown>false</gracefulShutdown>
</imapserver>
=====================================================
== File: server/Overview.md
=====================================================
Apache James Server
===================
This document is an effort to document the architecture and components that make Apache James. As a new committer to
the project I found out fast that the lack of documentation made development slow. On my quest to solving issues I
decided to document what I understand about Apache James.
Feel free to add/change things if you think it's required.
Server structure: components and services
=========================================
The directory structure is presented bellow. All directories are maven projects and correspond roughly to a component/service.
I'll explain what I mean by 'component' and 'service' bellow.
~~~
|-- app
|-- container
`-- cli
`-- core
`-- lifecycle-api
`-- filesystem-api
`-- mailbox-adapter
`-- spring
`-- util
|-- data
`-- data-api
`-- data-file
`-- data-jdbc
`-- data-jpa
`-- data-ldap
`-- data-library
|-- dns-service
`-- dnsservice-api
`-- dnsservice-dnsjava
`-- dnsservice-library
|-- karaf
`-- distribution
`-- features
`-- integration
|--mailet
`-- mailetcontainer-api
`-- mailetcontainer-camel
`-- mailets
|-- protocols
`-- protocols-imap4
`-- protocols-library
`-- protocols-lmtp
`-- protocols-pop3
`-- protocols-smtp
=====================================================
== File: server/mailet/rate-limiter-redis/redis.properties
=====================================================
redisURL=redis://redis:6379
redis.topology=standalone
#redis.readFrom=master
=====================================================
== File: server/mailet/rate-limiter-redis/docker-compose-sample/redis.properties
=====================================================
redisURL=redis-sentinel://secret1@sentinel-1:26379,sentinel-2:26379,sentinel-3:26379?sentinelMasterId=mymaster
redis.topology=master-replica
#redis.readFrom=master
=====================================================
== File: server/mailet/rate-limiter-redis/docker-compose-sample/docker-compose-with-redis-sentinel.yml
=====================================================
version: '3'
services:
redis-master:
image: redis:8.0.2
container_name: redis-master
restart: always
ports:
- "6379:6379"
command: sh /usr/local/etc/redis/docker-entrypoint.sh
volumes:
- ./config-template/master/redis.conf.template:/usr/local/etc/redis/redis.conf.template
- ./config-template/master/docker-entrypoint-master.sh:/usr/local/etc/redis/docker-entrypoint.sh
healthcheck:
test: ["CMD", "redis-cli", "ping", "|", "grep", "PONG"]
interval: 10s
timeout: 10s
retries: 5
networks:
- emaily-net
redis-replica-1:
image: redis:8.0.2
container_name: redis-replica-1
depends_on:
redis-master:
condition: service_healthy
ports:
- "6380:6379"
command: sh /usr/local/etc/redis/docker-entrypoint.sh
volumes:
- ./config-template/replica/redis.conf.template:/usr/local/etc/redis/redis.conf.template
- ./config-template/replica/docker-entrypoint-replica.sh:/usr/local/etc/redis/docker-entrypoint.sh
networks:
- emaily-net
redis-replica-2:
image: redis:8.0.2
container_name: redis-replica-2
depends_on:
redis-master:
condition: service_healthy
ports:
- "6381:6379"
command: sh /usr/local/etc/redis/docker-entrypoint.sh
volumes:
- ./config-template/replica/redis.conf.template:/usr/local/etc/redis/redis.conf.template
- ./config-template/replica/docker-entrypoint-replica.sh:/usr/local/etc/redis/docker-entrypoint.sh
networks:
- emaily-net
=====================================================
== File: server/mailet/rate-limiter-redis/docker-compose-sample/README.md
=====================================================
# Rate limiting for Apache James on top of Redis sentinel
## Introduction
This guide provides step-by-step instructions for deploying a rate limiter for Apache James using Redis Sentinel.
The redis-sentinel in lab environment is structured with 6 nodes:
- 1 master node (M1)
- 2 replica nodes (R1, R2)
- 3 sentinel nodes (S1, S2, S3)
## Configuration file
- `redis.properties` file sample:
```
redisURL=redis-sentinel://your_password@redis-sentinel-1:26379,redis-sentinel-2:26379,redis-sentinel-3:26379?sentinelMasterId=mymaster
redis.topology=master-replica
```
- Another configuration file of Apache James is similar to the one in the [rate-limiter-redis](../README.adoc) guide.
### How to run
Run docker-compose with the following command:
```bash
docker-compose up -d -f docker-compose-with-redis-sentinel.yml
```
=====================================================
== File: server/mailet/rate-limiter-redis/docker-compose-sample/config-template/replica/redis.conf.template
=====================================================
loglevel debug
appendonly yes
replicaof redis-master 6379
masterauth secret1
requirepass secret1
=====================================================
== File: server/mailet/rate-limiter-redis/docker-compose-sample/config-template/replica/docker-entrypoint-replica.sh
=====================================================
#!/bin/sh
cp /usr/local/etc/redis/redis.conf.template /usr/local/etc/redis/redis.conf
chmod 777 /usr/local/etc/redis/redis.conf
redis-server /usr/local/etc/redis/redis.conf
=====================================================
== File: server/mailet/rate-limiter-redis/docker-compose-sample/config-template/sentinel/docker-entrypoint-sentinel.sh
=====================================================
#!/bin/sh
cp /usr/local/etc/redis/sentinel.conf.template /usr/local/etc/redis/sentinel.conf
chmod 777 /usr/local/etc/redis/sentinel.conf
redis-sentinel /usr/local/etc/redis/sentinel.conf
=====================================================
== File: server/mailet/rate-limiter-redis/docker-compose-sample/config-template/sentinel/sentinel.conf.template
=====================================================
port 26379
loglevel debug
sentinel monitor mymaster redis-master 6379 2
sentinel auth-pass mymaster secret1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
sentinel resolve-hostnames yes
=====================================================
== File: server/mailet/rate-limiter-redis/docker-compose-sample/config-template/master/redis.conf.template
=====================================================
loglevel debug
appendonly yes
requirepass secret1
=====================================================
== File: server/mailet/rate-limiter-redis/docker-compose-sample/config-template/master/docker-entrypoint-master.sh
=====================================================
#!/bin/sh
cp /usr/local/etc/redis/redis.conf.template /usr/local/etc/redis/redis.conf
chmod 777 /usr/local/etc/redis/redis.conf
redis-server /usr/local/etc/redis/redis.conf
=====================================================
== File: server/mailet/rate-limiter-redis/extensions.properties
=====================================================
guice.extension.module=org.apache.james.rate.limiter.redis.RedisRateLimiterModule
=====================================================
== File: server/mailet/rate-limiter-redis/docker-compose.yml
=====================================================
version: '3'
services:
redis:
image: redis:8.0.2
command:
- "--loglevel"
- "debug"
james:
image: apache/james:memory-latest
depends_on:
- redis
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- $PWD/target/james-server-rate-limiter-redis-jar-with-dependencies.jar:/root/extensions-jars/james-server-rate-limiter-redis.jar
- $PWD/extensions.properties:/root/conf/extensions.properties
- $PWD/redis.properties:/root/conf/redis.properties
- $PWD/mailetcontainer.xml:/root/conf/mailetcontainer.xml
- $PWD/healthcheck.properties:/root/conf/healthcheck.properties
=====================================================
== File: server/mailet/rate-limiter-redis/README.adoc
=====================================================
= Distributed Rate limiting for Apache James on top of Redis
This package provides distributed rate limiting using Redis as a shared data store.
It reuses work of xref:../rate-limiter/README.adoc[the Rate Limiter extensions] but substitute a Redis implementation
for the underlying rate limiting.
== Running rate limiting with the memory implementation
- 1. Compile this project.
- 2. Place the generated "jar with dependencies" in James `extensions-jars` folder.
- 3. Configure James to use the redis implementation for Rate Limiting by putting the following content within
`extension.properties`:
----
guice.extension.module=org.apache.james.rate.limiter.redis.RedisRateLimiterModule
----
- 4. Provide a `redis.properties` file:
----
redisURL=redis://redis:6379
redis.topology=standalone
----
- 5. Use the rate limiting mailets within `mailetcontainer.xml`
We provide a sample `docker-compose` demonstrating this setup.
=====================================================
== File: server/mailet/rate-limiter-redis/healthcheck.properties
=====================================================
additional.healthchecks=org.apache.james.backends.redis.RedisHealthCheck
=====================================================
== File: server/mailet/dkim/src/test/resources/long-multipart.msg
=====================================================
Return-Path: <expeditor@linagora.com>
Delivered-To: firstname21.surname21@xxx.org
Received: from 172.17.0.1 (EHLO incoming.linagora.com) ([172.17.0.1])
by xxx.linagora.com (JAMES SMTP Server ) with ESMTP ID e2de7b7e;
Tue, 26 Apr 2022 02:27:56 +0000 (UTC)
Received: from yyy.linagora.com (yyy.linagora.com [172.17.0.1])
by incoming.linagora.com (Postfix) with ESMTPS id 1AA739C621;
Tue, 26 Apr 2022 02:27:56 +0000 (UTC)
Received: from ?Open?PaaS?SMTP?server?for?Linagora? (unknown [172.17.0.1])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by yyy.linagora.com (Postfix) with ESMTPSA id 0E3494051E;
Tue, 26 Apr 2022 04:27:56 +0200 (CEST)
DKIM-Signature: a=rsa-sha256; b=rpsVo5Aah1YYw7bP6vOJF8CCd3/jRXCrkybebytnynynyty1bN84tOBKXqClx4HhYe63Lp2qbNbdrZFLdKAkhgfFf5/71OR+FbcTm78mnWP05HnY5ZMaAmmrhcIUVvDGhcg5NJSdmGf4WIpp2DqcUV7laXqNbC62vIcD5+gKLUEMGD1LudlHIEPA1MRfq/jRw94lPWX1yCNZaAvsoPG+oyedpbMyJ59MTQqz2WY5d0S1t4hTumrRHb/6kWHwV2ytzXMzZ9LITOYDtdEA44Bhr65dKAmWoOAvFVvC/lQP5dxkaFdx0vQ9Ei9Oc0r0tjg90YI6JLMm59e+A==; s=smtpoutjames; d=linagora.com; v=1; bh=phAFKC0vGk76uBUcy6pMhmSkmrTh/vYFrYkrvXUaDDQ=; h=from : reply-to : subject : date : to : cc : resent-date : resent-from : resent-sender : resent-to : resent-cc : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive;
MIME-Version: 1.0
X-LINAGORA-Copy-Delivery-Done: 1
From: Xxxxx Yyyyy <expeditor@linagora.com>
Sender: Xxxxx Yyyyy <expeditor@linagora.com>
Reply-To: expeditor@linagora.com
To: Recipient <recipient@linagora.com>
Message-ID: <Mime4j.3ae.98d4b510005bd7dc.18063b25b64@linagora.com>
Date: Tue, 26 Apr 2022 02:27:54 +0000
In-Reply-To: <Mime4j.3ad.3634707f65cfee8e.18063b16bc3@linagora.com>
Subject: test subject
Content-Type: multipart/mixed; boundary="------------090404080405080108000909"
This is a multi-part message in MIME format.
--------------090404080405080108000909
Content-Type: text/plain; charset=ISO-8859-15
Content-Transfer-Encoding: 7bit
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111
=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/message-multipart-8bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
by james-0 (JAMES SMTP Server ) with ESMTP ID 926590876
for <bob@james.james.org>;
Tue, 21 Jan 2020 07:12:56 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.68.1])
by incoming.james.org (Postfix) with ESMTPS id B39A643
for <bob@james.james.org>; Tue, 21 Jan 2020 07:12:56 +0000 (UTC)
Received: from duc-HP-ProBook-450-G4 (unknown [1.54.162.156])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.james.org (Postfix) with ESMTPSA id F11B13F386
for <bob@james.org>; Tue, 21 Jan 2020 08:12:55 +0100 (CET)
Date: Tue, 21 Jan 2020 14:12:39 +0700 (ICT)
X-LINAGORA-Copy-Delivery-Done: 1
From: bob@james.org
To: bob@james.org
Message-ID: <423733503.3.1579590775567@duc-HP-ProBook-450-G4>
Subject: UTF-8 8bit multipart
Content-Type: multipart/mixed;
boundary="----=_Part_0_238762799.1579590759052"
------=_Part_0_238762799.1579590759052
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
A 8bit encoded body with €uro symbol.
------=_Part_0_238762799.1579590759052
Content-Type: application/octet-stream; name=james-logo.png
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=james-logo.png
iVBORw0KGgoAAAANSUhEUgAAANkAAABaCAYAAAA1mvMAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAFB1JREFUeNrsXV2MI9lVvuX+m2EXrTtLQGwydPVsRlmkSOOW+BNItB2t
NiAk2n5BeYG2EwkpiSLbPPAjAW7zQiQe3C0SkBBg9ysv7ZZ4AGWFa/KClJeuRQhls2SnOj1pYIfN
1EhICRLj4pzyufbt6rrlW+W/cvc90lGVXVW37r11vnt+7h/zPI/JeJnp8jOmyTRpmhNF4Shzg8ud
059eUxrIiNJYhmEssybL4/G1f3SsGaSNAM7STxfeYWtR0ppMRqs3uNwu8D6wNQVQoelZBc6HaUi4
jgeH3nUKoOtqsdN04zUZCf8ZCPzOhNqwQeCKC/Aj4EN4v6vF7HZrspsOsjYcHoGgd2I+lyVw1SQA
CpqHWYkPiPc24f2HWgw1yG4qyFADnQAXVP0meKZMADOFv9H8O0VzENJxxrxvD7gYeB7NyJLWahpk
Nw5kJPgnJPCVKKBJwNUhTeQkDI6gH1cWtFpBB0k0yG4iyNCU65E51yGNxDUK/veQNE92GuCSBE0a
BDYNNA2ymwcyQdgPSLNkJbeg4B+jaTgNcEnA1qIgigaaBtnNA1nAb+L9XA6xPU1/6eL+G3nhp0ns
B0wyr/5fnt3t733sG+/vaNHUILuRIJsmAZhM0kwPCbi5CE3J/TIMojzC4733v6UDIbcAZKu6emID
C4G0z65HEMcB6xRApTupbyFpkKkBK0uBi6oisJAs9PEAWB1dgxpkmqLNwQa7Hn2MIgRVE8Dl6BrU
pEEWrblqLDoaGTQJ/WFU2s/SpEE2HmB5OLRjmIWoueoaXJo0yNS0l2y8osznqmizUJMGmTrA+KgQ
FdMQfS496FeTBpkiwHIEMBXfC0dplLT20qRBNhuAdQBcFS0ymmYOMhDMtn9isNN731neztWYAKvo
/i5NSSn2sKqLB2+gYOaZMfRPuj7g3l0ewJEP9lgDTNO0aLrDqjLMYSPsZeG8DMfyxU+/4cI5Au3o
3r99K+0jzLUG0zQ3ir8k3Ao7959aIc4Qr3hZlvHKwGcXn/okcjmlWgynm+Q0wDSl11z81CfzpAkC
N4clMJikeO9f3rVTArDwvOsgh6YZmotJFje1h9prqMUCv0f/gXaLvdLTLKmtUj4NME0LNRfv/eu7
=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/mail_with_no_signature.eml
=====================================================
From: user@james.org
To: user2@james.org
Subject: test
Message-ID: <df73c05a-2e18-3e22-040c-9eda6abe02ae@open-paas.org>
Date: Fri, 1 Nov 2019 10:21:39 +0700
Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m"
test SMIME
=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/crypted.eml
=====================================================
To: sender@localdomain
From: sender <sender@localdomain>
Subject: test
Message-ID: <7fe4c217-ab73-d149-9bd0-e6aa3aebfc14@localdomain>
Date: Tue, 3 Jan 2017 16:30:03 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.5.1
MIME-Version: 1.0
Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7m"
Content-Description: =?UTF-8?Q?Message_chiffr=c3=a9_S/MIME?=
MIAGCSqGSIb3DQEHA6CAMIACAQAxggKHMIICgwIBADBrMGYxCzAJBgNVBAYTAkZSMQ8wDQYD
VQQIDAZGcmFuY2UxDTALBgNVBAcMBEx5b24xETAPBgNVBAoMCExpbmFnb3JhMQ4wDAYDVQQL
DAVKYW1lczEUMBIGA1UEAwwLbG9jYWxkb21haW4CAQEwDQYJKoZIhvcNAQEBBQAEggIAjNnW
2EhtDcfG/naGChQPZ2EOiPo5BRabR3dXvLcOPImX97mV51B4sggqpYdUrirD/beRkpbr814i
0LCFbNh3Xm6ojhZGiBHscStNysNjun7MOtUHXs5eDVOthsPVes/YjkHklxtJKH9J7QYwJY/m
L9MgQES2HkALhfqiQDN9UDtn7AE89m70FZfkxJQZSD1NByF7dxiFvhZbd8CFmcV1C0vZRlH9
opZcVg9AkbDytKO+U4FF9/uGmiIQ99Qng0YqcG7abZqwouJ59yxmKTwrggk1+MyJ0NqB1wVP
w2t1C/8hmvMISiij2bidoTTIYCybwvbuM/35POmDJVsvakLMZLG7aHSKvA+Bj+iR/RBgHHvd
c7UdDMvkH0O8tYDsuAW8uh0H8LkvJ/ZWbOsev8DuAVYTm85Zd8d7islgDqfYmjvPeTHqSSgA
sIFdPikRxtetU3JJKRls2BrKV6gM06++/Su+IFvTMaQYRbiQOeGc0ZfGHtlz3BSAeK32tjZu
OrVrxR+BLP4huBqctvcfgjiqtRB5i06wX4q5v/5UNMq9BAtQEDEhERAoXSOWSu3wvocBWtlX
xY5xw34KoFvsztHewakENjgfBG3ysH031UoOIZD0OvHyQ7BGUiu+lM22rj4Pnp6M2W+V1Jjm
OHmV9siU2YsUBE78Lu+hiOcrbydgptswgAYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAiTtikP
UrH82KCABHhPrx30MofZ4L1e9dmHrvHo32h93dFJpTLqG0E3T8y8Y5fySEu7x3jWtZNIXERs
/SJYDeww9tOi4tjV2z+3OCXMQjy7P9Pzb+sekX9GuVo640q7Z/2F6C1hShqyLVa7eJFZK8Na
1JasVj9lst+HD+A0SBA63Z+90bsECIXa4/tJqoBPAAAAAAAAAAAAAA==
=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/mail_with_bad_signature.eml
=====================================================
From: user@james.org
To: user2@james.org
Subject: test
Message-ID: <df73c05a-2e18-3e22-040c-9eda6abe02ae@open-paas.org>
Date: Fri, 1 Nov 2019 10:21:39 +0700
MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg="sha-256"; boundary="----D7BE5BC017D8AA46CAD456402C09CEA5"
This is an S/MIME signed message
------D7BE5BC017D8AA46CAD456402C09CEA5
Content-Type: text/plain
From: user@james.org
To: user2@james.org
Subject: test
Message-ID: <df73c05a-2e18-3e22-040c-9eda6abe02ae@open-paas.org>
Date: Fri, 1 Nov 2019 10:21:39 +0700
test SMIME
------D7BE5BC017D8AA46CAD456402C09CEA5
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIAwggVrMIID
UwIBATANBgkqhkiG9w0BAQsFADBmMQswCQYDVQQGEwJGUjEPMA0GA1UECAwGRnJhbmNlMQ0wCwYD
VQQHDARMeW9uMREwDwYDVQQKDAhMaW5hZ29yYTEOMAwGA1UECwwFSmFtZXMxFDASBgNVBAMMC2xv
Y2FsZG9tYWluMB4XDTE3MDEwMzE1MjcxOFoXDTQ0MDUyMjE1MjcxOFowgZAxCzAJBgNVBAYTAkZS
MQ8wDQYDVQQIDAZGcmFuY2UxDTALBgNVBAcMBEx5b24xETAPBgNVBAoMCExpbmFnb3JhMQ4wDAYD
VQQLDAVKYW1lczEbMBkGA1UEAwwSc2VuZGVyQGxvY2FsZG9tYWluMSEwHwYJKoZIhvcNAQkBFhJz
ZW5kZXJAbG9jYWxkb21haW4wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDhLZTb9UW/
X3ZMZd9XubSah2T986WlBRXKMb8yCmKMNnr/wCexF6DjWFQLTMFI//kAv7IqXkwseZAgkrPL6qXN
y/aLFe+r1DGWhSjx0+4mU28dI/trwmBHsVoq4Z2pUwSH1fl1DXb9qzENgUZE0dRGefrBERyPiPOo
O9bukeKqtwMgMwnc7oIYkmcVgHH/ULKmya5EGcDQNfwF+BTZeemVQg4pwfDG5rhq9RfyW/HcfaXx
BWzXUotwZZEt1ebuArr7b1FsYW4sOGunUADy6vL+KhzqTJtcnsFJTYah9BSrZZR+SnTlvh/LkOuV
RwAj9LBndTmQKyz+/Zz7oezGlQQh/IGIXdf6GwdgKEz5B26RK8GhrqJTNkIA3ghsgZAmi6lG0MW/
B8eB7uTCO7zeq5fZcAatHqcJANgchTNtBppjgomsXAhxwpp2iItbFfdv2WIlhvzCgLE0XmYYBaK2
JeaEqMN2Blo6CRE7Msc7+FMycyHDGnXn79opoFIO823HwqDR2hRS9s5g4AOpWPE1OC3PfV6mJdoF
6hNpe9nmv8LlIvWg373bTnHn4BINwhk7H1hjob/UnFLQH8t6Bt0e/RPlgOQefAx38Z1C2L9hz3Jh
kvfGXomf3BSmS4KE1sPtpGKP2r1QWN6Zmhdz9lpT2Pbdsqu+x8xhQh217xAt8AkRdQIDAQABMA0G
CSqGSIb3DQEBCwUAA4ICAQBK0hK0qdwJJt0poAJ59H6rjCbniQb1or0XvnhGHD+TrmlYdGnpnKfE
Vs4Tso4rX1MuAhZRlW5XfyAbCl8Bi8eKv5rirweLd7FPWR1ir6Eswl9Zq40juOktFzDdZNqzITXH
a4bHhIPEjeSttdyjYkidtVrYnJXmO8pl8VOHGgmDld3a8sZ4Htbp2d5YxLP7MbK8b95hhnWj3Ec9
QXq6w3FdQgmm/qPKgOAxvLlbpN/KuTGqL7cYgo3apFQUXREyM2qBlypl2WWe4B+RKEWvh4esE9B2
pcsjx21O1MFfROwiShd2vgmGsVZH+otmBaew3bFNdEOETgb/wIKGfdnnILF+qYcKwdpqxLzJQEjy
WBRuO6B9c1wVu5AanhjtW1FdEjUybkTZM97Og3V9f89Pp1on2ZV/UsTiMqm8zJKUC+q5MkQ6aOar
dD9L/Xml/XkOqrDQEVllXoZNp9+SdicsBicHq0rzW3JQ+H3aF8giJz0lHcuEkcZibvF9Zdq3aYyV
RsWQj0BzbfHo19hXijJQQ4vkHIBe1saQZTx8VpMQA8VtBTwC/GsfNK2nKHIT3yU0Umd/uM68UIfy
=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/non_smime_mail.eml
=====================================================
From: user@james.org
To: user2@james.org
Subject: test
Message-ID: <df73c05a-2e18-3e22-040c-9eda6abe02ae@open-paas.org>
Date: Fri, 1 Nov 2019 10:21:39 +0700
test SMIME
=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/message-multipart-7bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
by james-0 (JAMES SMTP Server ) with ESMTP ID -973333758
for <bob@james.james.org>;
Wed, 22 Jan 2020 03:47:32 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
by incoming.james.org (Postfix) with ESMTPS id 8151D43
for <bob@james.james.org>; Wed, 22 Jan 2020 03:47:32 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.james.org (Postfix) with ESMTPSA id D6C653F38C
for <bob@james.org>; Wed, 22 Jan 2020 04:47:31 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: multipart
Message-ID: <69bd7da2-5b13-de50-bd77-c985f6b0215c@james.org>
Date: Wed, 22 Jan 2020 10:47:17 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
Thunderbird/60.2.1
Content-Type: multipart/mixed;
boundary="------------C3FD44EAF9B6A93E163D9176"
Content-Language: en-US
This is a multi-part message in MIME format.
--------------C3FD44EAF9B6A93E163D9176
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
A quoted-printable encoded body with =E2=82=ACuro symbol.
--------------C3FD44EAF9B6A93E163D9176
Content-Type: image/png;
name="james-logo.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="james-logo.png"
iVBORw0KGgoAAAANSUhEUgAAANkAAABaCAYAAAA1mvMAAAAAGXRFWHRTb2Z0d2FyZQBBZG9i
ZSBJbWFnZVJlYWR5ccllPAAAFB1JREFUeNrsXV2MI9lVvuX+m2EXrTtLQGwydPVsRlmkSOOW
+BNItB2tNiAk2n5BeYG2EwkpiSLbPPAjAW7zQiQe3C0SkBBg9ysv7ZZ4AGWFa/KClJeuRQhl
s2SnOj1pYIfN1EhICRLj4pzyufbt6rrlW+W/cvc90lGVXVW37r11vnt+7h/zPI/JeJnp8jOm
yTRpmhNF4Shzg8ud059eUxrIiNJYhmEssybL4/G1f3SsGaSNAM7STxfeYWtR0ppMRqs3uNwu
8D6wNQVQoelZBc6HaUi4jgeH3nUKoOtqsdN04zUZCf8ZCPzOhNqwQeCKC/Aj4EN4v6vF7HZr
spsOsjYcHoGgd2I+lyVw1SQACpqHWYkPiPc24f2HWgw1yG4qyFADnQAXVP0meKZMADOFv9H8
=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/dlp_read_mail_with_attachment.eml
=====================================================
To: user2@james.org
From: user@james.org
Subject: dlp subject
Message-ID: <df73c05a-2e18-3e22-040c-9eda6abe02ae@open-paas.org>
Date: Fri, 1 Nov 2019 10:21:39 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
Thunderbird/60.2.1
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------589DDD2515E3B3CC74D74E40"
Content-Language: en-US
This is a multi-part message in MIME format.
--------------589DDD2515E3B3CC74D74E40
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
matchAnother
--------------589DDD2515E3B3CC74D74E40
Content-Type: image/jpeg;
name="linux.jpeg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="linux.jpeg"
/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMSEhIQEBIVFRUXFRcYFhgVFxUVGBUQFRgW
FhcVFxUdHSggGBonGxUWITIlJSkrLi4uFx8/ODMsNygtLisBCgoKDg0OGhAQGjMlICY4Mi83
NSs3LTcyMC8wLTAtLS0tLy0tNS0vLzUtLS0tLS0tLzYvKy0tLS0tLy0tLS0tLf/AABEIAOEA
4QMBIgACEQEDEQH/xAAcAAEAAgIDAQAAAAAAAAAAAAAAce
BgcEBQIDCAH/xABDEAABAwICBwUE
CAMGBwAAAAABAAIDBBEFIQYHEjFBUWETInGBkTJSobEUI0JicoLB0QiS8BUzotLh8SRDY3OD
ssL/xAAaAQEAAgMBAAAAAAAAAAAAAAAABAUBAgMG/8QALBEBAAIBAwIEBQUBAQAAAAAAAAEC
AwQRIQUSEzFBUSIzgZGhYXGx0fBDMv/aAAwDAQACEQMRAD8AvFERAREQEREBERAREQEREBV/
pJrPjildSUELqydtw7YIEUbhlZ8m7eCFia0tK3hww2lkLHubtVEjfaihO5jTwe7PPgLqJ4OI
4WCOJoa0cuJ5k8SgkDcWxqe5NRS0o4BkZlcByJcbX8Fk08mNRi7a6mqD7ssJjv8AmYcj5LCp
q3qtrTVqDMwrWGGytpsUgNHK42Y8kOglP3ZdwO7I8+CnQKr7E6WKrhfTztDmOHHe08HDkQo1
qq0ykpqp+B1zy7Ye5lPI43yHsxk8i3NvjbkguZERAREQEREBERAREQEREBERAREQEREBERAR
EQFh4viDKeCaok9iKN73fhY0uIHM5LMVda+sQMWEyMBzmkjj67Id2h/9APNBTVLiz5nyVMpv
JM90jvPcB0AAHktvTVvVQXDqk7IHJbemrUZTimreq2lNWqD01atrTVqCcU1b1VM6f1t8Tnli
cQWujsRkRJHHGLjqHNUyxPSFtPEXk3duaObuHkqpnmL3Oe43c4kk8yTcow9haD479Ooaary2
nxjbtwmb3Xi3AbQNuhC3qqf+HOuL6CeE7o5zbwe0H9FbCAiIgIiICIiAiIgIiICIiAiIgIiI
CIiAiIgKvNbOCitdQ07yQwPkkkAyLmsa1oF+Fy4eV1YahGsev7FrntNntppXN42s6Nu1bkC4
HyQU5p3oKKSP6XSXDG2EjCS6zSbB4JztfeoPHWDjkVdmi2JMqjNh8kjpw6Fzmuk2S4syZIxx
aAD7bSMuJ5KisRpTFLLCd7HuZ47JIv8ABBt6Ss2nBrLucdwaC4nwAzWzxCSpp2bTqaVo957S
Gjr/AL2Voar9FYqOkbVSgCWVge97v+XHvDB7uWZ5nwCkcOLUtQ4wB4cXA2a9pAe3js7Qs7yQ
3eYayrfK7akNz8AOQC6FL9ZujAoKu0QtDK3bj+6b2cy/GxsfBwUQQXp/DVL3a1nWM/AhXeqX
/hrj+prXf9Rg6+ySroQEREBERAREQEREBERAREQEREBERAREQEREBVXrZqmCtoYJHbLKmGop
=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/message-text-only-8bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
by james-0 (JAMES SMTP Server ) with ESMTP ID -1705393842
for <bob@james.james.org>;
Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
by incoming.james.org (Postfix) with ESMTPS id CCCA943
for <bob@james.james.org>; Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.james.org (Postfix) with ESMTPSA id 2B7D13F393
for <bob@james.org>; Wed, 22 Jan 2020 05:11:53 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: quoted
Message-ID: <f4d046a8-e563-1e92-dbd9-c5038603e3a2@james.org>
Date: Wed, 22 Jan 2020 11:11:38 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
Thunderbird/60.2.1
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US
A 8bit encoded body with €uro symbol.
=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/crypted_with_attachment.eml
=====================================================
Return-Path: <sender@localdomain>
MIME-Version: 1.0
Delivered-To: sender@localdomain
Received: from 172.17.0.1 (EHLO [127.0.0.1]) ([172.17.0.1])
by localdomain (JAMES SMTP Server ) with ESMTP ID 1899632362
for <sender@localdomain>;
Thu, 05 Jan 2017 14:37:00 +0000 (UTC)
To: sender@localdomain
From: sender <sender@localdomain>
Subject: with attachment
Message-ID: <6e654951-2131-11df-2949-ce94c5a9f629@localdomain>
Date: Thu, 5 Jan 2017 15:37:00 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.5.1
Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7m"
Content-Description: =?UTF-8?Q?Message_chiffr=c3=a9_S/MIME?=
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
=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/message-text-only-7bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
by james-0 (JAMES SMTP Server ) with ESMTP ID -1705393842
for <bob@james.james.org>;
Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
by incoming.james.org (Postfix) with ESMTPS id CCCA943
for <bob@james.james.org>; Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.james.org (Postfix) with ESMTPSA id 2B7D13F393
for <bob@james.org>; Wed, 22 Jan 2020 05:11:53 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: quoted
Message-ID: <f4d046a8-e563-1e92-dbd9-c5038603e3a2@james.org>
Date: Wed, 22 Jan 2020 11:11:38 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
Thunderbird/60.2.1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
A quoted-printable encoded body with =E2=82=ACuro symbol.
=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/calendar.eml
=====================================================
Return-Path: <local@localhost.com>
MIME-Version: 1.0
Delivered-To: to@localhost.com
From: User From <fromUser@localhost.com>
Message-ID: <2d0fa16c-4c37-58de-1acc-50b5f6a23a60@localhost.com>
To: User To <toUser@linagora.com>
Date: Wed, 26 Jul 2017 10:34:02 +0200
Subject: Any subject
Content-class: urn:content-classes:calendarmessage
Content-Type: text/calendar; method=REPLY; charset=UTF-8
Content-transfer-encoding: 8BIT
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
METHOD:REPLY
BEGIN:VEVENT
CREATED:20170726T081145Z
LAST-MODIFIED:20170726T083402Z
DTSTAMP:20170726T083402Z
UID:f1514f44bf39311568d6407249cb76c48103fcd1fb398c3c501cb72b2d293f36e04
b2aab16e43439a608f28671ab7c10e754cbc85ddee4a07fa8cf8f4f7af05bfb502b8f6
SUMMARY:[A CONFIRMER] Call OVH
PRIORITY:5
ORGANIZER;CN=User;X-OBM-ID=id:mailto:userTo@localhost.com
ATTENDEE;CN=User;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL;X-OBM-ID=810:
mailto:user1To@linagora.com
DTSTART:20170727T130000Z
DURATION:PT1H
TRANSP:OPAQUE
SEQUENCE:2
X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for X property. Rem
oving entire property:
CLASS:PUBLIC
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:uuid_value
LOCATION:01.78.14.42.61 / 1586
X-OBM-ALERT;X-OBM-ID=486:600
END:VEVENT
END:VCALENDAR
=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/bad_crypted.eml
=====================================================
Return-Path: <bad@localdomain>
MIME-Version: 1.0
Delivered-To: bad@localdomain
Received: from 172.17.0.1 (EHLO [127.0.0.1]) ([172.17.0.1])
by HOSTNAME (JAMES SMTP Server ) with ESMTP ID 1133072046
for <bad@localdomain>;
Wed, 04 Jan 2017 11:00:49 +0000 (UTC)
To: bad@localdomain
From: bad <bad@localdomain>
Subject: test
Message-ID: <6a568227-58c9-a3bc-f0d4-dd3eeb6bce43@localdomain>
Date: Wed, 4 Jan 2017 12:00:49 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.5.1
Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7m"
Content-Description: =?UTF-8?Q?Message_chiffr=c3=a9_S/MIME?=
MIAGCSqGSIb3DQEHA6CAMIACAQAxggKpMIICpQIBADCBjDCBhjELMAkGA1UEBhMCRlIxDzAN
BgNVBAgMBkZyYW5jZTENMAsGA1UEBwwETHlvbjERMA8GA1UECgwITGluYWdvcmExDjAMBgNV
BAsMBUphbWVzMRQwEgYDVQQDDAtsb2NhbGRvbWFpbjEeMBwGCSqGSIb3DQEJARYPYmFkQGxv
Y2FsZG9tYWluAgEBMA0GCSqGSIb3DQEBAQUABIICAI1UxuCdpInNJ0BRSWReJNkt1N+hX+dr
JrRlFRT2BnLcpzumGtVr9uEYC6JIkgAg3NVMqI7E9LQG260NSoQfKgDkBli/x9S5DJMtvqCz
wlOj3uyMKXK1rRKvLlVm3wJJHsO2n2oMRsDkf8cStshGBYsvMObxENt5n6X7HGsa9oF8KpwD
WPwdjN6OvFIkfRW+v5y6SLrjH4sZUm2kSIAdDgrZym3ELgUrtus0LMklMzpRiUAuqgRKXoga
DmX/7TrbdZrZPjQi7Pe4jc1A2i8m9xQFcctgcn2IbCxAV9o8wHkmMAOh70SOijMI+kNeyh6r
PiLcRH18EWhv/kdWcRX41wEGhV9RFQObH1CyOBoy5LJIkfITggo4qz4Pa1Z25LM5ma3ajHu8
6u2TImH/Dx2szQm3FiQ3+zA3WlRQjnN+TbOPvfx0wl+Ve7jDHC0wkW0L5w3c3esUsH1ftk2b
S8hG1RLK3gBSOF0nKPcG0nK7AF0d2sd7FA71ao4PR4de7LE2tABNVDuMWVggwCYL4pfh77VM
kKH7vhA1YWwn7oAo/3ZWoPOWUSJaHJYbb65APjRQ+yVl3ucwl/ok6vrU+YoQZATIcu+kU56e
ZsaJiFyEmv7j9K3sEtjvwkoAYwf5sQmIbtZo+Dux6IisTFNWDQhGSmjfImuoYQ8kLckj2Wx1
wyv+MIAGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIlSYUQVkU/yqggAR44PWcNvdwIMSxYl/t
ZtCd6BGwHPDRGOKAzsYcRuIWwA2wHQljjqTDiORW7uqVDyiEMDPd2nVXtAbjkZN4sujVbh5q
TNbDUOihMiUn+gXcYq4Go6UD4djqx6K7YT6LIHONtP6zgygeS+EfM/9CaJd/7Z/bfuY4Jcko
BAhb/n3N2DrjfgAAAAAAAAAAAAA=
=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/yahooInvitation.eml
=====================================================
Return-Path: <do-not-reply@yahoo.com>
Date: 23 Jan 2017 12:16:35 +0000
To: raph.ouazana@linagora.com
From: "OBM Linagora" <obmlinagora@yahoo.fr>
Reply-To: "OBM Linagora" <obmlinagora@yahoo.fr>
MIME-Version: 1.0
X-Yahoo-Newman-Property: calendar-remind
X-Yahoo-Newman-Id: calendar-remind-87cf88d6-0909-4010-99a4-f156b375adbd
Subject: ***SPAM*** =?UTF-8?Q?Invitation=C3=82=C2=A0:?= Test from Yahoo
Content-Type: multipart/mixed;
boundary="_004_CD15A92E9002734AADB6F2075789C4D70108100CB8EDEGLEX07VS01_"
Message-Id: <20170123121641.2505248D3F@obm3-ui.linagora.dc1>
--_004_CD15A92E9002734AADB6F2075789C4D70108100CB8EDEGLEX07VS01_
Content-Type: multipart/alternative;
boundary="_000_CD15A92E9002734AADB6F2075789C4D70108100CB8EDEGLEX07VS01_"
--_000_CD15A92E9002734AADB6F2075789C4D70108100CB8EDEGLEX07VS01_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
--_000_CD15A92E9002734AADB6F2075789C4D70108100CB8EDEGLEX07VS01_
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 8bit
<div style="min-width: 300px; max-width: 585px; padding: 15px 15px 15px 15px; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px; ">
<table style="margin: 0px 0px 0px 0px" cellspacing="0" cellpadding="0">
<tr>
<td>
<div style="width:55px;height:55px;border-radius:5px;text-align:center;font-family:Helvetica Neue medium, Helvetica, Arial, sans-serif;color:white;background-color:#400090;">
<div style="padding-top:5px;line-height:20px">
<div style="font-size:12px;font-weight:lighter;">
JANV.
</div>
<div style="font-size:32px;font-weight:bolder;font-family:Helvetica Neue bold, Helvetica, Arial, sans-serif;">
27
</div>
</div>
</div>
</td>
<td width="40px" />
<td
style="font-size: 24px; vertical-align: middle; color: #454545; font-weight: lighter; line-height: 26px;">
"Test from Yahoo"
=====================================================
== File: server/mailet/integration-testing/src/main/resources/smime-test-resource-set/instruction.md
=====================================================
These resources were created by openssl tool:
```
openssl genrsa -out rootCA.private.key
openssl req -x509 -key rootCA.private.key -days 100000 -out rootCA.crt
openssl genrsa -out private.key
openssl req -new -key private.key -out request.csr
openssl x509 -req -in request.csr -CA rootCA.crt -CAkey rootCA.private.key -CAcreateserial -out certificate.crt -days 100000
keytool -import -alias testalias -file rootCA.crt -keystore trusted_cert_keystore -deststoretype PKCS12
```
trusted_cert_keystore file is located in the parent directory
mail_with_signature.eml was based on the result of the following command:
```
openssl smime -sign -in message -out signed-message -signer certificate.crt -inkey private.key -text
```
mail_with_signaturemail_with_signature_and_content_type_xpkcs7mime.eml was based on the result of the following command:
```
openssl smime -sign -in message -out signed-message -signer certificate.crt -inkey private.key -text -nodetach
```
mail-with-signature-and-multi-certs.eml was based on the result of the following command:
```
openssl smime -sign -in message -out signed-message-multi-cert -signer certificate.crt -inkey private.key -certfile rootCA.crt -nodetach
```
For more detail: https://certificate.nikhef.nl/info/smime-manual.html
password for everything: secret
=====================================================
== File: server/mailet/integration-testing/src/main/resources/smime-test-resource-set/rootCA.srl
=====================================================
0D7772E97111FE45872B8D654C9C552705CF650E
=====================================================
== File: server/mailet/integration-testing/src/main/resources/smime-test-resource-set/mail_with_signature.eml
=====================================================
From: user@james.org
To: user2@james.org
Subject: test
Message-ID: <df73c05a-2e18-3e22-040c-9eda6abe02ae@open-paas.org>
Date: Fri, 1 Nov 2019 10:21:39 +0700
MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg="sha-256"; boundary="----B1F607CD791E8C470233D073A0704182"
This is an S/MIME signed message
------B1F607CD791E8C470233D073A0704182
Content-Type: text/plain
From: user@james.org
To: user2@james.org
Subject: test
Message-ID: <df73c05a-2e18-3e22-040c-9eda6abe02ae@open-paas.org>
Date: Fri, 1 Nov 2019 10:21:39 +0700
test SMIME
------B1F607CD791E8C470233D073A0704182
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
MIIGdAYJKoZIhvcNAQcCoIIGZTCCBmECAQExDzANBglghkgBZQMEAgEFADALBgkq
hkiG9w0BBwGgggOMMIIDiDCCAnACFA13culxEf5FhyuNZUycVScFz2UOMA0GCSqG
SIb3DQEBCwUAMIGAMQswCQYDVQQGEwJWTjEOMAwGA1UECAwFSGFub2kxDjAMBgNV
BAcMBUhhbm9pMREwDwYDVQQKDAhMaW5hZ29yYTEOMAwGA1UECwwFSmFtZXMxDjAM
BgNVBAMMBWFkbWluMR4wHAYJKoZIhvcNAQkBFg9hZG1pbkBqYW1lcy5vcmcwIBcN
MjQwODE1MDkyNjQwWhgPMjI5ODA1MzEwOTI2NDBaMH4xCzAJBgNVBAYTAlZOMQ4w
DAYDVQQIDAVIYW5vaTEOMAwGA1UEBwwFSGFub2kxETAPBgNVBAoMCExpbmFnb3Jh
MQ4wDAYDVQQLDAVKYW1lczENMAsGA1UEAwwEdXNlcjEdMBsGCSqGSIb3DQEJARYO
dXNlckBqYW1lcy5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC
3GcBrtVznej/7/hqpTp3n5h9mNRdBntYUXpt/nO//xm0bcV5mMhsVuqCjFu7nTj3
dGxhwly5N1R/JdPL60re+8oeOCUr6472HTJIaqE6SetxWS+/mqNYhCmlHZGK2yCv
H1bpgGGIc66Bjhu+vbAMDDAfVnz/4R0MklzacG3KtJb0j+kauBKnAe1JcIv+WJ95
BbFyEmY992/PGJMUIeSPFMEKCa6rOkKYMDQUV+brlls3ha1qHH+eI61s6EZVcEts
PTOVK+RGTzrbIOzRisPRr50KK8c/+y3dGFMW6FEYDHk5E7p4/I0ojbX7gZVSMGAW
Xh58ME7+7UMaGEtnQriHAgMBAAEwDQYJKoZIhvcNAQELBQADggEBACDnWoIqpUCx
UdYzbu6MABXliudgyCHRvzRkc8l1h0J7QsLnimhfmV9ujZw+u0dBy722ueToecqM
Ro3CQhVz/KdGOsXKmRF5uOk4A6fWEJcpxwVNfHmMz99JUOQFryZlirAAmJVKWQYH
BizQX2PSRG8bBA9pS3GpLgaA9b2ltxE0B/E5GSivIEeA2CwwUjhPBFTxpgdTbEYC
DwhLhQ3d68i2jL8/NuUA+6RlYESJiJuJa6VXinbl3LEjNCGoaw8S+Jln6XMtF+KN
pLfiZcY4fA92k18nYxEYYBYHDk2B457LlknIHHYlAvwVA85a2PfaRuIuEzJtfdui
1QHv9JZIKL4xggKsMIICqAIBATCBmTCBgDELMAkGA1UEBhMCVk4xDjAMBgNVBAgM
BUhhbm9pMQ4wDAYDVQQHDAVIYW5vaTERMA8GA1UECgwITGluYWdvcmExDjAMBgNV
BAsMBUphbWVzMQ4wDAYDVQQDDAVhZG1pbjEeMBwGCSqGSIb3DQEJARYPYWRtaW5A
amFtZXMub3JnAhQNd3LpcRH+RYcrjWVMnFUnBc9lDjANBglghkgBZQMEAgEFAKCB
=====================================================
== File: server/mailet/integration-testing/src/main/resources/smime-test-resource-set/rootCA.private.key
=====================================================
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAxKGiOzUxcvQgACOa4tNig3NcZON+yZ0iL4z2f8jn5AamLFxD
Npfm6eI/pv4CCwiFGVA835aLHBaamcOFm75tXtuAkpe/RiagpoZAYNvk389+4Ol8
a5XNCmGOO1A/uOZbfCmrM1owFPTfPmcr9YHF4wlcT1tg1Pms/bxgIODR/yxIpJmQ
xR2Vh+hSb69gf35uYjDNpMXqRFzoz6f8QvMO8NL4p6+0nerg/vXSpO6Qfu5cRUTO
z+VRJW0deD8esnu2V3dueuoBIMHQSY+WOqOwckH9/efg+hP8Cexzivi+MBJAI/Ov
bKrp7uMedT5A3ilcZRC/lF3MapOE5JGfK9BKBwIDAQABAoIBAQCV54/RyaTQOXMo
B/ztzi+9fTZEJ/eh5uyICdRm6Rh4i+UlzpTjSv0c84KJYf7WwIEQIk62OoQFPupQ
LXJvoMaq2Xb0y0FkTtCNA66S6TFcu0jEWNyk/Ihb0LHpYC2kXeIDD5VYSfp8D48e
ePNXcL8Xbix0x3pUA6CxtGooxpzyBkzrBmH9g2Ep/SL6DU3UVPbcpgRv4AYJsofs
66ENkGD26Zat19SSlyCzqfLDTrVVY28JZsYwxWPrg7oyo0rKyjEI5ZUiLLz1foCI
+r7JsxQ9g5i5RuB0Cb3+8Rjv0PVO2DS5HzB6Y34zxFvE2AITeOWoIJFMf1CT2Hc7
jWhel7bpAoGBAP6Vmn4AGVPnAnXuVbtU3U/aJTEhTaJ2QyY8y0mafuHv3tcHYG2T
i6CX/1HxuBRVFRLptxRBB57sSepnLbK8Ik51BhWwESRdUzaGQCOjnfH7IinDvX77
0KtXnSBT7OE4N2rNcEes4A2Uu1qTEpzVfIYJPzZ1SWoUjvXtadjANahTAoGBAMW5
iP2G4jXeFa0/YUJ+kYGOSWizy4rkbqxn5XG/tA/H//bbD8QW8TjGIP39phvQsNzf
V/jVwCyqu9gFKGj0R4ERSVMjDxjVY3i7hU9jH83NjFRGyumdg7dKtNFXvJZT1aE6
MH5+8NSEPUG5Bw6q821Z/5dZjzdl1wCfDbnjNVD9AoGBAOU+xd1MLYJ19KtJMH39
z0PGhdMV0BjJMXJPMCdZLYQ6QYmTpOtG/2ZfOJQLe90jOFTNjAR7AmfDElQ3ENlv
u9y2WAJThzwdpX7lqP/up51srLi6//pGuwJvZJflutqbiptr3v1L2H2iPoszAIGl
Y/o2fWuGddNGK+2cGcIKYsbtAoGAPhJW3TBhB4QmzfKdt+BAEan3hbUb6wh3bgxX
zXPfNS0WQArZUjfZlncsmE/uu8CyJUTAO0/vOpaGzfQgkYJOiEhC+qSA8szao2ZL
HXcC3vruWO64eMqINRxw0191xsOexzSbULrNJAo3qNBLVOF59hRQ1tS4zy1bZ8iG
6JpZfIkCgYAb5ZA4Pr9JuzJDGCMsytZUvcuSjceCidJL1Ls///FJiLboSPSacLpn
TjIEdZ9+GAUb5zsKMezt6sWA98G7GY4KKcwS0hn0Op0piihkIf0AII97BiVmqhqI
yc6WSpCGTy5PgnL22UcAnZZcVa8hS4V2v11Qblw46UGLHEn9nyIguQ==
-----END RSA PRIVATE KEY-----
=====================================================
== File: server/mailet/integration-testing/src/main/resources/smime-test-resource-set/mail_with_signature_and_content_type_xpkcs7mime.eml
=====================================================
From: user@james.org
To: user2@james.org
Subject: test
Message-ID: <df73c05a-2e18-3e22-040c-9eda6abe02ae@open-paas.org>
Date: Fri, 1 Nov 2019 10:21:39 +070
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m"
Content-Transfer-Encoding: base64
MIIHRwYJKoZIhvcNAQcCoIIHODCCBzQCAQExDzANBglghkgBZQMEAgEFADCB3QYJ
KoZIhvcNAQcBoIHPBIHMQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQoNCkZyb206
IHVzZXJAamFtZXMub3JnDQpUbzogdXNlcjJAamFtZXMub3JnDQpTdWJqZWN0OiB0
ZXN0DQpNZXNzYWdlLUlEOiA8ZGY3M2MwNWEtMmUxOC0zZTIyLTA0MGMtOWVkYTZh
YmUwMmFlQG9wZW4tcGFhcy5vcmc+DQpEYXRlOiBGcmksIDEgTm92IDIwMTkgMTA6
MjE6MzkgKzA3MDANCg0KdGVzdCBTTUlNRQ0KoIIDjDCCA4gwggJwAhQNd3LpcRH+
RYcrjWVMnFUnBc9lDjANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVk4xDjAM
BgNVBAgMBUhhbm9pMQ4wDAYDVQQHDAVIYW5vaTERMA8GA1UECgwITGluYWdvcmEx
DjAMBgNVBAsMBUphbWVzMQ4wDAYDVQQDDAVhZG1pbjEeMBwGCSqGSIb3DQEJARYP
YWRtaW5AamFtZXMub3JnMCAXDTI0MDgxNTA5MjY0MFoYDzIyOTgwNTMxMDkyNjQw
WjB+MQswCQYDVQQGEwJWTjEOMAwGA1UECAwFSGFub2kxDjAMBgNVBAcMBUhhbm9p
MREwDwYDVQQKDAhMaW5hZ29yYTEOMAwGA1UECwwFSmFtZXMxDTALBgNVBAMMBHVz
ZXIxHTAbBgkqhkiG9w0BCQEWDnVzZXJAamFtZXMub3JnMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAwtxnAa7Vc53o/+/4aqU6d5+YfZjUXQZ7WFF6bf5z
v/8ZtG3FeZjIbFbqgoxbu50493RsYcJcuTdUfyXTy+tK3vvKHjglK+uO9h0ySGqh
OknrcVkvv5qjWIQppR2Ritsgrx9W6YBhiHOugY4bvr2wDAwwH1Z8/+EdDJJc2nBt
yrSW9I/pGrgSpwHtSXCL/lifeQWxchJmPfdvzxiTFCHkjxTBCgmuqzpCmDA0FFfm
65ZbN4Wtahx/niOtbOhGVXBLbD0zlSvkRk862yDs0YrD0a+dCivHP/st3RhTFuhR
GAx5ORO6ePyNKI21+4GVUjBgFl4efDBO/u1DGhhLZ0K4hwIDAQABMA0GCSqGSIb3
DQEBCwUAA4IBAQAg51qCKqVAsVHWM27ujAAV5YrnYMgh0b80ZHPJdYdCe0LC54po
X5lfbo2cPrtHQcu9trnk6HnKjEaNwkIVc/ynRjrFypkRebjpOAOn1hCXKccFTXx5
jM/fSVDkBa8mZYqwAJiVSlkGBwYs0F9j0kRvGwQPaUtxqS4GgPW9pbcRNAfxORko
ryBHgNgsMFI4TwRU8aYHU2xGAg8IS4UN3evItoy/PzblAPukZWBEiYibiWulV4p2
5dyxIzQhqGsPEviZZ+lzLRfijaS34mXGOHwPdpNfJ2MRGGAWBw5NgeOey5ZJyBx2
JQL8FQPOWtj32kbiLhMybX3botUB7/SWSCi+MYICrDCCAqgCAQEwgZkwgYAxCzAJ
BgNVBAYTAlZOMQ4wDAYDVQQIDAVIYW5vaTEOMAwGA1UEBwwFSGFub2kxETAPBgNV
BAoMCExpbmFnb3JhMQ4wDAYDVQQLDAVKYW1lczEOMAwGA1UEAwwFYWRtaW4xHjAc
BgkqhkiG9w0BCQEWD2FkbWluQGphbWVzLm9yZwIUDXdy6XER/kWHK41lTJxVJwXP
ZQ4wDQYJYIZIAWUDBAIBBQCggeQwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
BgkqhkiG9w0BCQUxDxcNMjQwODE1MTAwMDE0WjAvBgkqhkiG9w0BCQQxIgQgP96w
mwYh+ZfDZNWF2mFe1tO7jf97tDQmQ5wgNcGocDoweQYJKoZIhvcNAQkPMWwwajAL
BglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0D
BzAOBggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZI
hvcNAwICASgwDQYJKoZIhvcNAQEBBQAEggEAMBaNPzd7aIcPN3zmB/FXv+aKqPhA
qXJVa4QEuX01ngQ3ac7/ncDSHHJVBqGuIQziO/331bkJgY6qE3tYY/kJVjzcJOHm
m6wLoFFBmUm1kUkjJD6Li+jK11Ws+/V8XCDlrxxwIyjeSF6TIDnmEVxJsQfnD1fx
ed0xtBg9UFg7bKTdvC0UXDzmUCoRZb3zf5xuW4NhAHYGklhyuaiUlaJu/PMGomY5
20KfS+xY+knHM/7VLzjc3PZxppITIGX0exDaJuaOede8oseZ9zIAD0DOQYG/y8+h
3UfXrmbUCSEl9+HfLDW7sV9ZTndFiPRvFTawNjBNjhdhxJ1fZRpbxSNspQ==
=====================================================
== File: server/mailet/integration-testing/src/main/resources/smime-test-resource-set/private.key
=====================================================
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAwtxnAa7Vc53o/+/4aqU6d5+YfZjUXQZ7WFF6bf5zv/8ZtG3F
eZjIbFbqgoxbu50493RsYcJcuTdUfyXTy+tK3vvKHjglK+uO9h0ySGqhOknrcVkv
v5qjWIQppR2Ritsgrx9W6YBhiHOugY4bvr2wDAwwH1Z8/+EdDJJc2nBtyrSW9I/p
GrgSpwHtSXCL/lifeQWxchJmPfdvzxiTFCHkjxTBCgmuqzpCmDA0FFfm65ZbN4Wt
ahx/niOtbOhGVXBLbD0zlSvkRk862yDs0YrD0a+dCivHP/st3RhTFuhRGAx5ORO6
ePyNKI21+4GVUjBgFl4efDBO/u1DGhhLZ0K4hwIDAQABAoIBAQCCyVGttH35qswf
NB6E3b9fWNQNwI0QnvAcuBs3RmjEPeEv09mOIriq1q9xzekoBH+evxqbhsubWQKy
kF4WaSeIgHEJVV/FmcYLdE8ygbcTG1gWbOj6bj0ihRo6g50TGL5YK+22rX9JCXPf
6tS+cix9+ZQ3BGLDj4Fi1b3Ss1FNkjnjHycnEvhIhEunJ+DGYRj18SycZL7OyDRU
khksMVuimcW8jx8kxvH38sj+MDbTvaFc/ukoS46tBKz9ZDJ553I0PTSHZfMw77+a
x346j1gvkQCejjlVD2J7kRlEMYdPn52wzXmJyzAE/UpragSL1mxDaE0Yhl1qkGDG
asAZZh2pAoGBAOs7zTF48b+NDbgQlDR57yaIiyDaMX2o9N0t+ob+y5HQr6F9LHE/
Bjs83X7IMqFQsc25Ytd8jsYzX7qfjVuhMs+wMhRyTO8+nYAYHBTKL8UvCU+xzA5z
xzcNLHOOyx2G4ZAb5aSgrX8/BZpZPxLictf8H/IPh42FNZv4b6YNezrTAoGBANQQ
MVih4nM68BGncQpuX25dR/InoMchzJktlYILlHgYmeJu/FTiHqdaLZDgbIBnXdVB
GGlMXIjesiC7gSGM23s8Yau047Pn8PQsC1a9Q8fS9CXmhqJmqjE3Fl793Q6vemQj
cPc1Glg2wQ8iZ9mpAiRSQBRcNCMNZgnVFs7MllL9AoGBAN6NcZEA0BdeKECgztbn
Fe/q91ZZmME+fIxV19Soc4i9W6z5dHagHhElgJlWZzBf3Bi68FzXJ201Zbh3A5JR
bHU6Sec2TLt9Dh4GsWqp75Aq9DBGEr0JpMzc1dVun5SL7BQfkKC0s/DTe0WQcjA3
tlfJ3Z9yOdkW0qWB4n/D+XapAoGBAI3gP4Ny2xQIzHCjO6ek7EfkNKw4AwL3A/E/
ZBVbNfubSekKI9uOZL/GP1H8M9s8TLTOFkzsf8Q6aaYojF4r5PNwFFBSdzz34mcZ
yIRBn8Vix2FL96tTUG4Y0ui+o1Sd5h5077EUYAnAqC098YjX38z5ElIM1fzVi/zs
CZRVoATpAoGAP2UyFMYfXBAc4KmWsr8qLRegVHSsdWtuKDNxffM3kLS4AVYUF0Sl
yGvit2PZG/z1FfjQTVuVjuTK/01xw7fWaVU16oqictneIQT7RS2Q5q0dNRxca9G5
f2+Cbztk8Hkqak4SEpMclq0FoIjwIiX586x0DuA2V37ApL21l1He+no=
-----END RSA PRIVATE KEY-----
=====================================================
== File: server/mailet/integration-testing/src/main/resources/smime-test-resource-set/rootCA.crt
=====================================================
-----BEGIN CERTIFICATE-----
MIID5TCCAs2gAwIBAgIUASoDQ2Wf0Mef+y9bfCqSMy6hFfMwDQYJKoZIhvcNAQEL
BQAwgYAxCzAJBgNVBAYTAlZOMQ4wDAYDVQQIDAVIYW5vaTEOMAwGA1UEBwwFSGFu
b2kxETAPBgNVBAoMCExpbmFnb3JhMQ4wDAYDVQQLDAVKYW1lczEOMAwGA1UEAwwF
YWRtaW4xHjAcBgkqhkiG9w0BCQEWD2FkbWluQGphbWVzLm9yZzAgFw0yNDA4MTUw
ODQzNDBaGA8yMjk4MDUzMTA4NDM0MFowgYAxCzAJBgNVBAYTAlZOMQ4wDAYDVQQI
DAVIYW5vaTEOMAwGA1UEBwwFSGFub2kxETAPBgNVBAoMCExpbmFnb3JhMQ4wDAYD
VQQLDAVKYW1lczEOMAwGA1UEAwwFYWRtaW4xHjAcBgkqhkiG9w0BCQEWD2FkbWlu
QGphbWVzLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMShojs1
MXL0IAAjmuLTYoNzXGTjfsmdIi+M9n/I5+QGpixcQzaX5uniP6b+AgsIhRlQPN+W
ixwWmpnDhZu+bV7bgJKXv0YmoKaGQGDb5N/PfuDpfGuVzQphjjtQP7jmW3wpqzNa
MBT03z5nK/WBxeMJXE9bYNT5rP28YCDg0f8sSKSZkMUdlYfoUm+vYH9+bmIwzaTF
6kRc6M+n/ELzDvDS+KevtJ3q4P710qTukH7uXEVEzs/lUSVtHXg/HrJ7tld3bnrq
ASDB0EmPljqjsHJB/f3n4PoT/Ansc4r4vjASQCPzr2yq6e7jHnU+QN4pXGUQv5Rd
zGqThOSRnyvQSgcCAwEAAaNTMFEwHQYDVR0OBBYEFJLv8+NebeBDDJWLpb3cD+kF
aIjeMB8GA1UdIwQYMBaAFJLv8+NebeBDDJWLpb3cD+kFaIjeMA8GA1UdEwEB/wQF
MAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFal8TpKaOBESJC9Nhb71Ivw8fV+kGdq
YySdseOnuXgAorXfs6MK0ko/rbrTJjS9JImbFcxTqHim+kTTsiy3wvYBUi77DKoS
XVhl5EuNkdkMG1EhR1kC7SUJv5C4o7i1OZIJwf7ATWyo/KbEezIIlvS7Jz9q7EOG
9zm57k+noY/BvbcRCh0CmOyD5MuyFGw+PitPiWzsWTK0PCBKRKwzRi0hbw/w4PHk
ur+/0bhMVU4kuE7SquRn3pjoxtQqYGy55xEAl/Rkzd5a9PD7vTnf3o2RcA5/K/5N
HJL1vvH3jMNLXBy/t3Uek5H/6BM8qxtAqNoJcnCfbm7zYz2GFGXThr0=
-----END CERTIFICATE-----
=====================================================
== File: server/mailet/integration-testing/src/main/resources/smime-test-resource-set/request.csr
=====================================================
-----BEGIN CERTIFICATE REQUEST-----
MIIC2jCCAcICAQAwfjELMAkGA1UEBhMCVk4xDjAMBgNVBAgMBUhhbm9pMQ4wDAYD
VQQHDAVIYW5vaTERMA8GA1UECgwITGluYWdvcmExDjAMBgNVBAsMBUphbWVzMQ0w
CwYDVQQDDAR1c2VyMR0wGwYJKoZIhvcNAQkBFg51c2VyQGphbWVzLm9yZzCCASIw
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMLcZwGu1XOd6P/v+GqlOnefmH2Y
1F0Ge1hRem3+c7//GbRtxXmYyGxW6oKMW7udOPd0bGHCXLk3VH8l08vrSt77yh44
JSvrjvYdMkhqoTpJ63FZL7+ao1iEKaUdkYrbIK8fVumAYYhzroGOG769sAwMMB9W
fP/hHQySXNpwbcq0lvSP6Rq4EqcB7Ulwi/5Yn3kFsXISZj33b88YkxQh5I8UwQoJ
rqs6QpgwNBRX5uuWWzeFrWocf54jrWzoRlVwS2w9M5Ur5EZPOtsg7NGKw9GvnQor
xz/7Ld0YUxboURgMeTkTunj8jSiNtfuBlVIwYBZeHnwwTv7tQxoYS2dCuIcCAwEA
AaAXMBUGCSqGSIb3DQEJBzEIDAZzZWNyZXQwDQYJKoZIhvcNAQELBQADggEBAIdD
YsObgyH00x9ZFM8R8i2ILlcbx8G1yAnJMvSLM0twQBGLbKjgUMsjK48qMog9WuD9
Ze85z/7T9xPXbybvCxqEYUo+qKXL//dFl5Bigw4f6yNYhw2R0EjdTHolGJ3EqkKv
1XhwtOYXGLQugld1yLBVhsBRLHZUzGc77mbHSlmbD4KiwEhsxkue+Zwl46nrZHlu
G887kQyQVs+Kd0s8onrL1VLn5/qOqVTo2oh17YjbWcvjk/Tz+jb6qe0f8iMnrJxs
LToYPYL4OEhLE1SyND2x9j5gfZHw1pi/JxR7z+E+iVErYgWYcX4Ruqrcnf4klG3y
XAF2nsLLDrCoe9GxKsQ=
-----END CERTIFICATE REQUEST-----
=====================================================
== File: server/mailet/integration-testing/src/main/resources/smime-test-resource-set/mail-with-signature-and-multi-certs.eml
=====================================================
From: user@james.org
To: user2@james.org
Subject: test
Message-ID: <df73c05a-2e18-3e22-040c-9eda6abe02ae@open-paas.org>
Date: Fri, 1 Nov 2019 10:21:39 +070
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m"
Content-Transfer-Encoding: base64
MIILFAYJKoZIhvcNAQcCoIILBTCCCwECAQExDzANBglghkgBZQMEAgEFADCBwQYJ
KoZIhvcNAQcBoIGzBIGwRnJvbTogdXNlckBqYW1lcy5vcmcNClRvOiB1c2VyMkBq
YW1lcy5vcmcNClN1YmplY3Q6IHRlc3QNCk1lc3NhZ2UtSUQ6IDxkZjczYzA1YS0y
ZTE4LTNlMjItMDQwYy05ZWRhNmFiZTAyYWVAb3Blbi1wYWFzLm9yZz4NCkRhdGU6
IEZyaSwgMSBOb3YgMjAxOSAxMDoyMTozOSArMDcwMA0KDQp0ZXN0IFNNSU1FDQqg
ggd1MIID5TCCAs2gAwIBAgIUASoDQ2Wf0Mef+y9bfCqSMy6hFfMwDQYJKoZIhvcN
AQELBQAwgYAxCzAJBgNVBAYTAlZOMQ4wDAYDVQQIDAVIYW5vaTEOMAwGA1UEBwwF
SGFub2kxETAPBgNVBAoMCExpbmFnb3JhMQ4wDAYDVQQLDAVKYW1lczEOMAwGA1UE
AwwFYWRtaW4xHjAcBgkqhkiG9w0BCQEWD2FkbWluQGphbWVzLm9yZzAgFw0yNDA4
MTUwODQzNDBaGA8yMjk4MDUzMTA4NDM0MFowgYAxCzAJBgNVBAYTAlZOMQ4wDAYD
VQQIDAVIYW5vaTEOMAwGA1UEBwwFSGFub2kxETAPBgNVBAoMCExpbmFnb3JhMQ4w
DAYDVQQLDAVKYW1lczEOMAwGA1UEAwwFYWRtaW4xHjAcBgkqhkiG9w0BCQEWD2Fk
bWluQGphbWVzLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMSh
ojs1MXL0IAAjmuLTYoNzXGTjfsmdIi+M9n/I5+QGpixcQzaX5uniP6b+AgsIhRlQ
PN+WixwWmpnDhZu+bV7bgJKXv0YmoKaGQGDb5N/PfuDpfGuVzQphjjtQP7jmW3wp
qzNaMBT03z5nK/WBxeMJXE9bYNT5rP28YCDg0f8sSKSZkMUdlYfoUm+vYH9+bmIw
zaTF6kRc6M+n/ELzDvDS+KevtJ3q4P710qTukH7uXEVEzs/lUSVtHXg/HrJ7tld3
bnrqASDB0EmPljqjsHJB/f3n4PoT/Ansc4r4vjASQCPzr2yq6e7jHnU+QN4pXGUQ
v5RdzGqThOSRnyvQSgcCAwEAAaNTMFEwHQYDVR0OBBYEFJLv8+NebeBDDJWLpb3c
D+kFaIjeMB8GA1UdIwQYMBaAFJLv8+NebeBDDJWLpb3cD+kFaIjeMA8GA1UdEwEB
/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFal8TpKaOBESJC9Nhb71Ivw8fV+
kGdqYySdseOnuXgAorXfs6MK0ko/rbrTJjS9JImbFcxTqHim+kTTsiy3wvYBUi77
DKoSXVhl5EuNkdkMG1EhR1kC7SUJv5C4o7i1OZIJwf7ATWyo/KbEezIIlvS7Jz9q
7EOG9zm57k+noY/BvbcRCh0CmOyD5MuyFGw+PitPiWzsWTK0PCBKRKwzRi0hbw/w
4PHkur+/0bhMVU4kuE7SquRn3pjoxtQqYGy55xEAl/Rkzd5a9PD7vTnf3o2RcA5/
K/5NHJL1vvH3jMNLXBy/t3Uek5H/6BM8qxtAqNoJcnCfbm7zYz2GFGXThr0wggOI
MIICcAIUDXdy6XER/kWHK41lTJxVJwXPZQ4wDQYJKoZIhvcNAQELBQAwgYAxCzAJ
BgNVBAYTAlZOMQ4wDAYDVQQIDAVIYW5vaTEOMAwGA1UEBwwFSGFub2kxETAPBgNV
BAoMCExpbmFnb3JhMQ4wDAYDVQQLDAVKYW1lczEOMAwGA1UEAwwFYWRtaW4xHjAc
BgkqhkiG9w0BCQEWD2FkbWluQGphbWVzLm9yZzAgFw0yNDA4MTUwOTI2NDBaGA8y
Mjk4MDUzMTA5MjY0MFowfjELMAkGA1UEBhMCVk4xDjAMBgNVBAgMBUhhbm9pMQ4w
DAYDVQQHDAVIYW5vaTERMA8GA1UECgwITGluYWdvcmExDjAMBgNVBAsMBUphbWVz
MQ0wCwYDVQQDDAR1c2VyMR0wGwYJKoZIhvcNAQkBFg51c2VyQGphbWVzLm9yZzCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMLcZwGu1XOd6P/v+GqlOnef
mH2Y1F0Ge1hRem3+c7//GbRtxXmYyGxW6oKMW7udOPd0bGHCXLk3VH8l08vrSt77
yh44JSvrjvYdMkhqoTpJ63FZL7+ao1iEKaUdkYrbIK8fVumAYYhzroGOG769sAwM
MB9WfP/hHQySXNpwbcq0lvSP6Rq4EqcB7Ulwi/5Yn3kFsXISZj33b88YkxQh5I8U
wQoJrqs6QpgwNBRX5uuWWzeFrWocf54jrWzoRlVwS2w9M5Ur5EZPOtsg7NGKw9Gv
nQorxz/7Ld0YUxboURgMeTkTunj8jSiNtfuBlVIwYBZeHnwwTv7tQxoYS2dCuIcC
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAIOdagiqlQLFR1jNu7owAFeWK52DIIdG/
=====================================================
== File: server/mailet/integration-testing/src/main/resources/smime-test-resource-set/certificate.crt
=====================================================
-----BEGIN CERTIFICATE-----
MIIDiDCCAnACFA13culxEf5FhyuNZUycVScFz2UOMA0GCSqGSIb3DQEBCwUAMIGA
MQswCQYDVQQGEwJWTjEOMAwGA1UECAwFSGFub2kxDjAMBgNVBAcMBUhhbm9pMREw
DwYDVQQKDAhMaW5hZ29yYTEOMAwGA1UECwwFSmFtZXMxDjAMBgNVBAMMBWFkbWlu
MR4wHAYJKoZIhvcNAQkBFg9hZG1pbkBqYW1lcy5vcmcwIBcNMjQwODE1MDkyNjQw
WhgPMjI5ODA1MzEwOTI2NDBaMH4xCzAJBgNVBAYTAlZOMQ4wDAYDVQQIDAVIYW5v
aTEOMAwGA1UEBwwFSGFub2kxETAPBgNVBAoMCExpbmFnb3JhMQ4wDAYDVQQLDAVK
YW1lczENMAsGA1UEAwwEdXNlcjEdMBsGCSqGSIb3DQEJARYOdXNlckBqYW1lcy5v
cmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC3GcBrtVznej/7/hq
pTp3n5h9mNRdBntYUXpt/nO//xm0bcV5mMhsVuqCjFu7nTj3dGxhwly5N1R/JdPL
60re+8oeOCUr6472HTJIaqE6SetxWS+/mqNYhCmlHZGK2yCvH1bpgGGIc66Bjhu+
vbAMDDAfVnz/4R0MklzacG3KtJb0j+kauBKnAe1JcIv+WJ95BbFyEmY992/PGJMU
IeSPFMEKCa6rOkKYMDQUV+brlls3ha1qHH+eI61s6EZVcEtsPTOVK+RGTzrbIOzR
isPRr50KK8c/+y3dGFMW6FEYDHk5E7p4/I0ojbX7gZVSMGAWXh58ME7+7UMaGEtn
QriHAgMBAAEwDQYJKoZIhvcNAQELBQADggEBACDnWoIqpUCxUdYzbu6MABXliudg
yCHRvzRkc8l1h0J7QsLnimhfmV9ujZw+u0dBy722ueToecqMRo3CQhVz/KdGOsXK
mRF5uOk4A6fWEJcpxwVNfHmMz99JUOQFryZlirAAmJVKWQYHBizQX2PSRG8bBA9p
S3GpLgaA9b2ltxE0B/E5GSivIEeA2CwwUjhPBFTxpgdTbEYCDwhLhQ3d68i2jL8/
NuUA+6RlYESJiJuJa6VXinbl3LEjNCGoaw8S+Jln6XMtF+KNpLfiZcY4fA92k18n
YxEYYBYHDk2B457LlknIHHYlAvwVA85a2PfaRuIuEzJtfdui1QHv9JZIKL4=
-----END CERTIFICATE-----
=====================================================
== File: server/mailet/ldap/src/test/resources/ldif-files/populate.ldif
=====================================================
dn: ou=people, dc=james,dc=org
ou: people
objectClass: organizationalUnit
dn: ou=empty, dc=james,dc=org
ou: empty
objectClass: organizationalUnit
dn: ou=groups, dc=james,dc=org
ou: groups
objectClass: organizationalUnit
dn: ou=whatever, dc=james,dc=org
ou: whatever
objectClass: organizationalUnit
dn: uid=james-user, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: james-user
cn: james-user
sn: james-user
mail: james-user@james.org
userPassword: secret
description: abcdef
dn: uid=james-user1, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: james-user1
cn: james-user1
sn: james-user1
mail: james-user1@james.org
userPassword: secret
description: cn=active,ou=accountStatus,ou=whatever,o=gov,c=vn
dn: uid=bob, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: bob
cn: bob
sn: bob
mail: bob@james.org
userPassword: secret
description: Extra user
dn: cn=mygroup,ou=groups, dc=james,dc=org
objectclass: top
objectclass: groupofnames
member: uid=james-user,ou=people,dc=james,dc=org
member: uid=not-found,ou=people,dc=james,dc=org
cn: mygroup
ou: groups
=====================================================
== File: server/mailet/ldap/README.md
=====================================================
# LDAP matchers for Apache James
This project is an extension for Apache James that allows configuring conditions based on LDAP content within Apache
James mailetcontainer.
Those include:
- LDAP conditions based on attributes of the recipients
- LDAP conditions based on attributes of the sender
- LDAP groups of the recipients
Support is planned for LDAP groups both for sender and recipients.
## Set up
Build this project. For the root of the repository:
```bash
mvn clean install -DskipTests --am --pl :james-server-mailet-ldap
```
Then copy the JAR located in `/target` into the `extensions-jars` folder of your Apache James installation.
## Configuration
The LDAP settings are reused from the `usersrepository.xml` configuration file.
Then LDAP matchers can be configured within `mailetcontainer.xml`.
For instance:
```xml
<!-- Matches recipients that have the following attribute with the specified value-->
<mailet matcher="HasLDAPAttribute=description:blocked" class="Null">
</mailet>
```
or
```xml
<!-- Matches sender that have the following attribute with the specified value-->
<mailet matcher="SenderHasLDAPAttribute=description:blocked" class="Null">
</mailet>
```
or
```xml
=====================================================
== File: server/mailet/rate-limiter/extensions.properties
=====================================================
guice.extension.module=org.apache.james.rate.limiter.memory.MemoryRateLimiterModule
=====================================================
== File: server/mailet/rate-limiter/docker-compose.yml
=====================================================
version: '3'
services:
james:
image: apache/james:memory-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- $PWD/target/james-server-rate-limiter-jar-with-dependencies.jar:/root/extensions-jars/james-server-rate-limiter.jar
- $PWD/extensions.properties:/root/conf/extensions.properties
- $PWD/mailetcontainer.xml:/root/conf/mailetcontainer.xml
=====================================================
== File: server/mailet/rate-limiter/README.adoc
=====================================================
= Rate limiting for Apache James
This maven module provide a James extension allowing one to enforce rate limiting for Apache James email processing.
== Running rate limiting with the memory implementation
- 1. Compile this project.
- 2. Place the generated "jar with dependencies" in James `extensions-jars` folder.
- 3. Configure James to use the memory implementation for Rate Limiting by putting the following content within
`extension.properties`:
----
guice.extension.module=org.apache.james.rate.limiter.memory.MemoryRateLimiterModule
----
- 4. Use the rate limiting mailets within `mailetcontainer.xml`
We provide a sample `docker-compose` demonstrating this setup.
== Mailets
=== PerSenderRateLimit
*PerSenderRateLimit* allows defining and enforcing rate limits for the sender of matching emails.
This allows writing rules like:
- A sender can send 10 emails per hour
- A sender can send email to a total of 20 recipients per hour
- A sender can send 100 MB of emails (total computed taking only the email size into account) per hour
- A sender can send 200 MB of emails (total computed taking each recipient copies into account) per hour
Depending on its position and the matcher it is being combined with, those rate limiting rules could be applied to
submitted emails, received emails or emitted email being relayed to third parties.
Here are supported configuration parameters:
- *keyPrefix*: An optional key prefix to apply to rate limiting. Choose distinct values if you specify
this mailet twice within your `mailetcontainer.xml` file. Defaults to none.
- *exceededProcessor*: Processor to which emails whose rate is exceeded should be redirected to. Defaults to error.
Use this to customize the behaviour upon exceeded rate.
- *duration*: Duration during which the rate limiting shall be applied. Compulsory, must be a valid duration of at least one second. Supported units includes s (second), m (minute), h (hour), d (day).
- *precision*: Defines the time precision that will be used to approximate the sliding window. A lower duration increases precision but requests more computing power. The precision must be greater than 1 second. Optional, default to duration means fixed window counters. Supported units includes s (second), m (minute), h (hour), d (day).
- *count*: Count of emails allowed for a given sender during duration. Optional, if unspecified this rate limit is not applied.
- *recipients*: Count of recipients allowed for a given sender during duration. Optional, if unspecified this rate limit is not applied.
- *size*: Size of emails allowed for a given sender during duration (each email count one time, regardless of recipient count). Optional, if unspecified this rate limit is not applied. Supported units : B ( 2^0 ), K ( 2^10 ), M ( 2^20 ), G ( 2^30 ), defaults to B.
- *totalSize*: Size of emails allowed for a given sender during duration (each recipient of the email email count one time). Optional, if unspecified this rate limit is not applied. Supported units : B ( 2^0 ), K ( 2^10 ), M ( 2^20 ), G ( 2^30 ), defaults to B. Note that
totalSize is limited in increments of 2exp(31) - ~2 billions: sending a 10MB file to more than 205 recipients will be rejected if this parameter is enabled.
=====================================================
== File: server/mailet/mailets/src/main/resources/managesieve.help.txt
=====================================================
managesieve implements the commands defined by RFC 5804 ((http://tools.ietf.org/html/rfc5804) to manage sieve scripts via mail messages. A mail is sent to the managesieve user with the command and parameters in the subject header. Sieve scripts are exchanged as mail attachments.
Consult your mail administrator for the name of the managesieve user configured for your installation.
Users MUST be SMTP authenticated to execute all except the CAPABILITY and HELP commands (see note (1) below).
Commands are executed and answered within the namespace of the sending user as denoted by the sender header of the mail. Thus, a command such as LISTSCRIPTS lists the scripts within namespace of the user identified by the sender header.
The supported commands are summarised in "Command Summary" below. Generally the responses are self describing. For full details see RFC 5804 - Commands (http://tools.ietf.org/html/rfc5804#section-2).
In these descriptions the following keywords apply:
- sieve-name
The name of a sieve script enclosed in parentheses, eg: "my script". An empty name is not allowed.
- active-sieve-name
As sieve-name, except an empty name, eg: "", is allowed.
- old-sieve-name
As sieve-name
- new-sieve-name
As sieve-name
- sieve-script
A mail attachment recognised as a sieve script. This is the first attachment in a mail satisfying any of these characteristics:
- A MIME type of "application/sieve"
- A filename with the suffix ".sieve"
- A filename with the suffix ".siv"
Returned sieve-scripts always have the MIME type of "application/sieve"
Command Summary
---------------
CAPABILITY
Subject:
CAPABILITY
Attachments:
none
Answers the capabilities of the underlying sieve inplementation.
CHECKSCRIPT
Subject:
CHECKSCRIPT
Attachments:
sieve-script
Verifies the attached sieve-script without storing it on the server.
DELETESCRIPT
Subject:
DELETESCRIPT sieve-name
Attachments:
none
Deletes the named sieve script.
=====================================================
== File: server/mailet/mailets/src/test/resources/noReplyTo.eml
=====================================================
Return-Path: <root-bounces@listes.apache.org>
Content-Type: multipart/mixed; boundary="----------=_1433322346-12583-0"
MIME-Version: 1.0
From: "Content-filter at spam.apache.org" <postmaster@apache.org>
Date: Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
To: <root@listes.apache.org>
Message-ID: <VASs-IZaXqmZao@spam.apache.org>
Subject: Original subject
X-BeenThere: root@listes.apache.org
Errors-To: root-bounces@listes.apache.org
Sender: "root" <root-bounces@listes.apache.org>
Reply-To: <>
This is a multi-part message in MIME format...
------------=_1433322346-12583-0
Content-Type: text/plain; charset="UTF-8"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit
No viruses were found.
Content type: Unchecked
Internal reference code for the message is 12583-16/Ss-IZaXqmZao
According to a 'Received:' trace, the message apparently originated at:
[198.252.153.129], [127.0.0.1] localhost [127.0.0.1] Authenticated sender:
quentin.h
Return-Path: <quentin.h@apache.org>
From: Quentin <quentin.h@apache.org>
Message-ID: <556EC361.6000308@apache.org>
Subject: XYZ
Not quarantined.
The message WILL BE relayed to:
<xxx@apache.org>
------------=_1433322346-12583-0
Content-Type: text/rfc822-headers; name="header"
Content-Disposition: inline; filename="header"
Content-Transfer-Encoding: 7bit
Content-Description: Message header section
Return-Path: <quentin.h@apache.org>
Message-ID: <556EC361.6000308@apache.org>
Date: Wed, 03 Jun 2015 11:05:37 +0200
From: Quentin <quentin.h@apache.org>
MIME-Version: 1.0
=====================================================
== File: server/mailet/mailets/src/test/resources/brokenReplyTo.eml
=====================================================
Return-Path: <root-bounces@listes.minet.net>
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
Wed, 03 Jun 2015 11:05:45 +0200
X-Sieve: CMU Sieve 2.4
Reply-To: <invalid@domain.com
Received: from smtp.minet.net (smtp.minet.net [192.168.102.18])
by mx1.minet.net (Postfix) with ESMTP id F06FE610F72;
Wed, 3 Jun 2015 11:05:48 +0200 (CEST)
Received: from listes.minet.net (listes.minet.net [192.168.102.29])
by smtp.minet.net (Postfix) with ESMTP id AAB15610F70;
Wed, 3 Jun 2015 09:05:48 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=minet.net; s=mail;
t=1433322348; bh=8OtmVRMX7IWWyQo8WQIi5rKeDEQFghSX2r1WN9/pqUk=;
h=From:Date:To:Subject:List-Id:List-Unsubscribe:List-Post:List-Help:
List-Subscribe:From;
b=UkthSFXn5mtPnn7sYvDJIxgCk1O36L0p+hTOnI/xTF2WRMGJyXtLyCdFdE5jQ5gE4
EGNdhwmfjaKsoE7IDtc/4GrPvbnM8i9ojpSOBW1hXJPOeYnRgah/4gsXsMJWvmmq/A
4oTnw8ZswFXiShDmBMyaSEZuVrWTdaPBgUhVhGw8=
Received: from listes.minet.net (listes.minet.net [127.0.0.1])
by listes.minet.net (Postfix) with ESMTP id 9CD5BA27FF9;
Wed, 3 Jun 2015 09:05:48 +0000 (UTC)
X-Original-To: root@listes.minet.net
Delivered-To: root@listes.minet.net
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
by listes.minet.net (Postfix) with ESMTP id B8C1FA27FEF
for <root@listes.minet.net>; Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
Received: from localhost (spam.minet.net [192.168.102.97])
by mx1.minet.net (Postfix) with ESMTP id AD28B610F6D
for <root@listes.minet.net>; Wed, 3 Jun 2015 11:05:46 +0200 (CEST)
Content-Type: multipart/mixed; boundary="----------=_1433322346-12583-0"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
From: "Content-filter at spam.minet.net" <postmaster@minet.net>
Date: Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
To: <root@listes.minet.net>
Message-ID: <VASs-IZaXqmZao@spam.minet.net>
Subject: Original subject
X-BeenThere: root@listes.minet.net
X-Mailman-Version: 2.1.15
Errors-To: root-bounces@listes.minet.net
Sender: "root" <root-bounces@listes.minet.net>
This is a multi-part message in MIME format...
------------=_1433322346-12583-0
Content-Type: text/plain; charset="UTF-8"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit
=====================================================
== File: server/mailet/mailets/src/test/resources/spamMail.eml
=====================================================
Return-Path: <root-bounces@listes.minet.net>
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
Wed, 03 Jun 2015 11:05:45 +0200
X-Sieve: CMU Sieve 2.4
Received: from smtp.minet.net (smtp.minet.net [192.168.102.18])
by mx1.minet.net (Postfix) with ESMTP id F06FE610F72;
Wed, 3 Jun 2015 11:05:48 +0200 (CEST)
Received: from listes.minet.net (listes.minet.net [192.168.102.29])
by smtp.minet.net (Postfix) with ESMTP id AAB15610F70;
Wed, 3 Jun 2015 09:05:48 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=minet.net; s=mail;
t=1433322348; bh=8OtmVRMX7IWWyQo8WQIi5rKeDEQFghSX2r1WN9/pqUk=;
h=From:Date:To:Subject:List-Id:List-Unsubscribe:List-Post:List-Help:
List-Subscribe:From;
b=UkthSFXn5mtPnn7sYvDJIxgCk1O36L0p+hTOnI/xTF2WRMGJyXtLyCdFdE5jQ5gE4
EGNdhwmfjaKsoE7IDtc/4GrPvbnM8i9ojpSOBW1hXJPOeYnRgah/4gsXsMJWvmmq/A
4oTnw8ZswFXiShDmBMyaSEZuVrWTdaPBgUhVhGw8=
Received: from listes.minet.net (listes.minet.net [127.0.0.1])
by listes.minet.net (Postfix) with ESMTP id 9CD5BA27FF9;
Wed, 3 Jun 2015 09:05:48 +0000 (UTC)
X-Original-To: root@listes.minet.net
Delivered-To: root@listes.minet.net
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
by listes.minet.net (Postfix) with ESMTP id B8C1FA27FEF
for <root@listes.minet.net>; Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
Received: from localhost (spam.minet.net [192.168.102.97])
by mx1.minet.net (Postfix) with ESMTP id AD28B610F6D
for <root@listes.minet.net>; Wed, 3 Jun 2015 11:05:46 +0200 (CEST)
Content-Type: multipart/mixed; boundary="----------=_1433322346-12583-0"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
From: "Content-filter at spam.minet.net" <postmaster@minet.net>
Date: Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
To: <root@listes.minet.net>
Message-ID: <VASs-IZaXqmZao@spam.minet.net>
Subject: Original subject
X-BeenThere: root@listes.minet.net
X-Mailman-Version: 2.1.15
Errors-To: root-bounces@listes.minet.net
Sender: "root" <root-bounces@listes.minet.net>
This is a multi-part message in MIME format...
------------=_1433322346-12583-0
Content-Type: text/plain; charset="UTF-8"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit
No viruses were found.
=====================================================
== File: server/mailet/mailets/src/test/resources/eml/gmail.eml
=====================================================
Return-Path: <aduprat@linagora.com>
Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (aduprat@linagora.com)
To: =?UTF-8?Q?Beno=c3=aet_TELLIER?=
<tellier@linagora.com>
From: aduprat <duprat@linagora.com>
X-Forwarded-Message-Id: <001a114380a6a260d105467765ab@google.com>
Message-ID: <f18fa52e-2e9d-1125-327d-2100b23f8a6b@linagora.com>
Date: Thu, 19 Jan 2017 20:36:37 +0100
MIME-Version: 1.0
In-Reply-To: <001a114380a6a260d105467765ab@google.com>
Content-Type: multipart/mixed;
boundary="------------17D96D411CBD55D8239A8C1F"
This is a multi-part message in MIME format.
--------------17D96D411CBD55D8239A8C1F
Content-Type: multipart/alternative;
boundary="------------64D716A3DDAEC185D3E67448"
--------------64D716A3DDAEC185D3E67448
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
-------- Message transéré --------
Sujet : Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (duprat@linagora.com)
Date : Thu, 19 Jan 2017 19:18:23 +0000
De : Antoine Duprat <duprat@gmail.com>
Répondre à : antduprat@gmail.com
Pour : aduprat@linagora.com
--------------64D716A3DDAEC185D3E67448
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p><br>
</p>
=====================================================
== File: server/mailet/mock-smtp-server/README.adoc
=====================================================
= James Mock SMTP server
This is our custom made Mock SMTP server that we use for some of our tests in James.
== Dockerized Mock SMTP server
Compile and build the image into a tarball with maven:
$ mvn compile jib:buildTar
*Note* : You can add the option '-DskipTests' if you want to skip tests
After Jib created the image, you can load it into Docker with:
$ docker load --input target/jib-image.tar
You can alternatively directly build your image directly to a Docker daemon. To to so:
$ mvn compile jib:dockerBuild
Then run it with:
$ docker run --rm -p 25:25 -p 8000:8000 linagora/mock-smtp-server
Where ports:
* 25 : SMTP
* 8000 : HTTP interface for setting mock SMTP server behavior
Then you can use the http endpoints. Let's demonstrate them via the standard unix `curl` command.
Right after startup, the server should have no emails, no behaviors.
----
$ curl -X GET localhost:8000/smtpBehaviors
[]
$ curl -X GET localhost:8000/smtpMails
[]
$ curl -X GET localhost:8000/smtpMailsCount
0
$
----
Given you send an email on port 25, the counter updates to 1 and you're able to observe the email
via the smtpMails endpoint.
----
$ cat mail.txt
From: Alice
To: Bob
=====================================================
== File: server/mailet/mock-smtp-server/src/main/jib/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
</appender>
<root level="WARN">
<appender-ref ref="ASYNC" />
</root>
<logger name="org.apache.james.mock.smtp.server" level="DEBUG"/>
<logger name="org.subethamail.smtp" level="DEBUG"/>
</configuration>
=====================================================
== File: server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConfigurationClientTest.java
=====================================================
/****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one *
* or more contributor license agreements. See the NOTICE file *
* distributed with this work for additional information *
* regarding copyright ownership. The ASF licenses this file *
* to you under the Apache License, Version 2.0 (the *
* "License"); you may not use this file except in compliance *
* with the License. You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE2.0 *
* *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
* KIND, either express or implied. See the License for the *
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
package org.apache.james.mock.smtp.server;
import static org.apache.james.mock.smtp.server.Fixture.BEHAVIOR_LIST;
import static org.assertj.core.api.Assertions.assertThat;
import org.apache.james.core.MailAddress;
import org.apache.james.mock.smtp.server.Fixture.MailsFixutre;
import org.apache.james.mock.smtp.server.model.Mail;
import org.apache.james.mock.smtp.server.model.SMTPExtension;
import org.apache.james.mock.smtp.server.model.SMTPExtensions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import com.google.common.collect.ImmutableList;
class ConfigurationClientTest {
private ConfigurationClient testee;
private HTTPConfigurationServer.RunningStage server;
private SMTPBehaviorRepository behaviorRepository;
private ReceivedMailRepository mailRepository;
@BeforeEach
void setUp() {
behaviorRepository = new SMTPBehaviorRepository();
mailRepository = new ReceivedMailRepository();
server = HTTPConfigurationServer.onRandomPort(behaviorRepository, mailRepository)
.start();
testee = ConfigurationClient.fromServer(server);
}
=====================================================
== File: server/container/filesystem-api/src/test/resources/classpathTest.txt
=====================================================
Non empty
=====================================================
== File: server/container/filesystem-api/src/test/resources/class path Test.txt
=====================================================
Non empty
=====================================================
== File: server/container/core/src/test/resources/JAMES-1593.eml
=====================================================
Return-Path: <c@yahoo.com>
Received: from 10.6.1.81 (EHLO ws1.comp.us/127.0.0.1) ([10.6.1.81])
by ws1.comp.us (JAMES SMTP Server ) with ESMTP ID 273836343
for <s@yahoo.com>;
Fri, 10 Jul 2015 19:30:01 +0000 (UTC)
Delivered-To: d@f.com
Received: from 10.6.1.53 (EHLO egate3.comp.us) ([10.6.1.53])
by ws1.comp.us (JAMES SMTP Server ) with ESMTP ID 18268234
for <d@f.com>;
Wed, 08 Jul 2015 19:35:41 +0000 (UTC)
Received: from nm2-vm2.bullet.mail.ne1.yahoo.com (nm2-vm2.bullet.mail.ne1.yahoo.com [98.138.91.18])
(using TLSv1 with cipher RC4-SHA (128/128 bits))
(No client certificate requested)
by egate3.comp.us (Postfix) with ESMTPS id 5CA816007B
for <d@f.com>; Wed, 8 Jul 2015 19:35:28 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1436384127; bh=FSXIN3+naGGGcYCXqSW4VRdVxpAgX6l36HzbsAmcUMs=; h=To:Date:From:Subject:From:Subject; b=aoCPczTdZENebjurWW5X8+IOGzgTp2AJ2TF0Cg5Zr0wCGPnNa3pzLN7XtpcCkQAaHpzpvSn/WLxVosJiV9ylnDyFTJg/i+ik1937k2LTaCP7Dc9bjqLSrZAjFd+u2YalXanSOXrKIz6L05xrwEeIgBV+IvarvleEZ4/mSRtAwKJJ2w8nZOKX1hxJ1uN/rYMUAhNaNnafHKZ9ZTj6Bb2PWQLKylHy98dq48PJYOe757Ns3I5DhxyS1swVvuNv7ROj1ix+wIK5vgchMliF5C50IAF4HZ9GZwlBCSUUV6C0fiyp7p2MbtDO1cdNGzUUAyrSt9UiwBX/OyIkPcya7Bzxjg==
Received: from [98.138.226.176] by nm2.bullet.mail.ne1.yahoo.com with NNFMP; 08 Jul 2015 19:35:27 -0000
Received: from [98.138.226.56] by tm11.bullet.mail.ne1.yahoo.com with NNFMP; 08 Jul 2015 19:35:27 -0000
Received: from [127.0.0.1] by smtp207.mail.ne1.yahoo.com with NNFMP; 08 Jul 2015 19:35:27 -0000
X-Yahoo-Newman-Id: 948689.21253.bm@smtp207.mail.ne1.yahoo.com
Message-ID: <948689.21253.bm@smtp207.mail.ne1.yahoo.com>
X-Yahoo-Newman-Property: ymail-5
X-YMail-OSG: PKdW3f0VM1mqo5bJtNcAn9nrmSrO6somPjt3dkTFZefq.k9
8mtErk2hfr0pzo.g4.3D1TYDy1yPA52CEt1K7yWtY4G54.wVaqrTbNsp1SHi
YOVrR_WNprH82OItTUXOWs4b6tIZjrnQwhvgiYNQ0v0y.5mavYexI7V7vHjE
AQau2gFnHDMI4VkGKk5VtkVYo7m9kyLljxFn6JBpDfm2BHCQ6nB44vr_KEGb
fu4siLPPBgE3DD2x1jPSgZuePniFPh94ohDe_ZDsbYXPM4Fy1udmEuial5Me
lrgOmh8mjeybAFdj_y4kbpHb.xjlxg_AgrZEY5LjdL2_xp8JljEZyvKo5ccA
CTVQSOEe5m8qlhRIWMGLqqp3DLOBwgQ4lKfOXyt3.MaFgClF1yPm5aSFxG.g
O52rSXRe9QwcFLgeLk3U6h2fuUGnH4Ejw75ni0rPKFEBQn9y0X3vVtjgQPbc
K3fZUXI48vD3IjhR4ZdnoRfuJDmdgjmV_MbGVQ_IglrFNWe5dKb0WmCr455A
E.B_E_RcROdsq06R72Be7Nap1ySUo
X-Yahoo-SMTP: P5ZpI6KswBDOCixizgOFZTojz9DhLg.Dm91rJ0th
To: <d@f.com>
Date: Wed, 8 Jul 2015 12:35:24 -0700
From: =?UTF-8?B?QmV2ZXJseSBIaWxscyBNRA0==?= <c@yahoo.com>
Subject: =?ISO-8859-1?Q?How=20to=20lift=20saggy=20skin,=20without=20surgery=20(Video)?=
Msg-Id: <993367577.OlyOp7onoD1vcPAHU+z/IXX2rD.secm@nycaptrentals.com>
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_0000_047F21AD.5CEFB1C0"
Content-Transfer-Encoding: "base64"
X-comp-Information: Please contact administrator@comp.com for more information
X-comp-ID: 5CA816007B.A1BA5
X-comp-general: Clean
X-comp-SpamCheck: spam, SpamAssassin (not cached, score=12.4,
required 3, autolearn=disabled, BASE64_LENGTH_79_INF 2.02,
BODY_URI_ONLY 1.00, DKIM_ADSP_CUSTOM_MED 0.00, DKIM_SIGNED 0.10,
FREEMAIL_FROM 0.00, FROM_EXCESS_BASE64 0.10, HTML_IMAGE_ONLY_12 1.63,
HTML_MESSAGE 0.00, HTML_SHORT_LINK_IMG_1 0.14, MIME_HTML_MOSTLY 0.00,
=====================================================
== File: server/container/core/src/test/resources/invalid.eml
=====================================================
From: XXXX <xxxx@govmu.org>
Message-Id: <343A4DE5-9329-4487-A570-29A91E669CB9@govmu.org>
Content-Type: multipart/alternative;
boundary="Apple-Mail=_F2D44D4D-8BA8-476D-B874-23E3A91AB142"
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3826.400.131.1.6\))
Subject: YYYY
Date: Wed, 5 Feb 2025 10:28:42 +0400
X-Mailer: Apple Mail (2.3826.400.131.1.6)
--Apple-Mail=_F2D44D4D-8BA8-476D-B874-23E3A91AB142
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=utf-8
This email (including any attachments) is intended for the person to =
whom it is addressed. If you are not the addressee or have received this =
email in error, please notify the sender immediately, delete it from =
your system and do not copy, disclose or otherwise act upon it. Click =
Here <https://www.sicom.mu/en/email-disclaimer> to consult the full =
disclaimer.
--Apple-Mail=_F2D44D4D-8BA8-476D-B874-23E3A91AB142
Content-Type: multipart/related;
type="text/html";
boundary="Apple-Mail=_E197F722-9914-4A5D-854C-81A1C1BED428"
--Apple-Mail=_E197F722-9914-4A5D-854C-81A1C1BED428
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
charset=utf-8
href=3D"https://www.sicom.mu/en/email-disclaimer" target=3D"_blank"><span =
style=3D"color: rgb(51, 153, 255);">Click Here</span></a></u><span =
class=3D"Apple-converted-space"> </span>to consult the full =
disclaimer.</span></div></div></blockquote></div><br></div></div></body></=
html>=
--Apple-Mail=_E197F722-9914-4A5D-854C-81A1C1BED428
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename=Outlook-vehhhgpe.png
Content-Type: image/png;
x-unix-mode=0666;
name="Outlook-vehhhgpe.png"
Content-Id: <8175aa72-15e0-4f9b-b5d4-fe005f7490ad>
iVBORw
=====================================================
== File: server/container/core/src/test/resources/mail-containing-unicode-characters.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
by james-0 (JAMES SMTP Server ) with ESMTP ID -1705393842
for <bob@james.james.org>;
Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
by incoming.james.org (Postfix) with ESMTPS id CCCA943
for <bob@james.james.org>; Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.james.org (Postfix) with ESMTPSA id 2B7D13F393
for <bob@james.org>; Wed, 22 Jan 2020 05:11:53 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: quoted
Message-ID: <f4d046a8-e563-1e92-dbd9-c5038603e3a2@james.org>
Date: Wed, 22 Jan 2020 11:11:38 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
Thunderbird/60.2.1
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US
Unicode €uro symbol.
=====================================================
== File: server/container/guice/memory/README.md
=====================================================
# James Memory server
In order to build both the ZIP and docker packaging, run:
```
mvn clean install -DskipTests
```
## ZIP distribution
Available in `target` directory, the ZIP include detailed instructions.
## Docker distribution
To import the image locally:
```
docker image load -i target/jib-image.tar
```
Then run it:
```
docker run apache/james:memory-latest
```
For security reasons you are required to generate your own keystore, that you can mount into the container via a volume:
```
keytool -genkey -alias james -keyalg RSA -keystore keystore
docker run -v $PWD/keystore:/root/conf/keystore apache/james:cassandra-latest
```
Use the [JAVA_TOOL_OPTIONS environment option](https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#jvm-flags)
to pass extra JVM flags. For instance:
```
docker run -e "JAVA_TOOL_OPTIONS=-Xmx500m -Xms500m" apache/james:memory-latest
```
[Glowroot APM](https://glowroot.org/) is packaged as part of the docker distribution to easily enable valuable performances insights.
Disabled by default, its java agent can easily be enabled:
```
docker run -e "JAVA_TOOL_OPTIONS=-javaagent:/root/glowroot.jar" apache/james:memory-latest
```
The [CLI](https://james.apache.org/server/manage-cli.html) can easily be used:
```
=====================================================
== File: server/container/guice/configuration/src/test/resources/b.properties
=====================================================
prop=value2
=====================================================
== File: server/container/guice/configuration/src/test/resources/a.properties
=====================================================
prop=value1
keyByList=value1, value2, value3, value4, value5
thisIsEmpty=
=====================================================
== File: server/container/guice/configuration/src/test/resources/env.properties
=====================================================
keyByEnv=${env:PROPERTIES_PROVIDER_ENV_VARIABLES}
=====================================================
== File: server/container/guice/common/src/test/resources/eml/mail-containing-unicode-characters.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
by james-0 (JAMES SMTP Server ) with ESMTP ID -1705393842
for <bob@james.james.org>;
Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
by incoming.james.org (Postfix) with ESMTPS id CCCA943
for <bob@james.james.org>; Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.james.org (Postfix) with ESMTPSA id 2B7D13F393
for <bob@james.org>; Wed, 22 Jan 2020 05:11:53 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: quoted
Message-ID: <f4d046a8-e563-1e92-dbd9-c5038603e3a2@james.org>
Date: Wed, 22 Jan 2020 11:11:38 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
Thunderbird/60.2.1
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US
Unicode €uro symbol.
=====================================================
== File: server/container/guice/common/src/test/resources/test.properties
=====================================================
# Configuration file for cassandra mailbox
cassandra.nodes=127.0.0.1:9142
cassandra.keyspace=apache_james
cassandra.replication.factor=1
=====================================================
== File: server/container/guice/protocols/webadmin/src/test/resources/webadmin-two.properties
=====================================================
extensions.routes=org.apache.custom.webadmin.CustomRoute,org.apache.custom.webadmin.AnotherCustomRoute
=====================================================
== File: server/container/guice/protocols/webadmin/src/test/resources/webadmin-one.properties
=====================================================
extensions.routes=org.apache.custom.webadmin.CustomRoute
=====================================================
== File: server/container/guice/protocols/webadmin/src/test/resources/webadmin-empty.properties
=====================================================
extensions.routes=
=====================================================
== File: server/container/guice/protocols/webadmin/src/test/resources/webadmin-none.properties
=====================================================
=====================================================
== File: server/container/guice/utils/src/test/resources/extensions-empty.properties
=====================================================
guice.extension.module=
=====================================================
== File: server/container/guice/utils/src/test/resources/extensions-two.properties
=====================================================
guice.extension.module=org.apache.custom.extensions.CustomExtension,org.apache.custom.extension.AnotherCustomExtension
=====================================================
== File: server/container/guice/utils/src/test/resources/extensions-none.properties
=====================================================
=====================================================
== File: server/container/guice/utils/src/test/resources/extensions-one.properties
=====================================================
guice.extension.module=org.apache.custom.extensions.CustomExtension
=====================================================
== File: server/container/guice/testing/custom-mailets/README.md
=====================================================
# How to
This project is used to generate custom mailet / matcher used in unit tests of the underlying Guice project.
This associated JAR is in the test resources.
Run:
```
mvn clean install
```
And overwrite it in *server/container/guice/mailet/src/test/resources/recursive/extensions-jars/\*.jar* to update it.
=====================================================
== File: server/container/guice/cassandra/src/test/resources/modules/mailbox/cassandra.properties
=====================================================
mailbox.max.retry.acl=1
mailbox.max.retry.modseq=2
mailbox.max.retry.uid=3
mailbox.max.retry.message.flags.update=4
mailbox.max.retry.message.id.flags.update=5
fetch.advance.row.count=6
chunk.size.message.read=7
chunk.size.expunge=8
mailbox.blob.part.size=9
attachment.v2.migration.read.timeout=10
message.attachmentids.read.timeout=11
=====================================================
== File: server/container/mailbox-jmx/src/test/resources/eml/frnog.eml
=====================================================
Message-ID: <556D7ED7.2090108>
Date: Tue, 2 Jun 2015 12:00:55 +0200
From: sender <sender@domain.com>
MIME-Version: 1.0
To: <list@james.org>
Content-Type: text/plain; charset="utf-8"; format=flowed
Content-Transfer-Encoding: 8bit
Bonjour
Je cherche un partenaire.
Merci d'avance !
Cordialement,
=====================================================
== File: server/data/data-library/src/test/resources/sieve/my_sieve
=====================================================
require ["reject"];
if size :over 100K {
reject "Email too big";
}
=====================================================
== File: server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature
=====================================================
Feature: Rewrite Tables tests
@readonly
Scenario: rewrite tables should be empty when none defined
Then mappings should be empty
# Regexp mapping
Scenario: stored regexp mapping should be retrieved when one mapping matching
Given store "(.*)@localhost:user@localhost" regexp mapping for user "test" at domain "localhost"
Then mappings for user "test" at domain "localhost" should contain only "user@localhost"
Scenario: stored regexp mapping should be retrieved when two mappings matching
Given store "(.*)@localhost:user@localhost" regexp mapping for user "test" at domain "localhost"
And store "tes(.+)@localhost:user2@localhost" regexp mapping for user "test" at domain "localhost"
Then mappings for user "test" at domain "localhost" should contain only "user@localhost, user2@localhost"
Scenario: stored regexp mapping should not be retrieved by another user
Given store "(.*)@localhost:user@localhost" regexp mapping for user "test" at domain "localhost"
And store "tes(.+)@localhost:user2@localhost" regexp mapping for user "test" at domain "localhost"
Then mappings for user "test2" at domain "localhost" should be empty
Scenario: removing a stored regexp mapping should work
Given store "(.*)@localhost:user@localhost" regexp mapping for user "test" at domain "localhost"
And store "tes(.+)@localhost:user2@localhost" regexp mapping for user "test" at domain "localhost"
When user "test" at domain "localhost" removes a regexp mapping "tes(.+)@localhost:user2@localhost"
Then mappings for user "test" at domain "localhost" should contain only "user@localhost"
Scenario: storing an invalid regexp mapping should not work
When store an invalid ".*):" regexp mapping for user "test" at domain "localhost"
Then a "InvalidRegexException" exception should have been thrown
Scenario: storing a wrong formatted regexp mapping should not be retrieved
Given store "(.*)@localhost" regexp mapping for user "test" at domain "localhost"
Then mappings for user "test" at domain "localhost" should be empty
Scenario: chained stored regexp mapping should be retrieved when two levels
Given store "(.*)@localhost:user@localhost" regexp mapping for user "test" at domain "localhost"
And store "use(.+)@localhost:final@localhost" regexp mapping for user "user" at domain "localhost"
Then mappings for user "test" at domain "localhost" should contain only "final@localhost"
# Address mapping
Scenario: stored address mapping should be retrieved when one mapping matching
Given store "test@localhost2" address mapping for user "test" at domain "localhost"
Then mappings for user "test" at domain "localhost" should contain only "test@localhost2"
Scenario: stored address mapping should be retrieved when two mappings matching
Given store "test@localhost2" address mapping for user "test" at domain "localhost"
And store "test@james" address mapping for user "test" at domain "localhost"
=====================================================
== File: server/data/data-postgres/src/test/resources/log4j.properties
=====================================================
log4j.rootLogger=WARN, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
=====================================================
== File: server/data/data-postgres/pom.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.james</groupId>
<artifactId>james-server</artifactId>
<version>3.10.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>james-server-data-postgres</artifactId>
<name>Apache James :: Server :: Data :: Postgres</name>
<dependencies>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-backends-postgres</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-backends-postgres</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>blob-api</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>blob-memory</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-core</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-data-api</artifactId>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-data-api</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
=====================================================
== File: server/data/data-ldap/src/test/resources/usersrepository-enableVirtualHosting.xml
=====================================================
<usersrepository name="LocalUsers" class="org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository"
ldapHost="ldap://myldapserver:389"
principal="uid=ldapUser,ou=system"
credentials="password"
userBase="ou=People,o=myorg.com,ou=system"
userIdAttribute="uid"
userObjectClass="person">
<enableVirtualHosting>true</enableVirtualHosting>
</usersrepository>
=====================================================
== File: server/data/data-ldap/src/test/resources/invalid/ldif-files/populate.ldif
=====================================================
dn: ou=people, dc=james,dc=org
ou: people
objectClass: organizationalUnit
dn: uid=james-user, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: james-user
cn: james-user
sn: james-user
userPassword: secret
description: James user
=====================================================
== File: server/data/data-ldap/src/test/resources/localpartLogin/ldif-files/populate.ldif
=====================================================
dn: ou=people, dc=james,dc=org
ou: people
objectClass: organizationalUnit
dn: ou=empty, dc=james,dc=org
ou: empty
objectClass: organizationalUnit
dn: ou=whatever, dc=james,dc=org
ou: whatever
objectClass: organizationalUnit
dn: uid=james-user, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: james-user
cn: james-user
sn: james-user
mail: james-user@james.org
userPassword: secret
description: James user
dn: uid=james-user-app1, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: james-user-app1
cn: james-user
sn: james-user
mail: james-user@james.org
userPassword: secret
description: James user App 1
dn: uid=james-user-app2, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: james-user-app2
cn: james-user
sn: james-user
mail: james-user@james.org
userPassword: secret
description: James user App 2
dn: uid=alice, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: alice
cn: alice-cn
sn: alice-sn
mail: alice@james.org
userPassword: secret
description: Alice user
dn: uid=alice-app1, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
=====================================================
== File: server/data/data-ldap/src/test/resources/ldif-files/populate.ldif
=====================================================
dn: ou=people, dc=james,dc=org
ou: people
objectClass: organizationalUnit
dn: ou=empty, dc=james,dc=org
ou: empty
objectClass: organizationalUnit
dn: ou=whatever, dc=james,dc=org
ou: whatever
objectClass: organizationalUnit
dn: uid=james-user, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: james-user
cn: james-user
sn: james-user
mail: james-user@james.org
userPassword: secret
description: James user
dn: uid=bob, ou=whatever, dc=james,dc=org
objectClass: inetOrgPerson
uid: bob
cn: bob
sn: bob
mail: bob@extra.org
userPassword: secret
description: bob user
=====================================================
== File: server/data/data-ldap/src/test/resources/usersrepository-supportsVirtualHosting.xml
=====================================================
<usersrepository name="LocalUsers" class="org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository"
ldapHost="ldap://myldapserver:389"
principal="uid=ldapUser,ou=system"
credentials="password"
userBase="ou=People,o=myorg.com,ou=system"
userIdAttribute="uid"
userObjectClass="person">
<supportsVirtualHosting>true</supportsVirtualHosting>
</usersrepository>
=====================================================
== File: server/data/data-ldap/src/test/resources/usersrepository-default.xml
=====================================================
<usersrepository name="LocalUsers" class="org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository"
ldapHost="ldap://myldapserver:389"
principal="uid=ldapUser,ou=system"
credentials="password"
userBase="ou=People,o=myorg.com,ou=system"
userIdAttribute="uid"
userObjectClass="person">
</usersrepository>
=====================================================
== File: server/data/data-jpa/src/test/resources/log4j.properties
=====================================================
log4j.rootLogger=WARN, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
=====================================================
== File: server/data/data-file/src/test/resources/org/apache/james/mailrepository/testdata/Inbox
=====================================================
From - Sat Sep 16 14:01:26 2006
X-Account-Key: account4
X-UIDL: Mail1158408075937-0
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Message-ID: <12617107.11158408076390.JavaMail.maurer@byteacti-757792>
MIME-Version: 1.0
Return-Path: <nm@localhost>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Delivered-To: test@localhost
Received: from localhost ([127.0.0.1])
by byteacti-757792 (JAMES SMTP Server 3.0-dev) with SMTP ID 842
for <test@localhost>;
Sat, 16 Sep 2006 14:01:14 +0200 (CEST)
Date: Sat, 16 Sep 2006 14:01:14 +0200 (CEST)
From: nm@localhost
invalid
test: test
test
From - Sat Sep 16 14:02:40 2006
X-Account-Key: account4
X-UIDL: Mail1158408158171-1
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Message-ID: <3534544.31158408158203.JavaMail.maurer@byteacti-757792>
MIME-Version: 1.0
Return-Path: <nm@localhost>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Delivered-To: test@localhost
Received: from localhost ([127.0.0.1])
by byteacti-757792 (JAMES SMTP Server 3.0-dev) with SMTP ID 317
for <test@localhost>;
Sat, 16 Sep 2006 14:02:38 +0200 (CEST)
Date: Sat, 16 Sep 2006 14:02:38 +0200 (CEST)
From: nm@localhost
testmail
test: test
test
=====================================================
== File: server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/UploadUsageRepositoryContract.scala
=====================================================
package org.apache.james.jmap.api.upload
import org.apache.james.core.Username
import org.apache.james.core.quota.QuotaSizeUsage
import org.apache.james.jmap.api.upload.UploadUsageRepositoryContract.USER_NAME
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import reactor.core.publisher.Mono
import reactor.core.scala.publisher.SMono
object UploadUsageRepositoryContract {
val USER_NAME = Username.of("james@abc.com")
}
trait UploadUsageRepositoryContract {
def uploadUsageRepository: UploadUsageRepository
def resetCounterToZero(): Unit = {
Mono.from(uploadUsageRepository.resetSpace(USER_NAME, QuotaSizeUsage.size(0))).block
}
@Test
def increaseSpaceShouldIncreaseSuccessfully(): Unit = {
SMono.fromPublisher(uploadUsageRepository.increaseSpace(USER_NAME, QuotaSizeUsage.size(100))).block()
val expected = SMono.fromPublisher(uploadUsageRepository.getSpaceUsage(USER_NAME)).block()
assertThat(expected.asLong()).isEqualTo(100)
}
@Test
def decreaseSpaceShouldDecreaseSuccessfully(): Unit = {
SMono.fromPublisher(uploadUsageRepository.increaseSpace(USER_NAME, QuotaSizeUsage.size(200))).block()
SMono.fromPublisher(uploadUsageRepository.decreaseSpace(USER_NAME, QuotaSizeUsage.size(100))).block()
val expected = SMono.fromPublisher(uploadUsageRepository.getSpaceUsage(USER_NAME)).block()
assertThat(expected.asLong()).isEqualTo(100)
}
@Test
def resetSpaceShouldResetSuccessfully(): Unit = {
SMono.fromPublisher(uploadUsageRepository.increaseSpace(USER_NAME, QuotaSizeUsage.size(200))).block()
SMono.fromPublisher(uploadUsageRepository.resetSpace(USER_NAME, QuotaSizeUsage.size(99))).block()
val expected = SMono.fromPublisher(uploadUsageRepository.getSpaceUsage(USER_NAME)).block()
assertThat(expected.asLong()).isEqualTo(99)
}
@Test
def getSpaceUsageShouldReturnZeroWhenRecordDoesNotExist(): Unit = {
assertThat(SMono.fromPublisher(uploadUsageRepository.getSpaceUsage(Username.of("aaa"))).block().asLong()).isEqualTo(0)
}
}
=====================================================
== File: server/grafana-reporting/prometheus-datasource/README.md
=====================================================
# Dashboards for James on top of Prometheus / Grafana
The boards are slightly different than what we used to do with ES reporter, as we
count now on Prometheus to scrap metrics from the /metrics endpoint exposed from James.
This is just a rough conversion for starters, it will likely need more refining over time.
# Grafana reporting
This is a collection of Grafana dashboards to display James metrics.
## Expose metrics for Prometheus collection
To enable James metrics, add ``extensions.routes`` to [webadmin.properties]( https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/webadmin.adoc) file:
```
extensions.routes=org.apache.james.webadmin.dropwizard.MetricsRoutes
```
## Configure Prometheus Data source
You need to set up [Prometheus](https://prometheus.io/docs/prometheus/latest/getting_started/) first to scrape James metrics.\
Add Apache James WebAdmin Url or IP address to `prometheus.yaml` configuration file.
```
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'WebAdmin url Example'
scrape_interval: 5s
metrics_path: /metrics
static_configs:
- targets: ['james-webamin-url']
- job_name: 'WebAdmin IP Example'
scrape_interval: 5s
metrics_path: /metrics
static_configs:
- targets: ['192.168.100.10:8000']
```
For Kubernetes deployment, we recommend using Prometheus `ServiceMonitor` to collect James metrics through James Webadmin service. Please see our James Helm-chart for more information.
## Connect Data source to Grafana
Add Prometheus data source to Grafana.\
You can do this either from [Grafana UI](https://prometheus.io/docs/visualization/grafana/) or from a [configuration file](https://grafana.com/docs/grafana/latest/datasources/prometheus/).
The following `docker-compose.yaml` will help you install a simple Prometheus/ Grafana stack :
```
version: '3'
#Metric monitoring
grafana:
image: grafana/grafana:latest
=====================================================
== File: server/grafana-reporting/es-datasource/README.md
=====================================================
# Grafana reporting
This is a collection of Grafana dashboards to display James metrics.
## Run Grafana
The following command allow you to run a fresh grafana server :
```
docker run -i -p 3000:3000 grafana/grafana
```
## Configure a data source
Once running, you need to set up an [ElasticSearch data-source](https://grafana.com/docs/grafana/latest/datasources/elasticsearch/).
You can do this either from UI or from a configuration file.
## Setting up via UI
- name it DS_JAMES_ES
- select proxy mode
- Select version 6.x of ElasticSearch
- make the URL point your ES node
- Specify the index name. By default, it should be :
```
[james-metrics-]YYYY-MM
```
## Setting up using a configuration file
Look up file grafana-datasource.yaml from Grafana and add following data source into it:
```
apiVersion: 1
datasources:
- name: DS_JAMES_ES
type: elasticsearch
access: proxy
database: "[james-metrics-]YYYY-MM"
url: http://elasticsearch:9200
version: 6
editable: true
jsonData:
interval: Daily
timeField: "@timestamp"
```
## Getting dashboards
Import the different dashboard JSON files in this directory to Grafana via UI
=====================================================
== File: mailet/icalendar/src/test/resources/ics_in_header.eml
=====================================================
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_80_888179120.1536742699653"
From: Alice <alice@linagora.com>
Message-ID: <82eb227b-d3e1-3d7a-3220-8a1b4e96a85b@linagora.com>
To: Bob <bob@linagora.com>
Date: Wed, 12 Sep 2018 10:58:18 +0200
Subject: Event Invitation Reply (Accepted):
Point Produit
------=_Part_80_888179120.1536742699653
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
METHOD:REPLY
BEGIN:VEVENT
CREATED:20180911T144134Z
LAST-MODIFIED:20180912T085818Z
DTSTAMP:20180912T085818Z
UID:f1514f44bf39311568d64072945fc3b2973debebb0d550e8c841f3f0604b2481e047fe
b2aab16e43439a608f28671ab7c10e754cbbe63441a01ba232a553df751eb0931728d67672
SUMMARY:Point Produit
PRIORITY:5
ORGANIZER;CN=Bob;X-OBM-ID=348:mailto:bob@linagora.com
ATTENDEE;CN=Alice;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL;X-OBM-ID=810:
mailto:alice@linagora.com
DTSTART:20180919T123000Z
DURATION:PT1H
TRANSP:OPAQUE
SEQUENCE:0
X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for X property. Rem
oving entire property:
CLASS:PUBLIC
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:Téléphone
END:VEVENT
END:VCALENDAR
Content-class: urn:content-classes:calendarmessage
Content-type: text/calendar; method=REPLY; charset=UTF-8
Content-transfer-encoding: 8BIT
Content-Disposition: attachment
------=_Part_80_888179120.1536742699653--
=====================================================
== File: mailet/icalendar/src/test/resources/ics/no_event.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483703436
VERSION:2.0
METHOD:REQUEST
END:VCALENDAR
=====================================================
== File: mailet/icalendar/src/test/resources/ics/meeting_without_dtstamp.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483703436
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
CREATED:20170106T115035Z
LAST-MODIFIED:20170106T115036Z
DTSTART:20170111T090000Z
DURATION:PT1H30M
TRANSP:OPAQUE
SEQUENCE:0
SUMMARY:Sprint planning #23
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=128;CN=Raphael OUAZANA:MAILTO:ouazana@linagora.com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:Hangout
CATEGORIES:
X-OBM-COLOR:
UID:f1514f44bf39311568d640727cff54e819573448d09d2e5677987ff29caa01a9e047fe
b2aab16e43439a608f28671ab7c10e754ce92be513f8e04ae9ff15e65a9819cf285a6962bc
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE
DS-ACTION;X-OBM-ID=302:MAILTO:baechler@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Laura ROYET;PARTSTAT=NEEDS-ACTION;
X-OBM-ID=723:MAILTO:royet@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Raphael OUAZANA;PARTSTAT=ACCEPTED;
X-OBM-ID=128:MAILTO:ouazana@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Luc DUZAN;PARTSTAT=NEEDS-ACTION;X-
OBM-ID=715:MAILTO:duzan@linagora.com
ATTENDEE;CUTYPE=RESOURCE;CN=Salle de reunion Lyon;PARTSTAT=ACCEPTED;X-OBM-
ID=66:MAILTO:noreply@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Antoine DUPRAT;PARTSTAT=NEEDS-ACTI
ON;X-OBM-ID=453:MAILTO:duprat@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Benoît TELLIER;PARTSTAT=NEEDS-ACTI
ON;X-OBM-ID=623:MAILTO:tellier@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Quynh Quynh N NGUYEN;PARTSTAT=NEED
S-ACTION;X-OBM-ID=769:MAILTO:nguyen@linagora.com
END:VEVENT
END:VCALENDAR
=====================================================
== File: mailet/icalendar/src/test/resources/ics/ics_with_error.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483703436
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
CREATED:20170106T115035Z
LAST-MODIFIED:20170106T115036Z
DTSTAMP:20170106T115036Z
DTSTART;TZID="Pacific Time (US & Canada),Tijuana":20041011T223000
DURATION:PT1H30M
TRANSP:OPAQUE
SEQUENCE:0
VEVENT:62
SUMMARY:Sprint planning #23
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=128;CN=Raphael OUAZANA:MAILTO:ouazana@linagora.com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:Hangout
CATEGORIES:
X-OBM-COLOR:
UID:f1514f44bf39311568d640727cff54e819573448d09d2e5677987ff29caa01a9e047fe
b2aab16e43439a608f28671ab7c10e754ce92be513f8e04ae9ff15e65a9819cf285a6962bc
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE
DS-ACTION;X-OBM-ID=302:MAILTO:baechler@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Laura ROYET;PARTSTAT=NEEDS-ACTION;
X-OBM-ID=723:MAILTO:royet@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Raphael OUAZANA;PARTSTAT=ACCEPTED;
X-OBM-ID=128:MAILTO:ouazana@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Luc DUZAN;PARTSTAT=NEEDS-ACTION;X-
OBM-ID=715:MAILTO:duzan@linagora.com
ATTENDEE;CUTYPE=RESOURCE;CN=Salle de reunion Lyon;PARTSTAT=ACCEPTED;X-OBM-
ID=66:MAILTO:noreply@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Antoine DUPRAT;PARTSTAT=NEEDS-ACTI
ON;X-OBM-ID=453:MAILTO:duprat@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Benoît TELLIER;PARTSTAT=NEEDS-ACTI
ON;X-OBM-ID=623:MAILTO:tellier@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Quynh Quynh N NGUYEN;PARTSTAT=NEED
S-ACTION;X-OBM-ID=769:MAILTO:nguyen@linagora.com
END:VEVENT
END:VCALENDAR
=====================================================
== File: mailet/icalendar/src/test/resources/ics/meeting_without_sequence.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483439571
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
CREATED:20170103T103250Z
LAST-MODIFIED:20170103T103250Z
DTSTAMP:20170103T103250Z
DTSTART:20170120T100000Z
DURATION:PT30M
TRANSP:OPAQUE
SUMMARY:Sprint Social #3 Demo
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=468;CN=Attendee 1:MAILTO:attendee1@linagora.
com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:hangout
CATEGORIES:
X-OBM-COLOR:
UID:f1514f44bf39311568d64072ac247c17656ceafde3b4b3eba961c8c5184cdc6ee047fe
b2aab16e43439a608f28671ab7c10e754c301b1e32001ad51dd20eac2fc7af20abf4093bbe
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Attendee 2;PARTSTAT=NEEDS-ACTI
ON;X-OBM-ID=348:MAILTO:attendee2@linagora.com
END:VEVENT
END:VCALENDAR
=====================================================
== File: mailet/icalendar/src/test/resources/ics/meeting_2.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483439571
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
CREATED:20170103T103250Z
LAST-MODIFIED:20170103T103250Z
DTSTAMP:20170103T103250Z
DTSTART:20170120T100000Z
DURATION:PT30M
TRANSP:OPAQUE
SEQUENCE:0
SUMMARY:Sprint Social #3 Demo
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=468;CN=Attendee 1:MAILTO:attendee1@linagora.
com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:hangout
CATEGORIES:
X-OBM-COLOR:
UID:f1514f44bf39311568d64072ac247c17656ceafde3b4b3eba961c8c5184cdc6ee047fe
b2aab16e43439a608f28671ab7c10e754c301b1e32001ad51dd20eac2fc7af20abf4093bbe
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Attendee 2;PARTSTAT=NEEDS-ACTI
ON;X-OBM-ID=348:MAILTO:attendee2@linagora.com
END:VEVENT
END:VCALENDAR
=====================================================
== File: mailet/icalendar/src/test/resources/ics/meeting_without_uid.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483439571
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
CREATED:20170103T103250Z
LAST-MODIFIED:20170103T103250Z
DTSTAMP:20170103T103250Z
DTSTART:20170120T100000Z
DURATION:PT30M
TRANSP:OPAQUE
SEQUENCE:0
SUMMARY:Sprint Social #3 Demo
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=468;CN=Attendee 1:MAILTO:attendee1@linagora.
com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:hangout
CATEGORIES:
X-OBM-COLOR:
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Attendee 2;PARTSTAT=NEEDS-ACTI
ON;X-OBM-ID=348:MAILTO:attendee2@linagora.com
END:VEVENT
END:VCALENDAR
=====================================================
== File: mailet/icalendar/src/test/resources/ics/meeting.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483703436
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
CREATED:20170106T115035Z
LAST-MODIFIED:20170106T115036Z
DTSTAMP:20170106T115036Z
DTSTART:20170111T090000Z
DURATION:PT1H30M
TRANSP:OPAQUE
SEQUENCE:0
SUMMARY:Sprint planning #23
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=128;CN=Raphael OUAZANA:MAILTO:ouazana@linagora.com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:Hangout
CATEGORIES:
X-OBM-COLOR:
UID:f1514f44bf39311568d640727cff54e819573448d09d2e5677987ff29caa01a9e047fe
b2aab16e43439a608f28671ab7c10e754ce92be513f8e04ae9ff15e65a9819cf285a6962bc
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE
DS-ACTION;X-OBM-ID=302:MAILTO:baechler@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Laura ROYET;PARTSTAT=NEEDS-ACTION;
X-OBM-ID=723:MAILTO:royet@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Raphael OUAZANA;PARTSTAT=ACCEPTED;
X-OBM-ID=128:MAILTO:ouazana@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Luc DUZAN;PARTSTAT=NEEDS-ACTION;X-
OBM-ID=715:MAILTO:duzan@linagora.com
ATTENDEE;CUTYPE=RESOURCE;CN=Salle de reunion Lyon;PARTSTAT=ACCEPTED;X-OBM-
ID=66:MAILTO:noreply@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Antoine DUPRAT;PARTSTAT=NEEDS-ACTI
ON;X-OBM-ID=453:MAILTO:duprat@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Benoît TELLIER;PARTSTAT=NEEDS-ACTI
ON;X-OBM-ID=623:MAILTO:tellier@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Quynh Quynh N NGUYEN;PARTSTAT=NEED
S-ACTION;X-OBM-ID=769:MAILTO:nguyen@linagora.com
END:VEVENT
END:VCALENDAR
=====================================================
== File: mailet/icalendar/src/test/resources/ics/meeting_without_method.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483439571
VERSION:2.0
BEGIN:VEVENT
CREATED:20170103T103250Z
LAST-MODIFIED:20170103T103250Z
DTSTAMP:20170103T103250Z
DTSTART:20170120T100000Z
DURATION:PT30M
TRANSP:OPAQUE
SEQUENCE:0
SUMMARY:Sprint Social #3 Demo
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=468;CN=Attendee 1:MAILTO:attendee1@linagora.
com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:hangout
CATEGORIES:
X-OBM-COLOR:
UID:f1514f44bf39311568d64072ac247c17656ceafde3b4b3eba961c8c5184cdc6ee047fe
b2aab16e43439a608f28671ab7c10e754c301b1e32001ad51dd20eac2fc7af20abf4093bbe
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Attendee 2;PARTSTAT=NEEDS-ACTI
ON;X-OBM-ID=348:MAILTO:attendee2@linagora.com
END:VEVENT
END:VCALENDAR
=====================================================
== File: mailet/standard/src/test/resources/mime/sendToRemoteHttp.mime
=====================================================
Return-Path: <aduprat@linagora.com>
Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (aduprat@linagora.com)
To: =?UTF-8?Q?Beno=c3=aet_TELLIER?= <tellier@linagora.com>
From: aduprat <duprat@linagora.com>
X-Forwarded-Message-Id: <001a114380a6a260d105467765ab@google.com>
Message-ID: <f18fa52e-2e9d-1125-327d-2100b23f8a6b@linagora.com>
Date: Thu, 19 Jan 2017 20:36:37 +0100
MIME-Version: 1.0
In-Reply-To: <001a114380a6a260d105467765ab@google.com>
Content-Type: multipart/mixed;
boundary="------------17D96D411CBD55D8239A8C1F"
This is a multi-part message in MIME format.
--------------17D96D411CBD55D8239A8C1F
Content-Type: multipart/alternative;
boundary="------------64D716A3DDAEC185D3E67448"
--------------64D716A3DDAEC185D3E67448
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
-------- Message transéré --------
Sujet : Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (duprat@linagora.com)
Date : Thu, 19 Jan 2017 19:18:23 +0000
De : Antoine Duprat <duprat@gmail.com>
Répondre à : antduprat@gmail.com
Pour : aduprat@linagora.com
--------------64D716A3DDAEC185D3E67448
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p><br>
</p>
<div class="moz-forward-container"><br>
=====================================================
== File: mailet/standard/src/test/resources/mime/gmail.mime
=====================================================
Return-Path: <aduprat@linagora.com>
Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (aduprat@linagora.com)
To: =?UTF-8?Q?Beno=c3=aet_TELLIER?= <tellier@linagora.com>
From: aduprat <duprat@linagora.com>
X-Forwarded-Message-Id: <001a114380a6a260d105467765ab@google.com>
Message-ID: <f18fa52e-2e9d-1125-327d-2100b23f8a6b@linagora.com>
Date: Thu, 19 Jan 2017 20:36:37 +0100
MIME-Version: 1.0
In-Reply-To: <001a114380a6a260d105467765ab@google.com>
Content-Type: multipart/mixed;
boundary="------------17D96D411CBD55D8239A8C1F"
This is a multi-part message in MIME format.
--------------17D96D411CBD55D8239A8C1F
Content-Type: multipart/alternative;
boundary="------------64D716A3DDAEC185D3E67448"
--------------64D716A3DDAEC185D3E67448
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
-------- Message transéré --------
Sujet : Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (duprat@linagora.com)
Date : Thu, 19 Jan 2017 19:18:23 +0000
De : Antoine Duprat <duprat@gmail.com>
Répondre à : antduprat@gmail.com
Pour : aduprat@linagora.com
--------------64D716A3DDAEC185D3E67448
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p><br>
</p>
<div class="moz-forward-container"><br>
=====================================================
== File: mailet/standard/src/test/resources/mime/headerFolded.mime
=====================================================
Return-Path: <duprat@linagora.com>
Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (duprat@linagora.com)
To: =?UTF-8?Q?Beno=c3=aet_TELLIER?= <tellier@linagora.com>
From: aduprat
<duprat@linagora.com>
X-Forwarded-Message-Id: <001a114380a6a260d105467765ab@google.com>
Message-ID: <f18fa52e-2e9d-1125-327d-2100b23f8a6b@linagora.com>
Date: Thu, 19 Jan 2017 20:36:37 +0100
MIME-Version: 1.0
In-Reply-To: <001a114380a6a260d105467765ab@google.com>
Content-Type: multipart/mixed;
boundary="------------17D96D411CBD55D8239A8C1F"
This is a multi-part message in MIME format.
--------------17D96D411CBD55D8239A8C1F
Content-Type: multipart/alternative;
boundary="------------64D716A3DDAEC185D3E67448"
--------------64D716A3DDAEC185D3E67448
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
-------- Message transéré --------
Sujet : Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (duprat@linagora.com)
Date : Thu, 19 Jan 2017 19:18:23 +0000
De : Antoine Duprat <duprat@gmail.com>
Répondre à : antduprat@gmail.com
Pour : aduprat@linagora.com
--------------64D716A3DDAEC185D3E67448
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p><br>
</p>
=====================================================
== File: mailet/standard/src/test/resources/mime/space.eml
=====================================================
Content-Type: multipart/mixed; boundary="------------gwA6NAbT8Pk0FYCy0yoPh61m"
Message-ID: <1745dbd6-f23b-44d0-be4c-9b9472c50348@linagora.com>
Date: Tue, 27 Feb 2024 07:38:14 +0100
MIME-Version: 1.0
To: BT TEST <xxx@linagora.com>
From: "xxx@linagora.com" <xxx@linagora.com>
Subject: Space
This is a multi-part message in MIME format.
--------------gwA6NAbT8Pk0FYCy0yoPh61m
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
space in attachment filename
--------------gwA6NAbT8Pk0FYCy0yoPh61m
Content-Type: application/pdf
Content-Disposition: attachment; filename=Vietnam Airline.pdf
Content-Transfer-Encoding: base64
JVBERi0xLjUKJbXtrvsKMyAwIG9iago8PCAvTGVuZ3RoIDQgMCBSCiAgIC9GaWx0ZXIgL0Zs
YXRlRGVjb2RlCj4+CnN0cmVhbQp4nN1aS6/buhHe61foD1ghh28g0OIC3XTVAgfooujC9jm+
--------------gwA6NAbT8Pk0FYCy0yoPh61m--
=====================================================
== File: mailet/standard/src/test/resources/mime/incorrect-headers.mime
=====================================================
Return-Path: <james@linagora.com>
Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (james@linagora.com)
To: =?UTF-8?Q?Beno=c3=aet_SOMEONE?= <someone@linagora.com>
From: james <james@linagora.com>
X-Forwarded-Message-Id: <001a114380a6a260d105467765ab@google.com>
Message-ID: <f18fa52e-2e9d-1125-327d-2100b23f8a6b@linagora.com>
Date: Thu, 19 Jan 2017 20:36:37 +0100
MIME-Version: 1.0
In-Reply-To: <001a114380a6a260d105467765ab@google.com>
Content-Type: multipart/mixed;charset=charset=us-ascii;
boundary="------------17D96D411CBD55D8239A8C1F"
This is a multi-part message in MIME format.
--------------17D96D411CBD55D8239A8C1F
Content-Type: multipart/alternative;
boundary="------------64D716A3DDAEC185D3E67448"
--------------64D716A3DDAEC185D3E67448
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
-------- Message transéré --------
Sujet : Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (jamef@linagora.com)
Date : Thu, 19 Jan 2017 19:18:23 +0000
De : James <james@gmail.com>
Répondre à : james@gmail.com
Pour : james@linagora.com
--------------64D716A3DDAEC185D3E67448
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p><br>
</p>
<div class="moz-forward-container"><br>
=====================================================
== File: mailet/standard/LICENSE.apache
=====================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
=====================================================
== File: mailet/standard/LICENSE.activation
=====================================================
COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
1. Definitions.
1.1. Contributor means each individual or entity that creates or contributes to the creation of Modifications.
1.2. Contributor Version means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
1.3. Covered Software means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
1.4. Executable means the Covered Software in any form other than Source Code.
1.5. Initial Developer means the individual or entity that first makes Original Software available under this License.
1.6. Larger Work means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
1.7. License means this document.
1.8. Licensable means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
1.9. Modifications means the Source Code and Executable form of any of the following:
A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
B. Any new file that contains any part of the Original Software or previous Modification; or
C. Any new file that is contributed or otherwise made available under the terms of this License.
1.10. Original Software means the Source Code and Executable form of computer software code that is originally released under this License.
1.11. Patent Claims means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
1.12. Source Code means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
1.13. You (or Your) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a)?the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b)?ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
2. License Grants.
2.1. The Initial Developer Grant.
Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
(c) The licenses granted in Sections?2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
(d) Notwithstanding Section?2.1(b) above, no patent license is granted: (1)?for code that You delete from the Original Software, or (2)?for infringements caused by: (i)?the modification of the Original Software, or (ii)?the combination of the Original Software with other software or devices.
2.2. Contributor Grant.
Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1)?Modifications made by that Contributor (or portions thereof); and (2)?the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
(c) The licenses granted in Sections?2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
=====================================================
== File: mailet/standard/LICENSE.mail
=====================================================
COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
1. Definitions.
1.1. Contributor means each individual or entity that creates or contributes to the creation of Modifications.
1.2. Contributor Version means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
1.3. Covered Software means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
1.4. Executable means the Covered Software in any form other than Source Code.
1.5. Initial Developer means the individual or entity that first makes Original Software available under this License.
1.6. Larger Work means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
1.7. License means this document.
1.8. Licensable means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
1.9. Modifications means the Source Code and Executable form of any of the following:
A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
B. Any new file that contains any part of the Original Software or previous Modification; or
C. Any new file that is contributed or otherwise made available under the terms of this License.
1.10. Original Software means the Source Code and Executable form of computer software code that is originally released under this License.
1.11. Patent Claims means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
1.12. Source Code means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
1.13. You (or Your) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a)?the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b)?ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
2. License Grants.
2.1. The Initial Developer Grant.
Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
(c) The licenses granted in Sections?2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
(d) Notwithstanding Section?2.1(b) above, no patent license is granted: (1)?for code that You delete from the Original Software, or (2)?for infringements caused by: (i)?the modification of the Original Software, or (ii)?the combination of the Original Software with other software or devices.
2.2. Contributor Grant.
Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1)?Modifications made by that Contributor (or portions thereof); and (2)?the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
(c) The licenses granted in Sections?2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
=====================================================
== File: mailet/base/src/test/resources/eml/text-only-7bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
by james-0 (JAMES SMTP Server ) with ESMTP ID -1705393842
for <bob@james.james.org>;
Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
by incoming.james.org (Postfix) with ESMTPS id CCCA943
for <bob@james.james.org>; Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.james.org (Postfix) with ESMTPSA id 2B7D13F393
for <bob@james.org>; Wed, 22 Jan 2020 05:11:53 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: quoted
Message-ID: <f4d046a8-e563-1e92-dbd9-c5038603e3a2@james.org>
Date: Wed, 22 Jan 2020 11:11:38 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
Thunderbird/60.2.1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
A 8bit encoded body with =E2=82=ACuro symbol.
=====================================================
== File: mailet/base/src/test/resources/eml/multipart-7bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
by james-0 (JAMES SMTP Server ) with ESMTP ID -973333758
for <bob@james.james.org>;
Wed, 22 Jan 2020 03:47:32 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
by incoming.james.org (Postfix) with ESMTPS id 8151D43
for <bob@james.james.org>; Wed, 22 Jan 2020 03:47:32 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.james.org (Postfix) with ESMTPSA id D6C653F38C
for <bob@james.org>; Wed, 22 Jan 2020 04:47:31 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: multipart
Message-ID: <69bd7da2-5b13-de50-bd77-c985f6b0215c@james.org>
Date: Wed, 22 Jan 2020 10:47:17 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
Thunderbird/60.2.1
Content-Type: multipart/mixed;
boundary="------------C3FD44EAF9B6A93E163D9176"
Content-Language: en-US
This is a multi-part message in MIME format.
--------------C3FD44EAF9B6A93E163D9176
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
A 8bit encoded body with =E2=82=ACuro symbol.
--------------C3FD44EAF9B6A93E163D9176
Content-Type: image/png;
name="james-logo.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="james-logo.png"
iVBORw0KGgoAAAANSUhEUgAAANkAAABaCAYAAAA1mvMAAAAAGXRFWHRTb2Z0d2FyZQBBZG9i
ZSBJbWFnZVJlYWR5ccllPAAAFB1JREFUeNrsXV2MI9lVvuX+m2EXrTtLQGwydPVsRlmkSOOW
+BNItB2tNiAk2n5BeYG2EwkpiSLbPPAjAW7zQiQe3C0SkBBg9ysv7ZZ4AGWFa/KClJeuRQhl
s2SnOj1pYIfN1EhICRLj4pzyufbt6rrlW+W/cvc90lGVXVW37r11vnt+7h/zPI/JeJnp8jOm
yTRpmhNF4Shzg8ud059eUxrIiNJYhmEssybL4/G1f3SsGaSNAM7STxfeYWtR0ppMRqs3uNwu
8D6wNQVQoelZBc6HaUi4jgeH3nUKoOtqsdN04zUZCf8ZCPzOhNqwQeCKC/Aj4EN4v6vF7HZr
spsOsjYcHoGgd2I+lyVw1SQACpqHWYkPiPc24f2HWgw1yG4qyFADnQAXVP0meKZMADOFv9H8
=====================================================
== File: mailet/base/src/test/resources/eml/multipart-7bit-attachment-content.txt
=====================================================
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
=====================================================
== File: mailet/base/src/test/resources/eml/multipart-8bit-attachment-content.txt
=====================================================
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
=====================================================
== File: mailet/base/src/test/resources/eml/multipart-8bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
by james-0 (JAMES SMTP Server ) with ESMTP ID 926590876
for <bob@james.james.org>;
Tue, 21 Jan 2020 07:12:56 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.68.1])
by incoming.james.org (Postfix) with ESMTPS id B39A643
for <bob@james.james.org>; Tue, 21 Jan 2020 07:12:56 +0000 (UTC)
Received: from duc-HP-ProBook-450-G4 (unknown [1.54.162.156])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.james.org (Postfix) with ESMTPSA id F11B13F386
for <bob@james.org>; Tue, 21 Jan 2020 08:12:55 +0100 (CET)
Date: Tue, 21 Jan 2020 14:12:39 +0700 (ICT)
X-LINAGORA-Copy-Delivery-Done: 1
From: bob@james.org
To: bob@james.org
Message-ID: <423733503.3.1579590775567@duc-HP-ProBook-450-G4>
Subject: UTF-8 8bit multipart
Content-Type: multipart/mixed;
boundary="----=_Part_0_238762799.1579590759052"
------=_Part_0_238762799.1579590759052
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
A 8bit encoded body with €uro symbol.
------=_Part_0_238762799.1579590759052
Content-Type: application/octet-stream; name=james-logo.png
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=james-logo.png
iVBORw0KGgoAAAANSUhEUgAAANkAAABaCAYAAAA1mvMAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAFB1JREFUeNrsXV2MI9lVvuX+m2EXrTtLQGwydPVsRlmkSOOW+BNItB2t
NiAk2n5BeYG2EwkpiSLbPPAjAW7zQiQe3C0SkBBg9ysv7ZZ4AGWFa/KClJeuRQhls2SnOj1pYIfN
1EhICRLj4pzyufbt6rrlW+W/cvc90lGVXVW37r11vnt+7h/zPI/JeJnp8jOmyTRpmhNF4Shzg8ud
059eUxrIiNJYhmEssybL4/G1f3SsGaSNAM7STxfeYWtR0ppMRqs3uNwu8D6wNQVQoelZBc6HaUi4
jgeH3nUKoOtqsdN04zUZCf8ZCPzOhNqwQeCKC/Aj4EN4v6vF7HZrspsOsjYcHoGgd2I+lyVw1SQA
CpqHWYkPiPc24f2HWgw1yG4qyFADnQAXVP0meKZMADOFv9H8O0VzENJxxrxvD7gYeB7NyJLWahpk
Nw5kJPgnJPCVKKBJwNUhTeQkDI6gH1cWtFpBB0k0yG4iyNCU65E51yGNxDUK/veQNE92GuCSBE0a
BDYNNA2ymwcyQdgPSLNkJbeg4B+jaTgNcEnA1qIgigaaBtnNA1nAb+L9XA6xPU1/6eL+G3nhp0ns
B0wyr/5fnt3t733sG+/vaNHUILuRIJsmAZhM0kwPCbi5CE3J/TIMojzC4733v6UDIbcAZKu6emID
C4G0z65HEMcB6xRApTupbyFpkKkBK0uBi6oisJAs9PEAWB1dgxpkmqLNwQa7Hn2MIgRVE8Dl6BrU
pEEWrblqLDoaGTQJ/WFU2s/SpEE2HmB5OLRjmIWoueoaXJo0yNS0l2y8osznqmizUJMGmTrA+KgQ
FdMQfS496FeTBpkiwHIEMBXfC0dplLT20qRBNhuAdQBcFS0ymmYOMhDMtn9isNN731neztWYAKvo
/i5NSSn2sKqLB2+gYOaZMfRPuj7g3l0ewJEP9lgDTNO0aLrDqjLMYSPsZeG8DMfyxU+/4cI5Au3o
3r99K+0jzLUG0zQ3ir8k3Ao7959aIc4Qr3hZlvHKwGcXn/okcjmlWgynm+Q0wDSl11z81CfzpAkC
N4clMJikeO9f3rVTArDwvOsgh6YZmotJFje1h9prqMUCv0f/gXaLvdLTLKmtUj4NME0LNRfv/eu7
=====================================================
== File: mailet/base/src/test/resources/eml/text-only-8bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
by james-0 (JAMES SMTP Server ) with ESMTP ID -1705393842
for <bob@james.james.org>;
Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
by incoming.james.org (Postfix) with ESMTPS id CCCA943
for <bob@james.james.org>; Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by smtp.james.org (Postfix) with ESMTPSA id 2B7D13F393
for <bob@james.org>; Wed, 22 Jan 2020 05:11:53 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: quoted
Message-ID: <f4d046a8-e563-1e92-dbd9-c5038603e3a2@james.org>
Date: Wed, 22 Jan 2020 11:11:38 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
Thunderbird/60.2.1
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US
A 8bit encoded body with €uro symbol.
=====================================================
== File: examples/custom-webadmin-route/README.md
=====================================================
# Writing custom webadmin routes
Read this page [on the website](http://james.apache.org/howTo/custom-webadmin-routes.html).
The current project demonstrates how to write custom webadmin routes for Apache James. This enables writing new
administrative features exposed over a REST API. This can allow you to write some additional features, make James
interact with third party systems, do advance reporting...
Start by importing the dependencies:
```
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>james-server-webadmin-core</artifactId>
</dependency>
```
You can then write your first route using the [Spark Java](https://sparkjava.com/) framework:
```
public class RouteA implements Routes {
@Override
public String getBasePath() {
return "/hello/a";
}
@Override
public void define(Service service) {
service.get(getBasePath(), (req, res) -> "RouteA\n");
}
}
```
Knowing that:
- entending `Routes` will ensure that authentication is requested if configured.
- extending `PublicRoutes` will not request authentication.
You can compile this example project:
```
mvn clean install
```
Then embed your route into a James server. First configure your route into `webadmin.properties`:
```
enabled=true
port=8000
host=localhost
=====================================================
== File: examples/metrics-graphite/docker-compose.yml
=====================================================
version: '3'
services:
james:
depends_on:
- graphite
image: apache/james:memory-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- ./target/metrics-graphite-jar-with-dependencies.jar:/root/extensions-jars/metrics-graphite.jar
- ./james/extensions.properties:/root/conf/extensions.properties
graphite:
image: graphiteapp/graphite-statsd
container_name: graphite
=====================================================
== File: examples/metrics-graphite/james/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.
# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes
# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.
#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
guice.extension.startable=org.apache.james.examples.GraphiteExporter
=====================================================
== File: examples/metrics-graphite/README.md
=====================================================
# Custom metric integration
James comes with built in integration with the [Prometheus](https://prometheus.io/) ecosystem, and
a plugin to [export metrics directly to ElasticSearch]() exist.
However, one might be willing to integrate with arbitrary metric system.
This project demonstrate how to leverage [dropwizard metrics](https://metrics.dropwizard.io/4.2.0/)
[built in extensions](https://metrics.dropwizard.io/4.2.0/manual/graphite.html)
to connect Apache James with [Graphite](https://graphiteapp.org/).
# Running the example
For this we build a GraphiteExporter implementing the `UserDefinedStartable` interface.
Build the project:
```
mvn clean install
```
Drop the jar with dependencies in the James `extensions-jars` folder.
Register it in James configuration, in `extensions.properties`:
```
guice.extension.startable=org.apache.james.examples.GraphiteExporter
```
Then start James.
Metrics can be retrieved in Graphite:
```
curl -XGET http://192.168.64.2:80/metrics/find?query=* | jq
```

# Running the example with docker compose
Compile:
```
mvn clean install
```
Then start James:
```
=====================================================
== File: examples/custom-smtp-hooks/README.md
=====================================================
# Writing custom behaviour for Apache James SMTP server
Read this page [on the website](http://james.apache.org/howTo/custom-smtp-hooks.html).
The current project demonstrates how to write custom behaviours for Apache James SMTP server
by the means of SMTP hooks.
SMTP hooks allow integrating third party systems with the SMTP stack and writing additional SMTP extensions, for
instance.
Start by importing the dependencies:
```
<dependency>
<groupId>org.apache.james.protocols</groupId>
<artifactId>protocols-smtp/artifactId>
</dependency>
```
Allows writing the following hooks:
- `AuthHook`: hook in the AUTH Command
- `HeloHook`: hook in the HELO Command
- `MailHook`: hook in the MAIL Command
- `MailParametersHook`: hook for MAIL Command parameters
- `RcptHook`: hook in the RCPT Command
- `MessageHook`: hook in the DATA Command
- `QuitHook`: hook in the QUIT Command
- `UnknownHook`: hook for unknown commands
```
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>james-server-protocols-smtp</artifactId>
</dependency>
```
Allows writing the following hooks:
- `JamesMessageHook`: DATA command. Allows access to the message content.
James comes bundled with [provided SMTP hooks for common features](http://james.apache.org/server/dev-provided-smtp-hooks.html).
We encourage you to review them before starting writing your own hooks.
## Writing your own hooks
In this example we implement a single RCPT hook:
```
public class LoggingRcptHook implements RcptHook {
=====================================================
== File: examples/proxy-smtp/docker-compose.yml
=====================================================
version: '3.0'
services:
haproxy:
image: haproxytech/haproxy-alpine:2.4
volumes:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
ports:
- "25:25"
- 143:143
- 993:993
- 465:465
depends_on:
- james
james:
image: apache/james:memory-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- ./smtpserver.xml:/root/conf/smtpserver.xml:ro
- ./imapserver.xml:/root/conf/imapserver.xml:ro
helo:
image: alpine:latest
command: "ash -c 'apk add --update --no-cache netcat-openbsd && echo \"HELO example.local\" | nc haproxy 25'"
depends_on:
- haproxy
=====================================================
== File: examples/proxy-smtp/haproxy.cfg
=====================================================
global
log stdout format raw local0 info
defaults
mode tcp
timeout client 1800s
timeout connect 5s
timeout server 1800s
log global
option tcplog
frontend smtp-frontend
bind :25
default_backend james-servers
frontend smtps-frontend
bind :465
default_backend smtps-servers
backend james-servers
server james1 james:2525 send-proxy
backend smtps-servers
server james1 james:465 send-proxy
frontend imap-frontend
bind :143
default_backend james-servers-imap
frontend imaps-frontend
bind :993
default_backend james-servers-imaps
backend james-servers-imap
server james1 james:143 send-proxy
backend james-servers-imaps
server james1 james:993 send-proxy
=====================================================
== File: examples/proxy-smtp/README.md
=====================================================
# Use one or more James instances behind a proxy
It is common to run a proxy in front of a mail server such as James. The proxy receives incoming
connections and forwards the request (e.g. SMTP) to James. The proxy passes the remote address to
James, so James knows the origin ip address of the remote peer.
So far SMTP has been tested successfully, but is not limited to. Since the proxy protocol
implementation is implemented on Netty level, it can also be used for IMAP.
## Proxy
This example uses [HAProxy](https://www.haproxy.org/). Other proxy software that implement
[HAProxy's proxy protocol](https://www.haproxy.org/download/2.7/doc/proxy-protocol.txt) can also be
used (e.g. [traefik](https://traefik.io)).
It is possible to run more than one James instance and let the proxy decide which connection it
forwards to which instance (i.e. load balancing).
## SMTP
This docker example uses HAProxy exposes port 25 (SMTP)
James might take a while to start. Thus start James first, then haproxy and finally helo.
```shell
docker-compose up -d james
# wait until james is ready
docker-compose up -d haproxy
# sends a "HELO" SMTP command to haproxy that will be forwarded to james. James will answer
# including the remote ip address of the helo container.
docker-compose up helo
```
If you expose HAProxy's port 25 you can also send a HELO using telnet.
Similarly, one can test a setup mixing SSL and SMTP (with James responsible for SSL termination):
```
openssl s_client -host 127.0.0.1 -port 465
```
## IMAP
This docker example uses HAProxy exposes port 143 (SMTP)
Then interacting with HAProxy port 143:
```
telnet 127.0.0.1 143
```
=====================================================
== File: examples/custom-smtp-command/README.md
=====================================================
# Creating your own SMTP commands
Read this page [on the website](http://james.apache.org/howTo/custom-smtp-commands.html).
The current project demonstrates how to write custom commands for Apache James SMTP server.
Start by importing the dependencies:
```
<dependency>
<groupId>org.apache.james.protocols</groupId>
<artifactId>protocols-smtp/artifactId>
</dependency>
```
You can write your commands by extending the `CommandHandler<SMTPSession>` class. For instance:
```
/**
* Copy of NoopCmdHandler
*/
public class MyNoopCmdHandler implements CommandHandler<SMTPSession> {
private static final Collection<String> COMMANDS = ImmutableSet.of("MYNOOP");
private static final Response NOOP = new SMTPResponse(SMTPRetCode.MAIL_OK,
DSNStatus.getStatus(DSNStatus.SUCCESS, DSNStatus.UNDEFINED_STATUS) + " OK")
.immutable();
@Override
public Response onCommand(SMTPSession session, Request request) {
return NOOP;
}
@Override
public Collection<String> getImplCommands() {
return COMMANDS;
}
}
```
You then need to list the exposed SMTP commands with a `HandlersPackage`. For instance:
```
/**
* This class copies CoreCmdHandlerLoader adding support for MYNOOP command
*/
public class MyCmdHandlerLoader implements HandlersPackage {
private final List<String> commands = new LinkedList<>();
=====================================================
== File: examples/custom-listeners/README.md
=====================================================
# Writing custom Mailbox listeners
Mailbox listeners allow extending the behaviour of mail delivery agents.
Read this page [on the website](http://james.apache.org/howTo/custom-listeners.html) to see how to run this example.
=====================================================
== File: examples/custom-imap/docker-compose.yml
=====================================================
version: '3'
services:
james:
image: apache/james:memory-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- ./target/custom-imap-jar-with-dependencies.jar:/root/extensions-jars/custom-imap.jar
- ./sample-configuration/imapserver.xml:/root/conf/imapserver.xml
ports:
- "143:143"
- "8000:8000"
=====================================================
== File: examples/custom-imap/README.md
=====================================================
# Creating your own IMAP commands
James allows defining your own handler packages (logical union).
To do that you need to define `imapPackages` in `imapserver.xml` configuration file.
Eg:
```xml
<imapPackages>org.apache.james.modules.protocols.DefaultImapPackage</imapPackages>
<imapPackages>org.apache.james.examples.imap.PingImapPackages</imapPackages>
```
Sample configure file: [imapserver.xml](./sample-configuration/imapserver.xml)
Note that when `imapPackages` is not provided, James will implicit use
`org.apache.James.modules.protocols.DefaultImapPackage`
## Running the example
Build the project:
```
mvn clean install
```
Drop the jar with dependencies in the James `extensions-jars` folder.
Then start James.
## Running the example with docker compose
Compile:
```
mvn clean install
```
Then start James:
```
docker-compose up
```
Test with imap package: `org.apache.james.examples.imap.PingImapPackages`
Command example:
```bash
telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
=====================================================
== File: examples/custom-mailets/README.md
=====================================================
# How to customize mail processing
Mailet and matcher allow in depth customisation of mail processing within
Apache James, even allowing writing custom components.
Read this page [on the website](http://james.apache.org/howTo/mail-processing.html) to see how to run this example.
=====================================================
== File: examples/custom-healthcheck/README.md
=====================================================
# Writing custom healthchecks
Read this page [on the website](http://james.apache.org/howTo/custom-healthchecks.html).
The current project demonstrates how to write custom healthchecks for Apache James.
This enables writing new custom healthcheck that fits your monitoring need.
Start by importing the dependencies:
```
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>james-core</artifactId>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
</dependency>
```
You can then start writing your first HealthCheck by implementing HealthCheck interface.
You can compile this example project:
```
mvn clean install
```
Then embed your healthcheck into a James server. First configure your custom healthcheck into `healthcheck.properties`:
```
# List of fully qualified HealthCheck class names in addition to James' default healthchecks.
# Healthchecks need to be located within the classpath or in the ./extensions-jars folder.
additional.healthchecks=org.apache.james.examples.HealthCheckA
```
Then start a James server with your JAR and the configuration:
```
$ docker run -d \
-v $PWD/healthcheck.properties:/root/conf/healthcheck.properties \
-v $PWD/healthcheck-extension.jar:/root/extensions-jars \
-p 25:25 \
apache/james:memory-latest --generate-keystore
```
You can use `curl` command to get your healthcheck status:
```
$ curl -XGET http://172.17.0.2:8000/healthcheck
=====================================================
== File: examples/README.md
=====================================================
# Examples
This submodule shows how one can work with James.
Each subprojects illustrate a specific concept.
## How to customize mail processing
At the heart of James lies the Mailet container, which allows mail processing. This is splitted into smaller units, with specific responsibilities:
- `Mailets`: Are operations performed with the mail: modifying it, performing a side-effect, etc...
- `Matchers`: Are per-recipient conditions for mailet executions
- `Processors`: Are matcher/mailet pair execution threads
Once we define the mailet container content through the mailetcontailer.xml file. Hence, we can arrange James standard
components to achieve basic logic. But what if our goals are more complex? What if we need our own processing components?
[This example](custom-mailets) shows how to write such components!
## Configure Custom Mailbox Listeners
Mailbox Listener is a component in James Mailbox System. Each time an action is applied on a mailbox(adding, deleting),
or on an email(adding, deleting, updating flags...), then an event representing that action is generated and delivered
to all the Listeners that had been registered before. After receiving events, listeners retrieve information from the
events then execute their business (Indexing emails in OpenSearch, updating quota of users, detecting spam emails...)
**Mailbox Listeners** allow customizing the behaviour of James used as a Mail Delivery Agent (MDA).
[This example](custom-listeners) shows how to write such components!
## Configure Custom SMTP hooks
SMTP hooks allow integrating third party systems with the SMTP stack, allows writing additional SMTP extensions, for
instance.
[This example](custom-smtp-hooks) shows how to write such components!
## Configure Custom SMTP commands
This subproject demonstrates how to write custom commands for Apache James SMTP server.
[This example](custom-smtp-command) shows how to write additional SMTP commands!
## Configure Custom WebAdmin routes
The current project demonstrates how to write custom webadmin routes for Apache James. This enables writing new
administrative features exposed over a REST API. This can allow you to write some additional features, make James
interact with third party systems, do advance reporting...
[This example](custom-webadmin-route) shows how to write additional Webadmin routes!
=====================================================
== File: examples/imap-autoconf/content/mail/config-v1.1.xml
=====================================================
<clientConfig version="1.1">
<emailProvider id="MessagingEngine">
<domain>domain.tld</domain>
<displayName>My company</displayName>
<displayShortName>My company</displayShortName>
<incomingServer type="imap">
<hostname>imap.domain.tld</hostname>
<port>993</port>
<socketType>SSL</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>smtp.domain.tld</hostname>
<port>465</port>
<socketType>SSL</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
</emailProvider>
</clientConfig>
=====================================================
== File: examples/imap-autoconf/content/.well-known/autoconfig/mail/config-v1.1.xml
=====================================================
<clientConfig version="1.1">
<emailProvider id="MessagingEngine">
<domain>domain.tld</domain>
<displayName>My company</displayName>
<displayShortName>My company</displayShortName>
<incomingServer type="imap">
<hostname>imap.domain.tld</hostname>
<port>993</port>
<socketType>SSL</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>smtp.domain.tld</hostname>
<port>465</port>
<socketType>SSL</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
</emailProvider>
</clientConfig>
=====================================================
== File: examples/imap-autoconf/content/autodiscover/autodiscover.xml
=====================================================
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
<Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
<Account>
<AccountType>email</AccountType>
<Action>settings</Action>
<Protocol>
<Type>IMAP</Type>
<Server>imap.domain.tld</Server>
<Port>993</Port>
<DomainRequired>off</DomainRequired>
<LoginName/>
<SPA>off</SPA>
<SSL>on</SSL>
<AuthRequired>on</AuthRequired>
</Protocol>
<Protocol>
<Type>SMTP</Type>
<Server>smtp.domain.tld</Server>
<Port>465</Port>
<DomainRequired>off</DomainRequired>
<LoginName/>
<SPA>off</SPA>
<Encryption>SSL</Encryption>
<AuthRequired>on</AuthRequired>
<UsePOPAuth>off</UsePOPAuth>
<SMTPLast>off</SMTPLast>
</Protocol>
</Account>
</Response>
</Autodiscover>
=====================================================
== File: examples/imap-autoconf/docker-compose.yml
=====================================================
version: '3'
services:
james:
image: apache/james:memory-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
ports:
- "465:465"
- "993:993"
- "8000:8000"
autoconf:
image: nginx
container_name: autoconf
volumes:
- ./content:/usr/share/nginx/html
ports:
- "80:80"
=====================================================
== File: examples/imap-autoconf/README.adoc
=====================================================
= Auto-configuration of Mail User Agents
== RFC-6186 use of SRV records
link:https://tools.ietf.org/html/rfc6186[RFC-6186] defines the usage of SRV records in order
to help users configuring their Mail User Agents in order to access your service, as it allows
to locate your services (hostnames and ports).
You would then need to publish SRV records on your DNS.
----
_imaps._tcp.domain.tld. 3600 IN SRV 0 1 993 imap.domain.tld.
_submission._tcp.domain.tld. 3600 IN SRV 0 1 587 smtp.domain.tld.
_jmap._tcp.domain.tld. 3600 IN SRV 0 1 443 jmap.domain.tld.
----
== Thunderbird
Thunderbird relies on a custom XML payload being served on a subdomain.
For `user@domain.tld` an HTTP GET request would be done at `http://autoconfig.domain.tld/mail/config-v1.1.xml`
You could for instance serve the following XML payload:
[xml]
----
<clientConfig version="1.1">
<emailProvider id="MessagingEngine">
<domain>domain.tld</domain>
<displayName>My company</displayName>
<displayShortName>My company</displayShortName>
<incomingServer type="imap">
<hostname>imap.domain.tld</hostname>
<port>993</port>
<socketType>SSL</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>smtp.domain.tld</hostname>
<port>465</port>
<socketType>SSL</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
</emailProvider>
</clientConfig>
----
== JMAP
=====================================================
== File: examples/custom-james-assembly/README.md
=====================================================
# Assemble a James server tailored to your needs
Read this page [on the website](http://james.apache.org/howTo/custom-james-assembly.html).
The current project demonstrates how to write a custom assembly in order to write your
own tailor-made server.
This enables:
- Arbitrary composition of technologies (example JPA mailbox with Cassandra user management)
- Write any additional components
- Drop any unneeded component
- You have control on the dependencies and can reduce the classpath size
## Example: Write an IMAP+SMTP only memory server
In order to do this select the modules you wished to assemble [in the Guice building blocks](https://github.com/apache/james-project/tree/master/server/container/guice). We encourage you to have
a fine grain control of your dependencies but for the sake of simplicity this example will reuse the dependencies of an
existing James application:
```
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>james-server-memory-app</artifactId>
<version>${project.version}</version>
</dependency>
```
Once done assemble the guice modules together in a class implementing `JamesServerMain`:
```
public class CustomJamesServerMain implements JamesServerMain {
public static final Module PROTOCOLS = Modules.combine(
new IMAPServerModule(),
new ProtocolHandlerModule(),
new MailRepositoryTaskSerializationModule(),
new SMTPServerModule());
public static final Module CUSTOM_SERVER_MODULE = Modules.combine(
new MailetProcessingModule(),
new MailboxModule(),
new MemoryDataModule(),
new MemoryEventStoreModule(),
new MemoryMailboxModule(),
new MemoryMailQueueModule(),
new TaskManagerModule(),
new RawPostDequeueDecoratorModule(),
binder -> binder.bind(MailetContainerModule.DefaultProcessorsConfigurationSupplier.class)
.toInstance(BaseHierarchicalConfiguration::new));
=====================================================
== File: examples/opensearch-dahsboard/docker-compose.yml
=====================================================
version: '3'
services:
opensearch-dashboards:
image: opensearchproject/opensearch-dashboards:2.11.1
container_name: opensearch-dashboards
ports:
- 5601:5601
expose:
- "5601"
environment:
OPENSEARCH_HOSTS: '["https://xxxx:9200"]'
OPENSEARCH_USERNAME: username
OPENSEARCH_PASSWORD: xxxxx
OPENSEARCH_DASHBOARDS_OPENSEARCH_SSL_VERIFICATIONMODE: none
OPENSEARCH_DASHBOARD_PASSWORD: xxxxx
=====================================================
== File: examples/opensearch-dahsboard/README.md
=====================================================
# OpenSearch dashboard for Apache James
[OpenSearch dashboard](https://opensearch.org/docs/latest/dashboards/) is a solution allowing data visualization on top of an existing OpenSearch cluster.
It can be used to create interesting visualizations when used on top of Apache James OpenSearch indexes.
## Set up
1. Adapt the `docker-compose.yml` file to your needs (IP address & credentials)
2. Start it with `docker compose up`
3. Login in your browser: `http://127.0.0.1:5601` with the credential documented in the `docker-compose.yml` file
4. In `Dashboard Management > Index pattern` import the `mailbox_v2` (using date as a date field) and `quota_ratio_v1`
5. In `Dashboard Management > Saved objects` import `james-dashboard.ndjson`
## Supported visualizations
- Quota usage

- New mails timeline

- Top senders

- Top recipients

- Email size distribution

- Attachment usage report

- Total email created during the period

- Unique email (by message-id)

- Read / unread ratio
=====================================================
== File: examples/opensearch-dahsboard/james-dashboard.ndjson
=====================================================
{"attributes":{"fieldFormatMap":"{\"deliveryTime2\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://127.0.0.1:5601\",\"pathname\":\"/app/opensearch_index_management_dashboards\",\"basePath\":\"\"}}},\"recipientCount\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://127.0.0.1:5601\",\"pathname\":\"/app/management\",\"basePath\":\"\"}}}}","fields":"[{\"count\":0,\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_score\",\"type\":\"number\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_type\",\"type\":\"string\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"attachments.contentDisposition\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"attachments.fileExtension\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"attachments.fileName\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"attachments.mediaType\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"attachments.subtype\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"attachments.textContent\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"bcc.address\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"bcc.address.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"bcc.address\"}}},{\"count\":0,\"name\":\"bcc.domain\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"bcc.name\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"cc.address\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"cc.address.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"cc.address\"}}},{\"count\":0,\"name\":\"cc.domain\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"cc.name\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"cc.name.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"cc.name\"}}},{\"count\":0,\"name\":\"date\",\"type\":\"date\",\"esTypes\":[\"date\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"from.address\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"from.address.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"from.address\"}}},{\"count\":0,\"name\":\"from.domain\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"from.name\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"from.name.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"from.name\"}}},{\"count\":0,\"name\":\"hasAttachment\",\"type\":\"boolean\",\"esTypes\":[\"boolean\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"headers.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"nested\":{\"path\":\"headers\"}}},{\"count\":0,\"name\":\"headers.value\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false,\"subType\":{\"nested\":{\"path\":\"headers\"}}},{\"count\":0,\"name\":\"htmlBody\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"isAnswered\",\"type\":\"boolean\",\"esTypes\":[\"boolean\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"isDeleted\",\"type\":\"boolean\",\"esTypes\":[\"boolean\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"isDraft\",\"type\":\"boolean\",\"esTypes\":[\"boolean\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":1,\"name\":\"isFlagged\",\"type\":\"boolean\",\"esTypes\":[\"boolean\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"isRecent\",\"type\":\"boolean\",\"esTypes\":[\"boolean\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"isUnread\",\"type\":\"boolean\",\"esTypes\":[\"boolean\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"mailboxId\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"mediaType\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"messageId\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"mimeMessageID\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"modSeq\",\"type\":\"number\",\"esTypes\":[\"long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"saveDate\",\"type\":\"date\",\"esTypes\":[\"date\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"sentDate\",\"type\":\"date\",\"esTypes\":[\"date\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"size\",\"type\":\"number\",\"esTypes\":[\"long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"subject\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"subject.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"subject\"}}},{\"count\":0,\"name\":\"subtype\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"textBody\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"threadId\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"to.address\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"to.address.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"to.address\"}}},{\"count\":0,\"name\":\"to.domain\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"to.name\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"to.name.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"to.name\"}}},{\"count\":0,\"name\":\"uid\",\"type\":\"number\",\"esTypes\":[\"long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"userFlags\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"script\":\"if (doc.containsKey('saveDate') && doc.containsKey('sentDate')) {\\n return (doc['saveDate'].value.getMillis() - doc['sentDate'].value.getMillis()) / 1000; \\n} else {\\n return 0;\\n}\",\"lang\":\"painless\",\"name\":\"deliveryTime2\",\"type\":\"number\",\"scripted\":true,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"script\":\"int count = 0;\\n\\n for (nested in params._source.to) {\\n count += 1;\\n } \\n\\nreturn count;\",\"lang\":\"painless\",\"name\":\"recipientCount\",\"type\":\"number\",\"scripted\":true,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false}]","timeFieldName":"date","title":"mailbox_v2"},"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","migrationVersion":{"index-pattern":"7.6.0"},"references":[],"type":"index-pattern","updated_at":"2024-07-24T08:29:21.408Z","version":"WzEwMSwxXQ=="}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Unique mails","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Unique mails\",\"type\":\"metric\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"cardinality\",\"params\":{\"field\":\"mimeMessageID\"},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}}}"},"id":"13751b90-48bf-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-23T06:44:57.417Z","version":"WzQ2LDFd"}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"meta\":{\"type\":\"phrases\",\"key\":\"to.address\",\"value\":\"linagora.com\",\"params\":[\"linagora.com\"],\"alias\":null,\"negate\":false,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"bool\":{\"should\":[{\"match_phrase\":{\"to.address\":\"linagora.com\"}}],\"minimum_should_match\":1}},\"$state\":{\"store\":\"appState\"}}],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Top recipients","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Top recipients\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"to.address.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":50,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}"},"id":"16a7eb90-4828-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"},{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-22T12:44:08.776Z","version":"WzM3LDFd"}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"New mails in mailbox","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"New mails in mailbox\",\"type\":\"area\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"date\",\"timeRange\":{\"from\":\"now-7d\",\"to\":\"now\"},\"useNormalizedOpenSearchInterval\":true,\"scaleMetricValues\":false,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}},\"schema\":\"segment\"}],\"params\":{\"type\":\"area\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"area\",\"mode\":\"stacked\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true,\"interpolate\":\"linear\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"},\"labels\":{}}}"},"id":"1857e250-4824-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-22T12:15:33.621Z","version":"WzI2LDFd"}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Attachment ratio","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Attachment ratio\",\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"hasAttachment\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"segment\"}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}}}"},"id":"1e1196b0-48be-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-23T06:38:05.722Z","version":"WzQ0LDFd"}
{"attributes":{"buildNum":6867,"defaultIndex":"a22e0e70-4822-11ef-be61-a96ec0360231"},"id":"2.11.1","migrationVersion":{"config":"7.9.0"},"references":[],"type":"config","updated_at":"2024-07-24T08:29:32.345Z","version":"WzEwMywxXQ=="}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Attachment by file extension","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Attachment by file extension\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"attachments.fileExtension\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}"},"id":"23e3a2a0-4827-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-22T12:37:21.482Z","version":"WzMyLDFd"}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Total mails","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Total mails\",\"type\":\"metric\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}}}"},"id":"23e701f0-48bf-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-23T06:45:25.007Z","version":"WzQ3LDFd"}
{"attributes":{"description":"Difference between the saveDate and the sentDate.\n\nIncludes third party delays. Take it as indicative, as sentDate can be crafter by the user.","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"from.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"from.domain\":\"linagora\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"to.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"to.domain\":\"linagora\"}}}],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Estimated internal delivery times (second)","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Estimated internal delivery times (second)\",\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"range\",\"params\":{\"field\":\"deliveryTime2\",\"ranges\":[{\"from\":0,\"to\":1},{\"from\":1,\"to\":10},{\"from\":10,\"to\":30},{\"from\":30,\"to\":60},{\"from\":60,\"to\":120},{\"from\":120,\"to\":300}]},\"schema\":\"group\"}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}"},"id":"2dd81ca0-4994-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"},{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"},{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-24T08:10:24.490Z","version":"WzkwLDFd"}
{"attributes":{"fields":"[{\"count\":0,\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_score\",\"type\":\"number\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_type\",\"type\":\"string\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"contactId\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"domain\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"email\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"firstname\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"surname\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false}]","title":"domain_contact"},"id":"32e9e3a0-48ee-11ef-be61-a96ec0360231","migrationVersion":{"index-pattern":"7.6.0"},"references":[],"type":"index-pattern","updated_at":"2024-07-23T12:22:16.537Z","version":"WzcxLDFd"}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Email by size over the week","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Email by size over the week\",\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"range\",\"params\":{\"field\":\"size\",\"ranges\":[{\"from\":0,\"to\":1000},{\"from\":1000,\"to\":10000},{\"from\":10000,\"to\":100000},{\"from\":100000,\"to\":500000},{\"from\":500000,\"to\":1000000},{\"from\":1000000,\"to\":2000000},{\"from\":2000000,\"to\":5000000},{\"from\":5000000,\"to\":10000000},{\"from\":10000000}]},\"schema\":\"group\"}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"labels\":{\"show\":true},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"},\"orderBucketsBySum\":false}}"},"id":"3f74a1a0-4826-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-22T19:58:40.967Z","version":"WzQwLDFd"}
{"attributes":{"fields":"[{\"count\":0,\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_score\",\"type\":\"number\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_type\",\"type\":\"string\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"access_entities\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"added\",\"type\":\"number\",\"esTypes\":[\"unsigned_long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"company_id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"content_keywords\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"content_keywords._index_prefix\",\"type\":\"unknown\",\"esTypes\":[\"prefix\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false,\"subType\":{\"multi\":{\"parent\":\"content_keywords\"}}},{\"count\":0,\"name\":\"creator\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"id\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"id.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"id\"}}},{\"count\":0,\"name\":\"index._id\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"index._id.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"index._id\"}}},{\"count\":0,\"name\":\"index._index\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"index._index.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"index._index\"}}},{\"count\":0,\"name\":\"last_modified\",\"type\":\"number\",\"esTypes\":[\"unsigned_long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"mime_type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"name\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"name._index_prefix\",\"type\":\"unknown\",\"esTypes\":[\"prefix\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false,\"subType\":{\"multi\":{\"parent\":\"name\"}}},{\"count\":0,\"name\":\"name_keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"tags\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true}]","title":"drive_files"},"id":"41219170-48ee-11ef-be61-a96ec0360231","migrationVersion":{"index-pattern":"7.6.0"},"references":[],"type":"index-pattern","updated_at":"2024-07-23T12:22:40.390Z","version":"WzcyLDFd"}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"New mails","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"New mails\",\"type\":\"line\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"date\",\"timeRange\":{\"from\":\"now-7d\",\"to\":\"now\"},\"useNormalizedOpenSearchInterval\":true,\"scaleMetricValues\":false,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}},\"schema\":\"segment\"}],\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"interpolate\":\"linear\",\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"labels\":{},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}"},"id":"45a9f970-4822-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-22T12:05:41.828Z","version":"WzI0LDFd"}
{"attributes":{"fields":"[{\"count\":0,\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_score\",\"type\":\"number\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_type\",\"type\":\"string\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"domain\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"quotaRatio\",\"type\":\"number\",\"esTypes\":[\"double\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"user\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true}]","title":"quota_ratio_v1"},"id":"a22e0e70-4822-11ef-be61-a96ec0360231","migrationVersion":{"index-pattern":"7.6.0"},"references":[],"type":"index-pattern","updated_at":"2024-07-22T12:05:05.878Z","version":"WzIzLDFd"}
{"attributes":{"description":"Current mail quota usage","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Quota usage","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Quota usage\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"quotaRatio\"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"user\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":20,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\",\"row\":true}}"},"id":"97f58540-4823-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"a22e0e70-4822-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-22T12:11:58.228Z","version":"WzI1LDFd"}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Top senders","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Top senders\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"from.address.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":100,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}"},"id":"7f321dd0-4827-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-22T12:40:37.202Z","version":"WzM2LDFd"}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"to.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"to.domain\":\"linagora\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"isUnread\",\"negate\":false,\"params\":{\"query\":false},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"isUnread\":false}}}],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"People that reads the more mails","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"People that reads the more mails\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"to.address.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}"},"id":"b6d8dbe0-4988-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"},{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"},{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-24T06:48:20.382Z","version":"Wzc2LDFd"}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"to.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"to.domain\":\"linagora\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"isAnswered\",\"negate\":false,\"params\":{\"query\":true},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"isAnswered\":true}}}],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"People that answer the more mails","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"People that answer the more mails\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"to.address.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}"},"id":"6eea1830-4988-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"},{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"},{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-24T06:46:19.698Z","version":"Wzc1LDFd"}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"from.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"from.domain\":\"linagora\"}}}],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Recipient counts","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Recipient counts\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"params\":{\"field\":\"recipientCount\"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"from.address.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":50,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"bucket\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"recipientCount\"},\"schema\":\"metric\"},{\"id\":\"4\",\"enabled\":true,\"type\":\"sum\",\"params\":{\"field\":\"recipientCount\"},\"schema\":\"metric\"},{\"id\":\"5\",\"enabled\":true,\"type\":\"count\",\"params\":{\"customLabel\":\"Total number of mails sent\"},\"schema\":\"metric\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}"},"id":"ad612950-4997-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"},{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-24T12:15:54.537Z","version":"WzEwOCwxXQ=="}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"IsUnread ratio","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"IsUnread ratio\",\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"isUnread\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"segment\"}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100},\"row\":false}}"},"id":"be8f0ec0-48bd-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-23T06:35:25.482Z","version":"WzQzLDFd"}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"User flags","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"User flags\",\"type\":\"tagcloud\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"userFlags\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":50,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"segment\"}],\"params\":{\"scale\":\"linear\",\"orientation\":\"single\",\"minFontSize\":18,\"maxFontSize\":72,\"showLabel\":true}}"},"id":"bedb6490-48be-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-23T06:42:35.480Z","version":"WzQ1LDFd"}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"from.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"from.domain\":\"linagora\"}}}],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"People that sends the more data","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"People that sends the more data\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"params\":{\"field\":\"size\"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"from.address.raw\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":50,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}"},"id":"503bd5d0-4998-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"},{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-24T08:40:00.173Z","version":"WzEwNSwxXQ=="}
{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"c7b5858e-01b8-42be-83a0-c6e73c4cacf1\",\"w\":24,\"x\":0,\"y\":0},\"panelIndex\":\"c7b5858e-01b8-42be-83a0-c6e73c4cacf1\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"abcc16ab-e57a-4b3d-8cab-52ec820a7e7e\",\"w\":24,\"x\":24,\"y\":0},\"panelIndex\":\"abcc16ab-e57a-4b3d-8cab-52ec820a7e7e\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"01499225-fd1a-45ef-9580-d9952732ba4d\",\"w\":24,\"x\":0,\"y\":15},\"panelIndex\":\"01499225-fd1a-45ef-9580-d9952732ba4d\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"7f4b9ecb-0af8-45ba-b0a6-81b623ed2313\",\"w\":24,\"x\":24,\"y\":15},\"panelIndex\":\"7f4b9ecb-0af8-45ba-b0a6-81b623ed2313\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"5e583f06-80aa-4a80-9d45-b1e82d005ac7\",\"w\":24,\"x\":0,\"y\":30},\"panelIndex\":\"5e583f06-80aa-4a80-9d45-b1e82d005ac7\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"21312784-5985-4837-9b76-0dbca6282a4e\",\"w\":24,\"x\":24,\"y\":30},\"panelIndex\":\"21312784-5985-4837-9b76-0dbca6282a4e\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"5bd68fe2-150c-42d2-b873-368ac1fb8535\",\"w\":24,\"x\":0,\"y\":45},\"panelIndex\":\"5bd68fe2-150c-42d2-b873-368ac1fb8535\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_6\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"2891f468-9c96-44c4-95c3-8d88acfe3529\",\"w\":24,\"x\":24,\"y\":60},\"panelIndex\":\"2891f468-9c96-44c4-95c3-8d88acfe3529\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_7\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"1b163ae4-eb63-417f-bc50-f11e4ee35774\",\"w\":24,\"x\":0,\"y\":60},\"panelIndex\":\"1b163ae4-eb63-417f-bc50-f11e4ee35774\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_8\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"363cc993-5a48-43a9-b441-d190776a30c2\",\"w\":24,\"x\":24,\"y\":75},\"panelIndex\":\"363cc993-5a48-43a9-b441-d190776a30c2\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_9\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"b108ed1b-02a5-4d05-ac0c-8cf557c72375\",\"w\":24,\"x\":0,\"y\":75},\"panelIndex\":\"b108ed1b-02a5-4d05-ac0c-8cf557c72375\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_10\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"3170beae-6005-44db-b789-533cdca0df8c\",\"w\":24,\"x\":24,\"y\":90},\"panelIndex\":\"3170beae-6005-44db-b789-533cdca0df8c\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_11\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"h\":15,\"i\":\"28c66231-dc25-41bc-b2cf-bb26e0782098\",\"w\":24,\"x\":0,\"y\":90},\"panelIndex\":\"28c66231-dc25-41bc-b2cf-bb26e0782098\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_12\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"5253f3a8-885e-4ed9-8824-449a7b2bbe2e\",\"w\":24,\"x\":24,\"y\":45},\"panelIndex\":\"5253f3a8-885e-4ed9-8824-449a7b2bbe2e\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_13\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"8d5f7ec9-1af8-47a2-8c2d-9a5c76fa6322\",\"w\":24,\"x\":0,\"y\":105},\"panelIndex\":\"8d5f7ec9-1af8-47a2-8c2d-9a5c76fa6322\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_14\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"0d769bbc-b593-491c-95b8-495f66ae38e0\",\"w\":24,\"x\":24,\"y\":105},\"panelIndex\":\"0d769bbc-b593-491c-95b8-495f66ae38e0\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_15\"}]","timeRestore":false,"title":"TMail dashboard","version":1},"id":"48b21e70-4824-11ef-be61-a96ec0360231","migrationVersion":{"dashboard":"7.9.3"},"references":[{"id":"97f58540-4823-11ef-be61-a96ec0360231","name":"panel_0","type":"visualization"},{"id":"1857e250-4824-11ef-be61-a96ec0360231","name":"panel_1","type":"visualization"},{"id":"7f321dd0-4827-11ef-be61-a96ec0360231","name":"panel_2","type":"visualization"},{"id":"16a7eb90-4828-11ef-be61-a96ec0360231","name":"panel_3","type":"visualization"},{"id":"b6d8dbe0-4988-11ef-be61-a96ec0360231","name":"panel_4","type":"visualization"},{"id":"6eea1830-4988-11ef-be61-a96ec0360231","name":"panel_5","type":"visualization"},{"id":"ad612950-4997-11ef-be61-a96ec0360231","name":"panel_6","type":"visualization"},{"id":"23e3a2a0-4827-11ef-be61-a96ec0360231","name":"panel_7","type":"visualization"},{"id":"3f74a1a0-4826-11ef-be61-a96ec0360231","name":"panel_8","type":"visualization"},{"id":"13751b90-48bf-11ef-be61-a96ec0360231","name":"panel_9","type":"visualization"},{"id":"23e701f0-48bf-11ef-be61-a96ec0360231","name":"panel_10","type":"visualization"},{"id":"1e1196b0-48be-11ef-be61-a96ec0360231","name":"panel_11","type":"visualization"},{"id":"be8f0ec0-48bd-11ef-be61-a96ec0360231","name":"panel_12","type":"visualization"},{"id":"2dd81ca0-4994-11ef-be61-a96ec0360231","name":"panel_13","type":"visualization"},{"id":"bedb6490-48be-11ef-be61-a96ec0360231","name":"panel_14","type":"visualization"},{"id":"503bd5d0-4998-11ef-be61-a96ec0360231","name":"panel_15","type":"visualization"}],"type":"dashboard","updated_at":"2024-07-24T12:35:37.147Z","version":"WzEwOSwxXQ=="}
{"attributes":{"description":"Difference between the saveDate and the sentDate.\n\nIncludes third party delays. Take it as indicative, as sentDate can be crafter by the user.","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"from.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"from.domain\":\"linagora\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"to.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"to.domain\":\"linagora\"}}}],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Internal delivery times (second)","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Internal delivery times (second)\",\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"range\",\"params\":{\"field\":\"deliveryTime2\",\"ranges\":[{\"from\":0,\"to\":1},{\"from\":1,\"to\":10},{\"from\":10,\"to\":30},{\"from\":30,\"to\":60},{\"from\":60,\"to\":120},{\"from\":120,\"to\":300}]},\"schema\":\"group\"}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}"},"id":"5941af90-4990-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"},{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"},{"id":"9bce8ba0-4821-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-24T08:03:50.766Z","version":"Wzg5LDFd"}
{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Active users","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Active users\",\"type\":\"metric\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}}}"},"id":"595edc30-482a-11ef-be61-a96ec0360231","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"a22e0e70-4822-11ef-be61-a96ec0360231","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2024-07-22T13:00:19.699Z","version":"WzM5LDFd"}
{"exportedCount":25,"missingRefCount":0,"missingReferences":[]}
=====================================================
== File: examples/oidc/test.sh
=====================================================
#!/bin/sh
set -eux
docker-compose up -d
GET_TOKEN_RESPONSE=`curl --location 'http://sso.example.com:8080/auth/realms/oidc/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'scope=openid profile email' \
--data-urlencode 'client_id=james-thunderbird' \
--data-urlencode 'client_secret=Xw9ht1veTu0Tk5sMMy03PdzY3AiFvssw' \
--data-urlencode 'username=james-user@localhost' \
--data-urlencode 'password=secret' 2>/dev/null`
ACCESS_TOKEN=`echo $GET_TOKEN_RESPONSE 2>/dev/null |perl -pe 's/^.*"access_token"\s*:\s*"(.*?)".*$/$1/'`
REFRESH_TOKEN=`echo $GET_TOKEN_RESPONSE 2>/dev/null |perl -pe 's/^.*"refresh_token"\s*:\s*"(.*?)".*$/$1/'`
echo "Got an access_token"
if curl -H "Authorization: Bearer $ACCESS_TOKEN" http://sso.example.com:8080/auth/realms/oidc/protocol/openid-connect/userinfo 2>/dev/null| grep james-user >/dev/null; then
echo "Access_token is valid"
else
echo "ACCESS_TOKEN VERIFICATION FAILED"
fi
echo -n "Trying James: "
APISIX_JMAP_ENDPOINT=apisix.example.com:9080/oidc/jmap/session
if curl -v -H 'Accept: application/json; jmapVersion=rfc-8621' -H "Authorization: Bearer $ACCESS_TOKEN" $APISIX_JMAP_ENDPOINT 2>/dev/null | grep uploadUrl >/dev/null; then
echo "OK"
else
echo "Not OK"
fi
# Logout
curl --location 'http://sso.example.com:8080/auth/realms/oidc/protocol/openid-connect/logout' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=james-thunderbird' \
--data-urlencode 'client_secret=Xw9ht1veTu0Tk5sMMy03PdzY3AiFvssw' \
--data-urlencode 'refresh_token='$REFRESH_TOKEN >/dev/null 2>&1
sleep 1
if curl -v -H 'Accept: application/json; jmapVersion=rfc-8621' -H "Authorization: Bearer $ACCESS_TOKEN" $APISIX_JMAP_ENDPOINT 2>/dev/null | grep uploadUrl >/dev/null; then
echo "LOGOUT FAILED"
else
echo "Logout OK"
fi
=====================================================
== File: examples/oidc/docker-compose.yml
=====================================================
version: "3"
services:
apisix:
container_name: apisix.example.com
image: linagora/apisix:3.2.0-debian-javaplugin
volumes:
- ./apisix/conf/apisix.yaml:/usr/local/apisix/conf/apisix.yaml
- ./apisix/conf/config.yaml:/usr/local/apisix/conf/config.yaml
environment:
- X_USER_SECRET=xusersecret123
networks:
- james
ports:
- "9080:9080/tcp"
james:
depends_on:
- ldap
networks:
- james
image: apache/james:memory-latest
container_name: james
hostname: james.local
command:
- --generate-keystore
volumes:
- ./james/usersrepository.xml:/root/conf/usersrepository.xml
- ./james/jmap.properties:/root/conf/jmap.properties
ports:
- "8000:8000"
healthcheck:
test: ["CMD", "curl", "-f", "http://james:8000/domains"]
sso.example.com:
depends_on:
- ldap
image: quay.io/keycloak/keycloak:16.1.0
container_name: sso.example.com
volumes:
- ./keycloak/realm-oidc.json:/tmp/realm-oidc.json
ports:
- "8080:8080"
environment:
- KEYCLOAK_USER=admin
- KEYCLOAK_PASSWORD=admin
- KEYCLOAK_IMPORT=/tmp/realm-oidc.json
networks:
james:
aliases:
=====================================================
== File: examples/oidc/james/imapserver.xml
=====================================================
<?xml version="1.0"?>
<imapservers>
<imapserver enabled="true">
<jmxName>imapserver</jmxName>
<bind>0.0.0.0:143</bind>
<connectionBacklog>200</connectionBacklog>
<tls socketTLS="false" startTLS="false">
<keystore>file://conf/keystore</keystore>
<keystoreType>PKCS12</keystoreType>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
<idleTimeInterval>120</idleTimeInterval>
<idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
<enableIdle>true</enableIdle>
<auth>
<plainAuthEnabled>true</plainAuthEnabled>
<oidc>
<oidcConfigurationURL>http://keycloak:8080/auth/realms/oidc/.well-known/openid-configuration</oidcConfigurationURL>
<jwksURL>http://keycloak:8080/auth/realms/oidc/protocol/openid-connect/certs</jwksURL>
<claim>email</claim>
<scope>openid profile email</scope>
<introspection>
<url>http://keycloak:8080/auth/realms/oidc/protocol/openid-connect/token/introspect</url>
<auth>Basic amFtZXMtdGh1bmRlcmJpcmQ6WHc5aHQxdmVUdTBUazVzTU15MDNQZHpZM0FpRnZzc3c=</auth>
</introspection>
</oidc>
</auth>
</imapserver>
</imapservers>
=====================================================
== File: examples/oidc/james/jmap.properties
=====================================================
# Configuration file for JMAP
# Read https://james.apache.org/server/config-jmap.html for further details
enabled=true
tls.keystoreURL=file://conf/keystore
tls.secret=james72laBalle
# Alternatively TLS keys can be supplied via PEM files
# tls.privateKey=file://conf/private.nopass.key
# tls.certificates=file://conf/certs.self-signed.csr
# An optional secret might be specified for the private key
# tls.secret=james72laBalle
#
# If you wish to use OAuth authentication, you should provide a valid JWT public key.
# The following entry specify the link to the URL of the public key file,
# which should be a PEM format file.
#
#jwt.publickeypem.url=file://conf/jwt_publickey
# Should simple Email/query be resolved against a Cassandra projection, or should we resolve them against OpenSearch?
# This enables a higher resilience, but the projection needs to be correctly populated. False by default.
# view.email.query.enabled=true
# If you want to specify authentication strategies for Jmap rfc-8621 version
# For custom Authentication Strategy not inside package "org.apache.james.jmap.http", you have to specify its FQDN
authentication.strategy.rfc8621=BasicAuthenticationStrategy,XUserAuthenticationStrategy
authentication.strategy.rfc8621.xUser.secret=xusersecret123
=====================================================
== File: examples/oidc/james/smtpserver.xml
=====================================================
<?xml version="1.0"?>
<smtpservers>
<smtpserver enabled="true">
<jmxName>smtpserver</jmxName>
<bind>0.0.0.0:587</bind>
<connectionBacklog>200</connectionBacklog>
<tls socketTLS="false" startTLS="false">
<keystore>file://conf/keystore</keystore>
<keystoreType>PKCS12</keystoreType>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
</tls>
<connectiontimeout>360</connectiontimeout>
<connectionLimit>0</connectionLimit>
<connectionLimitPerIP>0</connectionLimitPerIP>
<auth>
<announce>forUnauthorizedAddresses</announce>
<plainAuthEnabled>true</plainAuthEnabled>
<oidc>
<oidcConfigurationURL>http://keycloak:8080/auth/realms/oidc/.well-known/openid-configuration</oidcConfigurationURL>
<jwksURL>http://keycloak:8080/auth/realms/oidc/protocol/openid-connect/certs</jwksURL>
<claim>email</claim>
<scope>openid profile email</scope>
<introspection>
<url>http://keycloak:8080/auth/realms/oidc/protocol/openid-connect/token/introspect</url>
<auth>Basic amFtZXMtdGh1bmRlcmJpcmQ6WHc5aHQxdmVUdTBUazVzTU15MDNQZHpZM0FpRnZzc3c=</auth>
</introspection>
</oidc>
</auth>
<authorizedAddresses>127.0.0.0/8</authorizedAddresses>
<verifyIdentity>false</verifyIdentity>
<maxmessagesize>0</maxmessagesize>
<addressBracketsEnforcement>true</addressBracketsEnforcement>
<smtpGreeting>Apache JAMES awesome SMTP Server</smtpGreeting>
<handlerchain>
<handler class="org.apache.james.smtpserver.fastfail.ValidRcptHandler"/>
<handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>
</handlerchain>
</smtpserver>
</smtpservers>
=====================================================
== File: examples/oidc/_media/oidc-sso.drawio
=====================================================
<mxfile host="drawio-plugin" modified="2023-05-19T09:35:49.753Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36" etag="8cXSAneUY9EacNUk1MxU" version="20.5.3" type="embed"><diagram id="9t5u96WNi0rS4HrvDtxI" name="Page-1"><mxGraphModel dx="1045" dy="583" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="TRxEg24sL5Zt3rOSAXKO-1" value="Apisix<br><br>API gateway" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="300" y="320" width="140" height="140" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-2" value="" style="shape=actor;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="50" y="300" width="40" height="60" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-4" value="Keycloack<br><br>OIDC provider" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="300" y="80" width="140" height="140" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-5" value="James<br><br>JMAP server" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="600" y="320" width="140" height="140" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-7" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" parent="1" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="110" y="360" as="sourcePoint"/><mxPoint x="290" y="390" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-8" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" parent="1" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="100" y="400" as="sourcePoint"/><mxPoint x="280" y="430" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-9" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" parent="1" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="450" y="400" as="sourcePoint"/><mxPoint x="590" y="400" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-10" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" parent="1" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="110" y="330" as="sourcePoint"/><mxPoint x="290" y="200" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-11" value="1. Un-authenticated request will be rejected" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="130" y="300" width="210" height="70" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-12" value="2. Login against keycloack" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="40" y="180" width="210" height="70" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-13" value="3. Use of the access token to authenticate against Apisix" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="60" y="420" width="210" height="70" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-14" value="4. use of the X-User header to proxy authentication to Apache James" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="410" y="430" width="210" height="70" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-15" value="LDAP" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="600" y="80" width="140" height="140" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-16" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="TRxEg24sL5Zt3rOSAXKO-5" target="TRxEg24sL5Zt3rOSAXKO-15" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="400" y="310" as="sourcePoint"/><mxPoint x="450" y="260" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-17" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="TRxEg24sL5Zt3rOSAXKO-4" target="TRxEg24sL5Zt3rOSAXKO-15" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="400" y="310" as="sourcePoint"/><mxPoint x="450" y="260" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-18" value="Verify credentials" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="490" y="110" width="60" height="30" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-19" value="List users,<br>Verify that user exists" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="590" y="260" width="60" height="30" as="geometry"/></mxCell></root></mxGraphModel></diagram></mxfile>
=====================================================
== File: examples/oidc/_media/oidc-slo.drawio
=====================================================
<mxfile host="drawio-plugin" modified="2023-05-19T09:39:47.749Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36" etag="MQ-wdtVOlcMwVUt4tywV" version="20.5.3" type="embed"><diagram id="9t5u96WNi0rS4HrvDtxI" name="Page-1"><mxGraphModel dx="1045" dy="583" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="TRxEg24sL5Zt3rOSAXKO-1" value="Apisix<br><br>API gateway" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="450" y="320" width="140" height="140" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-2" value="" style="shape=actor;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="50" y="300" width="40" height="60" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-4" value="Keycloack<br><br>OIDC provider" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="260" y="90" width="140" height="140" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-20" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" parent="1" target="TRxEg24sL5Zt3rOSAXKO-4" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="110" y="330" as="sourcePoint"/><mxPoint x="450" y="260" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-21" value="1. logout with keycloack logout endpoint" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="50" y="180" width="190" height="80" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-22" value="Apisix plugin runner" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="475" y="220" width="80" height="80" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-23" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" source="TRxEg24sL5Zt3rOSAXKO-4" target="TRxEg24sL5Zt3rOSAXKO-22" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="400" y="310" as="sourcePoint"/><mxPoint x="450" y="260" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-24" value="2. Use of logout backchannel (HTTP call)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="450" y="150" width="130" height="50" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-27" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;startArrow=none;entryX=0;entryY=0.75;entryDx=0;entryDy=0;" parent="1" source="TRxEg24sL5Zt3rOSAXKO-29" target="2" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="120" y="340" as="sourcePoint"/><mxPoint x="290" y="390" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-28" value="3.Access tokens used after logout are rejected" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="130" y="430" width="120" height="30" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-29" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.no_symbol;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="160" y="310" width="100" height="100" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-30" value="" style="shape=flexArrow;endArrow=none;html=1;rounded=0;" parent="1" target="TRxEg24sL5Zt3rOSAXKO-29" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="120" y="340" as="sourcePoint"/><mxPoint x="290" y="390" as="targetPoint"/></mxGeometry></mxCell><mxCell id="2" value="" style="rounded=0;whiteSpace=wrap;html=1;gradientColor=none;opacity=30;strokeWidth=5;strokeColor=#000000;perimeterSpacing=0;fillColor=#808080;" parent="1" vertex="1"><mxGeometry x="430" y="200" width="180" height="290" as="geometry"/></mxCell><mxCell id="3" value="Apisix" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" vertex="1" parent="1"><mxGeometry x="536" y="469" width="90" height="20" as="geometry"/></mxCell></root></mxGraphModel></diagram></mxfile>
=====================================================
== File: examples/oidc/_media/IMAP_SMTP oidc.drawio
=====================================================
<mxfile host="app.diagrams.net" modified="2022-01-20T04:07:37.309Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36" etag="OGjRz3jpXBH_9HMDoK-6" version="16.4.2" type="google"><diagram id="thl9NaU5WR5Ri5IL_89n" name="Page-1">5VnbcuI4EP0aqnYfoCwZG3gkcfYym9RSlcrs5U3YwmhiLCKJAPn6adky2LK9MBkIm0weiNRqt6Q+3UdtueNeLza/CrKc3/GIJh3sRJuOG3QwHg0R/GrBNhd4yAhiwaJcVBLcsxdqhI6RrlhEZUVRcZ4otqwKQ56mNFQVGRGCr6tqM55UZ12SmNYE9yFJ6tK/WKTmuXSIB3v5b5TF82Jm5I/ykQUplM1O5JxEfF0SuTcd91pwrvLWYnNNE+27wi/5c7+0jO4WJmiqjnkgoqOXeE05uxulo6fPwcu/D1+6xsozSVZmwx3sJ2DvasbBLKxabY0r/KcVLwa6MgNqDAqov9zsB6EV6/8PkorCEiwpN5YPGW/s7GJwzFI3V4tkHCouQOeZCsUAhFsypcmES6YYT0FlypXii5LCOGGxHlB8CdK5WiTQQbtZtBrdtDoM7WCA8KV8QZXYgop5wDPAmchFvumv93FQiOalEBgZGTGRF+8M78GBhsHnG7Dyvx8r3ITVH3QbJpw8Ftamohj58/cAlupMBH+GLBR1hWMhht1BwkLnaj1nit4vSahH1kAZVdiIXOZZPGMbGpkdGFZA/dPgigdVYN06rqO3xHVwJlxvg/Hkg0DW961c9C6M2fBMmH0a393cfxDQ7DzDwwuDNmoAreUsmiV0M9blA7iCppFpBmFCpGRh1ZeCr9JIOzFwLEfi/OmicEBODw+9AeoXv34+btSHPYSd0t/+GKNRrUixQICqiIiYqkMhWwerBIbXAEYhEzQhij1Xl9GEkJlhwlmWB0XwuFYs9C2QJV+JkJqnylWMZch1LEPIMpT7oWYoC5jdtl8fQwi3Zr5ckrQx86ckfIyzKOmGPNEFjiYAEU9/wp7X0WWbPmWt9s91ckC9h7Q7Xqk5YA/Fj4KY08A8rahUMoMyW/+UZuIvkOBaY8cc+fpamAPSXFXDWirBH+l1vuAg5ammlRlMYYmIKcFCWBUtF29FbbZgUZS0cVJ78pyoikPW0dF03KNBQ+S756Ih5L4/HgJni+3fxnTW+Ud3er4/KATBpjwcbMu9CRUMnKfDIxOekNb8/xOtoeEraQ1bUWqfgedmtf7lWK1e7eDeLY+ZnpXEhKVS+2n/kgLv//pegGrpOAyplJnskaY/PNd5zUF0iOnss/h0TOe9Y6brOj3HGVp0h9GF6e6yVRy2ztLBiejOtQ/bc/Nd+13K2fnO7cHQg9RFGrHoK6c2UqrwKhz4iSyo/OFJzg4ddPF6rukywH4xb2I0CVGuXkl0GQ9tmMpqst6o3zf9nKfwYGj6e5rSnW2pY5NUc4l3iO+Op7acGw5R2xEUOLgkBXr9A8x1LAX27dsR/MYUWL8N+QwRMdOuVHOiV7rKLvEdCJbs/dIOacA8u5+3bpaOZg9BJXsh08yeDqWl3mq2ee+q4wXfwh7m648x1tn5shyG/5G7rVwDNQByB8MKUOj74qhQ4bOZpGdBttj82/PRjkF6joerlRMkynkrp4P04r8HerFL+JPdk6E3fqMstt5EL6GgkS5wSPJBWaX0fbeFVVxcfAc3+HTx5WgFuvvP0Ln6/lu+e/MV</diagram></mxfile>
=====================================================
== File: examples/oidc/apisix/conf/apisix.yaml
=====================================================
routes:
# OIDC authentication endpoints
-
id: jmap
uri: /oidc/jmap
service_id: jmap_service_oidc
methods:
- POST
- OPTIONS
plugin_config_id: jmap-plugin
plugins:
proxy-rewrite:
uri: /jmap
headers:
set:
X-User-Secret: ${{X_USER_SECRET}}
-
id: jmap_websocket
uri: /oidc/jmap/ws
service_id: jmap_service_oidc
enable_websocket: true
methods:
- GET
- OPTIONS
plugin_config_id: jmap-plugin
plugins:
proxy-rewrite:
uri: /jmap/ws
headers:
set:
X-User-Secret: ${{X_USER_SECRET}}
-
id: jmap_session_oidc
uri: /oidc/jmap/session
service_id: jmap_service_oidc
methods:
- GET
- OPTIONS
plugin_config_id: jmap-plugin
plugins:
proxy-rewrite:
uri: /jmap/session
headers:
set:
X-User-Secret: ${{X_USER_SECRET}}
-
id: download
uri: /oidc/download/*
service_id: jmap_service_oidc
methods:
=====================================================
== File: examples/oidc/apisix/conf/config.yaml
=====================================================
deployment:
role: data_plane
role_data_plane:
config_provider: yaml
ext-plugin:
path_for_test: /tmp/runner.sock
cmd: ['java', '-jar', '-DREDIS_PASSWORD=secret1', '-DREDIS_URL=redis.example.com:6379','-DAPP_REWRITE_XUSER_USERINFO_FIELD=email', '-Xmx1g', '-Xms1g', '/usr/local/apisix/token_revoker_plugin.jar']
=====================================================
== File: examples/oidc/README.md
=====================================================
# OIDC JMAP, IMAP and SMTP example with James, Apisix API Gateway, Keycloak, LDAP
====
This is example of an OIDC setup with James.
The API Gateway for example is [Apisix](https://apisix.apache.org/), we can use Apisix for websocket gateway, horizontal scaling, etc...
This [docker-compose](docker-compose.yml) will start the following services:
- apisix: The image `linagora/apisix:3.2.0-debian-javaplugin` was created by Linagora. It based on `apisix:3.2.0-debian`, it already contain apisix plugin for
SLO (Single Logout) and rewrite the `X-User` header.
- Dockerfile: [here](https://github.com/linagora/tmail-backend/blob/master/demo/apisix/Dockerfile)
- Project `tmail-apisix-plugin-runner`: [here](https://github.com/linagora/tmail-backend/tree/master/demo/apisix/tmail-apisix-plugin-runner)
- Apisix being the OIDC gateway against James by exposing two endpoints:
- `POST /jmap` for JMAP requests against James with normal authentication
- `POST /oidc/jmap` for JMAP request against James with a JWT token issued by the LemonLDAP
- james: Memory version using the LDAP and `XUserAuthenticationStrategy` for JMAP
- sso.example.com: keycloak image with a pre-configured `oidc` realm, `oidc` client (Authorization Code Flow, should dedicate for JMAP), `james-thunderbird` client (Client Credentials Flow, dedicated for IMAP/SMTP) and connected to the LDAP for its user base
- ldap: with a pre-provisioned user `james-user@tmail.com` and his password `secret`
- redis: for storage of the revoked token. This is optional, we can un-use it if we want to store it in-memory with Apisix standalone.
## Overall architecture
### JMAP
Here is an architecture diagram showing how Single Sign On works for this example:

SSO auto-discovery might require the set up of a `.well-known/webfinger` endpoint described in
[this spec](https://openid.net/specs/openid-connect-discovery-1_0.html)
via external means (not provided here).
Here is an architecture diagram showing how Single Log Out works for this example, using the backchannel OIDC flow:

### IMAP/SMTP
Here is an architecture diagram showing how to authenticate JAMES IMAP/SMTP using OIDC Provider:

## How to run it
```bash
docker-compose up -d
```
=====================================================
== File: examples/oidc/ldap/populate.ldif
=====================================================
dn: ou=people, dc=localhost
ou: people
objectClass: organizationalUnit
dn: ou=empty, dc=localhost
ou: empty
objectClass: organizationalUnit
dn: uid=james-user@localhost, ou=people, dc=localhost
objectClass: inetOrgPerson
uid: james-user@localhost
cn: james-user
sn: james-user
mail: james-user@localhost
userPassword: secret
description: James user
=====================================================
== File: mailbox/spring/src/test/README.md
=====================================================
Running these tests requires applying the openjpa javaagent. This is configured for you when running the tests through maven.
In your IDE you will have to add the following JVM argument (the version may vary check the apache.openjpa.version property value in the top level pom.xml):
```
-javaagent:${HOME}/.m2/repository/org/apache/openjpa/openjpa/4.1.1/openjpa-4.1.1.jar
```
=====================================================
== File: mailbox/plugin/quota-mailing/src/main/resources/templates/QuotaThresholdMailBody.mustache
=====================================================
You receive this email because you recently exceeded a threshold related to the quotas of your email account.
{{#hasExceededSizeThreshold}}
You currently occupy more than {{sizeThreshold}} % of the total size allocated to you.
You currently occupy {{usedSize}}{{#hasSizeLimit}} on a total of {{limitSize}} allocated to you{{/hasSizeLimit}}.
{{/hasExceededSizeThreshold}}
{{#hasExceededCountThreshold}}
You currently occupy more than {{countThreshold}} % of the total message count allocated to you.
You currently have {{usedCount}} messages{{#hasCountLimit}} on a total of {{limitCount}} allowed for you{{/hasCountLimit}}.
{{/hasExceededCountThreshold}}
You need to be aware that actions leading to exceeded quotas will be denied. This will result in a degraded service.
To mitigate this issue you might reach your administrator in order to increase your configured quota. You might also delete some non important emails.
=====================================================
== File: mailbox/plugin/quota-mailing/src/main/resources/templates/QuotaThresholdMailSubject.mustache
=====================================================
Warning: Your email usage just exceeded a configured threshold
=====================================================
== File: mailbox/plugin/quota-mailing/src/test/resources/templates/body1.mustache
=====================================================
[BODY_1]
=====================================================
== File: mailbox/plugin/quota-mailing/src/test/resources/templates/body2.mustache
=====================================================
[BODY_2]
=====================================================
== File: mailbox/plugin/quota-mailing/src/test/resources/templates/subject2.mustache
=====================================================
[SUBJECT_2]
=====================================================
== File: mailbox/plugin/quota-mailing/src/test/resources/templates/subject1.mustache
=====================================================
[SUBJECT_1]
=====================================================
== File: mailbox/opensearch/src/test/resources/eml/emailWith3Attachments.eml
=====================================================
To: Laura ROYET <laura.ro@linagora.com>
From: Laura Royet <laura.ro@linagora.com>
Subject: test
Message-ID: <cb415bdb-b27d-fc25-b91f-aae6b4774b71@linagora.com>
Date: Wed, 11 Jan 2017 11:52:35 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.6.0
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------36566F1E9D791340FFB75FF8"
This is a multi-part message in MIME format.
--------------36566F1E9D791340FFB75FF8
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
--
Laura Royet
--------------36566F1E9D791340FFB75FF8
Content-Type: application/vnd.oasis.opendocument.text;
name="attachment1.odt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="attachment1.odt"
UEsDBBQAAAgAAGJVK0pexjIMJwAAACcAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQu
dC54bWxQSwUGAAAAABEAEQBwBAAAjyUAAAAA
--------------36566F1E9D791340FFB75FF8
Content-Type: application/vnd.oasis.opendocument.text;
name="attachment2-nonIndexableAttachment.html"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="attachment2-nonIndexableAttachment.odt"
PCFET0NUWVBFIGh0bWw+CjxodG1sIGNsYXNzPSJtb3ppbGxhIiBsYW5nPSJlbiI+PGhlYWQ+
CI+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4=
--------------36566F1E9D791340FFB75FF8
Content-Type: application/vnd.oasis.opendocument.text;
name="attachment3.odt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="attachment3.odt"
UEsDBBQAAAgAAG9VK0pexjIMJwAAACcAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQu
AAAAEgkAABNRVRBLUlORi9tYW5pZmVzdC54bWxQSwUGAAAAABEAEQBwBAAApyUAAAAA
--------------36566F1E9D791340FFB75FF8--
=====================================================
== File: mailbox/opensearch/src/test/resources/eml/mailCustomStringHeader.eml
=====================================================
Content-Type: text/plain; Charset=UTF-8
Subject: subject
MIME-Version: 1.0
Message-Id: <20100916151246.2A9384BA1@lenny>
From: a@test
To: b@test
Custom-header: custom header
Mail content
=====================================================
== File: mailbox/opensearch/src/test/resources/eml/bodyMakeTikaToFail.eml
=====================================================
Date: Mon, 30 Jan 2017 11:51:35 +0100
From: Raphael OUAZANA <raph.ouazana@linagora.com>
To: OUAZANA Raphael <raph.ouazana@linagora.com>
Subject: subject should be parsed
Message-ID: <255cb2b85feee171cd9a88bda109c9f0@linagora.com>
X-Sender: raph.ouazana@linagora.com
User-Agent: Roundcube Webmail/1.1.4
Return-Path: <iphone@obm.lng.org>
Received: from lenny.obm.lng.org (localhost [127.0.0.1])
by lenny.obm.lng.org (Cyrus v2.3.14-Debian-2.3.14-2) with LMTPA;
Wed, 21 Mar 2012 14:51:59 +0100
X-Sieve: CMU Sieve 2.3
Received: from [192.168.2.48] (unknown [192.168.2.48])
by lenny.obm.lng.org (Postfix) with ESMTP id E495D32929
for <usera@obm.lng.org>; Wed, 21 Mar 2012 14:51:58 +0100 (CET)
Message-ID: <4F69DD0E.3010502@obm.lng.org>
Date: Wed, 21 Mar 2012 14:52:14 +0100
From: iphone <iphone@obm.lng.org>
User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US;
rv:1.9.2.28) Gecko/20120306 Lightning/1.0b2 Thunderbird/3.1.20
MIME-Version: 1.0
To: usera <usera@obm.lng.org>
Subject: Fwd: Re: email with sign
Content-Type: multipart/mixed;
boundary="------------080809000000030101030405"
This is a multi-part message in MIME format.
--------------080809000000030101030405
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
new email text part
--------------080809000000030101030405
Content-Type: message/rfc822;
name="Re: email with sign.eml"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="Re: email with sign.eml"
Return-Path: <usera@obm.lng.org>
Received: from lenny.obm.lng.org (localhost [127.0.0.1])
by lenny.obm.lng.org (Cyrus v2.3.14-Debian-2.3.14-2) with LMTPA;
Wed, 21 Mar 2012 14:19:29 +0100
X-Sieve: CMU Sieve 2.3
Received: from [192.168.2.48] (unknown [192.168.2.48])
by lenny.obm.lng.org (Postfix) with ESMTP id 47EC832D51
for <iphone@obm.lng.org>; Wed, 21 Mar 2012 14:19:29 +0100 (CET)
Message-ID: <4F69D570.9090502@obm.lng.org>
=====================================================
== File: mailbox/opensearch/src/test/resources/eml/alternative_simple.eml
=====================================================
MIME-Version: 1.0
Subject: Test
From: Benoit TELLIER <btellier@linagora.com>
To: Benoit TELLIER <btellier@linagora.com>
Date: Tue, 13 Feb 2024 23:01:18 +0000
Message-ID: <Mime4j.17d.c7b7d059b303c215.18da4b4076b@linagora.com>
Content-Type: multipart/alternative;
boundary="-=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=-"
---=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Test
---=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=-
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div>Test<br><br></div>
---=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=---
=====================================================
== File: mailbox/opensearch/src/test/resources/eml/attachments-filename-in-content-type.eml
=====================================================
MIME-Version: 1.0
Subject: Hello xyz
From: Bob <bob@linagora.com>
To: alice@linagora.com
Message-ID: <Mime4j.14.31ce45ac61ec422b.196e75ccf9b@linagora.com>
User-Agent: Twake-Mail/0.15.3 Mozilla/5.0 (Macintosh; Intel Mac OS X
10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0
Safari/537.36
Content-Type: multipart/mixed;
boundary="-=Part.16.2ce5c5497f23d613.196e75cd044.32ca13e0fd5dd663=-"
---=Part.16.2ce5c5497f23d613.196e75cd044.32ca13e0fd5dd663=-
Content-Type: multipart/alternative;
boundary="-=Part.15.4e5239b38c309d78.196e75cd043.9d6830842151817f=-"
---=Part.15.4e5239b38c309d78.196e75cd043.9d6830842151817f=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT, de-DE
Content-Language: vi-VN
body
---=Part.15.4e5239b38c309d78.196e75cd043.9d6830842151817f=-
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Accept-Language: fr-FR, en-US, vi-VN, ru-RU, ar-TN, it-IT, de-DE
Content-Language: vi-VN
<div>body<br><br></div>
---=Part.15.4e5239b38c309d78.196e75cd043.9d6830842151817f=---
---=Part.16.2ce5c5497f23d613.196e75cd044.32ca13e0fd5dd663=-
Content-Type: text/plain; name="=?US-ASCII?Q?1.txt?="; charset=windows-1252
Content-Disposition: attachment
Content-Transfer-Encoding: base64
d2hhdGV2ZXIK
---=Part.16.2ce5c5497f23d613.196e75cd044.32ca13e0fd5dd663=-
Content-Type: text/plain; name="=?US-ASCII?Q?2.txt?="; charset=windows-1252
Content-Disposition: attachment
Content-Transfer-Encoding: base64
d2hhdGV2ZXIyCg==
---=Part.16.2ce5c5497f23d613.196e75cd044.32ca13e0fd5dd663=---
=====================================================
== File: mailbox/opensearch/src/test/resources/eml/mailCustomDateHeader.eml
=====================================================
Content-Type: text/plain; Charset=UTF-8
Subject: my subject test
MIME-Version: 1.0
Message-Id: <20100916151246.2A9384BA1@lenny>
From: B <b@test>
To: c@test
Custom-header: 2015/09/02
Mail content
=====================================================
== File: mailbox/opensearch/src/test/resources/eml/inlined-mixed.eml
=====================================================
Date: Wed, 26 Jan 2022 12:21:37 +0100
From: Bob <bob@domain.tld>
To: Alice <alice@domain.tld>
Subject: My subject
Message-ID: <20220126112137.wookj26xellphlam@W0248292>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="7f4cfz6rtfqdbqxn"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
--7f4cfz6rtfqdbqxn
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Main test message...
--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="yyy.txt"
Content-Transfer-Encoding: quoted-printable
[
{
"Id": "2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
]
--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="xxx.txt"
Content-Transfer-Encoding: quoted-printable
[
{
"Id": "3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
]
--7f4cfz6rtfqdbqxn--
=====================================================
== File: mailbox/opensearch/src/test/resources/eml/mailWithHeaders.eml
=====================================================
Content-Type: text/plain; Charset=UTF-8
Date: Fri, 17 Sep 2010 17:12:26 +0200
Subject: my subject
To: a@test, B <b@test>
Cc: c@test
Bcc: dD <d@test>
MIME-Version: 1.0
Message-Id: <20100917151246.2A9384BA1@lenny>
From: Ad Min <admin@opush.test>
Mail content
--
Ad Min
=====================================================
== File: mailbox/opensearch/src/test/resources/eml/htmlContent.txt
=====================================================
Linked Applications OpenPaas-Linagora Stash - OpenPaas Jenkins - OpenPaas Configure… Dashboards Projects Issues Agile More Create Help Online Help JIRA Agile Help Keyboard Shortcuts About JIRA JIRA Credits Administration JIRA administration Projects Issues User management System Add-ons Profile Atlassian Marketplace My JIRA Home Dashboard Agile Issue Navigator Disable new project navigation Log Out OpenPaaS RSE OR-2349 Docker-compose doesn't activate attachments and dwld/upld url are wrongly populated Edit Comment Assign More Agile Board Rank to Top Rank to Bottom Log Work Attach Files Attach Screenshot Add Drawio Diagram Voters Stop Watching Watchers Create Sub-Task Convert to Sub-Task Create branch Move Link Clone Labels Delete Stop Progress Resolve Issue Close Issue Admin Add field Where is my field? Permission Helper Notification Helper Export XML Word Printable Details Type: Bug Status: Progressing (View Workflow) Priority: Major Resolution: Unresolved Affects Version/s: None Fix Version/s: None Component/s: None Labels: None Labels Rank (Obsolete): 9223372036854775807 Acceptance Criteria: 0/1 Hide checkedShow checked Tested show more show less Description {
"name" : "uploadUrl",
"value" : "http://10.69.0.163:1080/jmap/upload",
"_id" : ObjectId("5785f85cd7f4033c00fc606d")
},
{
"name" : "downloadUrl",
"value" : "http://10.69.0.163:1080/jmap/download",
"_id" : ObjectId("5785f85cd7f4033c00fc606c")
},
should be replaced with {
"name" : "uploadUrl",
"value" : "http://10.69.0.163:1080/upload",
"_id" : ObjectId("5785f85cd7f4033c00fc606d")
},
{
"name" : "downloadUrl",
"value" : "http://10.69.0.163:1080/download",
"_id" : ObjectId("5785f85cd7f4033c00fc606c")
},
{
"name" : "composer.attachments",
"value" : true
}
Activity All Comments Work Log History Activity There are no comments yet on this issue. Comment Paragraph Heading 1 Heading 2 Heading 3 Heading 4 Heading 5 Heading 6 Preformatted Paragraph quote Block quote Strikethrough Superscript Subscript Citation External link Mail link Anchor link Attachment link Attachment link External image Attached image Attached image User mention Table Code Preformatted Panel Horizontal ruler Style BoldItalicUnderlineText colorMore colorsMore LinkImage Bullet listNumbered list IconsOther Lock / Unlock Preview comment This comment will be Viewable by All Users All Users Administrators Developers Users Viewable by All Users Cancel Comment People Assignee: Stephane COLSON Reporter: Stephane COLSON Votes: 0 Watchers: 1 Stop watching this issue Dates Created: 4 hours ago Updated: 4 hours ago Development 1 branch Updated 33 minutes ago 1 pull request OPEN Updated 33 minutes ago Create branch Agile View on Board Issue deployment Atlassian JIRA Project Management Software (v6.4.5#64020-sha1:78acd6c) About JIRA Report a problem Powered by a free Atlassian JIRA open source license for OpenPaas. Try JIRA - bug tracking software for your team. Atlassian
=====================================================
== File: mailbox/opensearch/src/test/resources/eml/alternative.eml
=====================================================
MIME-Version: 1.0
Subject: Test
From: Benoit TELLIER <btellier@linagora.com>
To: Benoit TELLIER <btellier@linagora.com>
Date: Tue, 13 Feb 2024 23:01:18 +0000
Message-ID: <Mime4j.17d.c7b7d059b303c215.18da4b4076b@linagora.com>
Content-Type: multipart/mixed;
boundary="-=Part.17f.732e3d28e1c76db4.18da4b40791.62ef5e3fa995057d=-"
---=Part.17f.732e3d28e1c76db4.18da4b40791.62ef5e3fa995057d=-
Content-Type: multipart/alternative;
boundary="-=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=-"
---=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Test
---=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=-
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div>Test<br><br></div>
---=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=---
---=Part.17f.732e3d28e1c76db4.18da4b40791.62ef5e3fa995057d=-
Content-Type: application/json; name="=?US-ASCII?Q?id=5Frsa.txt?="
Content-Disposition: attachment
Content-Transfer-Encoding: base64
c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFDa0dXMkp5c2lKR2hQZXdBOXRr
bVFFQm5EVjRaQ0llLy92ZFoyV0RybnZiNlZLQzdpWldjODFpU1ZkTFcxUkRBTll4c3ExN0dQanpV
OFlWdk9sRkFJSk1WTm9ESWhuQWtYOU9VUUJpd1hpOHlHZ3FLNGR0RmIxczJBRzNrQmxNUFFJOE5K
MkpLT2Z5MW51VnJubEtoVDlCVnpYMm5iSjNOak9PZlkxQlJEaDZZcVl1a2RuejBUT2k1Rkp1YUJT
NDZQemx3eWdIa0dzeXBLVHM2Y2FUNjBRdjl3eWFadm4yenN1RmNML3o2Mmd3aGZyZGFsakF1UGRX
cERlNG1IRVFmMXA2SXNRMDdPb0lwTmRHQ0tLZHRZQlVTcktzTXRpMllLUGZpSzB2WGU1L3owRWJE
VlRja1BrY3NwQ2cwYVZuZTB2eFVsRGt2U2pwV2tiQkZ0YTk5ekJjOVlJL0ROK28vRmtONlFTdXV5
U29tNDZkamZpUjdqSzNMRmJKUkhaem9BblNvaTZvRlR0MW1LWjNzam44bnZWUG1PV3pJWHY0Tm1O
R1ExZHFrV1hXcUtyQjlIZUZiQnRPWVAzaEkxQ0kvaVhNbVR1SkdvcHVTUmlTNW1QZXlSQWV6VGtk
UG8vZ2NSVWNzbklhVW1EallUWHBFNzU3Yk5LWVNHbFJsS3FrbEhKc2JveEdTK0NaVzBJS2dZeTdG
cmZRZ1FGMTdvaUpWM1JJQ1VHcU9rM1I2VnZOYlhlL2VmZS9IT24xd0lZUS9qVGRzY0hCamRIM2FF
MmY4Y3dVS1IzNUtWNlJ1SE4vYVpiekxiVkJxUEMvUTcwd3NMQlloV29Da1dRMElUUmxGV2N3bnN3
VTE5NnlGWkVHSmthOUNEaHZQdUVBV0NLWnFRT3gyMnRoYWVSQlE9PSBiZW53YUBob3Jpem9uCg==
=====================================================
== File: mailbox/memory/src/test/resources/test.eml
=====================================================
=====================================================
== File: mailbox/tika/src/test/resources/documents/Text.txt
=====================================================
This is some awesome text text.
=====================================================
== File: mailbox/api/src/test/resources/eml/twoAttachmentsApi.eml
=====================================================
Return-Path: <from@linagora.com>
X-Priority: 3 (Normal)
From: "From"
<from@linagora.com>
To: "To"
<to@linagora.com>
Subject: [8/10]Attached Image light with text
Date: Fri, 27 Mar 2015 21:48:38 +0100
Message-Id: <20150227203838.0011.CanonTxNo.4037@canondir.par.lng>
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="AHNPACBLDCDIDAGGGDDFAABECGCA"
--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: text/html; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
<b>html</b>
--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: image/jpeg;
name="4037_014.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="4037_014.jpg"
/9j/4X2cRXhpZgAASUkqAAgAAAANAA8BAgAKAAAAqgAAABABAgAJAAAAtAAAABIBAwABAAAA
AQAAABoBBQABAAAAvgAAABsBBQABAAAAxgAAACgBAwABAAAAAgAAADEBAgAKAAAAzgAAADIB
AgAUAAAA2AAAABMCAwABAAAAAgAAAGmHBAABAAAAfAIAAKXEBwDQAAAA7AAAANLGBwBAAAAA
vAEAANPGBwCAAAAA/AEAAEwqAABQYW5hc29uaWMARE1DLUZaNDUAALQAAAABAAAAtAAAAAEA
AABWZXIuMS4wICAAMjAxNDowMjoyNSAxMDozMjowOQBQcmludElNADAyNTAAAA4AAQAWABYA
AgAAAAAAAwBkAAAABwAAAAAACAAAAAAACQAAAAAACgAAAAAACwCsAAAADAAAAAAADQAAAAAA
DgDEAAAAAAEFAAAAAQEBAAAAEAGAAAAACREAABAnAAALDwAAECcAAJcFAAAQJwAAsAgAABAn
AAABHAAAECcAAF4CAAAQJwAAiwAAABAnAADLAwAAECcAAOUbAAAQJwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: image/jpeg;
name="4037_015.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="4037_015.jpg"
=====================================================
== File: mailbox/README.md
=====================================================
Apache James Mailbox project
============================
The James Mailbox project aims to provide an email (message) store. The main user of the Mailbox project is James Server
project. The implementations can be used standalone and do not depend on James Server.
The project defines the Mailbox API and has several implementations that you can use. More details bellow.
Overview
========
Apache James Mailbox has the following project (Maven) structure:
~~~
|-- api -- Mailbox API
|-- jpa -- Database Mailbox implementation using Java Persistence API
|-- lucene -- Email indexing module with Apache Lucene
|-- memory -- In memory Mailbox implementation - good for testing
|-- spring -- Spring module - starts a specific mailbox implementation
|-- store -- Common base/utility classes used in all mailbox implementations
|-- tool -- Database migration/mailbox export tool
~~~
Mailbox JPA
===========
Persist email messages inside any database that is supported by your Java Persistence Api provider. Currently James uses
OpenJPA (http://openjpa.apache.org/), but it's easy to implement your own.
Mailbox 'In memory' message store
=================================
In module **memory**, does not persist emails. It just keeps them in memory. Fast, and good for testing.
**Note:** Not to be used in production.
Building
========
The primary build tool for Apache James Mailbox is maven 3.
On a new checkout start by running
~~~
$ mvn clean package
~~~
This will compiled all modules
For just building without running junit tests:
~~~
=====================================================
== File: mailbox/store/src/test/resources/eml/pgpSignedMail.eml
=====================================================
Return-Path: <bounce-debian-security-announce=benwa=minet.net@lists.debian.org>
Received: from mx2.minet.net (mx2.minet.net [192.168.102.26])
by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
Wed, 03 Jun 2015 21:19:59 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
by mx2.minet.net (Postfix) with ESMTP id 8A9DAA27DA1
for <benwa@minet.net>; Wed, 3 Jun 2015 21:20:03 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.51
X-Spam-Level:
X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
T_RP_MATCHES_RCVD=-0.01] autolearn=unavailable
Received: from mx2.minet.net ([IPv6:::ffff:192.168.102.26])
by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
with ESMTP id cF6J0AAnzsTX for <benwa@minet.net>;
Wed, 3 Jun 2015 19:20:02 +0000 (UTC)
Received-SPF: None (no SPF record) identity=mailfrom; client-ip=82.195.75.100; helo=bendel.debian.org; envelope-from=bounce-debian-security-announce=benwa=minet.net@lists.debian.org; receiver=benwa@minet.net
Received: from bendel.debian.org (bendel.debian.org [82.195.75.100])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx2.minet.net (Postfix) with ESMTPS id 7F69FA27D98
for <benwa@minet.net>; Wed, 3 Jun 2015 21:20:01 +0200 (CEST)
Received: from localhost (localhost [127.0.0.1])
by bendel.debian.org (Postfix) with QMQP
id 1C2F6275; Wed, 3 Jun 2015 19:14:50 +0000 (UTC)
Old-Return-Path: <carnil@master.debian.org>
X-Original-To: lists-debian-security-announce@bendel.debian.org
Delivered-To: lists-debian-security-announce@bendel.debian.org
Received: from localhost (localhost [127.0.0.1])
by bendel.debian.org (Postfix) with ESMTP id 7EFBF228
for <lists-debian-security-announce@bendel.debian.org>; Wed, 3 Jun 2015 19:14:39 +0000 (UTC)
X-Amavis-Spam-Status: No, score=-8.99 tagged_above=-10000 required=5.3
tests=[BAYES_00=-2, DIGITS_LETTERS=1, FVGT_m_MULTI_ODD=0.02,
LDO_WHITELIST=-5, OUR_MTA_MSGID=2, PGPSIGNATURE=-5,
T_RP_MATCHES_RCVD=-0.01] autolearn=ham
Received: from bendel.debian.org ([127.0.0.1])
by localhost (lists.debian.org [127.0.0.1]) (amavisd-new, port 2525)
with ESMTP id RiKdt2PVwXOm
for <lists-debian-security-announce@bendel.debian.org>;
Wed, 3 Jun 2015 19:14:34 +0000 (UTC)
Received: from master.debian.org (master.debian.org [IPv6:2001:41b8:202:deb:216:36ff:fe40:4001])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(Client CN "master.debian.org", Issuer "Debian SMTP CA" (not verified))
by bendel.debian.org (Postfix) with ESMTPS id ABE761B7
for <debian-security-announce@lists.debian.org>; Wed, 3 Jun 2015 19:14:34 +0000 (UTC)
Received: from carnil by master.debian.org with local (Exim 4.84)
(envelope-from <carnil@master.debian.org>)
id 1Z0E7U-0004Bc-Jv
=====================================================
== File: mailbox/store/src/test/resources/eml/htmlMail.eml
=====================================================
Delivered-To: mister@james.org
Received: by 10.28.170.202 with SMTP id t193csp327634wme;
Thu, 4 Jun 2015 00:36:15 -0700 (PDT)
X-Received: by 10.180.77.195 with SMTP id u3mr5042880wiw.30.1433403375307;
Thu, 04 Jun 2015 00:36:15 -0700 (PDT)
Return-Path: <bounces+1453977-062b-mister=james.org@email.airbnb.com>
Received: from o7.email.airbnb.com (o7.email.airbnb.com. [167.89.32.249])
by mx.google.com with ESMTPS id i2si5691730wjz.123.2015.06.04.00.36.13
for <mister@james.org>
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Thu, 04 Jun 2015 00:36:15 -0700 (PDT)
Received-SPF: pass (google.com: domain of bounces+1453977-062b-mister=james.org@email.airbnb.com designates 167.89.32.249 as permitted sender) client-ip=167.89.32.249;
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of bounces+1453977-062b-mister=james.org@email.airbnb.com designates 167.89.32.249 as permitted sender) smtp.mail=bounces+1453977-062b-mister=james.org@email.airbnb.com;
dkim=pass header.i=@email.airbnb.com;
dmarc=pass (p=REJECT dis=NONE) header.from=airbnb.com
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=email.airbnb.com;
h=from:to:subject:mime-version:content-type:content-transfer-encoding;
s=s20150428; bh=2mhWUwzjtQTC0KljgpaEsuvrqok=; b=EhC2QHKb5+63egDD
qDCAepUELCeUZXCkw8+31kGT+O1va3iAKvQSAvzXJ3qJlIL9FgdeFk8sR78Vszn/
A73vp6NGjAW60M4gUZjxEOIPzGKIS95KfmHxg10fXUOFW0uePojNEg4ZPCcuitrZ
HuWvzHK5I2siGnqupiivwxDgs5c=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sendgrid.info;
h=from:to:subject:mime-version:content-type:content-transfer-encoding:x-feedback-id;
s=smtpapi; bh=2mhWUwzjtQTC0KljgpaEsuvrqok=; b=FPiYMmNJLCrL2e8v/0
DQC4voofe8nuuE7rhXZ25oqNAhAQja4oKIysJ1qAME2aEaqh+N5aJlCEuHrSG/7+
NAQ0OY8KaJ2zlnxAbmgJETOjnf4oGdAa+nU/nVVEPfN2NRcBCNLGQZ80U4T5k8Xi
PakIuZvKDTRq7PiosSCSHT/FQ=
Received: by filter0490p1mdw1.sendgrid.net with SMTP id filter0490p1mdw1.13271.556FFFE7B
2015-06-04 07:36:09.249601779 +0000 UTC
Received: from i-dee0850e.inst.aws.airbnb.com (ec2-54-90-154-187.compute-1.amazonaws.com [54.90.154.187])
by ismtpd-017 (SG) with ESMTP id 14dbd7fa6b4.779a.254b43
for <mister@james.org>; Thu, 04 Jun 2015 07:36:09 +0000 (UTC)
Received: by i-dee0850e.inst.aws.airbnb.com (Postfix, from userid 1041)
id 19CBA24C60; Thu, 4 Jun 2015 07:36:09 +0000 (UTC)
Date: Thu, 04 Jun 2015 07:36:08 +0000
From: Airbnb <discover@airbnb.com>
To: mister@james.org
Message-ID: <556fffe8cac78_7ed0e0fe204457be@i-dee0850e.mail>
Subject: Text and Html not similar
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--==_mimepart_556fffe8c7e84_7ed0e0fe20445637";
charset=UTF-8
Content-Transfer-Encoding: 7bit
X-User-ID: 32692788
X-Locale: fr
X-Category: engagement
X-Template: low_intent_top_destinations
recipients:
=====================================================
== File: mailbox/store/src/test/resources/eml/mail4.eml
=====================================================
Return-Path: <mailet-api-return-812-benwa=minet.net@james.apache.org>
Received: from mx2.minet.net (mx2.minet.net [192.168.102.26])
by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
Fri, 15 May 2015 08:36:03 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
by mx2.minet.net (Postfix) with ESMTP id 5AC87A19A4F
for <benwa@minet.net>; Fri, 15 May 2015 08:36:03 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.51
X-Spam-Level:
X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
T_RP_MATCHES_RCVD=-0.01] autolearn=ham
Received: from mx1.minet.net ([IPv6:::ffff:192.168.102.25])
by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
with ESMTP id 2xNJ-Rh-AWoj for <benwa@minet.net>;
Fri, 15 May 2015 06:36:02 +0000 (UTC)
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=140.211.11.3; helo=mail.apache.org; envelope-from=mailet-api-return-812-benwa=minet.net@james.apache.org; receiver=benwa@minet.net
Authentication-Results: mx1.minet.net; dkim=none reason="no signature";
dkim-adsp=none (insecure policy); dkim-atps=neutral
Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
by mx1.minet.net (Postfix) with SMTP id 24F75686039
for <benwa@minet.net>; Fri, 15 May 2015 08:36:01 +0200 (CEST)
Received: (qmail 81830 invoked by uid 500); 15 May 2015 06:36:00 -0000
Mailing-List: contact mailet-api-help@james.apache.org; run by ezmlm
Precedence: bulk
List-Help: <mailto:mailet-api-help@james.apache.org>
List-Unsubscribe: <mailto:mailet-api-unsubscribe@james.apache.org>
List-Post: <mailto:mailet-api@james.apache.org>
List-Id: <mailet-api.james.apache.org>
Reply-To: mailet-api@james.apache.org
Delivered-To: mailing list mailet-api@james.apache.org
Received: (qmail 81730 invoked by uid 99); 15 May 2015 06:36:00 -0000
Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 15 May 2015 06:36:00 +0000
Date: Fri, 15 May 2015 06:35:59 +0000 (UTC)
From: "Eric Charles (JIRA)" <mailet-api@james.apache.org>
To: "zzz" <a-mailet-api@james.apache.org>
Cc: monkey@any.com
Bcc: monkey@any.com
Message-ID: <JIRA.12825882.1430301328000.124152.1431671759942@Atlassian.JIRA>
In-Reply-To: <JIRA.12825882.1430301328000@Atlassian.JIRA>
References: <JIRA.12825882.1430301328000@Atlassian.JIRA> <JIRA.12825882.1430301328925@arcas>
Subject: [jira] [Resolved] (MAILET-94) James Mailet should use latest
version of other James subprojects
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394
=====================================================
== File: mailbox/store/src/test/resources/eml/recursiveMail.eml
=====================================================
Return-Path: <mbaechler@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
Wed, 10 Jun 2015 10:45:29 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.69.2.28] (mne69-10-88-173-78-196.fbx.proxad.net [88.173.78.196])
(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
(No client certificate requested)
by alderaan.linagora.com (Postfix) with ESMTPSA id 7F33E728
for <btellier@linagora.com>; Wed, 10 Jun 2015 10:45:28 +0200 (CEST)
Message-ID: <5577F927.2040409@linagora.com>
Date: Wed, 10 Jun 2015 10:45:27 +0200
From: Matthieu Baechler <mbaechler@linagora.com>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.7.0
MIME-Version: 1.0
To: btellier@linagora.com
Subject: Fwd: Courbe Sprint
References: <556EA5E0.8010008@linagora.com>
In-Reply-To: <556EA5E0.8010008@linagora.com>
X-Forwarded-Message-Id: <556EA5E0.8010008@linagora.com>
Content-Type: multipart/mixed;
boundary="------------080603090509090707040003"
This is a multi-part message in MIME format.
--------------080603090509090707040003
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Forward as attachment !
--------------080603090509090707040003
Content-Type: message/rfc822;
name="Courbe Sprint.eml"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment;
filename="Courbe Sprint.eml"
Return-Path: <aduprat@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
Wed, 03 Jun 2015 08:59:45 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.69.43.36] (mne69-10-88-173-78-196.fbx.proxad.net [88.173.78.196])
(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
(No client certificate requested)
by alderaan.linagora.com (Postfix) with ESMTPSA id 4FBAF720
for <mbaechler@linagora.com>; Wed, 3 Jun 2015 08:59:45 +0200 (CEST)
Message-ID: <556EA5E0.8010008@linagora.com>
=====================================================
== File: mailbox/store/src/test/resources/eml/emailWithNonIndexableAttachment.eml
=====================================================
Return-Path: <laura.ro@linagora.com>
MIME-Version: 1.0
Delivered-To: laura.ro@linagora.com
Content-Type: multipart/mixed;
boundary="-=Part.0.16b49c355c1c1b54.158b4d6fd1b.bd3741f90275bb0a=-"
From: Laura ROYET <laura.ro@linagora.com>
Sender: Laura ROYET <laura.ro@linagora.com>
To: Laura ROYET <laura.ro@linagora.com>
Subject: test
Message-ID: 1480502737913
Date: Wed, 30 Nov 2016 10:45:38 +0000
---=Part.0.16b49c355c1c1b54.158b4d6fd1b.bd3741f90275bb0a=-
Content-Type: text/html; charset=utf-8; name="=?US-ASCII?Q?test.html?="
Content-Disposition: attachment
Content-Transfer-Encoding: base64
PCFET0NUWVBFIGh0bWw+CjxodG1sIGNsYXNzPSJtb3ppbGxhIiBsYW5nPSJlbiI+PGhlYWQ+Cjxt
ZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0
PVVURi04Ij4KICAgIAoKCgoKCjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPG1ldGEgaHR0cC1lcXVp
dj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1FZGdlIj4KPG1ldGEgbmFtZT0iYXBwbGlj
YXRpb24tbmFtZSIgY29udGVudD0iSklSQSIgZGF0YS1uYW1lPSJqaXJhIiBkYXRhLXZlcnNpb249
IjYuNC41Ij48bWV0YSBuYW1lPSJhanMtc2VydmVyUmVuZGVyZWRWaWV3SXNzdWUiIGNvbnRlbnQ9
InRydWUiPgo8bWV0YSBuYW1lPSJhanMtaGFzQ3JpdGVyaWFBdXRvVXBkYXRlIiBjb250ZW50PSJ0
cnVlIj4KPG1ldGEgbmFtZT0iYWpzLXZpZXdpc3N1ZS11c2UtaGlzdG9yeS1hcGkiIGNvbnRlbnQ9
ImZhbHNlIj4KPG1ldGEgbmFtZT0iYWpzLXZpZXdpc3N1ZS1tYXgtY2FjaGUtc2l6ZSIgY29udGVu
dD0iIj4KPG1ldGEgbmFtZT0iYWpzLWF1dG9jb21wbGV0ZS1lbmFibGVkIiBjb250ZW50PSJ0cnVl
Ij4KPG1ldGEgbmFtZT0iYWpzLXZpZXctaXNzdWUtdHJhY2Uta2V5IiBjb250ZW50PSJqaXJhLmlz
c3VlLnJlZnJlc2hlZCI+CjxtZXRhIG5hbWU9ImFqcy12aWV3LWlzc3VlLXBzeWNoby1rZXkiIGNv
bnRlbnQ9ImppcmEucHN5Y2hvLmlzc3VlLnJlZnJlc2hlZCI+CjxtZXRhIG5hbWU9ImFqcy12aWV3
LWlzc3VlLXJlZnJlc2hlZC1jYWNoZWQta2V5IiBjb250ZW50PSJqaXJhLnBzeWNoby5pc3N1ZS5y
ZWZyZXNoZWQuY2FjaGVkIj4KPG1ldGEgbmFtZT0iYWpzLXJldHVybi10by1zZWFyY2gtdHJhY2Ut
a2V5IiBjb250ZW50PSJqaXJhLnJldHVybmVkLnRvLnNlYXJjaCI+CjxtZXRhIG5hbWU9ImFqcy1y
ZXR1cm4tdG8tc2VhcmNoLXBzeWNoby1rZXkiIGNvbnRlbnQ9ImppcmEucHN5Y2hvLnJldHVybmVk
LnRvLnNlYXJjaCI+CjxtZXRhIG5hbWU9ImFqcy1kZWZhdWx0LWF2YXRhci11cmwiIGNvbnRlbnQ9
Imh0dHBzOi8vY2kub3Blbi1wYWFzLm9yZy9qaXJhL3NlY3VyZS91c2VyYXZhdGFyP3NpemU9eHNt
YWxsJmFtcDthdmF0YXJJZD0xMDEyMyI+CjxtZXRhIG5hbWU9ImFqcy1qaXJhLmlzc3Vlcy5wcmVm
ZXJyZWQubGF5b3V0LmtleSIgY29udGVudD0ic3BsaXQtdmlldyI+CjxtZXRhIG5hbWU9ImFqcy1t
YXgtcmVjZW50LXNlYXJjaGVycyIgY29udGVudD0iMTAiPgo8bWV0YSBuYW1lPSJhanMtamlyYS1i
YXNlLXVybCIgY29udGVudD0iaHR0cHM6Ly9jaS5vcGVuLXBhYXMub3JnL2ppcmEiPgo8bWV0YSBu
YW1lPSJhanMtZGV2LW1vZGUiIGNvbnRlbnQ9ImZhbHNlIj4KPG1ldGEgbmFtZT0iYWpzLWNvbnRl
eHQtcGF0aCIgY29udGVudD0iL2ppcmEiPgo8bWV0YSBuYW1lPSJhanMtdmVyc2lvbi1udW1iZXIi
IGNvbnRlbnQ9IjYuNC41Ij4KPG1ldGEgbmFtZT0iYWpzLWJ1aWxkLW51bWJlciIgY29udGVudD0i
NjQwMjAiPgo8bWV0YSBuYW1lPSJhanMtaXMtYmV0YSIgY29udGVudD0iZmFsc2UiPgo8bWV0YSBu
YW1lPSJhanMtaXMtcmMiIGNvbnRlbnQ9ImZhbHNlIj4KPG1ldGEgbmFtZT0iYWpzLWlzLXNuYXBz
aG90IiBjb250ZW50PSJmYWxzZSI+CjxtZXRhIG5hbWU9ImFqcy1pcy1taWxlc3RvbmUiIGNvbnRl
bnQ9ImZhbHNlIj4KPG1ldGEgbmFtZT0iYWpzLXJlbW90ZS11c2VyIiBjb250ZW50PSJzY29sc29u
Ij4KPG1ldGEgbmFtZT0iYWpzLXJlbW90ZS11c2VyLWZ1bGxuYW1lIiBjb250ZW50PSJTdGVwaGFu
ZSBDT0xTT04iPgo8bWV0YSBuYW1lPSJhanMtdXNlci1sb2NhbGUiIGNvbnRlbnQ9ImVuX1VTIj4K
PG1ldGEgbmFtZT0iYWpzLXVzZXItbG9jYWxlLWdyb3VwLXNlcGFyYXRvciIgY29udGVudD0iLCI+
=====================================================
== File: mailbox/store/src/test/resources/eml/mailWithLongHeaders.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_1330682067197"
------=_Part_0_1330682067197
Content-Type: multipart/alternative;
boundary="----=_Part_2_1330682067197"
------=_Part_2_1330682067197
Content-Type: text/plain;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
<b>Content of part 1-2</b>
------=_Part_2_1330682067197--
------=_Part_0_1330682067197
Content-Type: text/html;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment
header: 012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798
# Hello
```
Code snipset
```
------=_Part_0_1330682067197--
=====================================================
== File: mailbox/store/src/test/resources/eml/calendar2.eml
=====================================================
From: Test 1 <test1@linagora.com>
To: Test 2 <test2@linagora.com>
Subject: New Time Proposed: New event from Test: lole
Date: Tue, 13 Mar 2018 14:36:08 +0000
Message-ID: <AM5P190MB03542A58E344C68475A951AFD20@AM5P190MB0354.EURP190.PROD.OUTLOOK.COM>
Accept-Language: en-US
Content-Language: en-US
Content-Type: multipart/alternative;
boundary="_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_"
MIME-Version: 1.0
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Will be better for me, thx
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<html>
<p>Will be better for me, thx</p>
</html>
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/calendar; charset="utf-8"; method=COUNTER
Content-Disposition: attachment;
filename="attachment.txt"
Content-Transfer-Encoding: base64
QkVHSU46VkNBTEVOREFSDQpNRVRIT0Q6Q09VTlRFUg0KUFJPRElEOk1pY3Jvc29mdCBFeGNoYW5n
ZSBTZXJ2ZXIgMjAxMA0KVkVSU0lPTjoyLjANCkJFR0lOOlZUSU1FWk9ORQ0KVFpJRDpFdXJvcGUv
QmVybGluDQpCRUdJTjpTVEFOREFSRA0KRFRTVEFSVDoxNjAxMDEwMVQwMzAwMDANClRaT0ZGU0VU
RlJPTTorMDIwMA0KVFpPRkZTRVRUTzorMDEwMA0KUlJVTEU6RlJFUT1ZRUFSTFk7SU5URVJWQUw9
MTtCWURBWT0tMVNVO0JZTU9OVEg9MTANCkVORDpTVEFOREFSRA0KQkVHSU46REFZTElHSFQNCkRU
U0VRVUVOQ0U6MA0KRFRTVEFNUDoyMDE4MDMxM1QxNDM2MDdaDQpDT01NRU5UO0xBTkdVQUdFPWVu
LVVTOldpbGwgYmUgYmV0dGVyIGZvciBtZVwsIHRoeFxuDQpFTkQ6VkVWRU5UDQpFTkQ6VkNBTEVO
REFSDQo=
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_--
=====================================================
== File: mailbox/store/src/test/resources/eml/signedMessage.eml
=====================================================
Return-Path: <client@linagora.com>
From: Important Client <client@linagora.com>
To: Big Boss <big.boss@linagora.com>, Big big boss <big.big.boss@linagora.com>
Subject: Fwd: Re: Deploying production instances of James
Date: Fri, 17 Nov 2017 11:50:12 +0100
Message-ID: <3927114.HFsDrDgxHn@domain.com>
Organization: Linagora
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="nextPart2399737.qbvXs1L0ps"; micalg="pgp-sha1"; protocol="application/pgp-signature"
--nextPart2399737.qbvXs1L0ps
Content-Type: multipart/mixed; boundary="nextPart3147505.khcI58SeaZ"
Content-Transfer-Encoding: 7Bit
This is a multi-part message in MIME format.
--nextPart3147505.khcI58SeaZ
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="iso-8859-1"
For your information,
--nextPart3147505.khcI58SeaZ
Content-Type: message/rfc822
Content-Disposition: inline; filename="message suivi"
Content-Description: Harold Goguelin <hgoguelin@linagora.com>: Re: La Cerise - certificat =?UTF-8?B?RXhwaXLDqQ==?=
Return-Path: <project.manager@linagora.com>
Subject: Re: Deploying production instances of James
To: Important Client <client@linagora.com>
From: Project manager <project.manager@linagora.com>
Organization: Linagora
Message-ID: <c66d7ca6-24R2-d6ec-abac-c1f72ca428dd@linagora.com>
Date: Fri, 17 Nov 2017 11:39:27 +0100
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="------------51EED611A8498A33106C3AAD"
Content-Language: fr
This is a multi-part message in MIME format.
--------------51EED611A8498A33106C3AAD
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Transfer-Encoding: 8bit
Message envoyé grâce à OBM <http://obm.org>, la Communication Libre par
Linagora <http://www.linagora.com/>
--------------51EED611A8498A33106C3AAD
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 8bit
=====================================================
== File: mailbox/store/src/test/resources/eml/oneAttachmentWithSimpleContentType.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_1330682067197"
------=_Part_0_1330682067197
Content-Type: multipart/alternative;
boundary="----=_Part_2_1330682067197"
------=_Part_2_1330682067197
Content-Type: text/plain;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
<b>Content of part 1-2</b>
------=_Part_2_1330682067197--
------=_Part_0_1330682067197
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="gimp.png"
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
------=_Part_0_1330682067197--
=====================================================
== File: mailbox/store/src/test/resources/eml/mail5.eml
=====================================================
Date: Fri, 15 May 2015 06:35:59 +0000 (UTC)
From: "Luc DUZAN (JIRA)" <luc.duzan@james.apache.org>
To: "zzz" <mailet-api@james.apache.org>
Cc: any@any.com
Bcc: any@any.com
Message-ID: <JIRA.1234567890@Atlassian.JIRA>
Subject: This is a mail about mail!
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
This is the body of the mail
=====================================================
== File: mailbox/store/src/test/resources/eml/multiAttachmentsWithOneWrongContentDisposition.eml
=====================================================
Return-Path: <from@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
Mon, 27 Feb 2017 05:24:55 +0100
X-Sieve: CMU Sieve 2.2
Received: from [192.168.12.138] (unknown [1.55.245.4])
(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
(No client certificate requested)
by alderaan.linagora.com (Postfix) with ESMTPSA id 688BF7A9
for <from@linagora.com>; Mon, 27 Feb 2017 05:24:54 +0100 (CET)
To: to@linagora.com
From: Lina <from@linagora.com>
Subject: MultiAttachment
Message-ID: <13d4375e-a4a9-f613-06a1-7e8cb1e0ea93@linagora.com>
Date: Mon, 27 Feb 2017 11:24:48 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.2.0
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------64D8D789FC30153D6ED18258"
This is a multi-part message in MIME format.
--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Send
--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=UTF-8;
name="text1"
Content-Transfer-Encoding: base64
Content-Disposition: wrongDisposition;
filename="text1"
LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBeDdQRzAr
RS8vRU1wbTdJZ0k1UTlUTURTRnlhLzFoRSt2dlRKcmswaUdGbGxQZUhMCkE1L1ZsVE0wWVdn
RzZYNTBxaU1mRTNWTGF6ZjJjMTlpWHJUMG1xLzIxUFoxd0Zub2d2NHp4VU5haWgrQm5nNjIK
RjBTeXJ1RS9PL05qcXhoL0NjcTZLL2UwNVRWNFQ2NDNVU3hBZUcwS3BwbVlXOXg4SEEvR3ZW
ODMyYXBadXhrVgppNk5Wa0RCcmZ6YVVDd3U0ekgrSHdPdi9wSTg3RTdLY2NIWUMrK0JpYWoz
Cg==
--------------64D8D789FC30153D6ED18258
Content-Type: application/vnd.ms-publisher;
name="text2"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="text2"
c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCQVFESHM4YlQ0VC84UXltYnNp
=====================================================
== File: mailbox/store/src/test/resources/eml/spamMail.eml
=====================================================
Return-Path: <root-bounces@listes.minet.net>
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
Wed, 03 Jun 2015 11:05:45 +0200
X-Sieve: CMU Sieve 2.4
Received: from smtp.minet.net (smtp.minet.net [192.168.102.18])
by mx1.minet.net (Postfix) with ESMTP id F06FE610F72;
Wed, 3 Jun 2015 11:05:48 +0200 (CEST)
Received: from listes.minet.net (listes.minet.net [192.168.102.29])
by smtp.minet.net (Postfix) with ESMTP id AAB15610F70;
Wed, 3 Jun 2015 09:05:48 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=minet.net; s=mail;
t=1433322348; bh=8OtmVRMX7IWWyQo8WQIi5rKeDEQFghSX2r1WN9/pqUk=;
h=From:Date:To:Subject:List-Id:List-Unsubscribe:List-Post:List-Help:
List-Subscribe:From;
b=UkthSFXn5mtPnn7sYvDJIxgCk1O36L0p+hTOnI/xTF2WRMGJyXtLyCdFdE5jQ5gE4
EGNdhwmfjaKsoE7IDtc/4GrPvbnM8i9ojpSOBW1hXJPOeYnRgah/4gsXsMJWvmmq/A
4oTnw8ZswFXiShDmBMyaSEZuVrWTdaPBgUhVhGw8=
Received: from listes.minet.net (listes.minet.net [127.0.0.1])
by listes.minet.net (Postfix) with ESMTP id 9CD5BA27FF9;
Wed, 3 Jun 2015 09:05:48 +0000 (UTC)
X-Original-To: root@listes.minet.net
Delivered-To: root@listes.minet.net
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
by listes.minet.net (Postfix) with ESMTP id B8C1FA27FEF
for <root@listes.minet.net>; Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
Received: from localhost (spam.minet.net [192.168.102.97])
by mx1.minet.net (Postfix) with ESMTP id AD28B610F6D
for <root@listes.minet.net>; Wed, 3 Jun 2015 11:05:46 +0200 (CEST)
Content-Type: multipart/mixed; boundary="----------=_1433322346-12583-0"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
From: "Content-filter at spam.minet.net" <postmaster@minet.net>
Date: Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
To: <root@listes.minet.net>
Message-ID: <VASs-IZaXqmZao@spam.minet.net>
Subject: [root] UNCHECKED contents in mail FROM <quentin.h@riseup.net>
X-BeenThere: root@listes.minet.net
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: <root.listes.minet.net>
List-Unsubscribe: <https://listes.minet.net/cgi-bin/mailman/options/root>,
<mailto:root-request@listes.minet.net?subject=unsubscribe>
List-Post: <mailto:root@listes.minet.net>
List-Help: <mailto:root-request@listes.minet.net?subject=help>
List-Subscribe: <https://listes.minet.net/cgi-bin/mailman/listinfo/root>,
<mailto:root-request@listes.minet.net?subject=subscribe>
Errors-To: root-bounces@listes.minet.net
Sender: "root" <root-bounces@listes.minet.net>
=====================================================
== File: mailbox/store/src/test/resources/eml/mail.eml
=====================================================
Return-Path: <arch-general-bounces@archlinux.org>
Received: from mx2.minet.net (mx2.minet.net [192.168.102.26])
by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
Thu, 04 Jun 2015 06:09:06 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
by mx2.minet.net (Postfix) with ESMTP id 4492D821966
for <benwa@minet.net>; Thu, 4 Jun 2015 06:09:11 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.499
X-Spam-Level:
X-Spam-Status: No, score=-1.499 required=1 tests=[BAYES_00=-1.5,
FREEMAIL_FROM=0.001, T_DKIM_INVALID=0.01, T_RP_MATCHES_RCVD=-0.01]
autolearn=ham
Received: from mx2.minet.net ([IPv6:::ffff:192.168.102.26])
by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
with ESMTP id Meygb-OHe7nm for <benwa@minet.net>;
Thu, 4 Jun 2015 04:09:10 +0000 (UTC)
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=5.9.250.164; helo=luna.archlinux.org; envelope-from=arch-general-bounces@archlinux.org; receiver=benwa@minet.net
Authentication-Results: mx2.minet.net; dkim=fail
reason="verification failed; insecure key"
header.d=gmail.com header.i=@gmail.com header.b=rtUETpuc;
dkim-adsp=none (insecure policy); dkim-atps=neutral
Received: from luna.archlinux.org (luna.archlinux.org [5.9.250.164])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx2.minet.net (Postfix) with ESMTPS id DD66B821952
for <benwa@minet.net>; Thu, 4 Jun 2015 06:09:09 +0200 (CEST)
Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1])
by luna.archlinux.org (Postfix) with ESMTP id A0E06260C6;
Thu, 4 Jun 2015 04:09:05 +0000 (UTC)
Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1])
by luna.archlinux.org (Postfix) with ESMTP id 0CD88260C5
for <arch-general@lists.archlinux.org>; Thu, 4 Jun 2015 04:09:04 +0000 (UTC)
Received: from nymeria.archlinux.org (nymeria.archlinux.org [89.238.67.251])
by luna.archlinux.org (Postfix) with ESMTPS
for <arch-general@lists.archlinux.org>; Thu, 4 Jun 2015 04:09:04 +0000 (UTC)
Received: from nymeria.archlinux.org (localhost.localdomain [127.0.0.1])
by nymeria.archlinux.org (Postfix) with ESMTP id DDBB240260
for <arch-general@archlinux.org>; Thu, 4 Jun 2015 06:09:02 +0200 (CEST)
Received: from mail-wg0-x22c.google.com (mail-wg0-x22c.google.com
[IPv6:2a00:1450:400c:c00::22c])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
(No client certificate requested)
by nymeria.archlinux.org (Postfix) with ESMTPS
for <arch-general@archlinux.org>; Thu, 4 Jun 2015 06:09:02 +0200 (CEST)
Received: by wgme6 with SMTP id e6so23798103wgm.2
for <arch-general@archlinux.org>; Wed, 03 Jun 2015 21:09:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
=====================================================
== File: mailbox/store/src/test/resources/eml/mailWithManyHeaders.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_1330682067197"
------=_Part_0_1330682067197
Content-Type: multipart/alternative;
boundary="----=_Part_2_1330682067197"
------=_Part_2_1330682067197
Content-Type: text/plain;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
<b>Content of part 1-2</b>
------=_Part_2_1330682067197--
------=_Part_0_1330682067197
Content-Type: text/html;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
=====================================================
== File: mailbox/store/src/test/resources/eml/oneAttachmentWithEmptyContentType.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_1330682067197"
------=_Part_0_1330682067197
Content-Type: multipart/alternative;
boundary="----=_Part_2_1330682067197"
------=_Part_2_1330682067197
Content-Type: text/plain;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
<b>Content of part 1-2</b>
------=_Part_2_1330682067197--
------=_Part_0_1330682067197
Content-Type:
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="gimp.png"
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
------=_Part_0_1330682067197--
=====================================================
== File: mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithNoCid.eml
=====================================================
Return-Path: <test@local.com>
Received: from localhost;
Tue, 05 Jul 2016 11:47:47 +0200
X-Sieve: CMU Sieve 2.2
To: Test <test@local.com>
From: Test <test@local.com>
Subject: Inline attachment
Message-ID: <26d91590-b995-8d45-f66a-0433c65745bb@linagora.com>
Date: Tue, 5 Jul 2016 11:47:46 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.1.1
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="------------FC06E08B3CDF05E9A3E28077"
This is a multi-part message in MIME format.
--------------FC06E08B3CDF05E9A3E28077
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
This is an inline attachment:
Cheers!
--------------FC06E08B3CDF05E9A3E28077
Content-Type: multipart/related;
boundary="------------47107B0D40019CDFED2C4263"
--------------47107B0D40019CDFED2C4263
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
This is an inline attachment:<br>
<br>
<img alt="" src="cid:part1.37A15C92.A7C3488D@linagora.com"
height="73" width="73"><br>
<br>
<br>
Cheers!<br>
</body>
</html>
--------------47107B0D40019CDFED2C4263
Content-Type: image/png;
name="james-logo-square.png"
=====================================================
== File: mailbox/store/src/test/resources/eml/invalidCharset.eml
=====================================================
To: Antoine DUPRAT <xyz@linagora.com>
From: Antoine DUPRAT <xyz@linagora.com>
Subject: Inline attachment
Message-ID: <26d91590-b995-8d45-f66a-0433c65745bb@linagora.com>
Date: Tue, 5 Jul 2016 11:47:46 +0200
MIME-Version: 1.0
Content-Type: text/plain; charset=%invalid; format=flowed
Content-Transfer-Encoding: 7bit
This is an inline attachment: Cheers!
=====================================================
== File: mailbox/store/src/test/resources/eml/headerWithDot.eml
=====================================================
From: me@example.com
To: you@example.com
X-normal-header: normal header
X-header.with.dots: header with dots
Subject: Test me
Please!
=====================================================
== File: mailbox/store/src/test/resources/eml/emailWithOnlyAttachment.eml
=====================================================
Return-Path: <chibenwa@apache.org>
Subject: 29989 btellier
From: <any@mail.com>
Content-Disposition: attachment
MIME-Version: 1.0
Date: Sun, 02 Apr 2017 22:09:04 -0000
Content-Type: application/zip; name="9559333830.zip"
To: <chibenwa@apache.org>
Message-ID: <149117094410.10639.6001033367375624@any.com>
Content-Transfer-Encoding: base64
UEsDBBQAAgAIAEQeg0oN2YT/EAsAAMsWAAAIABwAMjIwODUuanNVVAkAAxBy4VgQcuFYdXgLAAEE
AAAAAAQAAAAApZhbi1zHFYWfY/B/MP3i7kwj1/2CokAwBPIQ+sGPkgJ1tURkdeiMbYzQf8+3q8+M
ZmQllgn2aHrqnNq1L2uvtavnj2/b7evz26/Op5M6q/P+8OUX77784g8/lQtLisXTU/68vfzCv/Lg
D9vqs/3b8fNXf92273ey4XTCykk9w9LpfD7tX+zGzU83b8pPg39uBr/Kmxe7w9PLuP3xwpFKTJ32
AAEEAAAAAAQAAAAAUEsFBgAAAAABAAEATgAAAFILAAAAAA==
=====================================================
== File: mailbox/store/src/test/resources/eml/inlined-mixed.eml
=====================================================
Date: Wed, 26 Jan 2022 12:21:37 +0100
From: Bob <bob@domain.tld>
To: Alice <alice@domain.tld>
Subject: My subject
Message-ID: <20220126112137.wookj26xellphlam@W0248292>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="7f4cfz6rtfqdbqxn"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
--7f4cfz6rtfqdbqxn
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Main test message...
--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="yyy.txt"
Content-Transfer-Encoding: quoted-printable
[
{
"Id": "2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
]
--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="xxx.txt"
Content-Transfer-Encoding: quoted-printable
[
{
"Id": "3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
]
--7f4cfz6rtfqdbqxn--
=====================================================
== File: mailbox/store/src/test/resources/eml/filenameOnly.eml
=====================================================
Return-Path: <any@linagora.com>
MIME-Version: 1.0
Delivered-To: ddo@linagora.com
Date: Mon, 21 Aug 2017 00:17:47 +0200
From: any@linagora.com
To: any@linagora.com
Subject: Inventaire des VMs
Message-ID: <599a0a8b.MepmS5MLy1x/pobR%any@linagora.com>
Content-Type: multipart/mixed;
boundary="=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA"
This is a multi-part message in MIME format.
--=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Bonjour
En pièce jointe l'inventaire à jour des VMs et les erreurs
Cordialement.
--=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA
Content-Type: text/csv;
charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment;
filename="inventory.csv"
DATA
--=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA
=====================================================
== File: mailbox/store/src/test/resources/eml/noContentDispositionWithCID.eml
=====================================================
To: me@linagora.com
From: Benoit Tellier <me@linagora.com>
Subject: Mail with text attachment
Message-ID: <befd8cab-9c9c-5537-4e77-937f32326087@any.com>
Date: Thu, 13 Oct 2016 10:26:20 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------4FD2D252DB453546C22C25B2"
This is a multi-part message in MIME format.
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
I'm the body!
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=UTF-8;
name="attachment.txt"
Content-ID: <id>
I'm a Schroedinger cat
--------------4FD2D252DB453546C22C25B2--
=====================================================
== File: mailbox/store/src/test/resources/eml/embeddedAttachmentWithAttachment.eml
=====================================================
Return-Path: <aduprat@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
Thu, 12 May 2016 16:09:40 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.69.0.107] (mne69-10-88-173-78-196.fbx.proxad.net [88.173.78.196])
(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
(No client certificate requested)
by alderaan.linagora.com (Postfix) with ESMTPSA id 233CA267F
for <aduprat@linagora.com>; Thu, 12 May 2016 16:09:40 +0200 (CEST)
References: <57348E62.7000505@linagora.com>
Subject: Fwd: EmbeddedAttachment
To: Antoine DUPRAT <aduprat@linagora.com>
From: Antoine DUPRAT <aduprat@linagora.com>
X-Forwarded-Message-Id: <57348E62.7000505@linagora.com>
Message-ID: <57348EA3.8010501@linagora.com>
Date: Thu, 12 May 2016 16:09:39 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
Thunderbird/38.5.1
MIME-Version: 1.0
In-Reply-To: <57348E62.7000505@linagora.com>
Content-Type: multipart/mixed;
boundary="------------040807010700040800000502"
This is a multi-part message in MIME format.
--------------040807010700040800000502
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
forwarded
--------------040807010700040800000502
Content-Type: message/rfc822;
name="EmbeddedAttachment.eml"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="EmbeddedAttachment.eml"
Return-Path: <aduprat@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
Thu, 12 May 2016 16:08:35 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.69.0.107] (mne69-10-88-173-78-196.fbx.proxad.net [88.173.78.196])
(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
(No client certificate requested)
by alderaan.linagora.com (Postfix) with ESMTPSA id 0FC992683
for <aduprat@linagora.com>; Thu, 12 May 2016 16:08:35 +0200 (CEST)
To: Antoine DUPRAT <aduprat@linagora.com>
From: Antoine DUPRAT <aduprat@linagora.com>
=====================================================
== File: mailbox/store/src/test/resources/eml/oneInlinedAttachment.eml
=====================================================
Return-Path: <aduprat@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
Tue, 05 Jul 2016 11:47:47 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.69.0.107] (mne69-10-88-173-78-196.fbx.proxad.net [88.173.78.196])
(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
(No client certificate requested)
by alderaan.linagora.com (Postfix) with ESMTPSA id F1F3E74E
for <aduprat@linagora.com>; Tue, 5 Jul 2016 11:47:46 +0200 (CEST)
To: Antoine DUPRAT <aduprat@linagora.com>
From: Antoine DUPRAT <aduprat@linagora.com>
Subject: Inline attachment
Message-ID: <26d91590-b995-8d45-f66a-0433c65745bb@linagora.com>
Date: Tue, 5 Jul 2016 11:47:46 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.1.1
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="------------FC06E08B3CDF05E9A3E28077"
This is a multi-part message in MIME format.
--------------FC06E08B3CDF05E9A3E28077
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
This is an inline attachment:
Cheers!
--------------FC06E08B3CDF05E9A3E28077
Content-Type: multipart/related;
boundary="------------47107B0D40019CDFED2C4263"
--------------47107B0D40019CDFED2C4263
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
This is an inline attachment:<br>
<br>
=====================================================
== File: mailbox/store/src/test/resources/eml/james-3901.eml
=====================================================
Return-Path: <firstname1.surname1@upn.integration-open-paas.org>
Received: from 10.2.0.0 (EHLO 617) ([10.2.0.0])
by smtp.upn.integration-open-paas.org (JAMES SMTP Server ) with ESMTP ID -489272706
for <firstname1.surname1@upn.integration-open-paas.org>;
Sat, 28 Nov 2020 10:49:24 +0000 (GMT)
Date: Wed, 4 Apr 2001 13:19:00 -0700 (PDT),Wed, 4 Apr 2001 13:19:00 -0700 (PDT)
Message-ID: <IYIOY5YCQEC2XEIOMNMMMASDTLDQ3JZLB@zlsvr22>
from: "Drew Fossum"
to: "Mary Kay Miller"
subject: Revised Draft
filename: dfossum.nsf
folder: \Drew_Fossum_Dec2000_June2001_2\Notes Folders\Sent
date: Wed, 4 Apr 2001 13:19:00 -0700 (PDT),Wed, 4 Apr 2001 13:19:00 -0700 (PDT)
Status: RO
Cc:
X-libpst-forensic-sender: Drew Fossum
X-libpst-forensic-bcc:
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="--boundary-LibPST-iamunique-1722682679_-_-"
----boundary-LibPST-iamunique-1722682679_-_-
Content-Type: text/plain; charset="us-ascii"
---------------------- Forwarded by Drew Fossum/ET&S/Enron on 04/04/2001
01:19 PM ---------------------------
"Hirasuna, Robert" <rhirasuna@AkinGump.com> on 04/04/2001 10:18:00 AM
To: "Drew Fossum (E-mail)" <dfossum@enron.com>
cc:
Subject: Revised Draft
<<4%P001!.DOC>> Use this draft instead. I missed a couple of delted dashes
on the first page.
The information contained in this e-mail message is intended only for the
personal and confidential use of the recipient(s) named above. This message
may be an attorney-client communication and/or work product and as such is
privileged and confidential. If the reader of this message is not the
intended recipient or an agent responsible for delivering it to the intended
recipient, you are hereby notified that you have received this document in
error and that any review, dissemination, distribution, or copying of this
message is strictly prohibited. If you have received this communication in
error, please notify us immediately by e-mail, and delete the original
message.
=====================================================
== File: mailbox/store/src/test/resources/eml/messageWithNonASCIIFilenameAttachment.eml
=====================================================
Return-Path: <lroyet@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
Fri, 26 Aug 2016 10:00:36 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.69.0.146] (mne69-10-88-173-78-196.fbx.proxad.net [88.173.78.196])
(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
(No client certificate requested)
by alderaan.linagora.com (Postfix) with ESMTPSA id A863676F
for <lroyet@linagora.com>; Fri, 26 Aug 2016 10:00:36 +0200 (CEST)
To: Laura ROYET <lroyet@linagora.com>
From: Laura Royet <lroyet@linagora.com>
Subject: message with non ASCII filename attachment
Message-ID: <d929964c-032e-ada5-c97d-a048e9a32bab@linagora.com>
Date: Fri, 26 Aug 2016 10:00:35 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.2.0
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------9F1006EBC7F5F7758497FD08"
This is a multi-part message in MIME format.
--------------9F1006EBC7F5F7758497FD08
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
--------------9F1006EBC7F5F7758497FD08
Content-Type: application/vnd.oasis.opendocument.text;
name="=?UTF-8?B?2K/ZitmG2KfYtdmI2LEub2R0?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename*=utf-8''%D8%AF%D9%8A%D9%86%D8%A7%D8%B5%D9%88%D8%B1%2E%6F%64%74
UEsDBBQAAAgAAOB8GElexjIMJwAAACcAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQu
b2FzaXMub3BlbmRvY3VtZW50LnRleHRQSwMEFAAACAAA4HwYSQ5gBad3CQAAdwkAABgAAABU
aHVtYm5haWxzL3RodW1ibmFpbC5wbmeJUE5HDQoaCgAAAA1JSERSAAAAtQAAAQAIAgAAAHpB
oIwAAAk+SURBVHic7dvJT1TpAobxYihmmSQCojIICYao6Q6ioGHlgo2b3nWivei9/1ivOr2Q
hYZIolFDwAQktCIgQeIEMg8y3pf65KSA229fSuWyeH7pVE6dOnWw+3vqO+cr6czt7e0Y8A8y
/99/ABxr9AGHPuDQBxz6gEMfcOgDDn3AoQ849AGHPuDQBxz6gEMfcOgDzuH62N7eTktL0+PW
1paeajs9PT38BknYH21HT8MBevqvpw3nDE/1Lj0N7wpPwwn9efDdHa6PMDwhiyiUsJH86lZC
OCaMejhs36j/048ISWVkZMR244iKTH5XyOV/6Q8pS2X+WFxcfPbs2fr6emVl5eXLl2dmZoqL
i7V/aWlpbGwsLy9PT0tLS3XA+Ph4fX19eNe+CSB5RMP+d+/eZWVlLS8vT09PV1dX9/f3l5WV
6dWNjY2mpqZ4PL4vqYPnxHeXyv1HQYI+369evdLgffnyRSPa0dHx+vXrBw8etLW1jYyMbG5u
ak9vb69eVSjDw8O1tbXNzc3d3d1VVVXa+eHDhxMnTugk8/Pzubm5V69effLkifbk5OQohcHB
wUuXLn3+/Pn9+/eaIVZWVu7du3fx4sWJiYn8/HxVWFRUpB+hR/24MFd99/80iKVwfQmDkZm5
80ZNEm/evNEY63Fubk6jW15ePjU1pWlDB+iTrblEZWhi0B6Nuvp4+vSphvn06dMaeA32yZMn
dU7NGaOjo6urq3qLJiftqaio0AGrCXqqnrTx4sWLoaGh8+fP6+Saqx49enTz5s0f858FX6Vy
fdHGuXPntK1HzR8qpqWlRa3oo3/9+nUN3rVr11SDjlQQ4ZOt0S0sLNTGnTt3NFuEAhSWDtPs
=====================================================
== File: mailbox/store/src/test/resources/eml/filenameAndName.eml
=====================================================
Return-Path: <any@linagora.com>
MIME-Version: 1.0
Delivered-To: ddo@linagora.com
Date: Mon, 21 Aug 2017 00:17:47 +0200
From: any@linagora.com
To: any@linagora.com
Subject: Inventaire des VMs
Message-ID: <599a0a8b.MepmS5MLy1x/pobR%any@linagora.com>
Content-Type: multipart/mixed;
boundary="=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA"
This is a multi-part message in MIME format.
--=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Bonjour
En pièce jointe l'inventaire à jour des VMs et les erreurs
Cordialement.
--=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA
Content-Type: text/csv;
charset=utf-8; name="good.csv";
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment;
filename="bad.csv"
DATA
--=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA
=====================================================
== File: mailbox/store/src/test/resources/eml/invitationEmailFromOP.eml
=====================================================
Return-Path: <rbevillard@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
Tue, 05 Jul 2016 17:33:42 +0200
X-Sieve: CMU Sieve 2.2
Received: from [127.0.0.1] (openpaas-rse.linagora.dc1 [172.16.18.188])
by alderaan.linagora.com (Postfix) with ESMTP id 1F72974B
for <ddolcimascolo@linagora.com>; Tue, 5 Jul 2016 17:33:42 +0200 (CEST)
Content-Type: multipart/mixed;
boundary="----sinikael-?=_1-14677328221140.595814419677481"
From: rbevillard@linagora.com
To: ddolcimascolo@linagora.com
Subject: New event from Romain BEVILLARD: test event
X-Mailer: nodemailer (1.3.4; +http://www.nodemailer.com;
SMTP/1.1.0[client:1.3.8])
Date: Tue, 05 Jul 2016 15:33:42 +0000
Message-Id: <1467732822125-f0c14587-1cd7b923-0d50a279@linagora.com>
MIME-Version: 1.0
------sinikael-?=_1-14677328221140.595814419677481
Content-Type: multipart/alternative;
boundary="----sinikael-?=_2-14677328221140.595814419677481"
------sinikael-?=_2-14677328221140.595814419677481
Content-Type: multipart/related; type="text/html";
boundary="----sinikael-?=_3-14677328221140.595814419677481"
------sinikael-?=_3-14677328221140.595814419677481
Content-Type: text/html
Content-Transfer-Encoding: base64
PCFET0NUWVBFIGh0bWw+CjxodG1sIGNsYXNzPSJtYWlsIj4KICA8aGVhZD4KICAgIDxtZXRhIGNo
YXJzZXQ9InV0Zi04Ij4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1k
ZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgICA8c3R5bGU+QG1lZGlhIChtYXgtd2lk
dGg6IDc2OHB4KSB7CiAgLmNvbnRlbnQgewogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAg
IGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDsKICB9Cn0KCiAgICA8L3N0eWxlPgogIDwvaGVh
ZD4KICA8Ym9keSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsiPgogICAgPGRpdiBj
bGFzcz0id3JhcHBlciIgc3R5bGU9IndpZHRoOiA3MDBweDsgbWFyZ2luLWxlZnQ6IGF1dG87IG1h
cmdpbi1yaWdodDogYXV0bzsiPjxicj4KICAgICAgPGRpdiBjbGFzcz0ibWFpbC1jb250ZW50IiBz
dHlsZT0icGFkZGluZzogMTBweCAxM3B4OyBib3JkZXItcmFkaXVzOiA1cHg7IHRleHQtYWxpZ246
IGp1c3RpZnk7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyI+CiAgICAgICAgPHRhYmxlIHN0eWxl
PSJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB3aWR0aDogMTAwJTsgY29sb3I6ICMzMzMzMzM7
Ij4KICAgICAgICAgIDx0ciBjbGFzcz0idGFibGUtaGVhZGVyIiBzdHlsZT0idGV4dC1hbGlnbjog
cmlnaHQ7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDZkN2Q5OyI+CiAgICAgICAgICAgIDx0
ZCBjb2xzcGFuPSIyIiBjbGFzcz0ibG9nbyIgc3R5bGU9InBhZGRpbmctYm90dG9tOiAxMHB4OyBw
YWRkaW5nLXRvcDogNXB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KICAgICAgICAgICAgICA8ZGl2
PjxhIGhyZWY9Imh0dHBzOi8vZGV2Lm9wZW4tcGFhcy5vcmciPjxpbWcgc3JjPSJjaWQ6bG9nbyIg
YWx0PSJvcGVuLXBhYXMgbG9nbyI+PC9hPjwvZGl2PgogICAgICAgICAgICA8L3RkPgogICAgICAg
ICAgICA8dGQgY29sc3Bhbj0iMyIgY2xhc3M9Im9yZ2FuaXplciIgc3R5bGU9InBhZGRpbmctYm90
dG9tOiAxMHB4OyBwYWRkaW5nLXRvcDogNXB4OyB0ZXh0LWFsaWduOiByaWdodDsgdHJhbnNmb3Jt
=====================================================
== File: mailbox/store/src/test/resources/eml/mail3.eml
=====================================================
Return-Path: <server-dev-return-56848-benwa=minet.net@james.apache.org>
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
Tue, 02 Jun 2015 10:16:17 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
by mx1.minet.net (Postfix) with ESMTP id 52917327827
for <benwa@minet.net>; Tue, 2 Jun 2015 10:16:22 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.51
X-Spam-Level:
X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
T_RP_MATCHES_RCVD=-0.01] autolearn=ham
Received: from mx1.minet.net ([IPv6:::ffff:192.168.102.25])
by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
with ESMTP id rcP3IZbh_eqS for <benwa@minet.net>;
Tue, 2 Jun 2015 08:16:21 +0000 (UTC)
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=140.211.11.3; helo=mail.apache.org; envelope-from=server-dev-return-56848-benwa=minet.net@james.apache.org; receiver=benwa@minet.net
Authentication-Results: mx1.minet.net; dkim=none reason="no signature";
dkim-adsp=none (insecure policy); dkim-atps=neutral
Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
by mx1.minet.net (Postfix) with SMTP id 37EAD327826
for <benwa@minet.net>; Tue, 2 Jun 2015 10:16:20 +0200 (CEST)
Received: (qmail 1143 invoked by uid 500); 2 Jun 2015 08:16:20 -0000
Mailing-List: contact server-dev-help@james.apache.org; run by ezmlm
Precedence: bulk
List-Unsubscribe: <mailto:server-dev-unsubscribe@james.apache.org>
List-Help: <mailto:server-dev-help@james.apache.org>
List-Post: <mailto:server-dev@james.apache.org>
List-Id: "James Developers List" <server-dev.james.apache.org>
Reply-To: "James Developers List" <server-dev@james.apache.org>
Delivered-To: mailing list server-dev@james.apache.org
Received: (qmail 1132 invoked by uid 99); 2 Jun 2015 08:16:20 -0000
Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 02 Jun 2015 08:16:20 +0000
Date: Tue, 2 Jun 2015 08:16:19 +0000 (UTC)
From: "abcd" <jira@apache.org>
Cc: zzz@bcd.org
To: "server" <c-server-dev@james.apache.org>
Message-ID: <JIRA.12473940.1284322083000.91735.1433232979714@Atlassian.JIRA>
In-Reply-To: <JIRA.12473940.1284322083000@Atlassian.JIRA>
References: <JIRA.12473940.1284322083000@Atlassian.JIRA> <JIRA.12473940.1284322083687@arcas>
Subject: [jira] [Closed] (MAILBOX-11) MailboxQuery ignore namespace
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394
=====================================================
== File: mailbox/store/src/test/resources/eml/frnog.eml
=====================================================
Return-Path: <frnog-owner@frnog.org>
Received: from mx2.minet.net (mx2.minet.net [192.168.102.26])
by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
Tue, 02 Jun 2015 12:01:42 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
by mx2.minet.net (Postfix) with ESMTP id E92F2A25320
for <benwa@minet.net>; Tue, 2 Jun 2015 12:01:46 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.499
X-Spam-Level:
X-Spam-Status: No, score=-1.499 required=1 tests=[BAYES_00=-1.5,
UNPARSEABLE_RELAY=0.001] autolearn=ham
Received: from mx2.minet.net ([IPv6:::ffff:192.168.102.26])
by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
with ESMTP id bRNLR9Tbk4Jg for <benwa@minet.net>;
Tue, 2 Jun 2015 10:01:46 +0000 (UTC)
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=217.24.82.4; helo=cabale.usenet-fr.net; envelope-from=frnog-owner@frnog.org; receiver=benwa@minet.net
Received: from cabale.usenet-fr.net (cabale.usenet-fr.net [217.24.82.4])
by mx2.minet.net (Postfix) with ESMTP id 089E7A2531A
for <benwa@minet.net>; Tue, 2 Jun 2015 12:01:45 +0200 (CEST)
Received: by cabale.usenet-fr.net (Postfix, from userid 90)
id A267298A5DC6; Tue, 2 Jun 2015 12:01:44 +0200 (CEST)
X-Original-To: frnog@frnog.org
Delivered-To: frnog@frnog.org
Received: from mta.mail.waycom.net (mta.mail.waycom.net [194.177.32.18])
by cabale.usenet-fr.net (Postfix) with ESMTP id AE2E798A58FC
for <frnog@frnog.org>; Tue, 2 Jun 2015 12:01:01 +0200 (CEST)
Received: from [127.0.0.1] (localhost [127.0.0.1])
by mta.mail.waycom.net (Postfix) with ESMTP id D30D6567E1
for <frnog@frnog.org>; Tue, 2 Jun 2015 12:00:56 +0200 (CEST)
Received: from [127.0.0.1] (localhost [127.0.0.1])
wcm-hv1-exch1.wcmnoc.local (2002:c3d6:f04a::c3d6:f04a) with Microsoft SMTP
Server (TLS) id 15.0.847.32; Tue, 2 Jun 2015 12:00:56 +0200
Message-ID: <556D7ED7.2090108@waycom.net>
Date: Tue, 2 Jun 2015 12:00:55 +0200
From: Guillaume Genty <ggenty@waycom.net>
Organization: Waycom
MIME-Version: 1.0
To: <frnog@frnog.org>
Cc: no@no.com
Bcc: no@no.com
Content-Type: text/plain; charset="utf-8"; format=flowed
Content-Transfer-Encoding: 8bit
X-ClientProxiedBy: WCM-HV1-EXCH1.wcmnoc.local (2002:c3d6:f04a::c3d6:f04a) To
wcm-hv1-exch1.wcmnoc.local (2002:c3d6:f04a::c3d6:f04a)
X-C2ProcessedOrg: 9180093e-3f32-48c9-b36b-0805cbe4c266
Subject: [FRnOG] [BIZ] Collecte de liens C2E/CELAN en DOM
X-Loop: frnog@frnog.org
=====================================================
== File: mailbox/store/src/test/resources/eml/twoAttachments.eml
=====================================================
Return-Path: <from@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
Fri, 27 Feb 2015 20:32:14 +0100
X-Sieve: CMU Sieve 2.2
Received: from canondir.par.lng (unknown [92.103.166.6])
(using TLSv1 with cipher AES256-SHA (256/256 bits))
(No client certificate requested)
by alderaan.linagora.com (Postfix) with ESMTPSA id BAB0D728
for <to@linagora.com>; Fri, 27 Feb 2015 20:31:38 +0100 (CET)
X-Priority: 3 (Normal)
From: "From"
<from@linagora.com>
To: "To"
<to@linagora.com>
Subject: [8/10]Attached Image light with text
Date: Fri, 27 Mar 2015 21:48:38 +0100
Message-Id: <20150227203838.0011.CanonTxNo.4037@canondir.par.lng>
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="AHNPACBLDCDIDAGGGDDFAABECGCA"
--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: text/html; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
<b>html</b>
--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: image/jpeg;
name="4037_014.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="4037_014.jpg"
/9j/4X2cRXhpZgAASUkqAAgAAAANAA8BAgAKAAAAqgAAABABAgAJAAAAtAAAABIBAwABAAAA
AQAAABoBBQABAAAAvgAAABsBBQABAAAAxgAAACgBAwABAAAAAgAAADEBAgAKAAAAzgAAADIB
AgAUAAAA2AAAABMCAwABAAAAAgAAAGmHBAABAAAAfAIAAKXEBwDQAAAA7AAAANLGBwBAAAAA
vAEAANPGBwCAAAAA/AEAAEwqAABQYW5hc29uaWMARE1DLUZaNDUAALQAAAABAAAAtAAAAAEA
AABWZXIuMS4wICAAMjAxNDowMjoyNSAxMDozMjowOQBQcmludElNADAyNTAAAA4AAQAWABYA
AgAAAAAAAwBkAAAABwAAAAAACAAAAAAACQAAAAAACgAAAAAACwCsAAAADAAAAAAADQAAAAAA
DgDEAAAAAAEFAAAAAQEBAAAAEAGAAAAACREAABAnAAALDwAAECcAAJcFAAAQJwAAsAgAABAn
AAABHAAAECcAAF4CAAAQJwAAiwAAABAnAADLAwAAECcAAOUbAAAQJwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
=====================================================
== File: mailbox/store/src/test/resources/eml/oneAttachmentAndSomeTextInlined.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_1330682067197"
------=_Part_0_1330682067197
Content-Type: multipart/alternative;
boundary="----=_Part_2_1330682067197"
------=_Part_2_1330682067197
Content-Type: text/plain;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
<b>Content of part 1-2</b>
------=_Part_2_1330682067197--
------=_Part_0_1330682067197
Content-Type: application/octet-stream;
name="exploits_of_a_mom.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="gimp.png"
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
------=_Part_0_1330682067197--
=====================================================
== File: mailbox/store/src/test/resources/eml/oneHtmlAttachmentAndSomeTextInlined.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_1330682067197"
------=_Part_0_1330682067197
Content-Type: multipart/alternative;
boundary="----=_Part_2_1330682067197"
------=_Part_2_1330682067197
Content-Type: text/plain;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
<b>Content of part 1-2</b>
------=_Part_2_1330682067197--
------=_Part_0_1330682067197
Content-Type: text/html;
name="attachment.html"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment;
filename="attachment.html"
<html>
<body>
Hello!
</body>
</html>
=====================================================
== File: mailbox/store/src/test/resources/eml/unknownDisposition.eml
=====================================================
To: me@linagora.com
From: Benoit Tellier <me@linagora.com>
Subject: Mail with text attachment
Message-ID: <befd8cab-9c9c-5537-4e77-937f32326087@any.com>
Date: Thu, 13 Oct 2016 10:26:20 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------4FD2D252DB453546C22C25B2"
This is a multi-part message in MIME format.
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
I'm the body!
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=UTF-8;
name="attachment.txt"
Content-Disposition: gabouzomeuh;
filename="attachment.txt"
I'm a Schroedinger cat
--------------4FD2D252DB453546C22C25B2--
=====================================================
== File: mailbox/store/src/test/resources/eml/mail2.eml
=====================================================
Return-Path: <server-dev-return-56863-benwa=minet.net@james.apache.org>
Received: from mx2.minet.net (mx2.minet.net [192.168.102.26])
by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
Thu, 04 Jun 2015 11:27:36 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
by mx2.minet.net (Postfix) with ESMTP id D65F3A1CA35
for <benwa@minet.net>; Thu, 4 Jun 2015 11:27:40 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.51
X-Spam-Level:
X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
T_RP_MATCHES_RCVD=-0.01] autolearn=ham
Received: from mx2.minet.net ([IPv6:::ffff:192.168.102.26])
by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
with ESMTP id jH3GE2vu5VKE for <benwa@minet.net>;
Thu, 4 Jun 2015 09:27:40 +0000 (UTC)
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=140.211.11.3; helo=mail.apache.org; envelope-from=server-dev-return-56863-benwa=minet.net@james.apache.org; receiver=benwa@minet.net
Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
by mx2.minet.net (Postfix) with SMTP id 85A3AA1CA2C
for <benwa@minet.net>; Thu, 4 Jun 2015 11:27:38 +0200 (CEST)
Received: (qmail 43145 invoked by uid 500); 4 Jun 2015 09:27:38 -0000
Mailing-List: contact server-dev-help@james.apache.org; run by ezmlm
Precedence: bulk
List-Unsubscribe: <mailto:server-dev-unsubscribe@james.apache.org>
List-Help: <mailto:server-dev-help@james.apache.org>
List-Post: <mailto:server-dev@james.apache.org>
List-Id: "James Developers List" <server-dev.james.apache.org>
Reply-To: "James Developers List" <server-dev@james.apache.org>
Delivered-To: mailing list server-dev@james.apache.org
Received: (qmail 43130 invoked by uid 99); 4 Jun 2015 09:27:38 -0000
Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jun 2015 09:27:38 +0000
Date: Thu, 4 Jun 2015 09:27:37 +0000 (UTC)
From: "efij" <jira1@apache.org>
To: "aaa" <a-server-dev@james.apache.org>
Cc: abc@abc.org
Message-ID: <JIRA.12781874.1426269127000.9353.1433410057953@Atlassian.JIRA>
In-Reply-To: <JIRA.12781874.1426269127000@Atlassian.JIRA>
References: <JIRA.12781874.1426269127000@Atlassian.JIRA> <JIRA.12781874.1426269127444@arcas>
Subject: [jira] [Closed] (MAILBOX-217) We should index attachment in elastic
search
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394
[ https://issues.apache.org/jira/browse/MAILBOX-217?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
=====================================================
== File: mailbox/store/src/test/resources/eml/mail1.eml
=====================================================
Return-Path: <server-dev-return-56862-benwa=minet.net@james.apache.org>
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
Thu, 04 Jun 2015 11:23:39 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
by mx1.minet.net (Postfix) with ESMTP id 0113F385C15
for <benwa@minet.net>; Thu, 4 Jun 2015 11:23:43 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.51
X-Spam-Level:
X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
T_RP_MATCHES_RCVD=-0.01] autolearn=ham
Received: from mx2.minet.net ([IPv6:::ffff:192.168.102.26])
by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
with ESMTP id IeILbadS9lo5 for <benwa@minet.net>;
Thu, 4 Jun 2015 09:23:42 +0000 (UTC)
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=140.211.11.3; helo=mail.apache.org; envelope-from=server-dev-return-56862-benwa=minet.net@james.apache.org; receiver=benwa@minet.net
Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
by mx2.minet.net (Postfix) with SMTP id CDE83A1C7FC
for <benwa@minet.net>; Thu, 4 Jun 2015 11:23:40 +0200 (CEST)
Received: (qmail 37249 invoked by uid 500); 4 Jun 2015 09:23:38 -0000
Mailing-List: contact server-dev-help@james.apache.org; run by ezmlm
Precedence: bulk
List-Unsubscribe: <mailto:server-dev-unsubscribe@james.apache.org>
List-Help: <mailto:server-dev-help@james.apache.org>
List-Post: <mailto:server-dev@james.apache.org>
List-Id: "James Developers List" <server-dev.james.apache.org>
Reply-To: "James Developers List" <server-dev@james.apache.org>
Delivered-To: mailing list server-dev@james.apache.org
Received: (qmail 37236 invoked by uid 99); 4 Jun 2015 09:23:38 -0000
Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jun 2015 09:23:38 +0000
Date: Thu, 4 Jun 2015 09:23:37 +0000 (UTC)
From: "Tellier Benoit (JIRA)" <jira2@apache.org>
To: "abc" <b-server-dev@james.apache.org>
Message-ID: <JIRA.12835341.1433409792000.9340.1433409817961@Atlassian.JIRA>
In-Reply-To: <JIRA.12835341.1433409792000@Atlassian.JIRA>
References: <JIRA.12835341.1433409792000@Atlassian.JIRA> <JIRA.12835341.1433409792972@arcas>
Subject: [jira] [Created] (MAILBOX-234) Convert Message into JSON
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394
Tellier Benoit created MAILBOX-234:
--------------------------------------
Summary: Convert Message into JSON
=====================================================
== File: mailbox/store/src/test/resources/eml/noAttachment.eml
=====================================================
Content-Type: text/plain; Charset=UTF-8
Date: Fri, 17 Sep 2010 17:12:26 +0200
Subject: my subject
To: a@test, B <b@test>
Cc: c@test
Bcc: d@test
MIME-Version: 1.0
Message-Id: <20100917151246.2A9384BA1@lenny>
From: Ad Min <admin@opush.test>
Mail content
--
Ad Min
=====================================================
== File: mailbox/store/src/test/resources/eml/charset.eml
=====================================================
From: Test 1 <test1@linagora.com>
To: Test 2 <test2@linagora.com>
Subject: New Time Proposed: New event from Test: lole
Date: Tue, 13 Mar 2018 14:36:08 +0000
Message-ID: <AM5P190MB03542A58E344C68475A951AFD20@AM5P190MB0354.EURP190.PROD.OUTLOOK.COM>
Accept-Language: en-US
Content-Language: en-US
Content-Type: multipart/alternative;
boundary="_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_"
MIME-Version: 1.0
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Will be better for me, thx
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<html>
<p>Will be better for me, thx</p>
</html>
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/calendar; charset="iso-8859-1"; method=COUNTER
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="attachment1.txt"
QkVHSU46VkNBTEVOREFSDQpNRVRIT0Q6Q09VTlRFUg0KUFJPRElEOk1pY3Jvc29mdCBFeGNoYW5n
ZSBTZXJ2ZXIgMjAxMA0KVkVSU0lPTjoyLjANCkJFR0lOOlZUSU1FWk9ORQ0KVFpJRDpFdXJvcGUv
QmVybGluDQpCRUdJTjpTVEFOREFSRA0KRFRTVEFSVDoxNjAxMDEwMVQwMzAwMDANClRaT0ZGU0VU
RlJPTTorMDIwMA0KVFpPRkZTRVRUTzorMDEwMA0KUlJVTEU6RlJFUT1ZRUFSTFk7SU5URVJWQUw9
MTtCWURBWT0tMVNVO0JZTU9OVEg9MTANCkVORDpTVEFOREFSRA0KQkVHSU46REFZTElHSFQNCkRU
U0VRVUVOQ0U6MA0KRFRTVEFNUDoyMDE4MDMxM1QxNDM2MDdaDQpDT01NRU5UO0xBTkdVQUdFPWVu
LVVTOldpbGwgYmUgYmV0dGVyIGZvciBtZVwsIHRoeFxuDQpFTkQ6VkVWRU5UDQpFTkQ6VkNBTEVO
REFSDQo=
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_--
=====================================================
== File: mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithBlankCid.eml
=====================================================
Return-Path: <test@local.com>
Received: from localhost;
Tue, 05 Jul 2016 11:47:47 +0200
X-Sieve: CMU Sieve 2.2
To: Test <test@local.com>
From: Test <test@local.com>
Subject: Inline attachment
Message-ID: <26d91590-b995-8d45-f66a-0433c65745bb@linagora.com>
Date: Tue, 5 Jul 2016 11:47:46 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.1.1
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="------------FC06E08B3CDF05E9A3E28077"
This is a multi-part message in MIME format.
--------------FC06E08B3CDF05E9A3E28077
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
This is an inline attachment:
Cheers!
--------------FC06E08B3CDF05E9A3E28077
Content-Type: multipart/related;
boundary="------------47107B0D40019CDFED2C4263"
--------------47107B0D40019CDFED2C4263
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
This is an inline attachment:<br>
<br>
<img alt="" src="cid:part1.37A15C92.A7C3488D@linagora.com"
height="73" width="73"><br>
<br>
<br>
Cheers!<br>
</body>
</html>
--------------47107B0D40019CDFED2C4263
Content-Type: image/png;
name="james-logo-square.png"
=====================================================
== File: mailbox/store/src/test/resources/eml/embeddedAttachmentWithInline.eml
=====================================================
Return-Path: <iphone@obm.lng.org>
Received: from lenny.obm.lng.org (localhost [127.0.0.1])
by lenny.obm.lng.org (Cyrus v2.3.14-Debian-2.3.14-2) with LMTPA;
Wed, 21 Mar 2012 14:51:59 +0100
X-Sieve: CMU Sieve 2.3
Received: from [192.168.2.48] (unknown [192.168.2.48])
by lenny.obm.lng.org (Postfix) with ESMTP id E495D32929
for <usera@obm.lng.org>; Wed, 21 Mar 2012 14:51:58 +0100 (CET)
Message-ID: <4F69DD0E.3010502@obm.lng.org>
Date: Wed, 21 Mar 2012 14:52:14 +0100
From: iphone <iphone@obm.lng.org>
User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.2.28) Gecko/20120306 Lightning/1.0b2 Thunderbird/3.1.20
MIME-Version: 1.0
To: usera <usera@obm.lng.org>
Subject: Fwd: Re: email with sign
Content-Type: multipart/mixed;
boundary="------------080809000000030101030405"
This is a multi-part message in MIME format.
--------------080809000000030101030405
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
new email text part
--------------080809000000030101030405
Content-Type: message/rfc822;
name="Re: email with sign.eml"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="Re: email with sign.eml"
Return-Path: <usera@obm.lng.org>
Received: from lenny.obm.lng.org (localhost [127.0.0.1])
by lenny.obm.lng.org (Cyrus v2.3.14-Debian-2.3.14-2) with LMTPA;
Wed, 21 Mar 2012 14:19:29 +0100
X-Sieve: CMU Sieve 2.3
Received: from [192.168.2.48] (unknown [192.168.2.48])
by lenny.obm.lng.org (Postfix) with ESMTP id 47EC832D51
for <iphone@obm.lng.org>; Wed, 21 Mar 2012 14:19:29 +0100 (CET)
Message-ID: <4F69D570.9090502@obm.lng.org>
Date: Wed, 21 Mar 2012 14:19:44 +0100
From: usera <usera@obm.lng.org>
User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.2.28) Gecko/20120306 Thunderbird/3.1.20
MIME-Version: 1.0
To: iphone <iphone@obm.lng.org>
Subject: Re: email with sign
References: <4F69D0C6.501@obm.lng.org>
In-Reply-To: <4F69D0C6.501@obm.lng.org>
Content-Type: multipart/alternative;
=====================================================
== File: mailbox/store/src/test/resources/eml/oneAttachmentWithoutContentType.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_1330682067197"
------=_Part_0_1330682067197
Content-Type: multipart/alternative;
boundary="----=_Part_2_1330682067197"
------=_Part_2_1330682067197
Content-Type: text/plain;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
<b>Content of part 1-2</b>
------=_Part_2_1330682067197--
------=_Part_0_1330682067197
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="gimp.png"
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
------=_Part_0_1330682067197--
=====================================================
== File: mailbox/store/src/test/resources/eml/emailWithTextAttachment.eml
=====================================================
To: James User <user@james.org>
From: James Sender <sender@james.org>
Subject: Message with text attachment
Message-ID: <ffaa7bce-fbe3-83b5-de3f-9a7301233615@linagora.com>
Date: Tue, 5 Sep 2017 09:54:16 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------D24E361990BDBA143D4D8794"
Content-Language: en-US
This is a multi-part message in MIME format.
--------------D24E361990BDBA143D4D8794
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
The message has a text attachment.
--------------D24E361990BDBA143D4D8794
Content-Type: text/plain; charset=UTF-8;
name="attachment.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="attachment.txt"
VGhpcyBpcyBhIGJlYXV0aWZ1bCBiYW5hbmEuCg==
--------------D24E361990BDBA143D4D8794--
=====================================================
== File: mailbox/store/src/test/resources/eml/oneAttachmentWithoutName.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_1330682067197"
------=_Part_0_1330682067197
Content-Type: multipart/alternative;
boundary="----=_Part_2_1330682067197"
------=_Part_2_1330682067197
Content-Type: text/plain;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
<b>Content of part 1-2</b>
------=_Part_2_1330682067197--
------=_Part_0_1330682067197
Content-Type: application/octet-stream;
Content-Transfer-Encoding: base64
Content-Disposition: attachment
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
------=_Part_0_1330682067197--
=====================================================
== File: mailbox/store/src/test/resources/eml/calendar.eml
=====================================================
From: Test 1 <test1@linagora.com>
To: Test 2 <test2@linagora.com>
Subject: New Time Proposed: New event from Test: lole
Date: Tue, 13 Mar 2018 14:36:08 +0000
Message-ID: <AM5P190MB03542A58E344C68475A951AFD20@AM5P190MB0354.EURP190.PROD.OUTLOOK.COM>
Accept-Language: en-US
Content-Language: en-US
Content-Type: multipart/alternative;
boundary="_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_"
MIME-Version: 1.0
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Will be better for me, thx
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<html>
<p>Will be better for me, thx</p>
</html>
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/calendar; charset="utf-8"; method=COUNTER
Content-Transfer-Encoding: base64
QkVHSU46VkNBTEVOREFSDQpNRVRIT0Q6Q09VTlRFUg0KUFJPRElEOk1pY3Jvc29mdCBFeGNoYW5n
ZSBTZXJ2ZXIgMjAxMA0KVkVSU0lPTjoyLjANCkJFR0lOOlZUSU1FWk9ORQ0KVFpJRDpFdXJvcGUv
QmVybGluDQpCRUdJTjpTVEFOREFSRA0KRFRTVEFSVDoxNjAxMDEwMVQwMzAwMDANClRaT0ZGU0VU
RlJPTTorMDIwMA0KVFpPRkZTRVRUTzorMDEwMA0KUlJVTEU6RlJFUT1ZRUFSTFk7SU5URVJWQUw9
MTtCWURBWT0tMVNVO0JZTU9OVEg9MTANCkVORDpTVEFOREFSRA0KQkVHSU46REFZTElHSFQNCkRU
U0VRVUVOQ0U6MA0KRFRTVEFNUDoyMDE4MDMxM1QxNDM2MDdaDQpDT01NRU5UO0xBTkdVQUdFPWVu
LVVTOldpbGwgYmUgYmV0dGVyIGZvciBtZVwsIHRoeFxuDQpFTkQ6VkVWRU5UDQpFTkQ6VkNBTEVO
REFSDQo=
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_--
=====================================================
== File: mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithEmptyCid.eml
=====================================================
Return-Path: <test@local.com>
Received: from localhost;
Tue, 05 Jul 2016 11:47:47 +0200
X-Sieve: CMU Sieve 2.2
To: Test <test@local.com>
From: Test <test@local.com>
Subject: Inline attachment
Message-ID: <26d91590-b995-8d45-f66a-0433c65745bb@linagora.com>
Date: Tue, 5 Jul 2016 11:47:46 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.1.1
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="------------FC06E08B3CDF05E9A3E28077"
This is a multi-part message in MIME format.
--------------FC06E08B3CDF05E9A3E28077
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
This is an inline attachment:
Cheers!
--------------FC06E08B3CDF05E9A3E28077
Content-Type: multipart/related;
boundary="------------47107B0D40019CDFED2C4263"
--------------47107B0D40019CDFED2C4263
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
This is an inline attachment:<br>
<br>
<img alt="" src="cid:part1.37A15C92.A7C3488D@linagora.com"
height="73" width="73"><br>
<br>
<br>
Cheers!<br>
</body>
</html>
--------------47107B0D40019CDFED2C4263
Content-Type: image/png;
name="james-logo-square.png"
=====================================================
== File: mailbox/store/src/test/resources/eml/charset2.eml
=====================================================
From: Test 1 <test1@linagora.com>
To: Test 2 <test2@linagora.com>
Subject: New Time Proposed: New event from Test: lole
Date: Tue, 13 Mar 2018 14:36:08 +0000
Message-ID: <AM5P190MB03542A58E344C68475A951AFD20@AM5P190MB0354.EURP190.PROD.OUTLOOK.COM>
Accept-Language: en-US
Content-Language: en-US
Content-Type: multipart/alternative;
boundary="_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_"
MIME-Version: 1.0
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Will be better for me, thx
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<html>
<p>Will be better for me, thx</p>
</html>
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/calendar; charset="iso-8859-1"; method=COUNTER
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="attachment1.txt"
QkVHSU46VkNBTEVOREFSDQpNRVRIT0Q6Q09VTlRFUg0KUFJPRElEOk1pY3Jvc29mdCBFeGNoYW5n
ZSBTZXJ2ZXIgMjAxMA0KVkVSU0lPTjoyLjANCkJFR0lOOlZUSU1FWk9ORQ0KVFpJRDpFdXJvcGUv
QmVybGluDQpCRUdJTjpTVEFOREFSRA0KRFRTVEFSVDoxNjAxMDEwMVQwMzAwMDANClRaT0ZGU0VU
RlJPTTorMDIwMA0KVFpPRkZTRVRUTzorMDEwMA0KUlJVTEU6RlJFUT1ZRUFSTFk7SU5URVJWQUw9
MTtCWURBWT0tMVNVO0JZTU9OVEg9MTANCkVORDpTVEFOREFSRA0KQkVHSU46REFZTElHSFQNCkRU
U0VRVUVOQ0U6MA0KRFRTVEFNUDoyMDE4MDMxM1QxNDM2MDdaDQpDT01NRU5UO0xBTkdVQUdFPWVu
LVVTOldpbGwgYmUgYmV0dGVyIGZvciBtZVwsIHRoeFxuDQpFTkQ6VkVWRU5UDQpFTkQ6VkNBTEVO
REFSDQo=
--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/calendar; charset="iso-4444-5"; method=COUNTER
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="attachment2.txt"
QkVHSU46VkNBTEVOREFSDQpNRVRIT0Q6Q09VTlRFUg0KUFJPRElEOk1pY3Jvc29mdCBFeGNoYW5n
ZSBTZXJ2ZXIgMjAxMA0KVkVSU0lPTjoyLjANCkJFR0lOOlZUSU1FWk9ORQ0KVFpJRDpFdXJvcGUv
QmVybGluDQpCRUdJTjpTVEFOREFSRA0KRFRTVEFSVDoxNjAxMDEwMVQwMzAwMDANClRaT0ZGU0VU
RlJPTTorMDIwMA0KVFpPRkZTRVRUTzorMDEwMA0KUlJVTEU6RlJFUT1ZRUFSTFk7SU5URVJWQUw9
=====================================================
== File: mailbox/store/src/test/resources/eml/nonTextual.eml
=====================================================
Return-Path: <btellier@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
Thu, 18 Jun 2015 12:43:28 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.75.9.154] (unknown [92.103.166.6])
(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
(No client certificate requested)
by alderaan.linagora.com (Postfix) with ESMTPSA id 0EB1078A
for <btellier@linagora.com>; Thu, 18 Jun 2015 12:43:28 +0200 (CEST)
To: btellier@linagora.com
From: Benoit Tellier <btellier@linagora.com>
Subject: Test message
Message-ID: <5582A0CE.4020801@linagora.com>
Date: Thu, 18 Jun 2015 12:43:26 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
Thunderbird/38.0.1
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------030000010109090603040500"
This is a multi-part message in MIME format.
--------------030000010109090603040500
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
This mail have a non textual attachment !
--------------030000010109090603040500
Content-Type: application/vnd.oasis.opendocument.text;
name="toto.odt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="toto.odt"
UEsDBBQAAAgAAGNV0kZexjIMJwAAACcAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQu
b2FzaXMub3BlbmRvY3VtZW50LnRleHRQSwMEFAAACAAAY1XSRnPWCvM4AwAAOAMAABgAAABU
aHVtYm5haWxzL3RodW1ibmFpbC5wbmeJUE5HDQoaCgAAAA1JSERSAAAAxgAAAQAIAwAAAN+D
+XIAAAEyUExURXJoXXN0dXZ4e3h3eHl7fnx8gXqCh32IgXuJnoB7fI+Fa4+IbIODe4iEe5+Q
eISDhICFiISJhIaMiY2Gg4uJgomMjIGJkIuOkY6Uj4SRm4+WkomZnJGKgJGUjJuTh5uWj5GV
kZGVnJaYkpWbmpmVlZmblJ2en4OYqZSYoJSfqpyeoI6gs5SipJygopKhsZapvKeajKGemKqd
k6KjnaqilKmrn7SllL2tnaampaarraquo6msrqmusKq2urSwqLu5tLy5uaO2yKu5w77EtrXI
1sC5p8+8rcHGt83BtdfGttnKus3NysLO3svP0tbRzdrQy9rYztrb2tvg5Nru9+bf3Ozg0PLj
yfLl0PXo0/vt0uTn7ujn5+jp7Ovw6OL2/en4/fLr5/336vP7/v7+/gAAAP///4uCFGkAAAHB
SURBVHja7dPbThMBEAbgYgsaQmkEVhfbxR5YDKUIslBUWuTogZI0HGxq0gBt3/8dIE00ek+C
gW8uZv6Zu+9iUsNHUSkMDAwMDAwMDAwMDAyMJ8o4Of137+z/vfV+h7Nh+a6X+8t/rqN2MxjF
y9H4fv1wjN1c5eOXdOpdshTNFQuvTrbGk2pzIq6/DJbGnk+udOY/ZYNqsBcnM4WpSqVbquxk
e7nCRPZ4pZ8Oxhe+vZh+3RzbqC1uzlxvXz0Y4+fpbC7qlVqZ8moUhfH5j8/PkupBMahHYb4V
Ti7/mm+EH1a/HkXFIG7n33RrpUY4DOOzjeR9v9SefXtYy2YOovX84mZ00R78t7/RWfPiGBgY
GBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgY
=====================================================
== File: mailbox/store/src/test/resources/documents/writter.docx
=====================================================
=====================================================
== File: mailbox/store/src/test/resources/documents/Text.txt
=====================================================
This is some awesome text text.
=====================================================
== File: mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/FetchGroupConverterTest.java
=====================================================
/****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one *
* or more contributor license agreements. See the NOTICE file *
* distributed with this work for additional information *
* regarding copyright ownership. The ASF licenses this file *
* to you under the Apache License, Version 2.0 (the *
* "License"); you may not use this file except in compliance *
* with the License. You may obtain a copy of the License at *
* *
* http: ww.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
* KIND, either express or implied. See the License for the *
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
package org.apache.james.mailbox.store.mail;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.EnumSet;
import java.util.stream.Stream;
import org.apache.james.mailbox.model.FetchGroup;
import org.apache.james.mailbox.model.FetchGroup.Profile;
import org.apache.james.mailbox.model.MimePath;
import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
class FetchGroupConverterTest {
private static final int[] PARTS = new int[]{12};
static Stream<Arguments> getFetchTypeShouldReturnCorrectValue() {
return Stream.of(
Arguments.arguments(FetchGroup.MINIMAL, FetchType.METADATA),
Arguments.arguments(FetchGroup.HEADERS, FetchType.HEADERS),
Arguments.arguments(FetchGroup.HEADERS_WITH_ATTACHMENTS_METADATA, FetchType.ATTACHMENTS_METADATA),
Arguments.arguments(FetchGroup.BODY_CONTENT, FetchType.FULL),
Arguments.arguments(FetchGroup.FULL_CONTENT, FetchType.FULL),
Arguments.arguments(FetchGroup.BODY_CONTENT.with(Profile.HEADERS), FetchType.FULL),
Arguments.arguments(FetchGroup.MINIMAL.with(Profile.MIME_CONTENT), FetchType.FULL),
Arguments.arguments(FetchGroup.MINIMAL.with(Profile.MIME_DESCRIPTOR), FetchType.FULL),
Arguments.arguments(FetchGroup.MINIMAL.with(Profile.MIME_HEADERS), FetchType.FULL),
Arguments.arguments(FetchGroup.MINIMAL.addPartContent(new MimePath(PARTS), EnumSet.noneOf(Profile.class)), FetchType.FULL),
Arguments.arguments(FetchGroup.MINIMAL.addPartContent(new MimePath(PARTS), Profile.HEADERS), FetchType.FULL),
=====================================================
== File: mailbox/cassandra/doc/README.md
=====================================================
# Cassandra implementation for the mailbox
This file attempts to provide information useful to mailbox/cassandra developers.
## Table structure

Can be edited using [this source file](table_structure.drawio) on [this website](https://app.diagrams.net/).
This file should be edited everytime the table structure is modified.
## Approach regarding denormalization
The Cassandra mailbox is heavily relying on denormalization. The same data is stored several times, in distinct tables,
to satisfy the various read access patterns. Of course, the various tables can become inconsistent between them.
We have been developing several approaches in order to diagnose, mitigate and solve such issues. They are described in
the following documents:
- [Applicative read repaires](../../../src/adr/0042-applicative-read-repairs.md)
- [Inconsistencies among messages](../../../src/adr/0022-cassandra-message-inconsistency.md)
- [Inconsistencies among mailboxes](../../../src/adr/0020-cassandra-mailbox-object-consistency.md)
- [Recompute user quotas](../../../src/adr/0028-Recompute-mailbox-quotas.md)
- [Mailbox counter inconsistencies](../../../src/adr/0023-cassandra-mailbox-counters-inconsistencies.md)
=====================================================
== File: mailbox/cassandra/doc/table_structure.drawio
=====================================================
<mxfile host="app.diagrams.net" modified="2021-08-24T02:04:00.037Z" agent="5.0 (X11)" etag="lTsFg4HG33iSt8uwSXVP" version="14.9.8" type="device"><diagram id="T0L1nU3M2jZuK1mChcqM" name="Page-1">7R1bd6M2+tf4nPTBOSDuj5lk0nY72c42SbfztEcG2abF4AKexP31KwHCIAmML1xMPA8TWwiB9X367peJcr96/zGE6+VT4CBvAiTnfaI8TAD+J0n4DxnZpiOGBtKBReg66ZC0G3h2/0HpoExHN66DomwsHYqDwIvddXnQDnwf2XFpDIZh8FaeNg88pzSwhgvEDTzb0ONH/+s68TIdNTVpN/4TchdL+mSZ/uAVpJOzgWgJneCtMKR8nij3YRDE6afV+z3yyOaV9+Wx4mr+YiHy4yY3PNg/rl//eQr+RPP41z9+/dWG7r+nevZu8Zb+YOTg3599DcJ4GSwCH3qfd6OfwmDjO4isKuFvuzlfgmCNB2U8+CeK420GTLiJAzy0jFdedhW9u/Ef5PZbLfv2rXDl4T1bOfmypV/8ONz+UfzyLVlBNWU6sLsx+Va68ysK3RWKUZgNRjEM4zuCH3jA9mAUuTYdfnQ9+qb8HmfbHgWb0EY1G0txFYYLFNfMU9J5ZNcLD8gg+CMK8EuHWzwhRB6M3e9lrIQZci/yeTv44w8ZChyADrLSBz6UgOEHPmIgIZ0DEufb4ezWr4GLXwVIGamTDS29JSN0llReIcWE7CYGTPlbnAC59GnfobfJfsEE6B7eqk+O+528hucu/OSC/veGkJxPHr599w1/WpC/L3BGgHpHnreC61fXSUeyxWYhnVg9gt8/eWZ59LDXaHf1r78QAo2iCFPvn512n3WfPAu63ix4Fz0ruY6ZnOAKuTFwntHf4mtudOdHbyhEFfe60QPyMM2rvPwbsslpqrj66MHFovrmZ4T8yueGcF6xbrwMEXSEG0H2IUIheW7UMkzIW/qYG2Aq9QBjAXaTGbPA2T4TMvSrHaNY8Epk0nzjefcBXsuvnbbEPxqF2cTmP46hxWVK+7Z0Y/S8hgn1e8PiV5mq0s1ItkD5NHfJi3pBmCylzOdIt1OWFwZ/ocIVx7BmUi3J/Y7CGL3XElN6lUpDGVGUzez7206WkqkstSzIUQqQqgnwSSzOuDyJ59YEelHqmUq3kpSPDErsAZcp9gwIKaRapGhXVALdiEqK2auopGoCWakG/Nk2D1zMbXryzi4On3TywPnF1lyuG63gWi1Mnl1wrRZMq6Xnq9x6lVsvXG5V5MHJrVqfIgr9/K0kruyRW4mYKufWucxcp+8z1zUUUYXi7fHcU2nIPdVBcU+lNe75XemacXZqkxkaHU04DHqPN/hsuj6mapuqWeSlapdZIceFL9t1xY+KNrPqi3a6cBWXyy4/oMgO3XXsBhWMlM5zo3UQuWTe3kc+OVrt9ZcQ+tEchZ99O3Bcf9Fo8pfAhnvf8gv0FxviBGr4U77CECY0pwLS9B3wL943FcYxtJcrPPsAueHSWStQyqxVUwWs1WqLteqv25dvr7b+0xY+/oLWX5UIvfbLWg8xCR3P387Ot8SavcZo9qbBLNG2an9+hrg7pL+D6lN6scqk69xFr0It7+wMt4KrzLxgVsVx4mo+Rs5VM810bBRUkxtQUJFyIqttKScmd+58bp+JfDNhDGLFXcosYsUtzYbophOtn8j6n8heuTb07rILK9dxEqosgl4ZvmfYf5nlYDK//6pg+1tTDa2PtPus8ViTet59Cv2Psf2qoZe2X5eMnrefj3yQR7z9DO3XBYapbrcffKTtB4w/Wzf63n5e4n2i8s8T9PHfkJeSbgpT1msU/sBPmeIPcEX2MBOasGYQhy7CmkEuYUXE/BEGK/K76m03N/96uvv6w3jRQnAIhWiQh0OcHw/0KjyoxIKSJF9GDAYtajSA47Fl58TCe0JuOUAJufl53PiUe8RzGYfHL12AX63J9zIvYt7levFBGFa87YxIVjKl5Xjml640tyqPnV6pqlzCL9PqG8EAL0Tf2MHaTcjGm5ss4CFIqEUcEKhgsIeQjBJHUDptTaxKiW04nUO2vuTQIHPdeDtiwLKWAYFuJLYMKK0B9kOJ5wpLuEHP8qFSb9s+V2hTW6FshRhIbVJwJO9zIleCcn8YVabP7I9gzGxebZvUTVO91VVD0kwTKBqwlBKCcRJlywZ2uj1ndTmnouAIjetdRWrhuT7EjC6hbpUBSuIr5MaKe1znd/wKDmaZH8c9KUsKuC1bGIGIi8rdclFRpAez1dESrsnHuYfeM7KKqaJTEUrDDxcAwey8A5E5F+68bptoNq/b+b3ksbCpIsmEjp1IRfN1MpgqrCSbMgaObvKxy4yIpSgWRZeuSLDIyXnFhea4gLVZUIKhYZnHIcPUArdS4Z+qMesat1bhn9kpnij1ub1X0Y87WFpT0c/qRvSTJcbXlXOdjlBIM7tBoR2oQQnW0h5Yt5xR0RQfgH5ufDhNWBDlt5xHRv8K4+XvnYeGdiCp14jPZ39WhSxOX6MiqqUmg/ijyuomKMtiQkG9Y3MX74c5+exB2xvhiTtYNyZoHhIYRpePuRaDuareO+ZShehCxcUT2LzRkTQHpFpLXseyHf3Z56RUhLM9pef67v7LCIkW+YFiHt0lfcQAzzyh/ixapzcy33NK+VFkAZmNyhwASQV8WCy30e1ZapDsaMgQ7bulGwrU6/Z9IJYaWTIYf5rKWdua2mo4BNFUs0frDOAjKk4mv+gdUwGS8o5V1nGmvndDf/eWbJoQ8a0ZCb5qc00p+FQ2jdIB1VW1bwquiMqq1UjJCEP1rZgmlgzgC8sgdP8J/Bh6VfS9AI2hk+WpTNO6aAEXAG6puflwG/r+tSpoMd5EuC1MSwKAorr3Bsyz5PxZOyxJVz2vKR5waHRn2yhKopZgTBKRo0TRt8MgGUzot0B6e3MxePHEMKEMDCKOJopmqqqMC9ai8a1FUmAKMLy9QJr6ypjnV4+NoejHFHn3u0VAQyrVUXEEXsHNdNM8YFW6yUfW4jj48R4y02SNp9wJy1O1iydMb+2E8dpSTiRn27LQNFagcApP3+k9Cq+meG4UJwLwY8qyChBak5rXowWOqRgMWxJVBZK1DsGj8vJpBp4bB3loAZMqWvTkoGjMoc+yPjTgdC0yDEViUM8uCIjleQMw4REdB8PS39mCoz2pAFSXU3OxJpyrp/0CbTM6Gz7Zv6edGocKhy/J+iE6SiGmXLLTk8Q7jUfD+XSdlUtEro9uWZ8oDILZ/15jVMtFCs1JMejsVgfKpD7wTFh9UFwsUQdmLSsmX85Xx7Cprt6YRXcUnq0z9EVjMLNxeDYTWKHwDqMzGRM1Rn9WzFL7nXYMiarIazSkc1WJuQNBNItREjDiHe1QlBjxE2hWjw5FukG1roo9joedKgGa6xKF6F2jq0htoyGZo3swEOwzLTHNOBj3LJVZiBWz2ka2Jn6xxsh2VE+MgwLFT0C1phy1cRD4FdUOQzVeyR5xeS1ZZpiKKiju16kFWONTD8e9/xXo3tv+83ruiAsoyBJraeh9/3lVdtT7z1Q465/+8G7cEe8/72NSBMWfugUAr3OOGAAkJIjhwH1TIGobEbgZ5kEiqu0AQc3g5MI0qZGceBVkc/1eY+3P7duwVNUfv+1MYNlOHzr2+Ii8KRy1qdJSi72hQTfuxHZdg3o2ca86pTfV3LsJJtJFCu+Jrr60pdRYu5R1mSrjrtD/sjpv/xOWmd/TW2Z/g68ZjNDzZvYnaTH/Ybx+U5mxcTdug9We24/ShcJBfF0TloUJgY3c72n9P0T8fxNwz8PKXiL7L/ILlq69zMGefEDkp8+QF+QlBEfL2wBgi6hzcBUyt9bqP+r1HVj7jJU5thBJy4xUbcpImzpgOmKkLbRoSc8wRoK/NuuxstMOO6NVc+77jNk+Hf4yo+OFSuOuK+3xQj5imkR9EhVuxOEuU8az0bT4emu8ywCD5V0t86Cu6mApTOpu17USdN4EdjLTijazmjaKF8+vxKGXZ2VVhSxd/OmGsCxhBs84GZIMmFQRYfUj0ClDMkSWyhrSWJkuSznM5PKTZWWFqQrJOdAbBxwpjG9GYXOxzhTaJgNW1tE7iG0zeBMbU3VurBKNDDRNDNi+bM0G7/QnLVfwyJfn10+JYUXiSe2/0ilPlCY/JrHY44Xa/ly9bqOujQaVgc9freCYHvEnyJyN7R5N6/N3wwbYDAr12HgsJlKa6+l5Jh5QUVqxXQ7QQuFSexMSJPsPngBHKGaTMfhbEBzglTjWLJRZoGp600dxEAo7qY9WBlfV4cngLVQgdQIsiflP8H2sxyj9gUKs3lvmaQXfn/YdjSaLPJdPz+jOisb4nBRB70xZ2DWxvbPSQg3M1XhPSXfMpq9D9wFYlt6kaLao91+Lx1BUJ/NUloXmcOPFlGeBaghf7HH8Cwky0BvhfXpyjrs5GjmbMmhlzjo21e35MOvV+BbacAyoC4dhNVT4qfY4kEAHcwzhmkZXHj7NLFdDV6jLrSMPn6l2c8TE5f3aSXocyrk8e33904QN3pebyetSXhdwtCZrVgfr3WRtikx+gzRZV6a5t5d73PyIDcvWLWtsLf5jjd0yW2VDbZh9fLDL06yocFT5ZlzzIaMDC7m5x7iXSuE/+w6mMXHWFB2jfxISiVUiPwhXmCRFMA06kdwo2uzKDNcoJunQlNcYngNvk8WbSUv4nTxmhlCyNilFvyJ0z5lkDdnhxnHJFkKfDM1dErYRL9Hq9mj1ezSUeSpbepky02q6JeuYxZ9ZnamVfT7S3IJWvgqcCP09Ql38qG5WdDcuXWcWFCDrP1HErI7ZOzZrUrLz/dsNKo+P0oP0UI11Gw4N6cCX/74UkGMmQBju3g+Tfsnn4YK+83Bp3PEVoy4Sowym9Jdu9Y1PoqbuV3y6FHyasgWnrb4rNVh8/FeWDiVBm+hzXmZm2SZZkqygkqgE91hdxvJ5SOwhHnnnt/TNsaQeQj8i64w7uyS/h0KVNovf13qkNUnGaqOfc8F5Osoy00cJ5D7G4leSQH7pErnJxCUNQB63qk0XV243fLpocYWJ+pefTG67h5J3d3RN1HZ9NlbTuqlmU4NyNz4by7oESINLhLQ1LK+5xUfkvf6M/398CpxnYiuTFshHITVgb9LSH1m5j6wECBRX/sgSWJ4/f/l8/zJeQm0ArkuRgFDLhoBSt9baK2/MUs38haxckozHx8ca+ZEdOK0e2o33Fv9QydlrBYOPIQTIrMKr9SsByBKfM/iUqasOWqPEz3SQWpsUesrv2mIym+CmP3cXG0p1xgrdqVqueGcZPHhlUxAd0CLdAFe6MQLMAnJZHRXVEeuYcFSXIapHrPt7wsv2ItbLb68vP11hP0nMpKAMfInSmf6gz1vUnlOJGhP+ecIUNkmj5SRswXHhwg+i+hCK8YJPshjwKf2zhb22pOvpbYdyi9oEd3x2q3O2rrBv2wXft4crJ0YF6H/+jlLhjVBwoWOLH7nJin4GfuISczah8EZokzdaBY47JwF1REXgO+ji13bXURVUio6BaE3KxyoPc/edwIlzDZg2ErsGZqamaufS4STekivyDoh6f7fnHZBlvqb8AE18A7Lw5TXQ9pr48kMzEBtf/ubFTu/3X5iTRp4cEplr7XpBGkSa9BiHicGPO/NStI1itGpy+PP6NLuAf+kmLySWdjVPzj1cr1E44pbZFltJ0eIlu7xScClOXGsNNUQKP7P/7TU4RLKjIUNEgS3dUKBet+1nPIYdRemzrV4064ReiExZGs3ssxeiLItCq4aERjlPkScHpJIc0zLveA7TuMvi8DCb0Vp06QTMNvRbzVBlBeO4opqUQGUrG3hlU5E0gKeosqYxwfit4/nVjNVZYyyT1YZ6D4DIU/WuMTWXilNlOmX0bheXecvaZz92YzdJJlsl8jIVxTltmUjmHAJQ9fyZUc9F2FBYa7EI0QLGiIP+panb5bx2XeW7SHWuareQ2IVVJQ8fJPz90YOLiAdo9ciYA0pJFexsQxg0vriQUllhiJVOK82VMhSVblG5hcLs0PeDGI60LPtRWFxVaCjb9stHbcDU/BGiNlA7RW3AG8lORu25G0bxqx8lGdpX3B5VyL+sqXoDJDa6RWKROe9EJCZBnqKKfx8Tf9PdyLsfbkaByjqNP691UHUraoDqbM1Ts7AeSNMmVAP2j4XS48BhU7GGh8MNqi0Nwyx+YKkzuqeyegtMzZBV+r9OXzTzCGu3oHAV/18H7f2Gb3lohZfMsgygGYzjpbHZG1jgVpJkS5UMw8CIU06K1U3t1rJMSbMAAKZBjRpdmb2BKP7risfH4zFVNoaCxzoTdKiZx+KxqstctEvHThogsrddsfUEbAUDw1ajjGGaJR2JrYah9I6tIpPaFVtPwFZlWNhqSGWXhGYc6xq3lN6xVeGtZO4Krl9dJ6t8wmDueHyHbB1/jaZZ9OY7pBULa2u57qhEtq+X1MpRZyxsVEo59ORMATDqV2r93DSpu3vZsCrvsCyZRwKLXal7WDXQdi4aVvg4qCywjpX3dWvPSq1DS5SfMnZoGUfTwfJSuqR1Cy3KIa9pB9k+7E07ULLzdEbjWEdpB+pFpJgMqYrMAcBubEHqCtjdtF85BtjDgVlTO0pXMOu6CcuHOqBNzRAdAVvhraIPNLv+H5oBluTfz2EUJy0FIvxs/Ccr5BSsszpQJDL1hgR7ktyxH8iVeTr/7w0Ks8BVFEMHJk1eEEkWSzLJPkhBKFlTys4bk4rExTQvWkmnlMBvtQV8deiOyKEL4aBswzOsIyVwzANKeVqaxqyr95nGpe7pz5oVduun3UltS5MJzV5NZs3Ip1JDlKaRF2MlSlOm2wnVA0tNFkUk6QzdTvTX7cu3V1v/aQsff0Hrr0qEXqd8IbEOCZIDkTkXhqTotolm8wsgSLJmlc1kGguqA1y25ZWUtno+aUxyhpZZ9o5s4YS/hqQ5cmE6Pj3Lp8BBZMb/AQ==</diagram></mxfile>
=====================================================
== File: mailbox/cassandra/src/test/resources/cassandra-driver.conf
=====================================================
datastax-java-driver {
basic.request {
timeout = 5 seconds
}
}
=====================================================
== File: docs/Dockerfile
=====================================================
ARG ANTORA_VERSION=3.1.7
FROM antora/antora:${ANTORA_VERSION} AS antora_builder
ARG JAMES_CHECKOUT=master
RUN apk update && apk add git
RUN git clone https://github.com/apache/james-project.git /james-project \
&& cd /james-project \
&& git checkout $JAMES_CHECKOUT
WORKDIR /james-project/docs
RUN antora antora-playbook-local.yml
FROM nginx:alpine
COPY --from=antora_builder /james-project/docs/build/site /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
=====================================================
== File: docs/ui-overrides/partials/header-content.hbs
=====================================================
<header class="header">
<nav class="navbar">
<div class="navbar-brand">
<a class="navbar-item" href="{{{or site.url (or siteRootUrl siteRootPath)}}}"><img src="/_/img/james.svg" alt="james logo"> {{site.title}}</a>
<button class="navbar-burger" data-target="topbar-nav">
<span></span>
<span></span>
<span></span>
</button>
</div>
<div id="topbar-nav" class="navbar-menu">
<div class="navbar-end">
<a class="navbar-item" href="#">Home</a>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Products</a>
<div class="navbar-dropdown">
<div class="navbar-item"><strong>James server</strong></div>
<a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
<a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
<hr class="navbar-divider">
<a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
<a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
<a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
<a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
<a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Community</a>
<div class="navbar-dropdown">
<!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
<a class="navbar-item" href="/james-project/3.7.3/community/mailing-lists.html">Mailing lists</a>
<a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
<a class="navbar-item" href="https://twitter.com/ApacheJames">
<span class="icon">
<svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path>
</svg>
</span> Twitter
</a>
<a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> Github</a>
</div>
</div>
<!-- <div class="navbar-item">
<span class="control">
<a class="button is-primary" href="#">Download</a>
</span>
</div> -->
</div>
</div>
=====================================================
== File: docs/ui-overrides/img/james.svg
=====================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
width="37px" height="31px" viewBox="0 0 37 31" enable-background="new 0 0 37 31" xml:space="preserve">
<g>
<path fill="#FFFFFF" d="M37.001,4.407c-1.435-0.966-2.92-1.75-4.473-2.153c-1.552-0.412-3.151-0.315-4.63,0.3l-0.277,0.117
l-0.139,0.062l-0.064,0.032l-0.036,0.016l-0.018,0.008l-0.008,0.004c0.008-0.007-0.028,0.016,0.02-0.012L27.37,2.783
c-0.2,0.127-0.391,0.232-0.589,0.337c-0.392,0.207-0.796,0.391-1.216,0.543c-0.836,0.295-1.737,0.503-2.664,0.389
c-0.458-0.061-0.913-0.222-1.3-0.489c-0.382-0.268-0.689-0.629-0.899-1.026C20.28,1.737,20.15,0.857,20.124,0
c0.156,0.842,0.393,1.686,0.857,2.363c0.234,0.336,0.523,0.622,0.864,0.811c0.339,0.19,0.723,0.284,1.111,0.301
c0.782,0.038,1.582-0.201,2.325-0.532c0.376-0.165,0.741-0.353,1.092-0.563c0.176-0.105,0.354-0.219,0.509-0.33l0.307-0.201
c0.1-0.057,0.194-0.122,0.293-0.173c0.801-0.433,1.702-0.731,2.627-0.793c0.925-0.069,1.856,0.063,2.716,0.357
c0.863,0.29,1.655,0.731,2.359,1.267C35.888,3.047,36.52,3.676,37.001,4.407z"/>
<path fill="#FFFFFF" d="M13.25,20.418c-5.733-4.373-9.554-8.973-9.418-9.078c0.147-0.145,4.153,4.212,9.83,8.536
c1.665,1.28,3.28,2.412,4.733,3.381c0.02-0.036,0.041-0.069,0.062-0.105c0.237-0.456,0.42-0.948,0.562-1.462
c-1.018-2.053-3.554-4.892-6.501-7.496c-0.656-0.572-1.338-1.078-2.028-1.536c-0.151,1.223-0.452,2.098-0.453,2.096
c0,0-0.335-1.163-0.306-2.579C9.266,11.892,8.8,11.63,8.336,11.389c-0.004,1.395-0.414,2.439-0.417,2.439
c0,0.002-0.833-1.414-0.922-3.071c-0.002-0.01-0.002-0.021-0.002-0.031c-2.767-1.279-5.1-1.896-5.104-1.89
C1.867,8.774,2.064,14.75,6.431,19.305c0.147-0.008,0.296-0.016,0.449-0.016c1.588,0.004,2.944,0.577,2.947,0.577
c0-0.002-0.835,0.501-2.054,0.671c0.444,0.355,0.899,0.682,1.364,0.973c1.148-0.416,2.102-0.557,2.102-0.557
c0-0.002-0.503,0.495-1.334,1.017c3.035,1.685,5.787,2.542,7.53,2.624c0.236-0.26,0.452-0.532,0.645-0.821
C16.586,22.84,14.938,21.717,13.25,20.418z"/>
<path fill="#FFFFFF" d="M33.7,4.335c-1.103,0.092-2.21,0.292-3.3,0.605c-2.173,0.623-4.31,1.725-6.062,3.396
c-0.883,0.824-1.64,1.798-2.271,2.846c-0.614,1.059-1.109,2.191-1.43,3.363c-0.327,1.168-0.529,2.363-0.595,3.548
c-0.02,0.291-0.031,0.596-0.039,0.9L19.995,19.4l-0.008,0.35c-0.012,0.462-0.051,0.918-0.122,1.358
c-0.056,0.337-0.131,0.665-0.223,0.984c-0.141,0.514-0.324,1.006-0.562,1.466c-0.02,0.036-0.043,0.066-0.062,0.102
c-0.099,0.178-0.204,0.353-0.317,0.52c-0.191,0.286-0.407,0.559-0.643,0.819c-0.17,0.186-0.348,0.366-0.544,0.541
c-1.304,1.152-3.097,1.944-5.021,2.453c-1.931,0.518-3.995,0.788-6.091,0.934c-2.1,0.145-4.234,0.166-6.404,0.112
c2.023,0.815,4.157,1.338,6.333,1.664c2.179,0.313,4.422,0.415,6.701,0.127c1.137-0.149,2.287-0.394,3.418-0.802
c1.129-0.405,2.252-0.959,3.265-1.745c1.019-0.771,1.92-1.77,2.571-2.913c0.331-0.568,0.601-1.167,0.82-1.775
c0.21-0.611,0.364-1.236,0.47-1.859c0.11-0.619,0.17-1.24,0.193-1.852c0.008-0.154,0.008-0.307,0.008-0.461v-0.398
c0.005-0.234,0.011-0.468,0.022-0.716c0.052-0.967,0.166-1.914,0.376-2.832c0.418-1.832,1.213-3.537,2.405-5.009
c1.192-1.472,2.767-2.711,4.552-3.706c1.79-0.994,3.765-1.774,5.862-2.355C35.917,4.247,34.808,4.238,33.7,4.335z"/>
</g>
</svg>
=====================================================
== File: docs/modules/customization/nav.adoc
=====================================================
* xref:index.adoc[]
** xref:mail-processing.adoc[]
** xref:mailbox-listeners.adoc[]
** xref:smtp-hooks.adoc[]
** xref:webadmin-routes.adoc[]
** xref:imap.adoc[]
=====================================================
== File: docs/modules/customization/pages/mail-processing.adoc
=====================================================
= Custom mail processing components
:navtitle: Custom mail processing components
When none of the matchers and mailets available in James allows us to implement what we want, extension
developers will have to write our own mailet and matcher in a separated maven project depending on James
Mailet API.
== Writing custom mailets/matchers
We will write a *IsDelayedForMoreThan* matcher with a configurable delay. If the Sent Date of incoming
emails is older than specified delay, then the emails should be matched (return all mail recipients). Otherwise,
we just return an empty list of recipients.
To ease our Job, we can rely on the *org.apache.james.apache-mailet-base* maven project, which provides us
a *GenericMatcher* that we can extend.
Here is the dependency:
....
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>apache-mailet-base</artifactId>
</dependency>
....
The main method of a matcher is the *match* method:
....
Collection<MailAddress> match(Mail mail) throws MessagingException;
....
For us, it becomes, with *maxDelay* being previously configured:
....
private final Clock clock;
private Duration maxDelay;
@Override
public Collection<MailAddress> match(Mail mail) throws MessagingException {
Date sentDate = mail.getMessage().getSentDate();
if (clock.instant().isAfter(sentDate.toInstant().plusMillis(maxDelay.toMillis()))) {
return ImmutableList.copyOf(mail.getRecipients());
}
return ImmutableList.of();
}
....
*GenericMatcher* exposes us the condition that had been configured. We will use it to compute *maxDelay*.
We can do it in the *init()* method exposed by the generic matcher:
=====================================================
== File: docs/modules/customization/pages/smtp-hooks.adoc
=====================================================
= Custom SMTP hooks
:navtitle: Custom SMTP hooks
SMTP hooks enable extending capabilities of the SMTP server and are run synchronously upon email reception, before the email is
enqueued in the MailQueue, and before any mail processing takes place.
== Available generic hooks
The following interfaces allows interacting with the following commands:
* *AuthHook*: Implement this interfaces to hook in the AUTH Command.
....
HookResult doAuth(SMTPSession session, Username username, String password);
....
* *HeloHook*: Implement this interfaces to hook in the HELO Command
....
HookResult doHelo(SMTPSession session, String helo);
....
* *MailHook*: Implement this interfaces to hook in the MAIL Command
....
HookResult doMail(SMTPSession session, MaybeSender sender);
....
* *MailParametersHook*: Implement this interfaces to hook in the MAIL Command, this is called for specific mail arguments
....
HookResult doMailParameter(SMTPSession session, String paramName, String paramValue);
....
* *QuitHook*: Implement this interfaces to hook in the QUIT Command
....
HookResult doQuit(SMTPSession session);
....
* *RcptHook*: Implement this interfaces to hook in the RCPT Command
....
HookResult doRcpt(SMTPSession session, MaybeSender sender, MailAddress rcpt);
....
* *UnknownHook*: Hook for unknown commands
....
=====================================================
== File: docs/modules/customization/pages/imap.adoc
=====================================================
= Custom IMAP processing
:navtitle: Custom IMAP processing
James allows defining your own handler packages.
An Imap package is a simple class that bundles IMAP processing components:
....
public interface ImapPackage {
Collection<ClassName> processors();
Collection<ClassName> decoders();
Collection<ClassName> encoders();
}
....
Processors needs to be of class `AbstractProcessor`, decoders of class `AbstractImapCommandParser`
and encoders of class `ImapResponseEncoder`. Extensions-jar mechanism can be used to load custom classes.
Custom configuration can be obtained through `ImapConfiguration` class via the `getCustomProperties` method.
A full working example is available link:https://github.com/apache/james-project/tree/master/examples/custom-imap[here].
See this page for xref:imap.adoc#_extending_imap[more details on configuring IMAP extensions].
== IMAP additional Connection Checks
James allows defining your own additional connection checks to guarantee that the connecting IP is secured.
A custom connection check should implement the following functional interface:
```
@FunctionalInterface
public interface ConnectionCheck {
Publisher<Void> validate(InetSocketAddress remoteAddress);
}
```
- `validate` method is used to check the connecting IP is secured.
Then the custom defined ConnectionCheck can be added in `imapserver.xml` file:
```
<additionalConnectionChecks>org.apache.james.CrowdsecImapConnectionCheck</additionalConnectionChecks>
```
An example for configuration is available link:https://github.com/apache/james-project/blob/master/third-party/crowdsec/sample-configuration/imapserver.xml[here].
=====================================================
== File: docs/modules/customization/pages/webadmin-routes.adoc
=====================================================
= Custom WebAdmin routes
:navtitle: Custom WebAdmin routes
== Writing custom WebAdmin routes
An extension writer can write additional WebAdmin routes, effectively exposed over the WebAdmin API.
To do so, extend the *Routes* defined in the *james-server-webadmin-core*.
Here is the dependency:
....
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>james-server-webadmin-core</artifactId>
</dependency>
....
Here is the interface:
....
public interface Routes {
String getBasePath();
void define(Service service);
}
....
* *getBasePath* enables to know the prefix of your route
* *define* enables you to register endpoint is the http://sparkjava.com/[sparkjava] Service instance. HTTP *GET*, *POST*,
*PUT*, *PATCH*, etc.. verbs are supported.
== Registration
Your custom WebAdmin routes needs to be in the *extensions-jars* folder.
You need to register its fully qualified class name in xref:webadmin.adoc[webadmin.properties]
using the *extensions.routes* property.
=====================================================
== File: docs/modules/customization/pages/mailbox-listeners.adoc
=====================================================
= Custom Mailbox Listeners
:navtitle: Custom Mailbox Listeners
== Writing additional listener
An extension writer can write new additional mailbox listeners.
To do so, extend the *GroupMailboxListener* defined in the *mailbox-api*.
Here is the dependency:
....
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>apache-james-mailbox-api</artifactId>
</dependency>
....
Here are the methods you can implement:
....
void event(Event event) throws Exception;
....
allows you to specify the business logic you want to execute upon new events generation.
....
boolean isHandling(Event event);
....
Allows to know if this event is worth execution, and should be sent on the EventBus. This avoids execution of non
handled events and can save some IOs.
== Registration of custom additional listeners
Your custom additional listener needs to be in the *extensions-jars* folder.
You need to register its fully qualified class name in xref:listeners.adoc[listeners.xml]
== Events
Your listener will be called for the following events:
- *MailboxAdded*: A new mailbox had been created
- *MailboxDeletion*: A new mailbox had been deleted
- *MailboxRenamed*: A mailbox was renamed
- *MailboxACLUpdated*: The rights of a mailbox had been changed
- *Expunged*: Some messages had been deleted
- *FlagsUpdated*: Some message flags had been updated
- *Added*: New messages had been added to a mailbox
=====================================================
== File: docs/modules/customization/pages/index.adoc
=====================================================
= Extending server behavior
:navtitle: Extending server behavior
== Available extension mechanisms
image::james-hexagons-extensions.png[Extension mechanisms for the James Server]
The James Server exposes several interfaces allowing the user to write custom extensions in
order to extend the James Server behavior.
Writing *Mailets* and *Matchers* allows one to supply custom components for the
xref:mail-processing.adoc[Mail Processing] and
enables to take decisions, and implement your business logic at the transport level.
Writing xref:mailbox-listeners.adoc[Mailbox listeners] enables to
react to your user interaction with their mailbox. This powerful tool allows build advanced features
for mail delivery servers.
Writing xref:smtp-hooks.adoc[SMTP hookd] enables to
add features to your SMTP server.
Writing xref:webadmin-routes.adoc[WebAdmin routes] enables to
add features to the WebAdmin REST API.
Writing xref:imap.adoc[IMAP extensions].
The link:https://github.com/apache/james-project/tree/master/examples[examples] are also a good reference.
== Handling injections for your extensions
=== Injecting core components
You can very easily inject core components into your custom extensions.
All you need is to pass them via a constructor annotated via *@Inject*.
For instance:
....
public class MyMailet extends GenericMailet {
private final UsersRepository usersRepository;
@Inject
public MyMailet(UsersRepository usersRepository) {
this.usersRepository = usersRepository;
}
@Override
public void service(Mail mail) throws MessagingException {
// Do something
=====================================================
== File: docs/modules/servers/nav.adoc
=====================================================
* xref:index.adoc[]
** xref:demo.adoc[]
*** xref:servers:5-minute-demo.adoc[]
*** xref:servers:15-minute-demo.adoc[]
** xref:basic/index.adoc[]
*** xref:basic/context.adoc[]
*** xref:basic/objectives.adoc[]
*** xref:basic/concepts.adoc[]
*** xref:basic/architecture.adoc[]
*** xref:basic/conf/index.adoc[]
*** xref:basic/help.adoc[]
** xref:distributed/index.adoc[]
*** xref:distributed/objectives.adoc[]
*** xref:distributed/architecture/index.adoc[]
**** xref:distributed/architecture/implemented-standards.adoc[]
**** xref:distributed/architecture/consistency-model.adoc[]
**** xref:distributed/architecture/specialized-instances.adoc[]
**** xref:distributed/architecture/data-tiering.adoc[]
*** xref:distributed/run/index.adoc[Run]
**** xref:distributed/run/run-java.adoc[Run with Java]
**** xref:distributed/run/run-docker.adoc[Run with Docker]
**** xref:distributed/run/run-kubernetes.adoc[Run with Kubernetes]
***** xref:distributed/run/k8s-checklist.adoc[Deployment Checklist]
***** xref:distributed/run/k8s-logsMetrics.adoc[Logs & Metrics]
***** xref:distributed/run/k8s-values.adoc[values.yaml]
***** xref:distributed/run/k8s-secrets.adoc[secrets.yaml]
*** xref:distributed/configure/index.adoc[]
**** Protocols
***** xref:distributed/configure/imap.adoc[imapserver.xml]
***** xref:distributed/configure/jmap.adoc[jmap.properties]
***** xref:distributed/configure/jmx.adoc[jmx.properties]
***** xref:distributed/configure/smtp.adoc[smtpserver.xml & lmtpserver.xml]
***** xref:distributed/configure/smtp-hooks.adoc[Packaged SMTP hooks]
***** xref:distributed/configure/pop3.adoc[pop3server.xml]
***** xref:distributed/configure/webadmin.adoc[webadmin.properties]
***** xref:distributed/configure/ssl.adoc[SSL & TLS]
***** xref:distributed/configure/sieve.adoc[Sieve & ManageSieve]
**** Storage dependencies
***** xref:distributed/configure/blobstore.adoc[blobstore.properties]
***** xref:distributed/configure/cassandra.adoc[cassandra.properties]
***** xref:distributed/configure/opensearch.adoc[opensearch.properties]
***** xref:distributed/configure/rabbitmq.adoc[rabbitmq.properties]
***** xref:distributed/configure/redis.adoc[redis.properties]
***** xref:distributed/configure/tika.adoc[tika.properties]
**** Core components
***** xref:distributed/configure/batchsizes.adoc[batchsizes.properties]
***** xref:distributed/configure/dns.adoc[dnsservice.xml]
***** xref:distributed/configure/domainlist.adoc[domainlist.xml]
***** xref:distributed/configure/droplists.adoc[DropLists]
***** xref:distributed/configure/healthcheck.adoc[healthcheck.properties]
=====================================================
== File: docs/modules/servers/pages/distributed/architecture/mailqueue_combined_extend.adoc
=====================================================
* Cassandra enables administrative operations such as browsing, deleting
using a time series which might require fine performance tuning (see
http://cassandra.apache.org/doc/latest/operating/index.html[Operating
Cassandra documentation]).
=====================================================
== File: docs/modules/servers/pages/distributed/architecture/consistency_model_data_replication_extend.adoc
=====================================================
=== Cassandra consistency model
link:https://cassandra.apache.org/[Cassandra] is an
link:https://en.wikipedia.org/wiki/Eventual_consistency[eventually consistent] data store.
This means that replica can hold diverging data, but are guaranteed to converge over time.
Several mechanisms are built in Cassandra to enforce this convergence, and need to be
leveraged by *Distributed Server Administrator*. Namely
link:https://docs.datastax.com/en/dse/5.1/dse-admin/datastax_enterprise/tools/nodetool/toolsRepair.html[nodetool repair],
link:https://cassandra.apache.org/doc/latest/operating/hints.html[Hinted hand-off] and
link:https://cassandra.apache.org/doc/latest/operating/read_repair.html[Read repair].
The {server-name} tries to mitigate inconsistencies by relying on
link:https://docs.datastax.com/en/archived/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html[QUORUM] read and write levels.
This means that a majority of replica are needed for read and write operations to be performed. This guaranty is needed
as the Mailbox is a complex datamodel with several layers of metadata, and needs "read-your-writes" guaranties that QUORUM
read+writes delivers.
Critical business operations, like UID allocation, rely on strong consistency mechanisms brought by
link:https://www.datastax.com/blog/2013/07/lightweight-transactions-cassandra-20[lightweight transaction].
==== About multi data-center setups
As strong consistency is required for some operation, especially regarding IMAP monotic UID and MODSEQ generation,
and as lightweight transactions are slow across data centers, running James with a
link:https://docs.datastax.com/en/ddac/doc/datastax_enterprise/production/DDACmultiDCperWorkloadType.html[multi data-center]
Cassandra setup is discouraged.
However, xref:{xref-base}/configure/cassandra.adoc[this page] enables setting alternative read level,
which could be acceptable regarding limited requirements. `LOCAL_QUORUM` coupled with `LOCAL_SERIAL`
is likely the only scalable setup. Some options were added to turn off SERIAL consistency usage for message
and mailbox management. However, the use of Lightweight Transaction cannot be disabled for UIDs and ModSeqs.
Running the {server-name} IMAP server in a multi datacenter setup will likely result either in data loss,
or very slow operations - as we rely on monotic UID generation, without strong consistency, UIDs could be allocated
several times.
We did wire a multi-DC friendly distributed, POP3 only server that leverages acceptable performance while staying
consistent. This is achieved by having a reduced feature set - supporting only the POP3 server and using messageIds as
identifiers (generated without synchronisation using TimeUUIDs). You can find this application
link:https://github.com/apache/james-project/tree/master/server/apps/distributed-pop3-app[on GitHub]. In the future,
JMAP support could be added, but requires followup developments as some components critically depends on UIDs
(for instance the search).
=====================================================
== File: docs/modules/servers/pages/distributed/architecture/data-tiering.adoc
=====================================================
= Distributed James Server — Data tiering
:navtitle: Data tiering
Data tiering is the practice of storing data across different types of storage media based on its access
frequency and performance needs, placing frequently used ("hot") data on fast storage and infrequently
used ("cold") data on slower, cheaper storage.
Using data tiering for your application optimizes performance and reduces costs by keeping frequently accessed
data on fast storage and moving infrequently accessed data to cheaper, slower storage.
Data tiering strategies do complement well data deduplication strategies.
The Distributed James server transparently allow for data tiering by:
- Expiration of the data in the metadata database that is easily accessible from the object store
This can be set up for mail headers. In `blob.properties`:
....
cache.cassandra.ttl=60d
....
This can also be set up for mail previews: In `jvm.properties`
....
james.jmap.preview.ttl=60d
....
For clearing the JMAP resynchronisation log: In `cassandra.properties`
....
email.change.ttl=60d
mailbox.change.ttl=60d
....
And for the de-referencing attachments objects from the object store, that will be then be eligible for being
garbage-collected: In `jvm.properties`
....
james.jmap.attachment.ttl=60d
....
Please note that Cassandra still retain metadata about the emails past this 60 day delay but this is minimal compared to
the post-reception footprint.
- Tiering in the underlying object store.
For instance:
....
=====================================================
== File: docs/modules/servers/pages/distributed/architecture/implemented-standards.adoc
=====================================================
= Distributed James Server — Implemented standards
:navtitle: Implemented standards
:server-name: Distributed James Server
include::partial$architecture/implemented-standards.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/architecture/specialized-instances.adoc
=====================================================
= Distributed James Server — Specialized instances
:navtitle: Specialized instances
:server-name: Distributed James Server
:specialized-instances-file-name: specialized-instances-distributed.png
include::partial$architecture/specialized-instances.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/architecture/index.adoc
=====================================================
= Distributed James Server — Architecture
:navtitle: Architecture
:backend-name: cassandra
:server-name: Distributed James Server
:backend-storage-introduce: Cassandra is used for metadata storage. Cassandra is efficient for a very high workload of small queries following a known pattern.
:storage-picture-file-name: storage_james_distributed.png
:mailet-repository-path-prefix: cassandra
:xref-base: distributed
:mailqueue-combined-extend-backend: , Cassandra
:mailqueue-combined-extend: servers:distributed/architecture/mailqueue_combined_extend.adoc
include::partial$architecture/index.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/architecture/consistency-model.adoc
=====================================================
= Distributed James Server — Consistency Model
:navtitle: Consistency Model
:backend-name: cassandra
:backend-name-cap: Cassandra
:server-name: Distributed James Server
:mailet-repository-path-prefix: cassandra
:xref-base: distributed
:data_replication_extend: servers:distributed/architecture/consistency_model_data_replication_extend.adoc
include::partial$architecture/consistency-model.adoc[]
== Denormalization
In Cassandra, data needs to be structured to match the read patterns. To support several conflicting
read patterns, the data needs to be duplicated into different structures. This process is called
denormalization.
While data can be consistent at the table level, some inconsistencies can sneak in at the applicative
level across denormalization tables.
We write to a "table of truth" first, then duplicate the data to denormalization tables.
The {server-name} offers several mechanisms to mitigate these inconsistencies:
- Writes to denormalization tables are retried.
- Some xref:{xref-base}/operate/guide.adoc#_solving_cassandra_inconsistencies[SolveInconsistencies tasks] are exposed and are able to heal a given denormalization table.
They reset the "deduplication tables" content to the "table of truth" content.
- link:https://github.com/apache/james-project/blob/master/src/adr/0042-applicative-read-repairs.md[Read repairs],
when implemented for a given denormalization, enables auto-healing. When an inconsistency is detected, They reset the
"deduplication tables" entry to the "table of truth" entry.
=====================================================
== File: docs/modules/servers/pages/distributed/extending.adoc
=====================================================
= Distributed James Server — Extending behaviour
:navtitle: Extending behaviour
This section can be read xref:customization:index.adoc[this page].
=====================================================
== File: docs/modules/servers/pages/distributed/objectives.adoc
=====================================================
= Distributed James Server — Objectives and motivation
:navtitle: Objectives and motivation
The objective of the Distributed Server is to provided facilities to execute
an advanced, extendable, and distributed email system. It is intended for
organization with serious requirements, such as high-throughput or very large
data sets.
Scaling emails infrastructure is a notoriously hard problem. The intent of the Distributed server is
to implement a mail server using modern NoSQL technologies. It relies on:
* Object Storage enables scalable yet cheap storage of large amount of data
* The use of NoSQL for metadata storage enables horizontal scalability
* Finally a Distributed search engine enables quick and efficient search
Replication, data availability are thus handled by battle tested technologies.
Such a data storage strategy enables:
* A centralized management of all server components, as each Distributed James server hold the same view on data.
* A better load and data repartition between email servers, as each James servers can cary out any tasks.
* Easy scaling. Handling more users or more data is as easy as adding James instances and scaling the underlying
databases.
* Easier load-balancing, as any email server can handle requests from any user. No sharding is involved.
* Rich feature, especially regarding *sharing*. Every user can delegate access to any over users.
Furthermore, this server is intended to be easily customisable so that it can easily be adapted to ones needs.
* Several packaged extensions can be xref:distributed/configure/index.adoc#_for_extensions[configured]
* It is easy to write and load xref:customization:index.adoc[your own extensions]
=====================================================
== File: docs/modules/servers/pages/distributed/operate/metrics.adoc
=====================================================
= Distributed James Server — Metrics
:navtitle: Metrics
:other-metrics: Cassandra Java driver metrics
:xref-base: distributed
:server-name: Distributed James Server
include::partial$operate/metrics.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/operate/security.adoc
=====================================================
= Security checklist
:navtitle: Security checklist
:xref-base: distributed
:backend-name: Cassandra
include::partial$operate/security.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/operate/webadmin/admin-messages-extend.adoc
=====================================================
=== Fixing message inconsistencies
This task is only available on top of Guice Cassandra products.
....
curl -XPOST /messages?task=SolveInconsistencies
....
Will schedule a task for fixing message inconsistencies created by the
message denormalization process.
Messages are denormalized and stored in separated data tables in
Cassandra, so they can be accessed by their unique identifier or mailbox
identifier & local mailbox identifier through different protocols.
Failure in the denormalization process will lead to inconsistencies, for
example:
....
BOB receives a message
The denormalization process fails
BOB can read the message via JMAP
BOB cannot read the message via IMAP
BOB marks a message as SEEN
The denormalization process fails
The message is SEEN via JMAP
The message is UNSEEN via IMAP
....
link:#_endpoints_returning_a_task[More details about endpoints returning
a task].
An admin can specify the concurrency that should be used when running
the task:
* `messagesPerSecond` rate of messages to be processed per second.
Default is 100.
This optional parameter must have a strictly positive integer as a value
and be passed as query parameter.
An admin can also specify the reindexing mode it wants to use when
running the task:
* `mode` the reindexing mode used. There are 2 modes for the moment:
** `rebuildAll` allows to rebuild all indexes. This is the default mode.
** `fixOutdated` will check for outdated indexed document and reindex
only those.
=====================================================
== File: docs/modules/servers/pages/distributed/operate/webadmin/admin-mailboxes-extend.adoc
=====================================================
==== Fixing mailboxes inconsistencies
....
curl -XPOST /mailboxes?task=SolveInconsistencies
....
Will schedule a task for fixing inconsistencies for the mailbox
deduplicated object stored in Cassandra.
link:#_endpoints_returning_a_task[More details about endpoints returning
a task].
The `I-KNOW-WHAT-I-M-DOING` header is mandatory (you can read more
information about it in the warning section below).
The scheduled task will have the following type
`solve-mailbox-inconsistencies` and the following
`additionalInformation`:
....
{
"type":"solve-mailbox-inconsistencies",
"processedMailboxEntries": 3,
"processedMailboxPathEntries": 3,
"fixedInconsistencies": 2,
"errors": 1,
"conflictingEntries":[{
"mailboxDaoEntry":{
"mailboxPath":"#private:user:mailboxName",
"mailboxId":"464765a0-e4e7-11e4-aba4-710c1de3782b"
}," +
"mailboxPathDaoEntry":{
"mailboxPath":"#private:user:mailboxName2",
"mailboxId":"464765a0-e4e7-11e4-aba4-710c1de3782b"
}
}]
}
....
Note that conflicting entry inconsistencies will not be fixed and will
require to explicitly use link:#_correcting_ghost_mailbox[ghost mailbox]
endpoint in order to merge the conflicting mailboxes and prevent any
message loss.
*WARNING*: this task can cancel concurrently running legitimate user
operations upon dirty read. As such this task should be run offline.
A dirty read is when data is read between the two writes of the
denormalization operations (no isolation).
=====================================================
== File: docs/modules/servers/pages/distributed/operate/webadmin/admin-mail-queues-extend.adoc
=====================================================
=== Cassandra view of the RabbitMQ mailQueue: browse start update
....
curl -XPOST 'http://ip:port/mailQueues/{mailQueueName}?action=updateBrowseStart
....
Will return a task that updates the browse start of the aforementioned mailQueue, regardless of the configuration.
link:#_endpoints_returning_a_task[More details about endpoints returning
a task].
This is an advanced, potentially expensive operation which requires a good understanding of the RabbitMQMailQueue design
(https://github.com/apache/james-project/blob/master/src/adr/0031-distributed-mail-queue.md). Especially, care needs to
be taken to call this at most once per slice (not doing so might be expensive).
=====================================================
== File: docs/modules/servers/pages/distributed/operate/migrating.adoc
=====================================================
= Distributed James Server — Migrating existing data
:navtitle: Migrating existing data
:xref-base: distributed
:server-name: Distributed James Server
include::partial$operate/migrating.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/operate/logging/docker-compose-block.adoc
=====================================================
[source,docker-compose]
----
version: "3"
services:
james:
depends_on:
- opensearch
- cassandra
- rabbitmq
- s3
entrypoint: bash -c "java -cp 'james-server.jar:extension-jars/*:james-server-memory-guice.lib/*' -Dworking.directory=/root/ -Dlogback.configurationFile=/root/conf/logback.xml org.apache.james.CassandraRabbitMQJamesServerMain"
image: linagora/james-rabbitmq-project:branch-master
container_name: james
hostname: james.local
volumes:
- ./extension-jars:/root/extension-jars
- ./conf/logback.xml:/root/conf/logback.xml
- ./logs:/root/logs
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8080:8000"
opensearch:
image: opensearchproject/opensearch:2.19.2
ports:
- "9200:9200"
environment:
- discovery.type=single-node
cassandra:
image: cassandra:4.1.9
ports:
- "9042:9042"
rabbitmq:
image: rabbitmq:4.1.1-management
ports:
- "5672:5672"
- "15672:15672"
s3:
image: ghcr.io/scality/cloudserver:c1ba296859690c1cbbec609aaae430f6b04b4745
container_name: s3.docker.test
=====================================================
== File: docs/modules/servers/pages/distributed/operate/guide.adoc
=====================================================
= Distributed James Server — Operator guide
:navtitle: Operator guide
:xref-base: distributed
:mailet-repository-path-prefix: cassandra
:backend-name: cassandra
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:server-name: Distributed James Server
include::partial$operate/guide.adoc[]
== Solving cassandra inconsistencies
Cassandra backend uses data duplication to workaround Cassandra query
limitations. However, Cassandra is not doing transaction when writing in
several tables, this can lead to consistency issues for a given piece of
data. The consequence could be that the data is in a transient state
(that should never appear outside of the system).
Because of the lack of transactions, it’s hard to prevent these kind of
issues. We had developed some features to fix some existing cassandra
inconsistency issues that had been reported to James.
=== Jmap message fast view projections
When you read a Jmap message, some calculated properties are expected to
be fast to retrieve, like `preview`, `hasAttachment`. James achieves it
by pre-calculating and storing them into a caching table
(`message_fast_view_projection`). Missing caches are populated on
message reads and will temporarily decrease the performance.
==== How to detect the outdated projections
You can watch the `MessageFastViewProjection` health check at
xref:{xref-base}/operate/webadmin.adoc#_check_all_components[webadmin documentation].
It provides a check based on the ratio of missed projection reads.
==== How to solve
Since the MessageFastViewProjection is self healing, you should be
concerned only if the health check still returns `degraded` for a while,
there’s a possible thing you can do is looking at James logs for more
clues.
=== Mailboxes
`mailboxPath` and `mailbox` tables share common fields like `mailboxId`
and mailbox `name`. A successful operation of creating/renaming/delete
mailboxes has to succeed at updating `mailboxPath` and `mailbox` table.
Any failure on creating/updating/delete records in `mailboxPath` or
`mailbox` can produce inconsistencies.
=====================================================
== File: docs/modules/servers/pages/distributed/operate/performanceChecklist.adoc
=====================================================
= Distributed James Server — Performance checklist
:navtitle: Performance checklist
:xref-base: distributed
:backend-name: Cassandra
:mail-queue-name: CassandraMailQueueView
include::partial$operate/performanceChecklist.adoc[]
=== RabbitMQ
We recommend against the use of the CassandraMailQueueView, as browsing and advanced queue management features
is unnecessary for Mail Delivery Agent and are not meaningful in the absence of delays.
Similarly, we recommend turning off queue size metrics, which are expensive to compute.
We also recommend against the use of publish confirms, which comes at a high performance price.
In `rabbitmq.properties`:
....
cassandra.view.enabled=false
mailqueue.size.metricsEnabled=false
event.bus.publish.confirm.enabled=false
mailqueue.publish.confirm.enabled=false
....
=== Object storage
We recommend the use of the blob store cache, which will be populated by email headers which shall be treated as metadata.
`blob.properties`:
....
cache.enable=true
cache.cassandra.ttl=1year
cache.sizeThresholdInBytes=16 KiB
....
=== Cassandra
People tunning for performance would likely accept relaxing their consistency needs. James allows doing this.
**LightWeight Transactions (LWT)** can be disabled where they are not essential. This can be done within
xref:[cassandra.properties]:
....
mailbox.read.strong.consistency=false
message.read.strong.consistency=false
=====================================================
== File: docs/modules/servers/pages/distributed/operate/webadmin.adoc
=====================================================
= Distributed James Server — WebAdmin REST administration API
:navtitle: WebAdmin REST administration API
:server-name: Distributed James Server
:xref-base: distributed
:backend-name: Cassandra
:admin-mail-queues-extend: servers:distributed/operate/webadmin/admin-mail-queues-extend.adoc
:admin-messages-extend: servers:distributed/operate/webadmin/admin-messages-extend.adoc
:admin-mailboxes-extend: servers:distributed/operate/webadmin/admin-mailboxes-extend.adoc
include::partial$operate/webadmin.adoc[]
== Cassandra extra operations
Some webadmin features to manage some extra operations on Cassandra
tables, like solving inconsistencies on projection tables. Such
inconsistencies can be for example created by a fail of the DAO to add a
mapping into
’mappings_sources`, while it was successful regarding the`rrt` table.
=== Operations on mappings sources
You can do a series of action on `mappings_sources` projection table :
....
curl -XPOST /cassandra/mappings?action={action}
....
Will return the taskId corresponding to the related task. Actions
supported so far are :
* SolveInconsistencies : cleans up first all the mappings in
`mappings_sources` index and then repopulate it correctly. In the
meantime, listing sources of a mapping might create temporary
inconsistencies during the process.
For example :
....
curl -XPOST /cassandra/mappings?action=SolveInconsistencies
....
link:#_endpoints_returning_a_task[More details about endpoints returning
a task].
Response codes :
* 201: the taskId of the created task
* 400: Invalid action argument for performing operation on mappings data
=== Cassandra Schema upgrades
=====================================================
== File: docs/modules/servers/pages/distributed/operate/logging.adoc
=====================================================
= Distributed James Server — Logging
:navtitle: Logging
:xref-base: distributed
:server-name: Distributed James Server
:server-tag: distributed
:docker-compose-code-block-sample: servers:distributed/operate/logging/docker-compose-block.adoc
:backend-name: cassandra
include::partial$operate/logging.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/operate/index.adoc
=====================================================
= Distributed James Server — Operate the Distributed server
:navtitle: Operate the Distributed server
:xref-base: distributed
:server-name: Distributed James Server
:server-tag: distributed
include::partial$operate/index.adoc[]
Read more about xref:distributed/operate/cassandra-migration.adoc[Cassandra data migration].
Additional functional visualisations can be set up using OpenSearch dashboards as documented in link:https://github.com/apache/james-project/tree/master/examples/opensearch-dahsboard[this example].
== Upgrading
This section sums up and links upgrade instructions for people willing to upgrade their Distributed server to newer versions.
.Upgrade path
|===
| Upgrade from | Recommended upgrade path to 3.9.0
| 3.8.0 - 3.8-2
| Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#390-version[3.9.0 upgrade instructions]
| 3.7.0 - 3.7.4
| Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#380-version[3.8.0 upgrade instructions]
| 3.6.0 - 3.6.2
| 1. Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#370-version[3.7.0 upgrade instructions]
2. Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#380-version[3.8.0 upgrade instructions]
| 3.5.0
| 1. Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#360-version[3.6.0 upgrade instructions]
Note: Because of ElasticSearch upgrade (6.3 -> 7.10) this migration cannot be done in a rolling fashion manner.
2. Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#370-version[3.7.0 upgrade instructions]
3. Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#380-version[3.8.0 upgrade instructions]
| 3.4.0
| 1. Rolling upgrade to 3.5.0, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#350-version[3.5.0 upgrade instructions]
2. Upgrade to 3.6.0, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#360-version[3.6.0 upgrade instructions]
Note: Because of ElasticSearch upgrade (6.3 -> 7.10) this migration cannot be done in a rolling fashion manner.
3. Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#370-version[3.7.0 upgrade instructions]
4. Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#380-version[3.8.0 upgrade instructions]
=====================================================
== File: docs/modules/servers/pages/distributed/operate/cassandra-migration.adoc
=====================================================
= Distributed James Server — Cassandra migration
:navtitle: Cassandra migration
Cassandra upgrades implies the creation of a new table. Thus restarting James is needed, as new tables are created on restart.
Once done, we ship code that tries to read from new tables, and if not possible backs up to old tables. You can thus safely run
without running additional migrations.
On the fly migration can be enabled. However, one might want to force the migration in a controlled fashion, and update
automatically current schema version used (assess in the database old versions is no more used, as the corresponding tables are empty).
Note that this process is safe: we ensure the service is not running concurrently on this James instance, that it does not bump
version upon partial failures, that race condition in version upgrades will be idempotent, etc...
These schema updates can be triggered by xref:distributed/operate/webadmin.adoc#_cassandra_schema_upgrades[webadmin].
Note that currently the progress can be tracked by logs.
Here are the implemented migrations:
* *From V8 to V9* : Adopt a more compact representation for message properties.
* *From V9 to V10* : Handles Mailbox ACL transactionality with event-sourcing. We got read of SERIAL consistency upon
reads thus unlocking a major performance enhancement.
The xref:distributed/operate/guide.adoc#_updating_cassandra_schema_version[Operator guide] further details the migration process.
=====================================================
== File: docs/modules/servers/pages/distributed/operate/cli.adoc
=====================================================
= Distributed James Server — Command Line Interface
:navtitle: Command Line Interface
:xref-base: distributed
:server-name: Distributed James Server
include::partial$operate/cli.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/benchmark/benchmark_prepare.adoc
=====================================================
//
=====================================================
== File: docs/modules/servers/pages/distributed/benchmark/db-benchmark.adoc
=====================================================
= Distributed James Server -- Database benchmarks
:navtitle: Database benchmarks
:backend-name: cassandra
:backend-name-cap: Cassandra
:server-name: Distributed James Server
:backend-database-extend-sample: Apache Cassandra 4 as main database: 3 nodes, each node has 8 OVH vCores CPU and 30 GB memory limit (OVH b2-30 instance).
include::partial$benchmark/db-benchmark.adoc[]
=== Benchmark Cassandra
==== Benchmark methodology
===== Benchmark tool
We use https://cassandra.apache.org/doc/latest/cassandra/tools/cassandra_stress.html[cassandra-stress tool] - an official
tool of Cassandra for stress loading tests.
The cassandra-stress tool is a Java-based stress testing utility for basic benchmarking and load testing a Cassandra cluster.
Data modeling choices can greatly affect application performance. Significant load testing over several trials is the best method for discovering issues with a particular data model. The cassandra-stress tool is an effective tool for populating a cluster and stress testing CQL tables and queries. Use cassandra-stress to:
- Quickly determine how a schema performs.
- Understand how your database scales.
- Optimize your data model and settings.
- Determine production capacity.
There are several operation types:
- write-only, read-only, and mixed workloads of standard data
- write-only and read-only workloads for counter columns
- user configured workloads, running custom queries on custom schemas
===== How to benchmark
Here we are using a simple case to test and compare Cassandra performance between different setup environments.
[source,yaml]
----
keyspace: stresscql
keyspace_definition: |
CREATE KEYSPACE stresscql WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
table: mixed_workload
table_definition: |
CREATE TABLE mixed_workload (
key uuid PRIMARY KEY,
a blob,
b blob
=====================================================
== File: docs/modules/servers/pages/distributed/benchmark/james-benchmark.adoc
=====================================================
= Distributed James Server benchmark
:navtitle: James benchmarks
:server-name: Distributed James Server
:backend-database-extend-sample: Apache Cassandra 4 as main database: 3 nodes, each node has 8 OVH vCores CPU and 30 GB memory limit (OVH b2-30 instance).
:provision_file_url: https://github.com/apache/james-project/tree/master/docs/modules/servers/pages/distributed/benchmark/provision.sh
:benchmark_prepare_extend: servers:distributed/benchmark/benchmark_prepare.adoc
:james-imap-base-performance-picture: james-imap-base-performance-distributed.png
include::partial$benchmark/james-benchmark.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/benchmark/provision.sh
=====================================================
#!/bin/bash
export WEBADMIN_BASE_URL="http://localhost:8000"
export SMTP_URL="localhost:25"
export DOMAIN_NAME="domain.org"
export USERS_COUNT=10
export DUMMY_MAILBOXES_COUNT=10
export DUMMY_EMAILS_COUNT=100
# Create domain
curl -X PUT ${WEBADMIN_BASE_URL}/domains/${DOMAIN_NAME}
for i in $(seq 1 $USERS_COUNT)
do
# Create user
echo "Creating user $i"
username=user${i}@$DOMAIN_NAME
curl -XPUT ${WEBADMIN_BASE_URL}/users/$username \
-d '{"password":"secret"}' \
-H "Content-Type: application/json"
# Create mailboxes for each user
echo "Creating user $i mailboxes"
# Create some basic mailboxes
curl -XPUT ${WEBADMIN_BASE_URL}/users/${username}/mailboxes/INBOX
curl -XPUT ${WEBADMIN_BASE_URL}/users/${username}/mailboxes/Outbox
curl -XPUT ${WEBADMIN_BASE_URL}/users/${username}/mailboxes/Sent
curl -XPUT ${WEBADMIN_BASE_URL}/users/${username}/mailboxes/Draft
curl -XPUT ${WEBADMIN_BASE_URL}/users/${username}/mailboxes/Trash
# Create some other dummy mailboxes
for j in $(seq 1 $DUMMY_MAILBOXES_COUNT)
do
dummyMailbox=MAILBOX${j}
curl -XPUT ${WEBADMIN_BASE_URL}/users/${username}/mailboxes/$dummyMailbox
done
done
# Create many dummy randomly messages (DUMMY_EMAILS_COUNT*4 to DUMMY_EMAILS_COUNT*8 messages range)
echo "Creating various dummy emails"
smtp-source -m ${DUMMY_MAILBOXES_COUNT} -f user1@domain.org -t user2@domain.org ${SMTP_URL}
=====================================================
== File: docs/modules/servers/pages/distributed/benchmark/index.adoc
=====================================================
= Distributed James Server — Performance testing
:navtitle: Performance testing the Distributed server
:xref-base: distributed
:server-name: Distributed James Server
include::partial$benchmark/index.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/index.adoc
=====================================================
= James Distributed Mail Server
:navtitle: Distributed James Application
The Distributed server offers an easy way to scale email server. Based on
noSQL solutions, it is intended to be easy to operate for large
deployments, without needing sharding and protocol aware load balancing.
The Distributed Server does assume that you have advanced
technical knowledge and is the most complex and feature-rich option.
This server is:
* Intended for use by experts only
* Used for large-scale distributed deployments
* Is designed for Mail Delivery use cases but can also carry out mail processing
* The most feature-rich server, but also by far the most complex
In this section of the documentation, we will introduce you to:
* xref:distributed/objectives.adoc[Objectives and motivation of the Distributed Server]
* xref:distributed/architecture/index.adoc[Overview of architecture]
* xref:distributed/run/index.adoc[Run the Distributed Server]
* xref:distributed/configure/index.adoc[Configure the Distributed Server]
* xref:distributed/operate/index.adoc[Operation of the Distributed Server]
* xref:customization:index.adoc[How to extend the server]
=====================================================
== File: docs/modules/servers/pages/distributed/run/k8s-secrets.adoc
=====================================================
== Secrets for James Helm template
Helm James has many secret values to configure before being able to use
it correctly. Those secrets are linked to the template through their
declaration in `james-secrets.yaml`. A sample with dumb secrets can be
found in the `secrets.sample.yaml` file.
This document presents a quick description of each secret field.
For more information about encrypt/descrypt secret with Helm, see:
https://github.com/jkroepke/helm-secrets
=== James secret values
[cols="<,<,<",options="header",]
|===
|Field |Mandatory or optional |Description
|jwtPublicKey |Mandatory |The JWT public key used for JWT tokens.
|jwtPrivateKey |Mandatory |The JWT private key used for JWT tokens.
|cassandraUser |Mandatory |The user for Cassandra access
|cassandraPassword |Mandatory |The password fort Cassandra access
|esUser |Optional |The user for OpenSearch access
|esPassword |Optional |The password for OpenSearch access
|dkimPrivateKey |Optional |The private key for the generated DKIM
|s3.endpoint |Mandatory |The S3 endpoint. ie:
http://s3-us-east-1.amazonaws.com
|s3.region |Mandatory |The region of the S3 object storage.
|s3.accessKeyId |Mandatory |The access key to the S3 object storage
|s3.secretKey |Mandatory |The secret key to the S3 object storage
|s3.bucketNameSuffix |Mandatory |All buckets in S3 related to james
storage start by ``james-''. This allows to have a suffix for each
tenant
|===
=== jwtPublicKey
Use `openssl` to generate self-signed certificate and convert to Java
Key Store JKS. You can find an example
https://loneidealist.medium.com/generating-signing-certificates-with-openssl-and-converting-to-java-key-store-jks-3c8185dbf8fe[here]
=====================================================
== File: docs/modules/servers/pages/distributed/run/k8s-logsMetrics.adoc
=====================================================
== Logs and Metrics
=== Logs
James exposes its logs on the console. Then a fluent bit instance scraps
and collects them, before being indexed and used by Kibana, with nice
search possibilities.
The way James exposes its logs on the console is defined in the
`logback.xml` configuration file. James currently exposes logs in JSON
format using Jackson Json formatter.
=== Metrics
James exposes its metrics over an HTTP Webadmin endpoint, something like
`https://james-web-admin/metrics`. Those metrics can be scraped by
Prometheus before being visualized on Grafana.
This Helm chart exposes James metrics through Prometheus
https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/user-guides/getting-started.md#include-servicemonitors[ServiceMonitor].
You can import the dashboards for James metrics in Grafana defined
https://github.com/apache/james-project/tree/master/server/grafana-reporting/prometheus-datasource[here].
Be aware that those dashboards still need more work, as we used to
export metrics to Elasticsearch not long ago, which required to redo all
dashboards. Some enhancements are highly possible and encouraged.
Read more about xref:distributed/operate/metrics.adoc[Metrics in James].
=====================================================
== File: docs/modules/servers/pages/distributed/run/run-docker.adoc
=====================================================
= Distributed James Server — Run with docker
:navtitle: Run with docker
== Running via docker-compose
Requirements: docker & docker-compose installed.
When you try James this way, you will use the most current state of James.
It will be configured to run with Cassandra & OpenSearch.
All those three components will be started with a single command.
You can retrieve the docker-compose file : ( docker-compose file and james image name should be changed)
$ wget https://raw.githubusercontent.com/apache/james-project/master/server/apps/distributed-app/docker-compose.yml
Then, you just have to start the services:
$ docker-compose up -d
Wait a few seconds in order to have all those services start up. You will see the following log when James is available:
james | Started : true
A default domain, james.local, has been created. You can see this by running:
$ docker exec james james-cli -h 127.0.0.1 -p 9999 listdomains
James will respond to IMAP port 143 and SMTP port 25.
You have to create users before playing with james. You may also want to create other domains.
Follow the xref:distributed/operate/cli.adoc['Useful commands'] section for more information about James CLI.
== Run with docker
=== Requirements
Compile the whole project:
mvn clean install -DskipTests -T 4
Then load the distributed server docker image:
docker load -i server/apps/distributed-app/target/jib-image.tar
Alternatively we provide convenience distribution for the latest release:
docker pull apache/james:distributed-3.9.0
=== Running
Firstly, create your own user network on Docker for the James environment:
=====================================================
== File: docs/modules/servers/pages/distributed/run/run-kubernetes.adoc
=====================================================
= Distributed James Server — Run with Kubernetes
:navtitle: Run with Kubernetes
== Deploy Apache James on Kubernetes with Helm chart.
This chart bootstraps a James mail server on a link:http://kubernetes.io[Kubernetes]
cluster using the link:https://helm.sh[Helm] package manager.
== Before Starting
Before running the Helm chart, James should have particularly accessed to the following external products:
Apache Cassandra::
- You can deploy Cassandra on Kubernetes with a link:https://github.com/bitnami/charts/tree/master/bitnami/cassandra[Cassandra chart] for testing purpose. However we would recommend running Cassandra on VirtualMachine for better stablilty.
OpenSearch::
- OpenSearch community maintains link:https://github.com/opensearch-project/helm-charts[Helm charts]
RabbitMQ::
- link:https://github.com/rabbitmq/cluster-operator[RabbitMQ Cluster Operator] is a custom Kubernetes resource designed for the lifecycle (creation, upgrade, graceful shutdown) of a RabbitMQ cluster. Using Quickstart setup is enough for James deployment.
== Configuration
=== Helm Configuration
The James helm package take parameters that will configure and determine the behavior of James.
There are 2 configuration files:
* One contains global, non-confidential, configuration: `values.yaml`
* The other one contains secrets: `secrets.yaml`. Values are encrypted with a key stored generated by link:https://github.com/mozilla/sops[sops].
You need to pass these 2 files as parameters to the James Helm package.
To verify the coherence and avoid errors, the packages can validate the input.
This package contains a default `values.yaml` file, but that you should override with proper configuration for your deployment (`conf.yaml`).
The file `secrets.sample.yaml` will show you the possible values of the secrets file. To generate the `secrets.yaml` file,
you will need a plugin for Helm called link:https://github.com/jkroepke/helm-secrets[helm-secrets].
Usually, you will save those configurations in different repositories, per deployment.
Have a look at `values.md` and `secrets.md` in our Chart link:https://github.com/apache/james-project/tree/master/server/apps/distributed-app/helm-chart/james/doc/[documents] to have more information on the configuration James is using.
You can find our Helm chart for James in link:https://github.com/apache/james-project/tree/master/server/apps/distributed-app/helm-chart[here]
=== James Configuration
The configuration files proper to James are stored in the Chart `james/configs` folder. They are being stored in a `ConfigMap` and then being mounted in the James pod at /root/conf path.
If you need to change a conf in James, this is where you need to look at.
=====================================================
== File: docs/modules/servers/pages/distributed/run/k8s-values.adoc
=====================================================
== Values for Helm James template
Helm James has many visible values to configure before being able to use
it correctly. Values are injected into the deployment template as
environment variables. An example with default values can be found in
the `+values.yaml+` file.
This document presents a quick description of each value field.
=== DNS values
[cols="<,<,<",options="header",]
|===
|Field |Default value |Description
|emailDomain |mail.example.com |The domain name for your tenant’s email
addresses
|jmapUrl |jmap.example.com |The url for the ingress jmap endpoint
|adminUrl |admin.example.com |The url for the ingress admin endpoint
|smtpHostname |smtp.example.com |The SMTP Ehlo hostname
|===
=== James values
[cols="<,<,<",options="header",]
|===
|Field |Default value |Description
|replicaJmapInstanceCount |1 |The number of pods we deploy for James
JMAP instance in the cluster
|replicaImapSmtpInstanceCount |1 |The number of pods we deploy for James
IMAP/SMTP instance in the cluster
|image |apache/james:distributed-3.9.0|The James image used for
deployment (Cassandra - RabbitMQ - LDAP distributed James flavor)
|===
=== James environment values
[cols="<,<,<",options="header",]
|===
|Field |Default value |Description
|jamesCassandraKeyspace |sandbox_james |The keyspace used for Cassandra
James data
|jamesCassandraCacheKeyspace |sandbox_james_cache |The keyspace used for
the Cassandra cache
|jamesEsMailboxIndex |mailbox_v1 |The index used for mailbox in
OpenSearch. The default value should be enough, but in case you had
=====================================================
== File: docs/modules/servers/pages/distributed/run/index.adoc
=====================================================
= Distributed James Server — Run
:navtitle: Run
This sections presents guidance to all current deployment types of Distributed James Server.
== Run with Java
Build your own Apache James Distributed artifacts and start xref:distributed/run/run-java.adoc[Running it directly on a Java Virtual Machine].
== Run with Docker
We have prepared a docker-compose for Apache James to run with Cassandra & OpenSearch.
You can start xref:distributed/run/run-docker.adoc[Running James with few simple Docker commands].
== Run with Kubernetes
A more complete - production ready deployment type.
We have packed xref:distributed/run/run-kubernetes.adoc[Apache James in a Helm chart], parameterized most of the application resources. With it you can easily deploy and test different set of configuration on a Kubernetes Cluster.
=====================================================
== File: docs/modules/servers/pages/distributed/run/run-java.adoc
=====================================================
= Distributed James Server — Run
:navtitle: Run
== Building
=== Requirements
* Java 11 SDK
* Docker ∕ OpenSearch 2.1.0, RabbitMQ Management 3.8.18, S3 compatible
ObjectStorage and Cassandra 4.0
* Maven 3
=== Building the artifacts
An usual compilation using maven will produce two artifacts into
server/apps/distributed-app/target directory:
* james-server-distributed-app.jar
* james-server-distributed-app.lib
You can for example run in the base of
https://github.com/apache/james-project[this git repository]:
....
mvn clean install
....
== Running
=== Requirements
* Cassandra 4.0
* OpenSearch 2.1.0
* RabbitMQ-Management 3.8.17
* Swift ObjectStorage 2.15.1 or Zenko Cloudserver or AWS S3
=== James Launch
To run james, you have to create a directory containing required
configuration files.
James requires the configuration to be in a subfolder of working
directory that is called *conf*. You can get a sample directory for
configuration from
https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/[server/apps/distributed-app/sample-configuration/].
You might need to adapt it to your needs.
You need to have a Cassandra, OpenSearch, S3 and RabbitMQ instance
running. You can either install the servers or launch them via docker:
=====================================================
== File: docs/modules/servers/pages/distributed/run/k8s-checklist.adoc
=====================================================
= Checklist
There is some things that you must have before being able to run James on your Kubernetes Cluster.
== MUST have
Those are absolutely necessary if you want at least James to start without crashing.
- [ ] Setup RabbitMQ and create James user in it.
- [ ] Create a Kubernetes namespace for James deployment.
- [ ] A `distributed` version of James image.
- [ ] An ObjectStorage compatible with S3 APIs.
- [ ] Configure JWT keys, keystores.
- [ ] Adding the proper `mailetcontainer.xml` file with other conf files in James Helm package
With those you should be able to startup James for first tests without having it crashing. However it's still not enough to have it fully functional.
== Should have
- [ ] Cassandra nodes deployed.
- [ ] Put valid Cassandra keyspaces in the configuration.
- [ ] Have an appropriate email domain (Contact your Domain Service Provider)
- [ ] Create your Domain SPF and DKIM Record. See document [here](https://james.apache.org/howTo/)
- [ ] OpenSearch nodes deployed.
- [ ] DNS registered entries for JMAP, IMAP, SMTP, Webadmin.
- [ ] Enable Ingress and create the secret for TLS certificate used by Ingress.
* Preproduction: Usually, we use link:https://github.com/jetstack/cert-manager[cert-manager] to request a Let's Encrypt Certificate. Remember to use the full chain certificate. You can verify that your certificate works well with `openssl` before adding
the name of that secret to your James values.
* Production: Some certificates belonging to the client should exist already. See that with the team.
- [ ] Change IMAP ports to NodePort if your Cloud Provider Load Balancer has short idle timeout and we need longer connections for performance reasons (and the RFC for IMAP states also we need 30 minutes for the timeout).
- [ ] Use an external LB (ie. HA Proxy) to redirect traffic towards James IMAP service NodePort IPs and ports.
== After setup operations
When all of this is working, normally your chain mail should be able to work. To check it you can:
* Use a mail client (ThunderBird, Outlook, ...) to test James IMAP.
* Send a mail internally from one test account to an other.
* Send a mail from James to an external mail provider (your Gmail, Yahoo account for example).
* Send a mail from an external provider to James.
* Use services like link:https://www.mail-tester.com/[mail-tester] to check your score.
=====================================================
== File: docs/modules/servers/pages/distributed/configure/collecting-events.adoc
=====================================================
= Event collection
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/collecting-events.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/matchers.adoc
=====================================================
= Distributed James Server — Matchers
:navtitle: Matchers
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:server-name: Distributed James Server
include::partial$configure/matchers.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/mailets.adoc
=====================================================
= Distributed James Server — Mailets
:navtitle: Mailets
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:server-name: Distributed James Server
include::partial$configure/mailets.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/batchsizes.adoc
=====================================================
= Distributed James Server — batchsizes.properties
:navtitle: batchsizes.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/batchsizes.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/smtp-hooks.adoc
=====================================================
= Distributed James Server — SMTP Hooks
:navtitle: SMTP Hooks
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:server-name: Distributed James Server
include::partial$configure/smtp-hooks.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/domainlist.adoc
=====================================================
= Distributed James Server — domainlist.xml
:navtitle: domainlist.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/domainlist.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/queue.adoc
=====================================================
= Distributed James Server — queue.properties
:navtitle: queue.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/queue.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/dsn.adoc
=====================================================
= Distributed James Server — Delivery Submission Notifications
:navtitle: ESMTP DSN setup
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:mailet-repository-path-prefix: cassandra
include::partial$configure/dsn.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/jmx.adoc
=====================================================
= Distributed James Server — jmx.properties
:navtitle: jmx.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/jmx.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/cassandra.adoc
=====================================================
= Distributed James Server — cassandra.properties
:navtitle: cassandra.properties
This configuration file allow setting some configuration properties in conjunction to
Cassandra driver native configuration.
Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/cassandra.properties[example]
to get some examples and hints.
Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/cassandra-driver.conf[example]
to get some examples and hints for Cassandra driver native configuration.
Cassandra native configuration allows configuring SSL, timeouts, logs and metrics as well as execution profiles.
== Configuration
Here are generic properties:
.cassandra.properties content
|===
| Property name | explanation
| cassandra.nodes
| List of some nodes of the cassandra's cluster in following format host:port or host, if the port is not specified we use 9042
|cassandra.keyspace.create
|Indicate if the keyspace should be created by James. Optional, default value: *false*
If set to true James will attempt to create the keyspace when starting up.
|cassandra.keyspace
|Is the name of the keyspace used by James. Optional, default value: *apache_james*
|cassandra.user
|Username used as a credential for contacting Cassandra cluster. Optional, default is absent,
required if *cassandra.password* is supplied
|cassandra.password
|Password used as a credential for contacting Cassandra cluster. Optional, default is absent,
required if <strong>cassandra.user</strong> is supplied
|cassandra.replication.factor
|Is the replication factor used upon keyspace creation. Modifying this property while the keyspace already exists
will have no effect. Optional. Default value 1.
|cassandra.local.dc
|Optional. Allows specifying the local DC as part of the load balancing policy. Specifying it
would result in the use of `new TokenAwarePolicy(DCAwareRoundRobinPolicy.builder().withLocalDc(value).build())` as a LoadBalancingPolicy.
This value is useful in a multi-DC Cassandra setup. Be aware of xref:distributed/architecture/consistency-model.adoc#_about_multi_data_center_setups[limitation of multi-DC setups for James]
Not specifying this value results in the driver's default load balancing policy to be used.
=====================================================
== File: docs/modules/servers/pages/distributed/configure/tika.adoc
=====================================================
= Distributed James Server — tika.properties
:navtitle: tika.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/tika.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/jvm.adoc
=====================================================
= Distributed James Server — jvm.properties
:navtitle: jvm.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/jvm.adoc[]
== Disable OpenSearchListeningMessageSearchIndex fetch full message content
Whether to fetch full message content when indexing messages in OpenSearch. This is useful when you want to avoid fetch full message content while indexing only headers for example.
Be careful whether the custom `OpenSearchListeningMessageSearchIndex.Indexer` (s) need full message content or not.
Ex in `jvm.properties`:
----
opensearch.index.listener.fetch.full.content=false
----
Optional. Boolean. Defaults to true.
=====================================================
== File: docs/modules/servers/pages/distributed/configure/jmap.adoc
=====================================================
= Distributed James Server — jmap.properties
:navtitle: jmap.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:server-name: Distributed James Server
:backend-name: Cassandra
include::partial$configure/jmap.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/mailrepositorystore.adoc
=====================================================
= Distributed James Server — mailrepositorystore.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:server-name: Distributed James Server
:mailet-repository-path-prefix: cassandra
:mail-repository-protocol: cassandra
:mail-repository-class: org.apache.james.mailrepository.cassandra.CassandraMailRepository
include::partial$configure/mailrepositorystore.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/collecting-contacts.adoc
=====================================================
= Contact collection
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/collecting-contacts.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/droplists.adoc
=====================================================
= Distributed James Server — DropLists
:navtitle: DropLists
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
include::partial$configure/droplists.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/mat-sts.adoc
=====================================================
= Distributed James Server — MTA STS
:navtitle: MTA-STS
include::partial$configure/mta-sts.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/search.adoc
=====================================================
= Distributed James Server — Search configuration
:navtitle: Search configuration
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/search.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/blobstore.adoc
=====================================================
= Distributed James Server — blobstore.properties
:navtitle: blobstore.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
== BlobStore
This file is optional. If omitted, the *cassandra* blob store will be used.
BlobStore is the dedicated component to store blobs, non-indexable content.
James uses the BlobStore for storing blobs which are usually mail contents, attachments, deleted mails...
You can choose the underlying implementation of BlobStore to fit with your James setup.
It could be the implementation on top of Cassandra or file storage service S3 compatible like Openstack Swift and AWS S3.
Consult link:{sample-configuration-prefix-url}/blob.properties[blob.properties]
in GIT to get some examples and hints.
=== Implementation choice
*implementation* :
* cassandra: use cassandra based BlobStore
* objectstorage: use Swift/AWS S3 based BlobStore
* file: (experimental) use directly the file system. Useful for legacy architecture based on shared ISCI SANs and/or
distributed file system with no object store available.
WARNING: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
Alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)
The generated startup warning log can be deactivated via the `cassandra.blob.store.disable.startup.warning` environment
variable being positioned to `false`.
*deduplication.enable*: Mandatory. Supported value: true and false.
If you choose to enable deduplication, the mails with the same content will be stored only once.
WARNING: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
the mails sharing the same content once one is deleted.
NOTE: If you are upgrading from James 3.5 or older, the deduplication was enabled.
Deduplication requires a garbage collector mechanism to effectively drop blobs. A first implementation
based on bloom filters can be used and triggered using the WebAdmin REST API. See
xref:{pages-path}/operate/webadmin.adoc#_running_blob_garbage_collection[Running blob garbage collection].
In order to avoid concurrency issues upon garbage collection, we slice the blobs in generation, the two more recent
generations are not garbage collected.
=====================================================
== File: docs/modules/servers/pages/distributed/configure/extensions.adoc
=====================================================
= Distributed James Server — extensions.properties
:navtitle: extensions.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
include::partial$configure/extensions.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/sieve.adoc
=====================================================
= Sieve
:navtitle: Sieve
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:server-name: Distributed James Server
include::partial$configure/sieve.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/listeners.adoc
=====================================================
= Distributed James Server — listeners.xml
:navtitle: listeners.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:server-name: Distributed James Server
include::partial$configure/listeners.adoc[]
=== MailboxOperationLoggingListener
Provides more insights on mailbox operationsby logging them.
This MailboxListener is supported.
Example:
[source,xml]
....
<listeners>
<listener>
<class>org.apache.james.mailbox.cassandra.MailboxOperationLoggingListener</class>
</listener>
<!-- ... -->
</listeners>
....
=====================================================
== File: docs/modules/servers/pages/distributed/configure/vault.adoc
=====================================================
= Distributed James Server — deletedMessageVault.properties
:navtitle: deletedMessageVault.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:server-name: Distributed James Server
:backend-name: Cassandra
include::partial$configure/vault.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/imap.adoc
=====================================================
= Distributed James Server — imapserver.xml
:navtitle: imapserver.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
include::partial$configure/imap.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/ssl.adoc
=====================================================
= Distributed James Server — SSL & TLS configuration
:navtitle: SSL & TLS configuration
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:server-name: Distributed James Server
include::partial$configure/ssl.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/smtp.adoc
=====================================================
= Distributed James Server — smtpserver.xml
:navtitle: smtpserver.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:server-name: Distributed James Server
include::partial$configure/smtp.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/mailetcontainer.adoc
=====================================================
= Distributed James Server — mailetcontainer.xml
:navtitle: mailetcontainer.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
include::partial$configure/mailetcontainer.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/webadmin.adoc
=====================================================
= Distributed James Server — webadmin.properties
:navtitle: webadmin.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:server-name: Distributed James Server
include::partial$configure/webadmin.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/recipientrewritetable.adoc
=====================================================
= Distributed James Server — recipientrewritetable.xml
:navtitle: recipientrewritetable.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:server-name: Distributed James Server
include::partial$configure/recipientrewritetable.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/rabbitmq.adoc
=====================================================
= Distributed James Server — rabbitmq.properties
:navtitle: rabbitmq.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/rabbitmq.adoc[]
== RabbitMQ MailQueue Configuration
James mail queue is a component acting like a queue where it can enqueue and dequeue mails.
Beside of the basic features, it also allows some extra operations like getting size, browsing all items in the mail queue...
One of the mailqueue implementation is using RabbitMQ.
As RabbitMQ doesn't offer enough features to implement efficiently all mailqueue operations,
this implementation relies on Cassandra.
.rabbitmq.properties content
|===
| Property name | explanation
| cassandra.view.enabled
| Whether the Cassandra administrative view should be activated. Boolean value defaulting to true.
Not necessarily needed for MDA deployments, mail queue management adds significant complexity.
| mailqueue.view.sliceWindow
| James divides the view into slices, each slice contains data for a given period, sliceWindow parameter controls this period.
This dividing of periods allows faster browsing of the mail queue. Tips for choosing sliceWindow are explained in
{sample-configuration-prefix-url}/rabbitmq.properties[rabbitmq.properties]
| mailqueue.view.bucketCount
| Mails in a mail queue are distributed across the underlying storage service.
BucketCount describes how to be distributing mails to fit with your James setup
Tips for choosing bucketCount are explained in
{sample-configuration-prefix-url}/rabbitmq.properties[rabbitmq.properties]
| mailqueue.view.updateBrowseStartPace
| To browse, James needs a starting point and to continuously update that point in runtime.
UpdateBrowseStartPace describes the probability to update the starting point.
Tips for choosing updateBrowseStartPace are explained in
{sample-configuration-prefix-url}/rabbitmq.properties[rabbitmq.properties]
| mailqueue.size.metricsEnabled
| By default, the metrics are disabled for the mail queue size.
As computing the size of the mail queue is currently implemented on top of browse operation and thus has a linear complexity,
sometimes it can get too big, making it impossible for the ES reporter to handle it correctly without crashing.
It can be useful then to disable it.
Tips for choosing metricsEnabled are explained in
{sample-configuration-prefix-url}/rabbitmq.properties[rabbitmq.properties]
| notification.queue.ttl
| Configure queue ttl (in ms). References: https://www.rabbitmq.com/ttl.html#queue-ttl.
=====================================================
== File: docs/modules/servers/pages/distributed/configure/spam.adoc
=====================================================
= Distributed James Server — Anti-Spam configuration
:navtitle: Anti-Spam configuration
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:server-name: Distributed James Server
:mailet-repository-path-prefix: cassandra
include::partial$configure/spam.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/remote-delivery-error-handling.adoc
=====================================================
= Distributed James Server — About RemoteDelivery error handling
:navtitle: About RemoteDelivery error handling
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:server-name: Distributed James Server
:mailet-repository-path-prefix: cassandra
include::partial$configure/remote-delivery-error-handling.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/index.adoc
=====================================================
= Distributed James Server — Configuration
:navtitle: Configuration
This section presents how to configure the Distributed server.
The Distributed Server relies on separated files for configuring various components. Some files follow a *xml* format
and some others follow a *property* format. Some files can be omitted, in which case the functionality can be disabled,
or rely on reasonable defaults.
The following configuration files are exposed:
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:xref-base: distributed/configure
:server-name: Distributed James Server
include::partial$configure/forProtocolsPartial.adoc[]
include::partial$configure/forStorageDependenciesPartial.adoc[]
** xref:distributed/configure/cassandra.adoc[*cassandra.properties*] allows to configure the Cassandra driver link:{sample-configuration-prefix-url}/sample-configuration/cassandra.properties[example]
include::partial$configure/forCoreComponentsPartial.adoc[]
include::partial$configure/forExtensionsPartial.adoc[]
include::partial$configure/systemPropertiesPartial.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/dns.adoc
=====================================================
= Distributed James Server — dnsservice.xml
:navtitle: dnsservice.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/dns.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/redis.adoc
=====================================================
= Distributed James Server — redis.properties
:navtitle: redis.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/redis.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/healthcheck.adoc
=====================================================
= Distributed James Server — healthcheck.properties
:navtitle: healthcheck.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/healthcheck.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/usersrepository.adoc
=====================================================
= Distributed James Server — usersrepository.xml
:navtitle: usersrepository.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
include::partial$configure/usersrepository.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/opensearch.adoc
=====================================================
= Distributed James Server — opensearch.properties
:navtitle: opensearch.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:server-name: Distributed James Server
:package-tag: cassandra
include::partial$configure/opensearch.adoc[]
=====================================================
== File: docs/modules/servers/pages/distributed/configure/pop3.adoc
=====================================================
= Distributed James Server — pop3server.xml
:navtitle: pop3server.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration
:pages-path: distributed
:server-name: Distributed James Server
include::partial$configure/pop3.adoc[]
=====================================================
== File: docs/modules/servers/pages/5-minute-demo.adoc
=====================================================
= Short Demo
In this short demo (~5 minutes), we will set up a running James demo very quickly
using a prepared Docker image.
Then you will add a domain, and a user account within that domain.
Requirements:
* Docker
== Set up the demo server
To begin, run the James demo server using Docker:
[source,bash]
----
docker run -d -p "25:25" -p "143:143" --name james apache/james:demo-latest
----
Explanation:
* `docker run` runs the provided image with the given parameters
* The `-d` parameter runs the container in "detached" mode
* `-p "25:25" -p "143:143"` attaches the image ports to the ports 25 (SMTP) and 143 (IMAP) on the host machine
* The `--name james` parameter gives the running container a name to make it easier to manipulate
* `apache/james:demo-latest` is the image that is used for this demo
Docker will pull the image and start the container.
== Connect via the CLI
****
To run commands using the James CLI, you can use the running container via Docker:
----
docker exec james james-cli <<COMMAND>>
----
****
As an example, list all the domains currently in use by James:
[source,bash]
----
docker exec james james-cli listDomains
----
You should notice that a default domain, james.local, has been created
=====================================================
== File: docs/modules/servers/pages/15-minute-demo.adoc
=====================================================
= Long Demo
In this demo (~15 minutes), we will set up a running James demo using a prepared Docker image.
We will then test the server by connecting with an email client. Finally, we
will connect to the server via the REST-based Admin API.
Requirements:
* Docker
* curl
* Thunderbird client (optional)
== Set up the demo server
Before starting the server, because we will be connecting to the Admin API we need to set some configuration parameters.
We will create a `webadmin.properties` file that James will use in order to allow us to connect to the API.
Run this command to create the `webadmin.properties` file:
[source,bash]
----
printf 'enabled=true\nport=8000\nhost=localhost' >> webadmin.properties
----
Explanation:
* `enabled=true` instructs James to run the Admin API service
* `port=8000` configures the Admin API to be made available via port 8000
* `host=localhost` configures the Admin API to respond on localhost
Now run the James demo server using this command:
[source,bash]
----
docker run -d -p "25:25" -p "143:143" -p "127.0.0.1:8000:8000" -v $(pwd)/webadmin.properties:/root/conf/webadmin.properties --name james apache/james:demo-latest
----
Explanation:
* `docker run` runs the provided image with the given parameters
* The `-d` parameter runs the container in "detached" mode
* `-p "25:25" -p "143:143"` attaches the image ports to the ports 25 (SMTP) and 143 (IMAP) on the host machine
* `-p "127.0.0.1:8000:8000" attaches the port 8000 to localhost on the host machine to allow us to connect to the Admin API
* `-v $(pwd)/webadmin.properties:/root/conf/webadmin.properties` mounts the webadmin.properties file to configure the Admin API
* The `--name james` parameter gives the running container a name to make it easier to manipulate
* `apache/james:demo-latest` is the image that is used for this demo
Docker will pull the image and start the container.
=====================================================
== File: docs/modules/servers/pages/test.adoc
=====================================================
= James Test Server
:navtitle: Test
https://github.com/apache/james-project/tree/master/server/apps/memory-app[Apache James Memory App]
is a memory-only implementation of Apache James. It is useful for testing and development purposes.
=====================================================
== File: docs/modules/servers/pages/demo.adoc
=====================================================
= Server Demo
:navtitle: Demo
The James Demo Server sets up a light-weight, disposable mail server
so you can try it out easily on your own local machine.
* xref:servers:5-minute-demo.adoc[Short demo] (~5 minutes)
** Set up a demo server
** Create a new user with the CLI
* xref:servers:15-minute-demo.adoc[Long demo] (~15 minutes)
** Same steps as above
** Interact with the server via the Admin API
** Test the server with an email client
=====================================================
== File: docs/modules/servers/pages/basic/context.adoc
=====================================================
= James Basic Server — Context
:navtitle: Context
Email has been around in one form or another for more than 50 years.
It is arguably one of the most resilient applications or our day, and
may even be called **THE** killer app of our time. Most of us, if not
all but the most unfortunate, use email on a regular basis. If you are
reading this page over the web, it is almost 100% certain that you have
used and continue to use email.
Despite its ubiquity, the vast majority of people do not control their
own email infrastructure. Although, unlike telecommunications or electricity
for example, the barriers to owning and maintaining your own infrastructure
are very low, individuals and companies alike usually defer to the large
email providers for this essential service.
Although relying on the big providers is easy, what they offer is often
limited and in some cases much more costly than it ought to be.
The Apache James Community is dedicated to liberating email. Our mission
is to make email hosting both easy and fun. We do this by:
* Providing an easy-to-use self-hosted server for amateur Operators
* Providing an extendable server for those more experienced Operators
* Providing a distributed solution for heavy-duty projects
* Ensuring that James remains a flexible, reliable technology platform
=====================================================
== File: docs/modules/servers/pages/basic/objectives.adoc
=====================================================
= James Basic Server — Objectives
:navtitle: Objectives
The objective of the Basic Server is to be as simple and minimalistic as possible,
while still being useful. Many people wish to have a basic self-hosted mail server that they
can use without having to become a deep technical expert.
The Basic Server is intended to be an entry-level server that is accessible to
those who want a self-hosted mail server, but who don't want to have to learn about all the
complexities of email communications.
This server is therefore intended to be the simplest to set up and use in
production.
Of all the James Servers, it has the least amount of dependencies and configurations.
If you are not sure which of the James servers is best for you, you should
probably choose this one.
The default configuration of the Basic Server includes the following features:
* Secure SMTP (SSL/TLS) over port 465
* Secure IMAP4 (SSL/TLS) over port 993
* Local Mailbox support
** Files are stored locally on the filesystem
** Optionally use a volume if you are a Docker or Kubernetes user
* Multi-domain (virtual domain) support
* Administration of users either via a command-line tool or the admin api
We have disabled all of the insecure communications and require SSL. If you have
a specific requirement to use an insecure protocol, or if the above list does not
satisfy your needs, then after having successfully set up this server you may want
to move on to the xref:extendable.adoc[Extendable Server].
=====================================================
== File: docs/modules/servers/pages/basic/conf/index.adoc
=====================================================
= James Basic Mail Server Configuration
:navtitle: Configuration
(Work in progress.)
////
== JIRA Issues
* dnsservice.xml - DNS Service Configuration -> https://issues.apache.org/jira/browse/JAMES-3219
** Status: to be removed
* domainlist.xml - Domain List Configuration -> https://issues.apache.org/jira/browse/JAMES-3220
** Status: to be removed
* events.xml - Event system Configuration (Spring only)
** Status: Spring only, so n/a
* fetchmail.xml- FetchMail Configuration (Spring only)
** Status: Spring only, so n/a
* imapserver.xml - IMAP4 Configuration -> https://issues.apache.org/jira/browse/JAMES-3229
** Status:
* jmap.properties - JMAP Configuration (Guice only) -> https://issues.apache.org/jira/browse/JAMES-3230
** Status:
* lmtpserver.xml - LMTP Configuration -> https://issues.apache.org/jira/browse/JAMES-3231
** Status:
* mailrepositorystore.xml - Mail Repository Stores Configuration -> https://issues.apache.org/jira/browse/JAMES-3232
** Status:
* mailbox.xml - Mailbox Configuration (Spring only)
** Status: Spring only, so n/a
* mailetcontainer.xml - Mailet Container Configuration -> https://issues.apache.org/jira/browse/JAMES-3233
** Status:
* pop3server.xml - POP3 Configuration -> https://issues.apache.org/jira/browse/JAMES-3234
** Status:
* mailbox.xml - Quota Configuration (Spring only)
** Status: Spring only, so n/a
* recipientrewritetable.xml - Recipient Rewrite Table Configuration -> https://issues.apache.org/jira/browse/JAMES-3235
** Status:
* smtpserver.xml - SMTP Configuration -> https://issues.apache.org/jira/browse/JAMES-3236
** Status:
* usersrepository.xml - Users Configuration -> https://issues.apache.org/jira/browse/JAMES-3237
** Status:
* webadmin.properties - WebAdmin Configuration -> https://issues.apache.org/jira/browse/JAMES-3238
** Status:
* jmx.properties -> https://issues.apache.org/jira/browse/JAMES-3240
** Status:
* extensions.properties -> https://issues.apache.org/jira/browse/JAMES-3241
** Status:
* jwt_publickey -> https://issues.apache.org/jira/browse/JAMES-3242a
** Status:
* healthcheck.properties -> https://issues.apache.org/jira/browse/JAMES-3243
** Status:
* listeners.xml -> https://issues.apache.org/jira/browse/JAMES-3244
** Status:
=====================================================
== File: docs/modules/servers/pages/basic/help.adoc
=====================================================
= James Basic Server — Where to get help
:navtitle: Help
////
This information is based on the email discussion from here:
--> https://www.mail-archive.com/server-dev@james.apache.org/msg66420.html
However, I am not satisfied that I have properly captured the community's
opinion, and there are only a few people who have contributed to the
thread.
Would be good to have some comments on this content.
It could just be that I don't like the content. But if that is what the
community thinks, then that is what we should write.
////
////
Comment this out until there is agreement.
== Warning
Please note that if you want to try to use James, you are pretty
much on your own.
James is intended for use only by the current committers, or perhaps only by
competent developers only who have the ability to understand the code as it
exists now and can make changes themselves without any help. What you see
is what you get. Take it or leave it.
The James Community is made up of people who "scratch their own itch".
If you have a problem with the code or the documentation, then please
step up and fix it rather than asking for help.
If you are a user who wants to try to use James, you should seriously
consider hiring a professional organization to help you. Most likely,
James is not for you.
You can try filing issues, but there is absolutely no guarantee it will be
fixed. If you are lucky and a developer has the same problem as you, then
it may be fixed. Or if one of the developers is feeling particularly generous and wants
to volunteer their valuable time to help you, it may happen. There is no
way to know unless you try.
On the other hand, the developers would **love** for you to do stuff that
they are not interested in doing, like documentation. If you don't know anything
about the code, it would be a good way to help out until you can eventually
join the exclusive committer club, too.
////
=====================================================
== File: docs/modules/servers/pages/basic/concepts.adoc
=====================================================
= James Basic Server — Background Concepts
:navtitle: Concepts
Before embarking on your adventure with the **James Basic Server**, we
highly recommend that you familiarize yourself with the following concepts:
[TODO: provide links and ensure that articles exist for each of these topics]
* xref:concepts:user/index.adoc[James User Model]
* xref:concepts:protocols/smtp.adoc[SMTP]
* xref:concepts:protocols/imap.adoc[IMAP]
// What link should go here??
* Secured email communications
* xref:concepts:/storage/index.adoc[Email storage]
=====================================================
== File: docs/modules/servers/pages/basic/architecture.adoc
=====================================================
= James Basic Server — Architecture
:navtitle: Architecture
(TODO)
=====================================================
== File: docs/modules/servers/pages/basic/index.adoc
=====================================================
= James Basic Mail Server
:navtitle: Basic
The **James Basic Server** is intended for xref:concepts:user/index.adoc#Operator[Operators]
who are just getting initiated with operating their own
xref:concepts/???[Self-Hosted] mail server.
The server is intended to be a mostly "out-of-the-box" solution.
With a few small interactions necessary to configure the system, you should
be up and running in no time with all the standard features.
These documents will present all the concepts that underpin this server,
and will walk you through its installation and configuration. If you run into
trouble, we explain how you can get help from the James Community.
* xref:basic/context.adoc[The context of contemporary email]
* xref:basic/objectives.adoc[Objectives and motivation of the Basic Server]
* xref:basic/concepts.adoc[Useful background concepts]
* xref:basic/architecture.adoc[Overview of architecture]
* xref:basic/conf/index.adoc[Configuration]
* xref:basic/help.adoc[Where to go for help]
=====================================================
== File: docs/modules/servers/pages/basic/self-hosting.notes
=====================================================
The name of the project is "Jame Self Hosting Sandbox", and I see the term "self hosting" in a few places... So it sounds like it is important, but what is that intended to mean?
I would like to understand better the intention behind the term.
I would say "self hosting" means individuals having bought a domain name and want to install their own mail server for hosting their personal emails. Volumetry is small. They want control on their data.
One generally tricky point about this kind of set up is getting third parties (like eg GMail) trusting your setup. It would be important to document a checklist regarding Mail Exchange trust like:
I'm not an open spam relay
MX record registered for my domain
Reverse DNS setted up for MX servers
SPF records setted up
DKIM signature setted up
(which is slightly external to James as DNS setup is required)
A "how to" regarding this is a MUST have in my opinion http://james.apache.org/howTo/index.html
Just a thought based on the ideas you wrote here...
But what if the mission of James were to "help people self-host their email" as an alternative to providers like gmail etc.
Right now James is very obscure and is only for total tekkie geeks. If we modify the target, perhaps this could be the mission.
The way of accomplishing this is:
Provide in-depth "concept" articles
Provide more "how tos" for important things
Make James easier to install and operate
wdyt?
It would be more like:
Apache James give you the ability to "self-host" email. Many companies and individuals are unable to develop their own mail infrastructure, but often feel trapped into using services like gmail, yahoo, etc. James provides a low-cost alternative for those who desire the freedom to use email the way they want.
Or something like that.
Apache James give you the ability to "self-host" email. Many companies and individuals are unable to develop their own mail infrastructure, but often feel trapped into using services like gmail, yahoo, etc. James provides a low-cost alternative for those who desire the freedom to use email the way they want.
This should be the goal of the Basic server.
Regarding "Advanced server":
=====================================================
== File: docs/modules/servers/pages/run.adoc
=====================================================
= Run James in Production
:navtitle: Run
James provides a number of *profiles* out of the box.
These profiles have been tested and verified so you can
get set up quickly with a production mail server that you
can use with confidence.
The available profiles are:
* <<minimal,James Minimal Profile>>
* <<basic,James Basic Profile>>
* <<advanced,James Advanced Profile>>
* <<distributed,James Distributed Profile>>
[#minimal]
== James Minimal Profile
If you are not sure which profile you should be using, then
you probably ought to be using the *James Minimal Profile*.
This profile is intended to be the simplest to set up and use in production.
It has the least amount of dependencies and complexities. If you do not yet
have a huge amount of emails to process, then usually the simplicity is
well worth the loss of some functionality. The last thing you need is
to have to resolve difficult issues on a production server when you have not
yet acquired the requisite knowledge to deal with those issues. Using the
*James Minimal Profile* will help you reduce the risk of running into
production issues.
This profile is:
* Suggested for use with smaller deployments
* Appropriate for use by most operators
* The preferred choice for most installations
* Endowed with fewer dependencies, which makes it simpler and less risky to use in production
* Only dependent on your local file system for data storage, so very easy to manage
(TODO: Add link to details page)
[#basic]
== James Basic Profile
This profile is intended to be relatively easy to use, but provides additional features with regards
to data storage and management. Of course, these additional features come at the cost of more
operational complexity. You will have to now deal with a relational database and all the fun
that comes with it. However, if you are already an expert at relational database management,
=====================================================
== File: docs/modules/servers/pages/index.adoc
=====================================================
= Apache James Mail Servers
:navtitle: Servers
James offers five types of ready-made Mail Servers. The servers are intended
for those with different needs, ranging from xref:concepts:user/index.adoc#Operators[Operators]
who are interested in setting up a server for the first time, to experienced teams of
xref:concepts:user/index.adoc#Developer[Developers]
looking to deploy an advanced distributed system.
Each of the servers has been tested and verified so you can
deploy a production-grade
xref:concepts/insert-link[Mail Server] with confidence.
The available James Servers are:
* <<demo,James Demo Mail Server>>
* <<basic,James Basic Mail Server>>
* <<extendable,James Extendable Mail Server>>
* <<distributed,James Distributed Mail Server>>
* <<postgres,James Postgres Mail Server>>
* <<test,James Test Server>>
If you are just checking out James for the first time, then we highly recommend
investigating the servers in this order:
. Initiate yourself with James by using the <<demo,Demo Server>>
. Install the <<basic,Basic Server>>
. If and only if the Basic Server is not enough, then try the <<extendable,Extendable Server>>
[#demo]
== James Demo Server
The xref:demo.adoc[Demo Server] is intended for those who just want
to give James a quick spin on their local machine to see what all
the fuss is about.
[#basic]
== James Basic Mail Server
If you just want to get up and running quickly, if you have very simple needs,
or you want to try deploying a mail server for the first time, then the
xref:basic/index.adoc[*Basic Server*] is the right choice for you. If you are
not sure which server you should be using, then this server is probably the right
choice.
This server is intended to be the simplest to set up and use in production.
It has the least amount of complexity and configurations to worry about.
The last thing you need is
to have to resolve difficult issues on a production server when you have not
yet acquired the requisite knowledge to deal with those issues. Using the
=====================================================
== File: docs/modules/servers/pages/postgres/architecture/mailqueue_combined_extend.adoc
=====================================================
// 123
=====================================================
== File: docs/modules/servers/pages/postgres/architecture/consistency_model_data_replication_extend.adoc
=====================================================
//
=====================================================
== File: docs/modules/servers/pages/postgres/architecture/implemented-standards.adoc
=====================================================
= Postgresql James server — Implemented standards
:navtitle: Implemented standards
:server-name: Postgresql James server
include::partial$architecture/implemented-standards.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/architecture/specialized-instances.adoc
=====================================================
= Postgresql James server — Specialized instances
:navtitle: Specialized instances
:server-name: Postgresql James server
:specialized-instances-file-name: specialized-instances-postgres.png
include::partial$architecture/specialized-instances.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/architecture/index.adoc
=====================================================
= Postgresql James server — Architecture
:navtitle: Architecture
:backend-name: postgres
:server-name: Postgresql James server
:backend-storage-introduce: Postgresql is used for metadata storage. Postgresql is efficient for a very high workload.
:storage-picture-file-name: storage_james_postgres.png
:mailet-repository-path-prefix: postgres
:xref-base: postgres
:mailqueue-combined-extend: servers:postgres/architecture/mailqueue_combined_extend.adoc
:mailqueue-combined-extend-backend:
include::partial$architecture/index.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/architecture/consistency-model.adoc
=====================================================
= Postgresql James server — Consistency Model
:navtitle: Consistency Model
:backend-name: postgres
:backend-name-cap: Postgres
:server-name: Postgresql James server
:mailet-repository-path-prefix: postgres
:xref-base: postgres
:data_replication_extend: servers:postgres/architecture/consistency_model_data_replication_extend.adoc
include::partial$architecture/consistency-model.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/extending.adoc
=====================================================
= Postgres James Mail Server — Extending behaviour
:navtitle: Extending behaviour
This section can be read xref:customization:index.adoc[this page].
=====================================================
== File: docs/modules/servers/pages/postgres/objectives.adoc
=====================================================
= Distributed James Server — Objectives and motivation
:navtitle: Objectives and motivation
From the outstanding advantages of a distributed mail system, such as scalability and enhancement,
this project aims to implement a backend database version using Postgres.
Primary Objectives:
* Provide more options: The current James Distributed server uses Cassandra as the backend database.
This project aims to provide an alternative to Cassandra, using Postgres as the backend database.
This choice aims to offer a highly scalable and reactive James mail server, suitable for small to medium deployments,
while the distributed setup remains more fitting for larger ones.
* Propose an alternative to the jpa-app variant: The jpa-app variant is a simple version of James that uses JPA
to store data and is compatible with various SQL databases.
With the postgres-app, we use the `r2dbc` library to connect to the Postgres database, implementing non-blocking,
reactive APIs for higher performance.
* Leverage advanced Postgres features: Postgres is a powerful database that supports many advanced features.
This project aims to leverage these features to improve the efficiency of the James server.
For example, the implement https://www.postgresql.org/docs/current/ddl-rowsecurity.html[row-level security]
to improve the security of the James server.
* Flexible deployment: The new architecture allows flexible module choices. You can use Postgres directly for
blob storage or use Object Storage (e.g Minio, S3...).
=====================================================
== File: docs/modules/servers/pages/postgres/operate/metrics.adoc
=====================================================
= Postgresql James Server — Metrics
:navtitle: Metrics
:other-metrics: Postgresql Java driver metrics
:xref-base: postgres
:server-name: Postgresql James Server
include::partial$operate/metrics.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/operate/security.adoc
=====================================================
= Security checklist
:navtitle: Security checklist
:xref-base: postgres
:backend-name: postgres
include::partial$operate/security.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/operate/webadmin/admin-messages-extend.adoc
=====================================================
// The document only covers Postgres
=====================================================
== File: docs/modules/servers/pages/postgres/operate/webadmin/admin-mailboxes-extend.adoc
=====================================================
// The document only covers Postgres
=====================================================
== File: docs/modules/servers/pages/postgres/operate/webadmin/admin-mail-queues-extend.adoc
=====================================================
// The document only covers Postgres
=====================================================
== File: docs/modules/servers/pages/postgres/operate/migrating.adoc
=====================================================
= Postgresql James Server — Migrating existing data
:navtitle: Migrating existing data
:xref-base: postgres
:server-name: Postgresql James Server
include::partial$operate/migrating.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/operate/logging/docker-compose-block.adoc
=====================================================
[source,docker-compose]
----
version: "3"
services:
james:
depends_on:
- elasticsearch
- postgres
- rabbitmq
- s3
image: apache/james:postgres-latest
container_name: james
hostname: james.local
volumes:
- ./extension-jars:/root/extension-jars
- ./conf/logback.xml:/root/conf/logback.xml
- ./logs:/root/logs
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8080:8000"
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
ports:
- "9200:9200"
environment:
- discovery.type=single-node
postgres:
image: postgres:16.9
ports:
- "5432:5432"
environment:
- POSTGRES_DB=james
- POSTGRES_USER=james
- POSTGRES_PASSWORD=secret1
rabbitmq:
image: rabbitmq:4.1.1-management
ports:
- "5672:5672"
- "15672:15672"
=====================================================
== File: docs/modules/servers/pages/postgres/operate/guide.adoc
=====================================================
= Postgresql James Server — Operator guide
:navtitle: Operator guide
:xref-base: postgres
:mailet-repository-path-prefix: postgres
:backend-name: postgres
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/master/server/apps/postgres-app/sample-configuration
:server-name: Postgresql James Server
include::partial$operate/guide.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/operate/performanceChecklist.adoc
=====================================================
= Postgresql James Server — Performance checklist
:navtitle: Performance checklist
:xref-base: postgres
:backend-name: postgres
include::partial$operate/performanceChecklist.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/operate/webadmin.adoc
=====================================================
= Postgresql James Server — WebAdmin REST administration API
:navtitle: WebAdmin REST administration API
:server-name: Postgresql James Server
:xref-base: postgres
:backend-name: postgres
:admin-mail-queues-extend: servers:postgres/operate/webadmin/admin-mail-queues-extend.adoc
:admin-messages-extend: servers:postgres/operate/webadmin/admin-messages-extend.adoc
:admin-mailboxes-extend: servers:postgres/operate/webadmin/admin-mailboxes-extend.adoc
include::partial$operate/webadmin.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/operate/logging.adoc
=====================================================
= Postgresql James Server — Logging
:navtitle: Logging
:xref-base: postgres
:server-name: Postgresql James Server
:server-tag: postgres
:docker-compose-code-block-sample: servers:postgres/operate/logging/docker-compose-block.adoc
:backend-name: postgres
include::partial$operate/logging.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/operate/index.adoc
=====================================================
= Postgresql James Server — Operate the Distributed server
:navtitle: Operate the Distributed server
:xref-base: postgres
:server-name: Postgresql James Server
:server-tag: postgres
include::partial$operate/index.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/operate/cli.adoc
=====================================================
= Postgresql James Server — Command Line Interface
:navtitle: Command Line Interface
:xref-base: postgres
:server-name: Postgresql James Server
include::partial$operate/cli.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/benchmark/benchmark_prepare.adoc
=====================================================
=== Postgresql prepare benchmark
==== Install extension pg_stat_statements
The `pg_stat_statements` extension provides a means for tracking execution statistics of all SQL statements executed by a server.
The extension is useful for identifying high-traffic queries and for monitoring the performance of the server.
For more information, see the [PostgreSQL documentation](https://www.postgresql.org/docs/current/pgstatstatements.html).
To install the extension, connect to the database and run the following query:
[source,sql]
----
create extension if not exists pg_stat_statements;
alter system set shared_preload_libraries='pg_stat_statements';
-- restart postgres
-- optional
alter system set pg_stat_statements.max = 100000;
alter system set pg_stat_statements.track = 'all';
----
To reset statistics, use: `select pg_stat_statements_reset()`;
The response fields that we are interested in are:
- `query`: Text of a representative statement
- `calls`: Number of times the statement was executed
- `total_exec_time`, `mean_exec_time`, `min_exec_time`, `max_exec_time`
To view the statistics, run the following query:
```sql
select query, mean_exec_time, total_exec_time, calls from pg_stat_statements order by total_exec_time desc;
```
The result sample:
image::postgres_pg_stat_statements.png[Storage responsibilities for the {server-name}]
=====================================================
== File: docs/modules/servers/pages/postgres/benchmark/db-benchmark.adoc
=====================================================
= Postgresql James server -- Database benchmarks
:navtitle: Database benchmarks
:backend-name: postgres
:server-name: Postgresql James server
:backend-database-extend-sample: PostgreSQL 16 as main database: 1 nodes (OVH instance, 2 CPU / 7 GB RAM, 160 GB SSD)
include::partial$benchmark/db-benchmark.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/benchmark/james-benchmark.adoc
=====================================================
= Postgresql James server benchmark
:navtitle: James benchmarks
:server-name: Postgresql James server
:backend-database-extend-sample: PostgreSQL 16 as main database: 1 nodes (OVH instance, 2 CPU / 7 GB RAM, 160 GB SSD)
:provision_file_url: https://github.com/apache/james-project/blob/d8225ed7c5ca8d79cde3b1c8755ee9ffcf462e29/server/apps/postgres-app/provision.sh
:benchmark_prepare_extend: servers:postgres/benchmark/benchmark_prepare.adoc
:james-imap-base-performance-picture: james-imap-base-performance-postgres.png
include::partial$benchmark/james-benchmark.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/benchmark/index.adoc
=====================================================
= Postgresql James server — Performance testing
:navtitle: Performance testing the Postgresql James server
:xref-base: postgres
:server-name: Postgresql James server
include::partial$benchmark/index.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/index.adoc
=====================================================
= Postgres James Mail Server
:navtitle: Distributed Postgres James Application
The Postgres James server offers an easy way to scale email server. Based on
SQL database solutions, here is https://www.postgresql.org/[Postgres].
Postgres is a powerful and versatile database server. Known for its advanced features, scalability,
and robust performance, Postgres is the ideal choice for handling high-throughput and large data sets efficiently.
Its row-level security ensures top-notch data protection, while the flexible architecture allows seamless integration
with various storage and search solutions
In this section of the documentation, we will introduce you to:
* xref:postgres/objectives.adoc[Objectives and motivation of the Distributed Postgres Server]
* xref:postgres/run/index.adoc[Run the Postgresql Server]
=====================================================
== File: docs/modules/servers/pages/postgres/extending/index.adoc
=====================================================
= Distributed James Postgres Server — Extending server behavior
:navtitle: Extending server behavior
=====================================================
== File: docs/modules/servers/pages/postgres/run/run-docker.adoc
=====================================================
= Postgresql James Server — Run with docker
:navtitle: Run with docker
== Running via docker-compose
Requirements: docker & docker-compose installed.
When you try James this way, you will use the most current state of James.
=== Running with Postgresql only
It will be configured to run with Postgresql.
All those components will be started with a single command.
You can retrieve the docker-compose file : ( docker-compose file and james image name should be changed)
$ wget https://raw.githubusercontent.com/apache/james-project/master/server/apps/postgres-app/docker-compose.yml
Then, you just have to start the services:
$ docker-compose up -d
Wait a few seconds in order to have all those services start up. You will see the following log when James is available:
james | Started : true
A default domain, james.local, has been created. You can see this by running:
$ docker exec james james-cli -h 127.0.0.1 -p 9999 listdomains
James will respond to IMAP port 143 and SMTP port 25.
You have to create users before playing with james. You may also want to create other domains.
Follow the xref:postgres/operate/cli.adoc['Useful commands'] section for more information about James CLI.
=== Running distributed James
We also have a distributed version of the James postgresql app with:
* OpenSearch as a search indexer
* S3 as the object storage
* RabbitMQ as the event bus
To run it, simply type:
$ docker compose -f docker-compose-distributed.yml up -d
== Run with docker
=== Requirements
=====================================================
== File: docs/modules/servers/pages/postgres/run/index.adoc
=====================================================
= Postgresql James Server — Run
:navtitle: Run
This sections presents guidance to all current deployment types of Postgresql James Server.
== Run with Java
Build your own Apache James Postgresql artifacts and start xref:postgres/run/run-java.adoc[Running it directly on a Java Virtual Machine].
== Run with Docker
We have prepared a docker-compose for Apache James to run with Postgresql & OpenSearch.
You can start xref:postgres/run/run-docker.adoc[Running James with few simple Docker commands].
=====================================================
== File: docs/modules/servers/pages/postgres/run/run-java.adoc
=====================================================
= Postgresql James Server — Run
:navtitle: Run
== Building
=== Requirements
* Java 21 SDK
* Maven 3
=== Building the artifacts
An usual compilation using maven will produce two artifacts into
server/apps/postgres-app/target directory:
* james-server-postgres-app.jar
* james-server-postgres-app.lib
You can for example run in the base of
https://github.com/apache/james-project[this git repository]:
....
mvn clean install
....
== Running
=== Running James with Postgresql only
==== Requirements
* Postgresql 16.0+
==== James launch
To run james, you have to create a directory containing required
configuration files.
James requires the configuration to be in a subfolder of working directory that is called conf.
A https://github.com/apache/james-project/tree/master/server/apps/postgres-app/sample-configuration[sample directory]
is provided with some default values you may need to replace. You will need to update its content to match your needs.
Also you might need to add the files like in the
https://github.com/apache/james-project/tree/master/server/apps/postgres-app/sample-configuration-single[sample directory]
to not have OpenSearch indexing enabled by default for the search.
You need to have a Postgresql instance running. You can either install the server or launch it via docker:
[source,bash]
----
=====================================================
== File: docs/modules/servers/pages/postgres/configure/collecting-events.adoc
=====================================================
= Event collection
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/collecting-events.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/matchers.adoc
=====================================================
= Postgresql James Server — Matchers
:navtitle: Matchers
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
:server-name: Postgresql James server
include::partial$configure/matchers.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/mailets.adoc
=====================================================
= Postgresql James Server — Mailets
:navtitle: Mailets
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:server-name: Postgresql James server
include::partial$configure/mailets.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/batchsizes.adoc
=====================================================
= Postgresql James Server — batchsizes.properties
:navtitle: batchsizes.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/batchsizes.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/smtp-hooks.adoc
=====================================================
= Postgresql James Server — SMTP Hooks
:navtitle: SMTP Hooks
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
:server-name: Postgresql James server
include::partial$configure/smtp-hooks.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/domainlist.adoc
=====================================================
= Postgresql James Server — domainlist.xml
:navtitle: domainlist.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/domainlist.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/queue.adoc
=====================================================
= Postgresql James Server — queue.properties
:navtitle: queue.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/queue.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/dsn.adoc
=====================================================
= Postgresql James Server — Delivery Submission Notifications
:navtitle: ESMTP DSN setup
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: distributed
:mailet-repository-path-prefix: postgres
include::partial$configure/dsn.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/jmx.adoc
=====================================================
= Postgresql James Server — jmx.properties
:navtitle: jmx.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/jmx.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/tika.adoc
=====================================================
= Postgresql James Server — tika.properties
:navtitle: tika.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/tika.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/jvm.adoc
=====================================================
= Postgresql James Server — jvm.properties
:navtitle: jvm.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/jvm.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/jmap.adoc
=====================================================
= Postgresql James Server — jmap.properties
:navtitle: jmap.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:server-name: Postgresql James server
:backend-name: Postgresql
include::partial$configure/jmap.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/mailrepositorystore.adoc
=====================================================
= Postgresql James Server — mailrepositorystore.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
:server-name: Postgresql James server
:mailet-repository-path-prefix: postgres
:mail-repository-protocol: postgres
:mail-repository-class: org.apache.james.mailrepository.postgres.PostgresMailRepository
include::partial$configure/mailrepositorystore.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/collecting-contacts.adoc
=====================================================
= Contact collection
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/collecting-contacts.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/droplists.adoc
=====================================================
= Postgresql James Server — DropLists
:navtitle: DropLists
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
include::partial$configure/droplists.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/mat-sts.adoc
=====================================================
= Postgresql James Server — MTA STS
:navtitle: MTA-STS
include::partial$configure/mta-sts.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/search.adoc
=====================================================
= Postgresql James Server — Search configuration
:navtitle: Search configuration
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/search.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/blobstore.adoc
=====================================================
= Postgresql James Server — blobstore.properties
:navtitle: blobstore.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
== BlobStore
This file is optional. If omitted, the *postgres* blob store will be used.
BlobStore is the dedicated component to store blobs, non-indexable content.
James uses the BlobStore for storing blobs which are usually mail contents, attachments, deleted mails...
You can choose the underlying implementation of BlobStore to fit with your James setup.
It could be the implementation on top of Postgres or file storage service S3 compatible like Openstack Swift and AWS S3.
Consult link:{sample-configuration-prefix-url}/blob.properties[blob.properties]
in GIT to get some examples and hints.
=== Implementation choice
*implementation* :
* postgres: use cassandra based Postgres
* objectstorage: use Swift/AWS S3 based BlobStore
* file: (experimental) use directly the file system. Useful for legacy architecture based on shared ISCI SANs and/or
distributed file system with no object store available.
*deduplication.enable*: Mandatory. Supported value: true and false.
If you choose to enable deduplication, the mails with the same content will be stored only once.
WARNING: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
the mails sharing the same content once one is deleted.
Deduplication requires a garbage collector mechanism to effectively drop blobs. A first implementation
based on bloom filters can be used and triggered using the WebAdmin REST API. See
xref:{pages-path}/operate/webadmin.adoc#_running_blob_garbage_collection[Running blob garbage collection].
In order to avoid concurrency issues upon garbage collection, we slice the blobs in generation, the two more recent
generations are not garbage collected.
*deduplication.gc.generation.duration*: Allow controlling the duration of one generation. Longer implies better deduplication
but deleted blobs will live longer. Duration, defaults on 30 days, the default unit is in days.
*deduplication.gc.generation.family*: Every time the duration is changed, this integer counter must be incremented to avoid
conflicts. Defaults to 1.
=====================================================
== File: docs/modules/servers/pages/postgres/configure/extensions.adoc
=====================================================
= Postgresql James Server — extensions.properties
:navtitle: extensions.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
include::partial$configure/extensions.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/sieve.adoc
=====================================================
= Sieve
:navtitle: Sieve
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
:server-name: Postgresql James server
include::partial$configure/sieve.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/listeners.adoc
=====================================================
= Postgresql James Server — listeners.xml
:navtitle: listeners.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:server-name: Postgresql James server
include::partial$configure/listeners.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/vault.adoc
=====================================================
= Postgresql James Server — deletedMessageVault.properties
:navtitle: deletedMessageVault.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
:server-name: Postgresql James server
:backend-name: Postgresql
include::partial$configure/vault.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/imap.adoc
=====================================================
= Postgresql James Server — imapserver.xml
:navtitle: imapserver.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
include::partial$configure/imap.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/ssl.adoc
=====================================================
= Postgresql James Server — SSL & TLS configuration
:navtitle: SSL & TLS configuration
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
:server-name: Postgresql James server
include::partial$configure/ssl.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/smtp.adoc
=====================================================
= Postgresql James Server — smtpserver.xml
:navtitle: smtpserver.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
:server-name: Postgresql James server
include::partial$configure/smtp.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/mailetcontainer.adoc
=====================================================
= Postgresql James Server — mailetcontainer.xml
:navtitle: mailetcontainer.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
include::partial$configure/mailetcontainer.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/webadmin.adoc
=====================================================
= Postgresql James Server — webadmin.properties
:navtitle: webadmin.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
:server-name: Postgresql James server
include::partial$configure/webadmin.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/recipientrewritetable.adoc
=====================================================
= Postgresql James Server — recipientrewritetable.xml
:navtitle: recipientrewritetable.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
:server-name: Postgresql James server
include::partial$configure/recipientrewritetable.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/rabbitmq.adoc
=====================================================
= Postgresql James Server — rabbitmq.properties
:navtitle: rabbitmq.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/rabbitmq.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/spam.adoc
=====================================================
= Postgresql James Server — Anti-Spam configuration
:navtitle: Anti-Spam configuration
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
:server-name: Postgresql James server
:mailet-repository-path-prefix: postgres
include::partial$configure/spam.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/remote-delivery-error-handling.adoc
=====================================================
= Postgresql James Server — About RemoteDelivery error handling
:navtitle: About RemoteDelivery error handling
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
:server-name: Postgresql James server
:mailet-repository-path-prefix: postgres
include::partial$configure/remote-delivery-error-handling.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/index.adoc
=====================================================
= Postgresql James Server — Configuration
:navtitle: Configuration
This section presents how to configure the Postgresql James server.
The Postgresql James Server relies on separated files for configuring various components. Some files follow a *xml* format
and some others follow a *property* format. Some files can be omitted, in which case the functionality can be disabled,
or rely on reasonable defaults.
The following configuration files are exposed:
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:xref-base: postgres/configure
:server-name: Postgresql James server
include::partial$configure/forProtocolsPartial.adoc[]
include::partial$configure/forStorageDependenciesPartial.adoc[]
include::partial$configure/forCoreComponentsPartial.adoc[]
include::partial$configure/forExtensionsPartial.adoc[]
include::partial$configure/systemPropertiesPartial.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/dns.adoc
=====================================================
= Postgresql James Server — dnsservice.xml
:navtitle: dnsservice.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/dns.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/redis.adoc
=====================================================
= Postgresql James Server — redis.properties
:navtitle: redis.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/redis.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/healthcheck.adoc
=====================================================
= Postgresql James Server — healthcheck.properties
:navtitle: healthcheck.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/healthcheck.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/usersrepository.adoc
=====================================================
= Postgresql James Server — usersrepository.xml
:navtitle: usersrepository.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
include::partial$configure/usersrepository.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/opensearch.adoc
=====================================================
= Postgresql James Server — opensearch.properties
:navtitle: opensearch.properties
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
:server-name: Postgresql James server
:package-tag: postgres
include::partial$configure/opensearch.adoc[]
=====================================================
== File: docs/modules/servers/pages/postgres/configure/pop3.adoc
=====================================================
= Postgresql James Server — pop3server.xml
:navtitle: pop3server.xml
:sample-configuration-prefix-url: https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/sample-configuration
:pages-path: postgres
:server-name: Postgresql James server
include::partial$configure/pop3.adoc[]
=====================================================
== File: docs/modules/servers/partials/architecture/implemented-standards.adoc
=====================================================
This page details standards implemented by the {server-name}.
== Message formats
- link:https://datatracker.ietf.org/doc/html/rfc5322[RFC-5322] Internet Message Format (MIME)
- link:https://datatracker.ietf.org/doc/html/rfc2045[RFC-2045] Format of Internet Message Bodies
- link:https://datatracker.ietf.org/doc/html/rfc3464[RFC-3464] An Extensible Message Format for Delivery Status Notifications
- James allow emmit DSNs from the mailet container.
- link:https://datatracker.ietf.org/doc/html/rfc8098[RFC-8098] Message Disposition Notification
== TLS & authentication
- link:https://datatracker.ietf.org/doc/html/rfc2595.html[RFC-2595] TLS for IMAP, POP3, SMTP (StartTLS)
- link:https://datatracker.ietf.org/doc/html/rfc8314.html[RFC-8314] Implicit TLS
- link:https://www.rfc-editor.org/rfc/rfc4959.html[RFC-4959] SASL IR: Initial client response
- link:https://datatracker.ietf.org/doc/html/rfc4616[RFC-4616] SASL plain authentication
- link:https://datatracker.ietf.org/doc/html/rfc8314.html[RFC-7628] SASL for OAUTH
- Implemented for IMAP and SMTP
- Support for OIDC standard only.
== SMTP
- link:https://datatracker.ietf.org/doc/html/rfc5321[RFC-5321] SMTP Protocol
- link:https://datatracker.ietf.org/doc/html/rfc974[RFC-974] MAIL ROUTING AND THE DOMAIN SYSTEM
- link:https://www.rfc-editor.org/rfc/rfc3461[RFC-3461] Simple Mail Transfer Protocol (SMTP) Service Extension for Delivery Status Notifications (DSNs)
- Requires extra configuration.
- link:https://datatracker.ietf.org/doc/html/rfc1652[RFC-1652] SMTP Service Extension for 8bit-MIME transport
- link:https://datatracker.ietf.org/doc/html/rfc1830[RFC-1830] SMTP Service Extensions for Transmission of Large and Binary MIME Messages
- link:https://datatracker.ietf.org/doc/html/rfc1869[RFC-1869] SMTP Service Extensions
- link:https://datatracker.ietf.org/doc/html/rfc1870[RFC-1870] SMTP Service Extension for Message Size Declaration
- link:https://datatracker.ietf.org/doc/html/rfc1891[RFC-1891] SMTP Service Extension for Delivery Status Notifications
- link:https://datatracker.ietf.org/doc/html/rfc1893[RFC-1893] Enhanced Mail System Status Codes
- link:https://datatracker.ietf.org/doc/html/rfc2034[RFC-2034] SMTP Service Extension for Returning Enhanced Error Codes
- link:https://datatracker.ietf.org/doc/html/rfc2142[RFC-2142] Mailbox Names For Common Services, Roles And Functions
- link:https://datatracker.ietf.org/doc/html/rfc2197[RFC-2197] SMTP Service Extension for Command Pipelining
- link:https://datatracker.ietf.org/doc/html/rfc2554[RFC-2554] ESMTP Service Extension for Authentication
- link:https://datatracker.ietf.org/doc/rfc6710/[RFC-6710] SMTP Extension for Message Transfer Priorities
- link:https://datatracker.ietf.org/doc/rfc8689/[RFC-8689] SMTP Require TLS Option
- link:https://datatracker.ietf.org/doc/html/rfc1893[RFC-1893] Enhanced Mail System Status Codes
- link:https://datatracker.ietf.org/doc/html/rfc8461[RFC-8461] SMTP MTA Strict Transport Security (MTA-STS)
== LMTP
- link:https://james.apache.org/server/rfclist/lmtp/rfc2033.txt[RFC-2033] LMTP Local Mail Transfer Protocol
== IMAP
The following IMAP specifications are implemented:
- link:https://datatracker.ietf.org/doc/html/rfc3501.html[RFC-3501] INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
=====================================================
== File: docs/modules/servers/partials/architecture/specialized-instances.adoc
=====================================================
While it is perfectly possible to deploy homogeneous James instances, with the same configuration and thus the same
protocols and the same responsibilities one might want to investigate in 'Specialized instances'.
This deployment topology consists of {server-name} with heterogeneous configurations on top of shared
databases. Groups of James servers will thus handle various protocols and have different responsibilities.
This approach limits cascading failures across protocols and services. Think of *OutOfMemoryErrors*, CPUs starvation,
{backend-name} driver issue, etc.
However, we can't speak of microservices here: all James instances runs the same code, James is still a monolith, and
databases need to be shared across instances.
image::{specialized-instances-file-name}[Example of Specialized instances topology]
We speak of:
- **Front-line servers** serves protocols. James enables to easily turn protocols on and off. Typically, each protocol would
be isolated in its own group of James instances: james-imap, james-jmap, james-smtp, james-webadmin, etc... Refer to
protocols configuration files to learn more.
- **Back-office servers** handles other services like:
- Mail processing.
- Remote delivery.
- Event processing.
- Task execution.
Front-line servers will likely not handle back office responsibilities (but be sure to have back-office servers that do!).
- xref:{xref-base}/configure/mailetcontainer.adoc[Mail processing can be switched off].
- xref:{xref-base}/configure/listeners.adoc[Mailbox event processing can be switched off].
- xref:{xref-base}/configure/rabbitmq.adoc[Task execution can be switched off].
- Remote Delivery service is not started if the RemoteDelivery mailet is not positioned in mailetcontainer.xml.
Of course, the above instances can be collocated at will, to reach some intermediate deployments with fewer
instances to mitigate costs.
=====================================================
== File: docs/modules/servers/partials/architecture/index.adoc
=====================================================
This sections presents the {server-name} architecture.
== Storage
In order to deliver its promises, the {server-name} leverages the following storage strategies:
image::{storage-picture-file-name}[Storage responsibilities for the {server-name}]
* {backend-storage-introduce}
* The *blob store* storage interface is responsible for storing potentially large binary data. For instance
email bodies, headers or attachments. Different technologies can be used: *{backend-name}*, or S3 compatible *Object Storage*
(S3 or Swift).
* *OpenSearch* component empowers full text search on emails. It also enables querying data with unplanned access
patterns. OpenSearch throughput do not however match the one of {backend-name} thus its use is avoided upon regular workloads.
* *RabbitMQ* enables James nodes of a same cluster to collaborate together. It is used to implement connected protocols,
notification patterns as well as distributed resilient work queues and mail queue.
* *Tika* (optional) enables text extraction from attachments, thus improving full text search results.
* *link:https://spamassassin.apache.org/[SpamAssassin] or link:https://rspamd.com/[Rspamd]* (optional) can be used for Spam detection and user feedback is supported.
xref:{xref-base}/architecture/consistency-model.adoc[This page] further details {server-name} consistency model.
== Protocols
The following protocols are supported and can be used to interact with the {server-name}:
* *SMTP*
* *IMAP*
* xref:{xref-base}/operate/webadmin.adoc[WebAdmin] REST Administration API
* *LMTP*
* *POP3*
The following protocols should be considered experimental:
* *JMAP* (RFC-8620 &RFC-8621 specifications and known limitations of the James implementation are defined link:https://github.com/apache/james-project/tree/master/server/protocols/jmap-rfc-8621/doc[here])
* *ManagedSieve*
Read more on xref:{xref-base}/architecture/implemented-standards.adoc[implemented standards].
== Topology
While it is perfectly possible to deploy homogeneous James instances, with the same configuration and thus the same
protocols and the same responsibilities one might want to investigate in
xref:{xref-base}/architecture/specialized-instances.adoc['Specialized instances'].
== Components
This section presents the various components of the {server-name}, providing context about
their interactions, and about their implementations.
=== High level view
=====================================================
== File: docs/modules/servers/partials/architecture/consistency-model.adoc
=====================================================
This page presents the consistency model used by the {server-name} and
points to the tools built around it.
== Data Replication
The {server-name} relies on different storage technologies, all having their own
consistency models.
These data stores replicate data in order to enforce some level of availability.
By consistency, we mean the ability for all replica to hold the same data.
By availability, we mean the ability for a replica to answer a request.
In distributed systems, link:https://en.wikipedia.org/wiki/CAP_theorem[according to the CAP theorem],
as we will necessarily encounter network partitions, then trade-offs need to be made between
consistency and availability.
This section details this trade-off for data stores used by the {server-name}.
=== OpenSearch consistency model
OpenSearch relies on link:https://opensearch.org/docs/latest/tuning-your-cluster/[strong consistency]
with home-grown algorithm.
The 2.x release line, that the distributed server is using, is known to provide faster recovery.
Be aware that data is asynchronously indexed in OpenSearch, changes will be eventually visible.
=== RabbitMQ consistency model
The {server-name} can be set up to rely on a RabbitMQ cluster. All queues can be set up in an high availability
fashion using link:https://www.rabbitmq.com/docs/quorum-queues[quorum queues] - those are replicated queues using the link:https://raft.github.io/[RAFT] consensus protocol and thus are
strongly consistent.
include::{data_replication_extend}[]
== Consistency across data stores
The {server-name} leverages several data stores:
- {backend-name} is used for metadata storage
- OpenSearch for search
- Object Storage for large object storage
Thus the {server-name} also offers mechanisms to enforce consistency across data stores.
=== Write path organisation
The primary data stores are composed of {backend-name} for metadata and Object storage for binary data.
=====================================================
== File: docs/modules/servers/partials/IsOverQuota.adoc
=====================================================
=== IsOverQuota
This matcher will check if the incoming email will make recipients exceed their quotas.
Here is a configuration example:
....
<mailet match="IsOverQuota" class="<any-class>"/>
....
=====================================================
== File: docs/modules/servers/partials/HasHeaderWithPrefix.adoc
=====================================================
=== HasHeaderWithPrefix
Matches emails with headers having a given prefix.
If a header with the given prefix is found in the message (global) all recipients will be matched.
If a header with the given prefix is found per recipient (specific), only these will be matched.
Otherwise, no recipient in returned.
use:
....
<mailet match="HasHeaderWithPrefix=PREFIX" class="..." />
....
=====================================================
== File: docs/modules/servers/partials/ManageSieveMailet.adoc
=====================================================
=== Manage Sieve scripts via a mailet
Each user can manage his SIEVE scripts through the `ManageSieveMailet` mailet.
To use the manage SIEVE mailet :
* You need to create the user sievemanager@DOMAIN ( if you don't, the SMTP server will check the domain, recognize it, and look for an absent local user, and will generate an error ).
* You can send Manage Sieve commands by mail to sievemanager@DOMAIN. Your subject must contain the command. Scripts need to be added as attachments and need the ".sieve" extension.
To activate a script for a user, you need the following combination :
* PUTSCRIPT scriptname
* SETACTIVE scriptname
=====================================================
== File: docs/modules/servers/partials/AddFooter.adoc
=====================================================
=== AddFooter
Takes the message and attaches a footer message to it. Right now, it only
supports simple messages. Needs to have additions to make it support
messages with alternate content types or with attachments.
=====================================================
== File: docs/modules/servers/partials/FileRegexMatcher.adoc
=====================================================
=== FileRegexMatcher
Initializes RegexMatcher with regular expressions from a file.
=====================================================
== File: docs/modules/servers/partials/AtMostPriority.adoc
=====================================================
=== AtMostPriority
Numeric value. The priority of this mail should be at most the specified value to be matched.
Inclusive.
=====================================================
== File: docs/modules/servers/partials/RecipientToLowerCase.adoc
=====================================================
=== RecipientToLowerCase
GenericMailet which convert all Recipients to lowercase.
=====================================================
== File: docs/modules/servers/partials/MailToAllUsers.adoc
=====================================================
=== MailToAllUsers
A mailet that helps to email to all users in the system.
==== Sample configuration
[source,xml]
----
<matcher name="notify-matcher" match="org.apache.james.mailetcontainer.impl.matchers.And">
<matcher match="SenderIs=admin@gov.org"/>
<matcher match="RecipientIs=all@gov.org"/>
</matcher>
<mailet match="notify-matcher" class="MailToAllUsers"/>
----
=====================================================
== File: docs/modules/servers/partials/Expires.adoc
=====================================================
=== Expires
Sanitizes or adds an expiration date to a message, in the form of an `Expires`
header (RFC 4021).
The mailet can force an existing expiration date to be within the bounds
given by `minAge`, `maxAge`, or both. `minAge` specifies the minimum time
the date must lie in the future, while `maxAge` specifies a maximum.
If a message has no expiration date, the mailet can add one according to
the optional `defaultAge` parameter.
All parameter values should be expressed in the following format: `Nunit`.
`N` should be positive. `unit` could be either in the short form
(`h`, `d`, `w`, `y` etc.), or in the long form (`hours`, days`, `weeks`,
`months`, `years`). The default unit is `days`.
Sample configuration:
....
<mailet match="All" class="Expires">
<minAge>12h</minAge>
<defaultAge>7d</defaultAge>
<maxAge>8w</maxAge>
</mailet>
....
By itself the `Expires` header is informational only. But some variants of James
will let you delete expired messages through the
xref:distributed/operate/webadmin.adoc#_administrating_messages[WebAdmin] interface:
....
curl -XDELETE http://ip:port/messages?byExpiresHeader
....
=====================================================
== File: docs/modules/servers/partials/AmqpForwardAttribute.adoc
=====================================================
=== AmqpForwardAttribute
This mailet forwards the attributes values to a AMPQ.
It takes 4 parameters:
* attribute (mandatory): content to be forwarded, expected to be a Map<String, byte[]>
where the byte[] content is issued from a MimeBodyPart.
It is typically generated from the StripAttachment mailet.
* uri (mandatory): AMQP URI defining the server where to send the attachment. High availability is supported with a
coma separated list of uris, whost and credentials are taken from the first URI specified.
* exchange (mandatory): name of the AMQP exchange.
* exchange_type (optional, default to "direct"): type of the exchange. Can be "direct", "fanout", "topic", "headers".
* routing_key (optional, default to empty string): name of the routing key on this exchange.
This mailet will sent the data attached to the mail as an attribute holding a map.
=====================================================
== File: docs/modules/servers/partials/SenderHasMXRecord.adoc
=====================================================
=== SenderHasMXRecord
Enable to validate that the sender of the email address domain name has a MX record advertised through DNS
that matches a supplied list of domains.
This is for instance useful when registering dynamically a public email service and ensure correct configuration
of the domain upon sending and mitigate some identity spoofing attempts on a publicly accessible platform allowing
dynamic domain registration.
Example:
....
<mailet match="SenderHasMXRecord=mx.apache.org" class="any-class"/>
....
=====================================================
== File: docs/modules/servers/partials/LogMessage.adoc
=====================================================
=== LogMessage
Logs Message Headers and/or Body.
If the "passThrough" in confs is true the mail will be left untouched in
the pipe. If false will be destroyed. Default is true.
=====================================================
== File: docs/modules/servers/partials/ClamAVScan.adoc
=====================================================
=== ClamAVScan
Does an antivirus scan check using a ClamAV daemon (CLAMD)
Interacts directly with the daemon using the "stream" method,
which should have the lowest possible overhead.
The CLAMD daemon will typically reside on *localhost*, but could reside on a
different host.
It may also consist on a set of multiple daemons, each residing on a different
server and on different IP number.
In such case a DNS host name with multiple IP addresses (round-robin load sharing)
is supported by the mailet (but on the same port number).
Handles the following init parameters:
* *<debug>*
* *<host>*: the host name of the server where CLAMD runs. It can either be
a machine name, such as
"*java.sun.com*", or a textual representation of its
IP address. If a literal IP address is supplied, only the
validity of the address format is checked.
If the machine name resolves to multiple IP addresses, *round-robin load sharing* will
be used.
The default is *localhost*.
* *<port>*: the port on which CLAMD listens. The default is *3310*.
* *<maxPings>*: the maximum number of connection retries during startup.
If the value is *0* no startup test will be done.
The default is *6*.
* *<pingIntervalMilli>*: the duration e.g. `30s`, `30000ms` (default in the millisecond unit if the unit is not specified)
between each connection retry during startup.
The default is *30000* (30 seconds).
* *<socketTimeout>*: the duration e.g. `5s`, `5000ms` (default in the millisecond unit if the unit is not specified)
for the socket timeout when scanning a message.
The default is *5000* (5 seconds).
* *<streamBufferSize>*: the BufferedOutputStream buffer size to use
writing to the *stream connection*. The default is *8192*.
The actions performed are as follows:
* During initialization:
* Gets all *config.xml* parameters, handling the defaults;
* resolves the *<host>* parameter, creating the round-robin IP list;
* connects to CLAMD at the first IP in the round-robin list, on
the specified *<port>*;
* if unsuccessful, retries every *<pingIntervalMilli>* milliseconds up to
*<maxPings>* times;
* sends a *PING* request;
* waits for a *PONG* answer;
=====================================================
== File: docs/modules/servers/partials/MailAttributesToMimeHeaders.adoc
=====================================================
=== MailAttributesToMimeHeaders
Convert attributes of type Collection<String> to headers
Sample configuration:
....
<mailet match="All" class="MailAttributesToMimeHeaders">
<simplemapping>org.apache.james.attribute1;headerName1</simplemapping>
<simplemapping>org.apache.james.attribute2;headerName2</simplemapping>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/RemoveMimeHeader.adoc
=====================================================
=== RemoveMimeHeader
Remove mime headers from the message (global) and per recipient (specific).
Sample configuration:
....
<mailet match="All" class="RemoveMimeHeader">
<name>header1,header2</name>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/SenderIsNull.adoc
=====================================================
=== SenderIsNull
Matches mails that are sent by a null sender.
....
<mailet match="SenderIsNull" class="<any-class>">
....
=====================================================
== File: docs/modules/servers/partials/SerialiseToHTTP.adoc
=====================================================
=== SerialiseToHTTP
Serialise the email and pass it to an HTTP call
Sample configuration:
....
<mailet match="All" class="SerialiseToHTTP">
<name>URL</name> <value>url where serialised message will be posted</value>
<name>ParameterKey</name> <value>An arbitrary parameter be added to the post</value>
<name>ParameterValue</name> <value>A value for the arbitrary parameter</value>
<name>MessageKeyName</name> <value>Field name for the serialised message</value>
<name>passThrough</name> <value>true or false</value>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/ClassifyBounce.adoc
=====================================================
=== ClassifyBounce
Assesses the message to determine if it was a hard or soft bounce, and if it was a soft bounce, something of its nature..
Sample configuration:
....
<mailet match="All" class="ClassifyBounce">
<headerName>X-MailetHeader</headerName>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/IsSMIMESigned.adoc
=====================================================
=== IsSMIMESigned
Checks if a mail is smime encrypted.
=====================================================
== File: docs/modules/servers/partials/SubjectIs.adoc
=====================================================
=== SubjectIs
Matches mail where the subject is contained in a configurable list.
=====================================================
== File: docs/modules/servers/partials/ToPlainText.adoc
=====================================================
=== ToPlainText
This mailet converts HTML parts of a message into Plain text.
It starts looking for multipart/alternative containing a text/plain and a text/html part
and only keep the text/plain part. Then in a second pass replaces remaining text/html by
their textual content, infered by parsing the HTML content and handling common tags.
Eg:
----
<mailet matcher="All" class="ToPlainText"/>
----
=====================================================
== File: docs/modules/servers/partials/WithStorageDirective.adoc
=====================================================
=== WithStorageDirective
WithStorageDirective position storage directive for the recipients of this email.
These directives are used by <strong>LocalDelivery</strong> mailet when adding the email to the recipients mailboxes.
The following storage directives can be set:
* targetFolderNames: the folders to append the email in. Defaults to none (INBOX). Coma separated list of folder names. Fallback to targetFolderName.
* targetFolderName: the folder to append the email in. Defaults to none (INBOX).
* seen: boolean, whether the message should be automatically marked as seen. Defaults to false.
* important: boolean, whether the message should be automatically marked as important. Defaults to false.
* keywords: set of string, encoded as a string (value are coma separated). IMAP user flags to set for the message. Defaults to none
Example:
....
<mailet match="IsMarkedAsSpam" class="WithStorageDirective">
<targetFolderName>Spam</targetFolderName>
<seen>true</seen>
<important>true</important>
<keywords>keyword1,keyword2</keywords>
</mailet>
....
Alternatively, several target folders can be specified:
....
<mailet match="IsMarkedAsSpam" class="WithStorageDirective">
<targetFolderNames>Important, INBOX</targetFolderNames>
<seen>true</seen>
<important>true</important>
<keywords>keyword1,keyword2</keywords>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/IsSMIMEEncrypted.adoc
=====================================================
=== IsSMIMEEncrypted
Checks if a mail is smime encrypted.
=====================================================
== File: docs/modules/servers/partials/RecipientHasMXRecord.adoc
=====================================================
=== RecipientHasMXRecord
Enable to validate that the recipients of the email address domain name has a MX record advertised through DNS
that matches a supplied list of domains.
This is for instance useful when registering dynamically a public email service and ensure correct configuration
of the domain upon receival and mitigate some identity spoofing attempts on a publicly accessible platform allowing
dynamic domain registration.
Example:
....
<mailet match="RecipientHasMXRecord=mx.apache.org" class="any-class"/>
....
=====================================================
== File: docs/modules/servers/partials/AtMost.adoc
=====================================================
=== AtMost
Checks that a mail did at most X executions on a specific operation.
If no executions have been performed previously for Y attribute, it will be set up.
In the mail, every time the check succeeds, its counter will be incremented by one.
The check fails when the defined X limit is reached.
* X - count of how many times a specific operation is performed
* Y - name of attribute represented for specific operation executions, default value is: *AT_MOST_EXECUTIONS*
The example below will match a mail with at most 3 executions on the mailet
with attribute name *AT_MOST_EXECUTIONS*
....
<mailet match="AtMost=AT_MOST_EXECUTIONS:3" class="<any-class>">
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/ExtractMDNOriginalJMAPMessageId.adoc
=====================================================
=== ExtractMDNOriginalJMAPMessageId
This mailet handles MDN messages and define a header X-JAMES-MDN-JMAP-MESSAGE-ID referencing
the original message (by its Jmap Id) asking for the recipient to send an MDN.
=====================================================
== File: docs/modules/servers/partials/RecipientRewriteTable.adoc
=====================================================
=== RecipientRewriteTable
Mailet which should get used when using RecipientRewriteTable-Store to
implementations for mappings of forwards and aliases.
By specifying an 'errorProcessor' you can specify your logic upon RecipientRewriteTable failures.
Example:
....
<mailet match="All" class="RecipientRewriteTable">
<errorProcessor>rrt-errors</errorProcessor>
</mailet>
....
The *rewriteSenderUponForward* option (default to true) can be used to prevent senders to be rewritten upon forwards in the transport envelope
(JAMES 3.8.0 default behaviour). *WARNING*: Please note that not rewriting the sender will cause issues forwarding emails
from external senders to external addresses as the DKIM and SPF records will not be matching the ones of the sending
domain.
The *forwardAutoSubmittedEmails* option (default to false) can be used to prevent forwarding bounces as such a scenario
can lead to an infinite loop if the forward recipient bounces the email.
=====================================================
== File: docs/modules/servers/partials/RecipientIsLocal.adoc
=====================================================
=== RecipientIsLocal
Matches mail where the recipient is local.
=====================================================
== File: docs/modules/servers/partials/RemoveMimeHeaderByPrefix.adoc
=====================================================
=== RemoveMimeHeader
This mailet removes all of the headers starting with a given prefix in the message (global) and per recipient (specific).
Sample configuration:
....
<mailet match="All" class="RemoveMimeHeaderByPrefix">
<name>X-APPLICATIVE-HEADER-</name>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/ConvertTo7Bit.adoc
=====================================================
=== ConvertTo7Bit
Make sure the message stream is 7bit. Every 8bit part is encoded to
quoted-printable or base64 and the message is saved.
=====================================================
== File: docs/modules/servers/partials/HostIs.adoc
=====================================================
=== HostIs
Matches mail to given hosts.
=====================================================
== File: docs/modules/servers/partials/UserIs.adoc
=====================================================
=== UserIs
Matches mail where the user is contained in a configurable list.
=====================================================
== File: docs/modules/servers/partials/XOriginatingIpInNetwork.adoc
=====================================================
=== XOriginatingIpInNetwork
Checks the first X_ORIGINATING_IP IP address against a comma-delimited list
of IP addresses, domain names or sub-nets.
See AbstractNetworkMatcher for details on how to specify entries.
=====================================================
== File: docs/modules/servers/partials/ICalendarParser.adoc
=====================================================
=== ICalendarParser
This mailet can be combined with the Strip attachment mailet.
The ICS body part byte array is arranged as map then this mailet should look for ICS and parse it
with Ical4J then store it as a mail attribute
Configuration: The mailet contains 2 mandatory attributes
....
<mailet match="All" class="ICalendarParser" >
<sourceAttribute>source.attribute.name</sourceAttribute>
<!-- The attribute which contains output value of StripAttachment mailet -- >
<destAttribute>dest.attribute.name</destAttribute>
<!-- The attribute store the map of Calendar -- >
</mailet >
....
=====================================================
== File: docs/modules/servers/partials/HasPriority.adoc
=====================================================
=== HasPriority
Numeric value. The priority of this mail should be equal to the specified value to be matched.
=====================================================
== File: docs/modules/servers/partials/LocalDelivery.adoc
=====================================================
=== LocalDelivery
Receives a Mail from the Queue and takes care of delivery of the
message to local inboxes.
=====================================================
== File: docs/modules/servers/partials/NESSpamCheck.adoc
=====================================================
=== NESSpamCheck
This is based on a sample filter.cfg for a Netscape Mail Server to stop
spam.
=====================================================
== File: docs/modules/servers/partials/SPF.adoc
=====================================================
=== SPF
Check the ip, sender, helo against SPF. Add the following attributes to the
mail object:
....
org.apache.james.transport.mailets.spf.explanation
org.apache.james.transport.mailets.spf.result
....
Sample configuration:
....
<mailet match="All" class="SPF">
<addHeader>true</addHeader>
<debug>false</debug>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/TextCalendarBodyToAttachment.adoc
=====================================================
=== TextCalendarBodyToAttachment
This mailet converts Content-Type of MimeMessage from text/calendar to mulitpart/mixed
The BodyPart should be retrieved from content of text/calendar with all the same "Content-*" headers from original message
and those "Content-" header are removed from original message
It does not takes any parameter
Sample configuration:
....
<mailet match="All" class="TextCalendarBodyToAttachment"/>
....
=====================================================
== File: docs/modules/servers/partials/WithPriority.adoc
=====================================================
=== WithPriority
This mailet sets the priority of the incoming mail.
Example configuration:
....
<mailet match="All" class="WithPriority">
<priority>7</priority>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/SpamAssassin.adoc
=====================================================
=== SpamAssassin
Sends the message through daemonized SpamAssassin (spamd), visit
http://spamassassin.apache.org[spamassassin.apache.org] for info
on configuration. The header X-Spam-Status is added to every message, this
contains the score and the threshold score for spam (usually 5.0). If the
message exceeds the threshold, the header X-Spam-Flag will be added with the
value of YES. The default host for spamd is localhost and the default port is
783.
....
org.apache.james.spamassassin.status - Holds the status
org.apache.james.spamassassin.flag - Holds the flag
....
Sample Configuration:
....
<mailet notmatch="SenderHostIsLocal" class="SpamAssassin">
<spamdHost>localhost</spamdHost>
<spamdPort>783</spamdPort>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/Forward.adoc
=====================================================
=== Forward
Replaces incoming recipients with those specified, and resends the message
unaltered.
Can be totally replaced by an equivalent usage of {@link Resend} (see below),
simply replacing *<forwardto>* with *<recipients>*.
Sample configuration:
....
<mailet match="All" class="Forward">
<forwardTo>*comma delimited list of email addresses*</forwardTo>
<passThrough>*true or false, default=false*</passThrough>
<fakeDomainCheck>*true or false, default=true*</fakeDomainCheck>
<debug>*true or false, default=false*</debug>
</mailet>
....
The behaviour of this mailet is equivalent to using Resend with the following
configuration:
....
<mailet match="All" class="Resend">
<forwardTo>comma delimited list of email addresses</recipients>
<passThrough>true or false</passThrough>
<fakeDomainCheck>*true or false*</fakeDomainCheck>
<debug>*true or false*</debug>
</mailet>
....
*forwardto* can be used instead of *forwardTo*; such name is kept
for backward compatibility.
=====================================================
== File: docs/modules/servers/partials/RecipientDomainIs.adoc
=====================================================
=== RecipientDomainIs
This will return recipients matching a configured domain.
Sample configuration:
....
<mailet match="RecipientDomainIs=<domain.com>" class="<any-class>"/>
....
=====================================================
== File: docs/modules/servers/partials/SaveMailNameInHeaders .adoc
=====================================================
=== SaveMailNameInHeaders Mailet
Save Mail name into X-JAMES-Mail-Name header.
This allows from mailetcontainer logs to find the mail in user mailbox.
== Configuration
You can configure it simply by adding the following in your `mailetcontainer.xml` file:
....
<mailet match="All" class="SaveMailNameInHeaders"/>
....
=====================================================
== File: docs/modules/servers/partials/SMTPIsAuthNetwork.adoc
=====================================================
=== SMTPIsAuthNetwork
Matches mails that are sent by a client which is allowed to relay.
....
<mailet match="SMTPIsAuthNetwork" class="<any-class>">
....
=====================================================
== File: docs/modules/servers/partials/HasMailAttributeWithValueRegex.adoc
=====================================================
=== HasMailAttributeWithValueRegex
This Matcher determines if the mail contains the attribute specified in the
condition and that attribute matches the supplied regular expression,
it returns all recipients if that is the case.
Sample configuration:
....
<mailet match="HasMailAttributeWithValueRegex=whatever,<regex>" class="<any-class>">
....
Note: as it is not possible to put arbitrary objects in the configuration,
toString() is called on the attribute value, and that is the value matched against.
=====================================================
== File: docs/modules/servers/partials/ReplaceContent.adoc
=====================================================
=== ReplaceContent
Replace text contents
This mailet allow to specific regular expression to replace text in subject and content.
Each expression is defined as: */REGEX_PATTERN/SUBSTITUTION_PATTERN/FLAGS/*
* *REGEX_PATTERN* is a regex used for the match
* *SUBSTITUTION_PATTERN* is a substitution pattern
* *FLAGS* flags supported for the pattern:
** i: case insensitive
** m: multi line
** x: extended (N/A)
** r: repeat - keep matching until a substitution is possible
To identify subject and body pattern we use the tags <subjectPattern> and <bodyPattern>
Rules can be specified in external files.
Lines must be CRLF terminated and lines starting with # are considered comments.
Tags used to include external files are <subjectPatternFile> and
<bodyPatternFile>
If file path starts with # then the file is loaded as a resource.
Use of both files and direct patterns at the same time is allowed.
This mailet allow also to enforce the resulting charset for messages processed, when a replacement has been done.
To do that the tag <charset> must be specified.
NOTE:
Regexp rules must be escaped by regexp escaping rules and applying this 2 additional rules:
- "/" char inside an expression must be prefixed with "\":
e.g: "/\//-//" replaces "/" with "-"
- when the rules are specified using <subjectPattern> or <bodyPattern> and
"/,/" has to be used in a pattern string it must be prefixed with a "\".
E.g: "/\/\/,//" replaces "/" with "," (the rule would be "/\//,//" but the "/,/" must
be escaped.
=====================================================
== File: docs/modules/servers/partials/RemoteAddrInNetwork.adoc
=====================================================
=== RemoteAddrInNetwork
Checks the IP address of the sending server against a comma-delimited list
of IP addresses, domain names or sub-nets.
See AbstractNetworkMatcher for details on how to specify entries.
=====================================================
== File: docs/modules/servers/partials/NotifyPostmaster.adoc
=====================================================
=== NotifyPostmaster
Sends a notification message to the Postmaster.
A sender of the notification message can optionally be specified. If one is
not specified, the postmaster's address will be used.
The "To:" header of the notification message can be set to "unaltered"; if
missing will be set to the postmaster.
A notice text can be specified, and in such case will be inserted into the
notification inline text.
If the notified message has an "error message" set, it will be inserted into
the notification inline text. If the *attachError* init
parameter is set to true, such error message will be attached to the
notification message.
The notified messages are attached in their entirety (headers and content)
and the resulting MIME part type is "message/rfc822".
Supports the *passThrough* init parameter (true if missing).
Sample configuration:
....
<mailet match="All" class="NotifyPostmaster">
<sender>*an address or postmaster or sender or unaltered, default=postmaster*</sender>
<attachError>*true or false, default=false*</attachError>
<message>*notice attached to the original message text (optional)*</message>
<prefix>*optional subject prefix prepended to the original message, default="Re:"*</prefix>
<inline>*default=none*</inline>
<attachment>*default=message*</attachment>
<passThrough>*true or false, default=true*</passThrough>
<fakeDomainCheck>*true or false, default=true*</fakeDomainCheck>
<to>*unaltered (optional, defaults to postmaster)*</to>
<debug>*true or false, default=false*</debug>
</mailet>
....
The behaviour of this mailet is equivalent to using Resend with the following
configuration:
....
<mailet match="All" class="Resend">
<sender>*an address or postmaster or sender or unaltered*</sender>
<attachError>*true or false*</attachError>
<message>*<b>dynamically built</b>*</message>
=====================================================
== File: docs/modules/servers/partials/HeadersToHTTP.adoc
=====================================================
=== HeadersToHTTP
Serialise the email and pass it to an HTTP call
Sample configuration:
....
<mailet match="All" class="HeadersToHTTP">
<url>http://192.168.0.252:3000/alarm</url>
<parameterKey>Test</parameterKey>
<parameterValue>ParameterValue</parameterValue>
<passThrough>true</passThrough>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/CommandForListserv.adoc
=====================================================
=== CommandForListserv
Returns positive if the recipient is a command for a listserv. For example,
if my listserv is james@list.working-dogs.com, this matcher will return true
for james-on@list.working-dogs.com and james-off@list.working-dogs.com.
=====================================================
== File: docs/modules/servers/partials/RandomStoring.adoc
=====================================================
=== RandomStoring
Process messages and randomly assign them to 4 to 8 mailboxes.
=====================================================
== File: docs/modules/servers/partials/PostmasterAlias.adoc
=====================================================
=== PostmasterAlias
Rewrites recipient addresses to make sure email for the postmaster is
always handled. This mailet is silently inserted at the top of the root
spool processor. All recipients mapped to postmaster@<servernames> are
changed to the postmaster account as specified in the server conf.
=====================================================
== File: docs/modules/servers/partials/SMIMECheckSignature.adoc
=====================================================
=== SMIMECheckSignature
Verifies the s/mime signature of a message. The s/mime signing ensure that
the private key owner is the real sender of the message. To be checked by
this mailet the s/mime signature must contain the actual signature, the
signer's certificate and optionally a set of certificate that can be used to
create a chain of trust that starts from the signer's certificate and leads
to a known trusted certificate.
This check is composed by two steps: firstly it's ensured that the signature
is valid, then it's checked if a chain of trust starting from the signer
certificate and that leads to a trusted certificate can be created. The first
check verifies that the message has not been modified after the signature
was put and that the signer's certificate was valid at the time of the
signing. The latter should ensure that the signer is who he declare to be.
The results of the checks perfomed by this mailet are wrote as a mail
attribute which default name is org.apache.james.SMIMECheckSignature (it can
be changed using the mailet parameter *mailAttribute*). After
the check this attribute will contain a list of SMIMESignerInfo object, one
for each message's signer. These objects contain the signer's certificate and
the trust path.
Optionally, specifying the parameter *strip*, the signature of
the message can be stripped after the check. The message will become a
standard message without an attached s/mime signature.
The configuration parameter of this mailet are summerized below. The firsts
defines the location, the format and the password of the keystore containing
the certificates that are considered trusted. Note: only the trusted certificate
entries are read, the key ones are not.
* fileType (default: keystore): type of file that is used to construct keystore object. Possible values: keystore, pem.
If fileType is "keystore". The following configuration parameters would be used:
* keyStoreType (default: jks): Certificate store format . "jks" is the
standard java certificate store format, but pkcs12 is also quite common and
compatible with standard email clients like Outlook Express and Thunderbird.
* keyStoreFileName (default: JAVA_HOME/jre/lib/security/cacert): Certificate
store path.
* keyStorePassword (default: ""): Certificate store password.
If fileType is "pem". The following configuration parameters would be used:
* pemFileName: pem file path.
Other parameters configure the behavior of the mailet:
* strip (default: false): Defines if the s/mime signature of the message
=====================================================
== File: docs/modules/servers/partials/RecoverAttachment.adoc
=====================================================
=== RecoverAttachment
This mailet takes an attachment stored in an attribute and attach it back to
the message
This may be used to place back attachment stripped by StripAttachment and
stored in the attribute
*org.apache.james.mailet.standard.mailets.StripAttachment.saved*
....
<mailet match="All" class="RecoverAttachment" >
<attribute>my.attribute.name</attribute>
</mailet >
....
=====================================================
== File: docs/modules/servers/partials/StripAttachment.adoc
=====================================================
=== StripAttachment
Remove attachments from a Message. Supports simple removal, storing to file,
or storing to mail attributes.
Configuration:
....
<mailet match="All" class="StripAttachment" >
<pattern >.*\.xls </pattern> <!-- The regular expression that must be matched -- >
<!-- notpattern >.*\.xls </notpattern--> <!-- The regular expression that must be matched -- >
<mimeType>text/calendar</mimeType> <!-- The matching mimeType -- >
<directory >c:\temp\james_attach </directory> <!-- The directory to save to -- >
<remove >all </remove> <!-- either "no", "matched", "all" -- >
<!-- attribute>my.attribute.name</attribute -->
</mailet >
....
At least one of pattern, notpattern and mimeType is required.
=====================================================
== File: docs/modules/servers/partials/SubAddressing.adoc
=====================================================
=== SubAddressing
SubAddressing positions a storage directive for the folder this email will be delivered in if the following criteria are met:
* the sender has requested the storage directive by sending the mail to <strong> `recipient+folder@domain` </strong> instead of just `recipient@domain` ;
* the folder <strong>exists</strong> and the recipient has <strong>allowed</strong> the sender to send a mail to that specific folder.
These directives are used by <strong>LocalDelivery</strong> mailet when adding the email to the recipients mailboxes.
The storage directive is recognized when a specific character or character sequence is present in the local part of the recipient address. <strong>By default, it is "+"</strong>.
If the sender is not allowed to send a mail to the specified folder, then the mail is delivered in the recipient's inbox.
Likewise, if the storage directive is empty or absent, the mail will simply be delivered in the recipient's inbox.
Thus,
* a mail sent to `recipient+folder@domain` will be delivered to recipient's folder `folder` if allowed ;
* a mail sent to `recipient+my-super-folder@domain` will be delivered to recipient's folder `my-super-folder` if allowed ;
* a mail sent to `recipient@domain` or `recipient+@domain` will be delivered to recipient's inbox.
Any user can position rights for other users and for its different folders. They may create whitelists or blacklists, for one or several folders.
In the case where the sender is unknown, the mail will be delivered in the specified folder only if the recipient has allowed everyone for that folder.
=====================================================
== File: docs/modules/servers/partials/DKIMSign.adoc
=====================================================
=== DKIMSign
This mailet sign a message using the DKIM protocol
If the privateKey is encoded using a password then you can pass
the password as privateKeyPassword parameter.
Sample configuration with inlined private key:
....
<mailet match="All" class="DKIMSign">
<signatureTemplate>v=1; s=selector; d=example.com; h=from:to:received:received; a=rsa-sha256; bh=; b=;</signatureTemplate>
<privateKey>
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDYDaYKXzwVYwqWbLhmuJ66aTAN8wmDR+rfHE8HfnkSOax0oIoT
M5zquZrTLo30870YMfYzxwfB6j/Nz3QdwrUD/t0YMYJiUKyWJnCKfZXHJBJ+yfRH
r7oW+UW3cVo9CG2bBfIxsInwYe175g9UjyntJpWueqdEIo1c2bhv9Mp66QIDAQAB
AoGBAI8XcwnZi0Sq5N89wF+gFNhnREFo3rsJDaCY8iqHdA5DDlnr3abb/yhipw0I
/1HlgC6fIG2oexXOXFWl+USgqRt1kTt9jXhVFExg8mNko2UelAwFtsl8CRjVcYQO
cedeH/WM/mXjg2wUqqZenBmlKlD6vNb70jFJeVaDJ/7n7j8BAkEA9NkH2D4Zgj/I
OAVYccZYH74+VgO0e7VkUjQk9wtJ2j6cGqJ6Pfj0roVIMUWzoBb8YfErR8l6JnVQ
bfy83gJeiQJBAOHk3ow7JjAn8XuOyZx24KcTaYWKUkAQfRWYDFFOYQF4KV9xLSEt
ycY0kjsdxGKDudWcsATllFzXDCQF6DTNIWECQEA52ePwTjKrVnLTfCLEG4OgHKvl
Zud4amthwDyJWoMEH2ChNB2je1N4JLrABOE+hk+OuoKnKAKEjWd8f3Jg/rkCQHj8
mQmogHqYWikgP/FSZl518jV48Tao3iXbqvU9Mo2T6yzYNCCqIoDLFWseNVnCTZ0Q
b+IfiEf1UeZVV5o4J+ECQDatNnS3V9qYUKjj/krNRD/U0+7eh8S2ylLqD3RlSn9K
tYGRMgAtUXtiOEizBH6bd/orzI9V9sw8yBz+ZqIH25Q=
-----END RSA PRIVATE KEY-----
</privateKey>
</mailet>
....
Sample configuration with file-provided private key:
....
<mailet match="All" class="DKIMSign">
<signatureTemplate>v=1; s=selector; d=example.com; h=from:to:received:received; a=rsa-sha256; bh=; b=;</signatureTemplate>
<privateKeyFilepath>dkim-signing.pem</privateKeyFilepath>
</mailet>
....
By default the mailet assume that Javamail will convert LF to CRLF when sending
so will compute the hash using converted newlines. If you don't want this
behaviour then set forceCRLF attribute to false.
=====================================================
== File: docs/modules/servers/partials/TooManyRecipients.adoc
=====================================================
=== TooManyRecipients
This matcher matches emails that have too many recipients.
The example below will reject any email with more than 5 recipients
....
<mailet match="TooManyRecipients=5" class="<any-class>">
....
=====================================================
== File: docs/modules/servers/partials/SplitMail.adoc
=====================================================
=== SplitMail
A mailet to split email with too much recipients. The first batch is sent directly, while the remaining batches are sent asynchronously.
The batch size can be configured via the <b>batchSize</b> parameter (optional, defaults to 100).
==== Sample configuration
[source,xml]
----
<mailet match="notify-matcher" class="SplitMail">
<batchSize>100</batchSize>
</mailet>
----
=====================================================
== File: docs/modules/servers/partials/RemoveAllMailAttributes.adoc
=====================================================
=== RemoveAllMailAttributes
This mailet sets removes all attributes set on the Mail instance
Sample configuration:
....
<mailet match="All" class="RemoveAllMailAttributes"/>
....
=====================================================
== File: docs/modules/servers/partials/ICALToHeader.adoc
=====================================================
=== ICALToHeader
ICALToHeader takes a Map of filenames to ICAL4J calendars, will pick the first Calendar,
and add it to the headers of the e-mail.
The following headers will be added : X_MEETING_UID, X_MEETING_METHOD, X_MEETING_RECURRENCE_ID, X_MEETING_SEQUENCE,
X_MEETING_DTSTAMP
The only configuration parameter for this mailet is the attribute the ICAL4J Calendar map should be attached to,
named *attribute*.
Configuration example :
....
<mailet match=??? class=ICALToHeader>
<attribute>icalendars</attribute>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/SanitizeMimeMessageId.adoc
=====================================================
=== SanitizeMimeMessageId Mailet
Some email clients, such as Outlook for Android, may send emails **without a `Message-ID` header**.
== Why is this needed?
The absence of the `Message-ID` header can cause emails to be rejected by downstream mail servers,
as required by RFC 5322 specifications. For example, Gmail rejects messages without this header with
an error like the following:
550-5.7.1 [IP] Messages missing a valid Message-ID header are not
550-5.7.1 accepted. For more information, go to
550-5.7.1 https://support.google.com/mail/?p=RfcMessageNonCompliant and review
550 5.7.1 RFC 5322 specifications.
To mitigate this, the `SanitizeMimeMessageId` mailet will automatically add a `Message-ID` to emails **that lack one**.
== Configuration
You can configure it simply by adding the following in your `mailetcontainer.xml` file:
....
<mailet match="All" class="SanitizeMimeMessageId"/>
....
== Behavior
- If a `Message-ID` header already exists: nothing is done.
- If the header is missing: a new one is generated and added.
=====================================================
== File: docs/modules/servers/partials/HasMimeTypeAnySubPart.adoc
=====================================================
=== HasMimeTypeAnySubPart
This matcher checks if the content type matches.
This matcher walks down the mime tree and will look up at all the mime parts of this message.
use:
....
<mailet match="HasMimeTypeAnySubPart=text/plain,text/html" class="..." />
....
=====================================================
== File: docs/modules/servers/partials/AttachmentFileNameIs.adoc
=====================================================
=== AttachmentFileNameIs
Checks if at least one attachment has a file name which matches any
element of a comma-separated or space-separated list of file name masks.
Syntax: *match="AttachmentFileNameIs=[-d] [-z] masks"*
The match is case insensitive.
File name masks may start with a wildcard '\*'.
Multiple file name masks can be specified, e.g.: '\*.scr,\*.bat'.
If '*-d*' is coded, some debug info will be logged.
If '*-z*' is coded, the check will be non-recursively applied
to the contents of any attached '*.zip' file.
=====================================================
== File: docs/modules/servers/partials/MimeDecodingMailet.adoc
=====================================================
=== MailAttributesToMimeHeaders
This mailet replace the mail attribute map of key to MimePart
by a map of key to the MimePart content (as bytes).
It takes only one parameter:
* attribute (mandatory): mime content to be decoded, expected to be a Map<String, byte[]>
Then all this map attribute values will be replaced by their content.
=====================================================
== File: docs/modules/servers/partials/IsX509CertificateSubject.adoc
=====================================================
=== IsX509CertificateSubject
Checks if the subject of a X509Certificate contains the supplied string. The
certificate is read from the specified mail attribute.
If the specified attribute contains more than one certificate the matcher matches if at
least one of the certificates contains the given string.
Configuration string:
* mailAttribute;string
=====================================================
== File: docs/modules/servers/partials/Bounce.adoc
=====================================================
=== Bounce
Generates a response to the reverse-path address. Note that this is different
than a mail-client's reply, which would use the Reply-To or From header.
Bounced messages are attached in their entirety (headers and content) and the
resulting MIME part type is "message/rfc822".
The reverse-path and the Return-Path header of the response is set to "null"
("<>"), meaning that no reply should be sent.
A sender of the notification message can optionally be specified. If one is
not specified, the postmaster's address will be used.
A notice text can be specified, and in such case will be inserted into the
notification inline text.
If the notified message has an "error message" set, it will be inserted into
the notification inline text. If the *attachError* init
parameter is set to true, such error message will be attached to the
notification message.
Supports the *passThrough* init parameter (true if missing).
Sample configuration:
....
<mailet match="All" class="Bounce">
<sender>*an address or postmaster or sender or unaltered, default=postmaster*</sender>
<attachError>*true or false, default=false*</attachError>
<message>*notice attached to the original message text (optional)*</message>
<prefix>*optional subject prefix prepended to the original message*</prefix>
<inline>*default=none*</inline>
<attachment>*default=message*</attachment>
<passThrough>*true or false, default=true*</passThrough>
<fakeDomainCheck>*true or false, default=true*</fakeDomainCheck>
<debug>*true or false, default=false*</debug>
</mailet>
....
The behaviour of this mailet is equivalent to using Resend with the following
configuration:
....
<mailet match="All" class="Resend">
<sender>*an address or postmaster or sender or unaltered*</sender>
<attachError>*true or false*</attachError>
<message>**dynamically built**</message>
<prefix>*a string*</prefix>
=====================================================
== File: docs/modules/servers/partials/RecipientCountExceeds.adoc
=====================================================
=== RecipientCountExceeds
Matches mail with more recipients than the configured limit.
Eg:
....
<mailet match="RecipientCountExceeds=36"; class="Null"\>
....
=====================================================
== File: docs/modules/servers/partials/WrapText.adoc
=====================================================
=== WrapText
Convert a message to format=flowed
=====================================================
== File: docs/modules/servers/partials/DKIMVerify.adoc
=====================================================
=== DKIMVerify
This mailet verify a message using the DKIM protocol
Sample configuration:
....
<mailet match="All" class="DKIMVerify">
</mailet>
....
By default the mailet assume that Javamail will use LF instead of CRLF
so it will verify the hash using converted newlines. If you don't want this
behaviour then set forceCRLF attribute to false.
=====================================================
== File: docs/modules/servers/partials/IsSenderInRRTLoop.adoc
=====================================================
=== IsSenderInRRTLoop
This matcher allow you to know if the sender of an email is part of a RRT loop.
This is useful when bouncing upon RRT execution issues: we don't want to create a bouncing loop
(as the execution of that RRT loop will fail).
Example:
....
<mailet match="IsSenderInRRTLoop" class="<any-class>"/>
....
=====================================================
== File: docs/modules/servers/partials/SetMimeHeader.adoc
=====================================================
=== SetMimeHeader
Adds a specified header and value to the message.
Sample configuration:
....
<mailet match="All" class="SetMimeHeader">
<name>X-CUSTOM-HEADER</nam>
<value>whatever</value>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/Redirect.adoc
=====================================================
=== Redirect
A mailet providing configurable redirection services.
Can produce listserver, forward and notify behaviour, with the original
message intact, attached, appended or left out altogether.
It differs from Resend because (i) some defaults are different,
notably for the following parameters: *<recipients>*,
*<to>*, *<reversePath>* and *<inline>*; (ii)
because it allows the use of the *<static>* parameter;.
Use <code>Resend</code> if you need full control, <code>Redirect</code> if
the more automatic behaviour of some parameters is appropriate.
This built in functionality is controlled by the configuration as laid out
below. In the table please note that the parameters controlling message
headers accept the <b>"unaltered"</b> value, whose meaning is to
keep the associated header unchanged and, unless stated differently,
corresponds to the assumed default if the parameter is missing.
The configuration parameters are:
.Redirect parameters
|===
| Property name | explanation
| recipients
| A comma delimited list of addresses for recipients of this message; it will
use the "to" list if not specified, and "unaltered" if
none of the lists is specified.
These addresses will only appear in the To: header if no "to" list
is supplied.
Such addresses can contain "full names", like *Mr. John D. Smith
<john.smith@xyz.com>*.
The list can include constants "sender", "from",
"replyTo", "postmaster", "reversePath",
"recipients", "to", "null" and
"unaltered"; "replyTo" uses the ReplyTo header if
available, otherwise the From header if available, otherwise the Sender
header if available, otherwise the return-path; "from" is made
equivalent to "sender", and "to" is made equivalent to
"recipients"; "null" is ignored.
| to
| A comma delimited list of addresses to appear in the To: header; the email
=====================================================
== File: docs/modules/servers/partials/RelayLimit.adoc
=====================================================
=== RelayLimit
Matches mail which has been relayed more than a given number of times.
=====================================================
== File: docs/modules/servers/partials/DeconnectionRight.adoc
=====================================================
=== DeconnectionRight
Mailet to avoid people to receive emails outside working hour.
Working hours are defined by a starting time and an end time, on weekdays from monday to friday.
Emails received outside working hours are to be delayed to next working hours.
Example:
....xml
<mailet match="all" class="DeconnectionRight">
<zoneId>Europe/Paris</zoneId>
<workDayStart>07:00:00</workDayStart>
<workDayEnd>20:00:00</metricName>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/ICALToJsonAttribute.adoc
=====================================================
=== ICALToJsonAttribute
ICALToJsonAttribute takes a map of ICAL4J objects attached as attribute, and
output the map of corresponding json bytes as an other attribute, with unique String keys.
The JSON contains the following fields :
* *ical* : the raw ical string, in UTF-8
* *sender* : the sender of the mail (compulsory, mail without sender will be discarded)
* *recipient* : the recipient of the mail. If the mail have several recipients, each recipient will have its own JSON.
* *uid* : the UID of the ical (optional)
* *sequence* : the sequence of the ical (optional)
* *dtstamp* : the date stamp of the ical (optional)
* *method* : the method of the ical (optional)
* *recurrence-id* : the recurrence-id of the ical (optional)
Example are included in test call ICalToJsonAttributeTest.
Configuration example :
....
<mailet match=??? class=ICALToJsonAttribute>
<sourceAttribute>icalendars</sourceAttribute>
<destinationAttribute>icalendarJson</destinationAttribute>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/SenderIs.adoc
=====================================================
=== SenderIs
This matcher matches a specific sender, passed as a condition to this matcher.
The example below will match mail with a sender being user@domain
....
<mailet match="SenderIs=user@domain" class="<any-class>">
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/TooManyLines.adoc
=====================================================
=== TooManyLines
This matcher matches emails that have too many lines. This allows better rejection of emails when, for instance, MIME4J
is configured with a limited number of lines.
<p>The example below will match mail with more than 10000 lines</p>
....
<mailet match="TooManyLines=10000" class="<any-class>"/>
....
=====================================================
== File: docs/modules/servers/partials/IsSingleRecipient.adoc
=====================================================
=== IsSingleRecipient
Matches mail where the number of recipients is exactly one.
=====================================================
== File: docs/modules/servers/partials/ToRepository.adoc
=====================================================
=== ToRepository
Stores incoming Mail in the specified Repository.
If the "passThrough" in conf is true the mail will be returned untouched in
the pipe and may be processed by additional mailets. If false will be destroyed.
=====================================================
== File: docs/modules/servers/partials/SenderInFakeDomain.adoc
=====================================================
=== SenderInFakeDomain
Does a DNS lookup (MX and A/CNAME records) on the sender's domain. If there
are no entries, the domain is considered fake and the match is successful.
=====================================================
== File: docs/modules/servers/partials/Null.adoc
=====================================================
=== Null
Simplest Mailet which destroys any incoming messages by setting their state to GHOST.
This effectively stops all processing of this mail.
=====================================================
== File: docs/modules/servers/partials/IsRemoteDeliveryPermanentError.adoc
=====================================================
=== IsRemoteDeliveryPermanentError
Checks if the mail has a permanent remote delivery failure attribute
Example:
....
<mailet match="IsRemoteDeliveryPermanentError" class="<any-class>"/>
....
=====================================================
== File: docs/modules/servers/partials/RemoteDelivery.adoc
=====================================================
=== RemoteDelivery
The RemoteDelivery mailet delivers messages to a remote SMTP server able to deliver or forward messages to their final
destination.
The remote SMTP server through which each mail is delivered is resolved using MX lookup for each message destination
unless the *<gateway/>* parameter is set. The *<gateway/>* parameter enables the
definition of one or more gateway servers through which all messages are sent.
If an attempt to deliver a message fails, a redelivery attempt is scheduled according to the scheme defined
by the *<delayTime/>* parameter, retrying up to the limit defined
by the *<maxRetries/>* parameter. When the retry limit is exceeded, delivery failure is processed
according to the setting of the *<bounceProcessor/>* parameter.
These are the parameters that control the operation of the RemoteDelivery mailet:
* *outgoing* (required) - a String containing the name of the queue that will hold messages being processed by this mailet.
* *bind* (optional) - a String describing the local IP address to which the mailet should be bound while delivering
emails. This tag is useful for multihomed machines. Default is to bind to the default local address of the machine.<br>
Note: The same IP address must be used for all of those RemoteDelivery instances where you explicitly supply a bind address.
* *delayTime* (optional) a String containing a comma separated list of patterns defining the number of and delays between delivery
attempts. The pattern is *[attempts\*]delay [unit]* where:
** *attempts* (optional) - an Integer for the number of delivery attempts. Default is 1.
** *delay* (required) - a Long for the delay between attempts.
** *unit* (optional) - a String with the value of one of 'msec', 'sec', 'minute', 'hour', or 'day'. Default is msec.
Default is one attempt after 6 hours, which if explicitly declared would be written as *<delayTime>1 6 hour</delayTime>*
* *maxRetries* (optional) an Integer for the number of times an attempt is made to deliver a particular mail.
Default is the greater of five and the sum of the attempts for each *<delayTime/>* specified.
* *maxDnsProblemRetries* (optional) - an Integer for the number of times to retry if DNS problems for a domain occur.
Default is 0.
* *timeout* (optional) - an Integer for the Socket I/O timeout in milliseconds. Default is 180000
* *connectionTimeout* (optional) - an Integer for the Socket connection timeout in milliseconds. Default is 60000
* *bounceProcessor* (optional) - a String containing the name of the mailet processor to pass messages that cannot
be delivered to for DSN bounce processing. Default is to send a traditional message containing the bounce details.
* *onSuccess* (optional) - if specified, this processor is called for each email successfully sent to remote third parties.
When using bounceProcessor or onSuccess processors, take special care of error handling (see onMailetException and onMatchException)
to avoid confusing situations. Also remember that on partial delivery, both processors will be used: *onSuccess* with successfull recipients,
and *bounceProcessor* with failed recipients.
* *startTLS* (optional) - a Boolean (true/false) indicating whether the STARTTLS command (if supported by the server)
to switch the connection to a TLS-protected connection before issuing any login commands. Default is false.
* *sslEnable* (optional) - a Boolean (true/false) indicating whether to use SSL to connect and use the SSL port unless
explicitly overridden. Default is false. Setting up to true will result in delivery attempts in SMTPS on port 465 with a fallback
to SMTP on port 25. The trust-store if needed can be customized by *-Djavax.net.ssl.trustStore=/root/conf/keystore*.
* *verifyServerIdentity* (optional) - a Boolean (true/false) indicating whether to match the remote server name against its certificate on TLS connections. Default is true. Disabling this runs the risk of someone spoofing a legitimate server and intercepting mails, but may be necessary to contact servers that have strange certificates, no DNS entries, are reachable by IP address only, and similar edge cases.
* *gateway* (optional) - a String containing a comma separated list of patterns defining the gateway servers to be used to
=====================================================
== File: docs/modules/servers/partials/ServerTime.adoc
=====================================================
=== ServerTime
Returns the current time for the mail server.
Sample configuration:
....
<mailet match="RecipientIs=time@cadenza.lokitech.com" class="ServerTime"/>
....
=====================================================
== File: docs/modules/servers/partials/AddSubjectPrefix.adoc
=====================================================
=== AddSubjectPrefix
Add an prefix (tag) to the subject of a message <br>
Sample Configuration:
....
<mailet match="RecipientIs=robot@james.apache.org" class="TagMessage">
<subjectPrefix>[robot]</subjectPrefix>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/RemoveMailAttribute.adoc
=====================================================
=== RemoveMailAttribute
This mailet sets attributes on the Mail.
Sample configuration:
....
<mailet match="All" class="RemoveMailAttribute">
<name>attribute_name1</name>
<name>attribute_name2</name>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/Resend.adoc
=====================================================
=== Resend
A mailet providing configurable redirection services.
Can produce listserver, forward and notify behaviour, with the original
message intact, attached, appended or left out altogether. Can be used as a
replacement to {@link Redirect}, having more consistent defaults, and new
options available.
Use <code>Resend</code> if you need full control, <code>Redirect</code> if
the more automatic behaviour of some parameters is appropriate.
This built in functionality is controlled by the configuration as laid out
below. In the table please note that the parameters controlling message
headers accept the <b>"unaltered"</b> value, whose meaning is to
keep the associated header unchanged and, unless stated differently,
corresponds to the assumed default if the parameter is missing.
The configuration parameters are:
.Resend properties
|===
| Property name | explanation
| recipients
| A comma delimited list of addresses for recipients of this message.
Such addresses can contain "full names", like *Mr. John D. Smith
<john.smith@xyz.com>*.
The list can include constants "sender", "from",
"replyTo", "postmaster", "reversePath",
"recipients", "to", "null" and
"unaltered"; "replyTo" uses the ReplyTo header if
available, otherwise the From header if available, otherwise the Sender
header if available, otherwise the return-path; "from" is made
equivalent to "sender", and "to" is made equivalent to
"recipients"; "null" is ignored. Default:
"unaltered".
| to
| A comma delimited list of addresses to appear in the To: header.
Such addresses can contain "full names", like *Mr. John D. Smith
<john.smith@xyz.com>*.
The list can include constants "sender", "from",
"replyTo", "postmaster", "reversePath",
"recipients", "to", "null" and
"unaltered"; "from" uses the From header if available,
otherwise the Sender header if available, otherwise the return-path;
=====================================================
== File: docs/modules/servers/partials/HasException.adoc
=====================================================
=== HasException
This Matcher determines if the exception specified in the condition or
the subclasses of it has occurred during the processing of the mail.
If true, all recipients are returned, else null. This matcher presupposes
that the exception has been captured as a Mail attribute
org.apache.mailet.Mail#MAILET_ERROR_ATTRIBUTE_NAME in the process.
Sample configuration:
....
<mailet match="HasException=org.apache.james.managesieve.api.ManageSieveException" class="<any-class>">
....
=====================================================
== File: docs/modules/servers/partials/UnwrapText.adoc
=====================================================
=== UnwrapText
Remove (best effort to) the hardcoded wrapping from a message.
If the text is "format=flowed" then deflows the text. Otherwise it forces a dewrap of the text.
Parameters:
* quotewidth - when we try to dewrap e quoted text it helps knowing the original
with, so we can reconstruct "wrapped wraps" created by multiple wrappings by clients with
different original width or simply to the add of the heading ">" that increase the line
length.
The value should be "WIDTH+X" if the original length is known, "-X" otherwise.
In the latter case the length of the longer line will be used.
X is the tollerance needed for the quoting chars: if the original width is known the suggested
value for X is 2 (because of "> " prefix), otherwise it is suggested to increase it to a value
like 10 (-10)
In summary, if the original wrap is known (for example 76, for flowed messages) *quotewidth = 78*
Otherwise *quotewidth = -10*
=====================================================
== File: docs/modules/servers/partials/ToSenderDomainRepository.adoc
=====================================================
=== ToSenderDomainRepository
Stores incoming Mail in a repository defined by the sender's domain.<br>
Supported configuration parameters:
* "urlPrefix" mandatory: defines the prefix for the per sender's domain repository. For example for the value
'cassandra://var/mail/sendersRepositories/', a mail sent by 'user@james.org' will be stored
in 'cassandra://var/mail/sendersRepositories/james.org'.
* "passThrough" optional, defaults to false. If true, the processing of the mail continues. If false it stops.
* "allowRepositoryCreation" optional, defaults to true. If true, non existing repository will be created. In case of
misconfiguration, this might lead to arbitrary repository creation. If false, the incoming mails will be stored only
in already existing repository. If not existing, the email will be dropped with an appropriate log warning (leading
to potential data loss). In case, you want to create a repository manually, make a http PUT request to
/mailRepositories/encodedUrlOfTheRepository from web admin api.
For example http://ip:port/mailRepositories/file%3A%2F%2FmailRepo
Example:
....
<mailet match="All" class="ToSenderDomainRepository">
<urlPrefix>cassandra://var/mail/sendersRepositories/</urlPrefix>
<passThrough>false</passThrough>
<allowRepositoryCreation>true</allowRepositoryCreation>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/VacationMailet.adoc
=====================================================
=== VacationMailet
This mailet uses https://jmap.io/spec-mail.html#vacation-response[JMAP VacationResponse] and
sends back a vacation notice to the sender if needed.
The `useUserAsMailFrom` property can be set to true to use the user as the transport sender instead of `MAIL FROM: <>`.
=====================================================
== File: docs/modules/servers/partials/HasAttachment.adoc
=====================================================
=== HasAttachment
Checks whether this message has an attachment
=====================================================
== File: docs/modules/servers/partials/operate/metrics.adoc
=====================================================
James relies on the https://metrics.dropwizard.io/4.1.2/manual/core.html[Dropwizard metric library]
for keeping track of some core metrics of James.
Such metrics are made available via JMX. You can connect for instance using VisualVM and the associated
mbean plugins.
We also support displaying them via https://grafana.com/[Grafana]. Two methods can be used to back grafana display:
- Prometheus metric collection - Data are exposed on a HTTP endpoint for Prometheus scrape.
- ElasticSearch metric collection - This method is depreciated and will be removed in next version.
== Expose metrics for Prometheus collection
To enable James metrics, add ``extensions.routes`` to xref:{xref-base}/operate/webadmin.adoc[webadmin.properties] file:
```
extensions.routes=org.apache.james.webadmin.dropwizard.MetricsRoutes
```
Connect to james-admin url to test the result:
....
http://james-admin-url/metrics
....
== Configure Prometheus Data source
You need to set up https://prometheus.io/docs/prometheus/latest/getting_started/[Prometheus] first to scrape James metrics. +
Add Apache James WebAdmin Url or IP address to ``prometheus.yaml`` configuration file:
....
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'WebAdmin url Example'
scrape_interval: 5s
metrics_path: /metrics
static_configs:
- targets: ['james-webamin-url']
- job_name: 'WebAdmin IP Example'
scrape_interval: 5s
metrics_path: /metrics
static_configs:
- targets: ['192.168.100.10:8000']
....
== Connect Prometheus to Grafana
You can do this either from https://prometheus.io/docs/visualization/grafana/[Grafana UI] or from a https://grafana.com/docs/grafana/latest/datasources/prometheus/[configuration file]. +
The following `docker-compose.yaml` will help you install a simple Prometheus/ Grafana stack :
```
version: '3'
#Metric monitoring
grafana:
=====================================================
== File: docs/modules/servers/partials/operate/security.adoc
=====================================================
This document aims as summarizing threats, security best practices as well as recommendations.
== Threats
Operating an email server exposes you to the following threats:
- Spammers might attempt to use your servers to send their spam messages on their behalf. We speak of
*open relay*. In addition to the resources consumed being an open relay will affect the trust other mail
installations have in you, and thus will cause legitimate traffic to be rejected.
- Emails mostly consist of private data, which shall only be accessed by their legitimate user. Failure
to do so might result in *information disclosure*.
- *Email forgery*. An attacker might craft an email on the behalf of legitimate users.
- Email protocols allow user to authenticate and thus can be used as *oracles* to guess user passwords.
- *Spam*. Non legitimate traffic can be a real burden to your users.
- *Phishing*: Crafted emails that tricks the user into doing unintended actions.
- *Viruses*: An attacker sends an attachment that contains an exploit that could run if a user opens it.
- *Denial of service*: A small request may result in a very large response and require considerable work on the server...
- *Denial of service*: A malicious JMAP client may use the JMAP push subscription to attempt to flood a third party
server with requests, creating a denial-of-service attack and masking the attacker’s true identity.
- *Dictionary Harvest Attacks*: An attacker can rely on SMTP command reply code to know if a user exists or not. This
can be used to obtain the list of local users and later use those address as targets for other attacks.
== Best practices
The following sections ranks best practices.
=== Best practices: Must
- 1. Configure James in order not to be an xref:{xref-base}/configure/smtp.adoc#_about_open_relays[open relay]. This should be the
case with the default configuration.
Be sure in xref:{xref-base}/configure/smtp.adoc[smtpserver.xml] to activate the following options: `verifyIdentity`.
We then recommend to manually test your installation in order to ensure that:
- Unauthenticated SMTP users cannot send mails to external email addresses (they are not relayed)
- Unauthenticated SMTP users can send mails to internal email addresses
- Unauthenticated SMTP users cannot use local addresses in their mail from, and send emails both locally and to distant targets.
- 2. Avoid *STARTTLS* usage and favor SSL. Upgrade from a non encrypted channel into an encrypted channel is an opportunity
for additional vulnerabilities. This is easily prevented by requiring SSL connection upfront. link:https://nostarttls.secvuln.info/[Read more...]
Please note that STARTTLS is still beneficial in the context of email relaying, which happens on SMTP port 25 unencrypted,
and enable opportunistic encryption upgrades that would not overwise be possible. We recommend keeping STARTTLS activated
for SMTP port 25.
- 3. Use SSL for xref:{xref-base}/configure/mailets.adoc#_remotedelivery[remote delivery] whenever you are using a gateway relaying SMTP server.
- 4. Rely on an external identity service, dedicated to user credential storage. James supports xref:{xref-base}/configure/usersrepository.adoc#_configuring_a_ldap[LDAP]. If you are
forced to store users in James be sure to choose `PBKDF2` as a hashing algorithm. Also, delays on authentication failures
=====================================================
== File: docs/modules/servers/partials/operate/migrating.adoc
=====================================================
This page presents how operators can migrate your user mailbox and mails into the {server-name} in order to adopt it.
We assume you have a xref:{xref-base}/configure/index.adoc[well configured] running {server-name}
at hand. We also assume existing mails are hosted on a tier mail server which can be accessed via IMAP and supports
impersonation.
First, you want to create the domains handled by your server, as well as the users you will be hosting. This operation
can be performed via WebAdmin or the CLI.
* Using webadmin :
** Read xref:{xref-base}/operate/webadmin.adoc#_create_a_domain[this section] for creating domains
** Read xref:{xref-base}/operate/webadmin.adoc#_create_a_user[this section] for creating users
* Using the CLI :
** Read xref:{xref-base}/operate/cli.adoc#_manage_domains[this section] for creating domains
** Read xref:{xref-base}/operate/cli.adoc#_managing_users[this section] for creating users
Second, you want to allow an administrator account of your {server-name} to have write access on other user mailboxes.
This can be setted up this the *administratorId* configuration option of the xref:{xref-base}/configure/usersrepository.adoc[usersrepository.xml] configuration file.
Then, it is time to run https://github.com/imapsync/imapsync[imapsync] script to copy the emails from the previous mail server
into the {server-name}. Here is an example migrating a single user, relying on impersonation:
....
imapsync --host1 previous.server.domain.tld \
--user1 user@domain.tld --authuser1 adminOldServer@domain.tld \
--proxyauth1 --password1 passwordOfTheOldAdmin \
--host2 distributed.james.domain.tld \
--user2 use1@domain.tld \
--authuser2 adminNewServer@domain.tld --proxyauth2 \
--password2 passwordOfTheNewAdmin
....
=====================================================
== File: docs/modules/servers/partials/operate/guide.adoc
=====================================================
This guide aims to be an entry-point to the James documentation for user
managing a {server-name}.
It includes:
* Simple architecture explanations
* Propose some diagnostics for some common issues
* Present procedures that can be set up to address these issues
In order to not duplicate information, existing documentation will be
linked.
Please note that this product is under active development, should be
considered experimental and thus targets advanced users.
== Basic Monitoring
A toolbox is available to help an administrator diagnose issues:
* xref:{xref-base}/operate/logging.adoc[Structured logging into Kibana]
* xref:{xref-base}/operate/metrics.adoc[Metrics graphs into Grafana]
* xref:{xref-base}/operate/webadmin.adoc#_healthcheck[WebAdmin HealthChecks]
== Mail processing
Currently, an administrator can monitor mail processing failure through `ERROR` log
review. We also recommend watching in Kibana INFO logs using the
`org.apache.james.transport.mailets.ToProcessor` value as their `logger`. Metrics about
mail repository size, and the corresponding Grafana boards are yet to be contributed.
Furthermore, given the default mailet container configuration, we recommend monitoring
`{mailet-repository-path-prefix}://var/mail/error/` to be empty.
WebAdmin exposes all utilities for
xref:{xref-base}/operate/webadmin.adoc#_reprocessing_mails_from_a_mail_repository[reprocessing
all mails in a mail repository] or
xref:{xref-base}/operate/webadmin.adoc#_reprocessing_a_specific_mail_from_a_mail_repository[reprocessing
a single mail in a mail repository].
In order to prevent unbounded processing that could consume unbounded resources. We can provide a CRON with `limit` parameter.
Ex: 10 reprocessed per minute
Note that it only support the reprocessing all mails.
Also, one can decide to
xref:{xref-base}/operate/webadmin.adoc#_removing_all_mails_from_a_mail_repository[delete
all the mails of a mail repository] or
xref:{xref-base}/operate/webadmin.adoc#_removing_a_mail_from_a_mail_repository[delete
a single mail of a mail repository].
Performance of mail processing can be monitored via the
=====================================================
== File: docs/modules/servers/partials/operate/performanceChecklist.adoc
=====================================================
This guide aims to help James operators refine their James configuration and set up to achieve better performance.
== Database setup
{backend-name}, OpenSearch, RabbitMQ is a large topic in itself that we do not intend to cover here. Yet, here are some
very basic recommendation that are always beneficial to keep in mind.
We recommend:
* Running {backend-name}, OpenSearch on commodity hardware with attached SSD. SAN disks are known to cause performance
issues for these technologies. HDD disks are to be banned for these performance related applications.
* We recommend getting an Object Storage SaaS offering that suites your needs. Most generalist S3 offers will suite
James needs.
* We do provide a guide on xref:[Database benchmarks] that can help identify and fix issues.
== James configuration
=== JMAP protocol
If you are not using JMAP, disabling it will avoid you the cost of populating related projections and thus is recommended.
Within `jmap.properties`:
....
enabled=false
....
We recommend turning on EmailQueryView as it enables resolution of mailbox listing against {backend-name}, thus unlocking massive
stability / performance gains. Within `jmap.properties`:
....
view.email.query.enabled=true
....
=== IMAP / SMTP
We recommend against resolving client connection DNS names. This behaviour can be disabled via a system property within
`jvm.properties`:
....
james.protocols.mdc.hostname=false
....
Concurrent IMAP request count is the critical setting. In `imapServer.xml`:
....
<concurrentRequests>200</concurrentRequests>
<maxQueueSize>4096</maxQueueSize>
....
Other recommendation includes avoiding unecessary work upon IMAP IDLE, not starting dedicated BOSS threads:
=====================================================
== File: docs/modules/servers/partials/operate/webadmin.adoc
=====================================================
The web administration supports for now the CRUD operations on the domains, the users, their mailboxes and their quotas,
managing mail repositories, performing {backend-name} migrations, and much more, as described in the following sections.
*WARNING*: This API allow authentication only via the use of JWT. If not
configured with JWT, an administrator should ensure an attacker can not
use this API.
By the way, some endpoints are not filtered by authentication. Those endpoints are not related to data stored in James,
for example: Swagger documentation & James health checks.
In case of any error, the system will return an error message which is
json format like this:
....
{
statusCode: <error_code>,
type: <error_type>,
message: <the_error_message>
cause: <the_detail_message_from_throwable>
}
....
Also be aware that, in case things go wrong, all endpoints might return
a 500 internal error (with a JSON body formatted as exposed above). To
avoid information duplication, this is omitted on endpoint specific
documentation.
Finally, please note that in case of a malformed URL the 400 bad request
response will contain an HTML body.
== HealthCheck
=== Check all components
This endpoint is simple for now and is just returning the http status
code corresponding to the state of checks (see below). The user has to
check in the logs in order to have more information about failing
checks.
....
curl -XGET http://ip:port/healthcheck
....
Will return a list of healthChecks execution result, with an aggregated
result:
....
{
"status": "healthy",
"checks": [
=====================================================
== File: docs/modules/servers/partials/operate/logging.adoc
=====================================================
We recommend to closely monitoring *ERROR* and *WARNING* logs. Those
logs should be considered not normal.
If you encounter some suspicious logs:
* If you have any doubt about the log being caused by a bug in James
source code, please reach us via the bug tracker, the user mailing list or our Gitter channel (see our
http://james.apache.org/#second[community page])
* They can be due to insufficient performance from tier applications (eg
{backend-name} timeouts). In such case we advise you to conduct a close
review of performances at the tier level.
Leveraging filters in Kibana discover view can help to filter out
''already known'' frequently occurring logs.
When reporting ERROR or WARNING logs, consider adding the full logs, and
related data (eg the raw content of a mail triggering an issue) to the
bug report in order to ease resolution.
== Logging configuration
{server-name} uses link:http://logback.qos.ch/[logback] as a logging library
and link:https://docs.fluentbit.io/[FluentBit] as centralize logging.
Information about logback configuration can be found
link:http://logback.qos.ch/manual/configuration.html[here].
It is possible to configure a logback appender to expose structured logging
as JSON using logback's `JsonEncoder` like in the following example:
```
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.JsonEncoder">
<withFormattedMessage>true</withFormattedMessage>
</encoder>
<immediateFlush>false</immediateFlush>
</appender>
```
Note that dedicated formatters can be added to your docker containers :
- Add the corresponding JAR onto the `/root/libs` folder of docker container
- Add the JAR path onto `/root/jib-classpath-file` for it to be loaded on the classpath by the JAVA runtime.
=====================================================
== File: docs/modules/servers/partials/operate/index.adoc
=====================================================
The following pages detail how to operate the {server-name}.
Once you have a {server-name} up and running you then need to ensure it operates correctly and has a decent performance.
You may also need to perform some operation maintenance or recover from incidents. This section covers
these topics.
Read more about xref:{xref-base}/operate/logging.adoc[Logging].
The xref:{xref-base}/operate/webadmin.adoc[WebAdmin Restfull administration API] is the
recommended way to operate the {server-name}. It allows managing and interacting with most
server components.
The xref:{xref-base}/operate/cli.adoc[Command line interface] allows to interact with some
server components. However it relies on JMX technologies and its use is discouraged.
The xref:{xref-base}/operate/metrics.adoc[metrics] allows to build latency and throughput
graphs, that can be visualized, for instance in *Grafana*.
We did put together a xref:{xref-base}/operate/guide.adoc[detailed guide] for
{server-tag} James operators. We also propose a xref:{xref-base}/operate/performanceChecklist.adoc[performance checklist].
We also included a guide for xref:{xref-base}/operate/migrating.adoc[migrating existing data] into the {server-tag} server.
Additional functional visualisations can be set up using OpenSearch dashboards as documented in link:https://github.com/apache/james-project/tree/master/examples/opensearch-dahsboard[this example].
=====================================================
== File: docs/modules/servers/partials/operate/cli.adoc
=====================================================
The {server-name} is packed with a command line client.
To run this command line client simply execute:
....
java -jar /root/james-cli.jar -h 127.0.0.1 -p 9999 COMMAND
....
The following document will explain you which are the available options
for *COMMAND*.
Note: the above command line before *COMMAND* will be documented as _\{cli}_.
== Manage Domains
Domains represent the domain names handled by your server.
You can add a domain:
....
{cli} AddDomain domain.tld
....
You can remove a domain:
....
{cli} RemoveDomain domain.tld
....
(Note: associated users are not removed automatically)
Check if a domain is handled:
....
{cli} ContainsDomain domain.tld
....
And list your domains:
....
{cli} ListDomains
....
== Managing users
Note: the following commands are explained with virtual hosting turned
on.
Users are accounts on the mail server. James can maintain mailboxes for
them.
=====================================================
== File: docs/modules/servers/partials/All.adoc
=====================================================
=== All
Matches all mail.
=====================================================
== File: docs/modules/servers/partials/benchmark/db-benchmark.adoc
=====================================================
This document provides basic performance of {server-name} databases, benchmark methodologies as a basis for a James administrator who
can test and evaluate if his {server-name} databases are performing well.
It includes:
* A sample deployment topology
* Propose benchmark methodology and base performance for each database. This aims to help operators to quickly identify
performance issues and compliance of their databases.
== Sample deployment topology
We deploy a sample topology of {server-name} with these following databases:
- OpenDistro 1.13.1 as search engine: 3 nodes, each node has 8 OVH vCores CPU and 30 GB memory limit (OVH b2-30 instance).
- RabbitMQ 3.8.17 as message queue: 3 Kubernetes pods, each pod has 0.6 OVH vCore CPU and 2 GB memory limit.
- OVH Swift S3 as an object storage
- {backend-database-extend-sample}
With the above system, our email service operates stably with valuable performance.
For a more details, it can handle a load throughput up to about 1000 JMAP requests per second with 99th percentile latency is 400ms.
== Benchmark methodologies and base performances
We are willing to share the benchmark methodologies and the result to you as a reference to evaluate your {server-name}' performance.
Other evaluation methods are welcome, as long as your databases exhibit similar or even better performance than ours.
It is up to your business needs. If your databases shows results that fall far from our baseline performance, there's a good chance that
there are problems with your system, and you need to check it out thoroughly.
=== Benchmark OpenSearch
==== Benchmark methodology
===== Benchmark tool
We use https://github.com/opensearch-project/opensearch-benchmark[opensearch-benchmark] - an official OpenSearch benchmarking tool.
It provides the following features:
- Automatically create OpenSearch clusters, stress tests them, and delete them.
- Manage stress testing data and solutions by OpenSearch version.
- Present stress testing data in a comprehensive way, allowing you to compare and analyze the data of different stress tests and store the data on a particular OpenSearch instance for secondary analysis.
- Collect Java Virtual Machine (JVM) details, such as memory and garbage collection (GC) data, to locate performance problems.
===== How to benchmark
To install the `opensearch-benchmark` tool, you need Python 3.8+ including pip3 first, then run:
```
python3 -m pip install opensearch-benchmark
```
If you have any trouble or need more detailed instructions, please look in the https://github.com/opensearch-project/OpenSearch-Benchmark/blob/main/DEVELOPER_GUIDE.md[detailed installation guide].
Let's see which workloads (simulation profiles) that `opensearch-benchmark` provides: ```opensearch-benchmark list worloads```.
For our James use case, we are interested in ```pmc``` workload: ```Full-text benchmark with academic papers from PMC```.
=====================================================
== File: docs/modules/servers/partials/benchmark/james-benchmark.adoc
=====================================================
This document provides benchmark methodology and basic performance of {server-name} as a basis for a James administrator who
can test and evaluate if his {server-name} is performing well.
It includes:
* A sample {server-name} deployment topology
* Propose benchmark methodology
* Sample performance results
This aims to help operators quickly identify performance issues.
== Sample deployment topology
We deploy a sample topology of {server-name} with these following components:
- {server-name}: 3 Kubernetes pods, each pod has 2 OVH vCore CPU and 4 GB memory limit.
- OpenDistro 1.13.1 as search engine: 3 nodes, each node has 8 OVH vCores CPU and 30 GB memory limit (OVH b2-30 instance).
- RabbitMQ 3.8.17 as message queue: 3 Kubernetes pods, each pod has 0.6 OVH vCore CPU and 2 GB memory limit.
- OVH Swift S3 as an object storage
- {backend-database-extend-sample}
== Benchmark methodology and base performance
include::{benchmark_prepare_extend}[]
=== Provision testing data
Before doing the performance test, you should make sure you have a {server-name} up and running with some provisioned testing
data so that it is representative of reality.
Please follow these steps to provision testing data:
* Prepare James with a custom `mailetcontainer.xml` having Random storing mailet. This help us easily setting a good amount of
provisioned emails.
Add this under transport processor
[source,xml]
----
<mailet match="All" class="RandomStoring"/>
----
* Modify {provision_file_url}[provision.sh]
upon your need (number of users, mailboxes, emails to be provisioned).
Currently, this script provisions 10 users, 15 mailboxes and hundreds of emails for example. Normally to make the performance test representative, you
should provision thousands of users, thousands of mailboxes and millions of emails.
* Add the permission to execute the script:
----
=====================================================
== File: docs/modules/servers/partials/benchmark/index.adoc
=====================================================
The following pages detail how to do performance testing for the {server-name} also its database.
Once you have a {server-name} up and running you then need to ensure it operates correctly and has a decent performance.
You may need to do performance testings periodically to make sure your James performs well.
We introduced xref:{xref-base}/benchmark/james-benchmark.adoc[tools and base benchmark result for {server-name}] also xref:{xref-base}/benchmark/db-benchmark.adoc[James database's base performance and how to benchmark them]
to cover this topic.
=====================================================
== File: docs/modules/servers/partials/CommandListservMatcher.adoc
=====================================================
=== CommandListservMatcher
CommandListservMatcher is the matcher that pairs with the CommandListservManager
It checks to see if the request is intended for the ListservManager, but doesn't guarantee that it is a valid command.
To configure, insert this into the config.xml inside of the root processor block.
....
<mailet match="CommandListservMatcher=announce@localhost" class="CommandListservManager">
...
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/Sieve.adoc
=====================================================
=== Sieve
Execute Sieve scripts for incoming emails, and set the result of the execution as attributes of the mail
=====================================================
== File: docs/modules/servers/partials/ToProcessor.adoc
=====================================================
=== ToProcessor
This mailet redirects the mail to the named processor
Sample configuration:
....
<mailet match="All" class="ToProcessor">
<processor>spam</processor>
<notice>Notice attached to the message (optional)</notice>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/MailAttributesListToMimeHeaders.adoc
=====================================================
=== MailAttributesListToMimeHeaders
Convert attributes of type Collection<String> to headers
Sample configuration:
....
<mailet match="All" class="MailAttributesToMimeHeaders">
<simplemapping>org.apache.james.attribute1;headerName1</simplemapping>
<simplemapping>org.apache.james.attribute2;headerName2</simplemapping>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/FetchedFrom.adoc
=====================================================
=== FetchedFrom
Matches mail with a header set by Fetchpop X-fetched-from
fetchpop sets X-fetched-by to the "name" of the fetchpop fetch task.
This is used to match all mail fetched from a specific pop account.
Once the condition is met the header is stripped from the message to prevent looping if
the mail is re-inserted into the spool.
=====================================================
== File: docs/modules/servers/partials/HostIsLocal.adoc
=====================================================
=== HostIsLocal
Matches mail to Domains which are local
=====================================================
== File: docs/modules/servers/partials/SetMailAttribute.adoc
=====================================================
=== SetMailAttribute
This mailet sets attributes on the Mail.
Sample configuration:
....
<mailet match="All" class="SetMailAttribute">
<name1>value1</name1>
<name2>value2</name2>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/HasMimeTypeParameter.adoc
=====================================================
=== HasMimeTypeParameter
This matcher checks if the content type parameters matches.
use:
....
<mailet match="HasMimeTypeParameter=report-type=disposition-notification,report-type=other" class="..." />
....
=====================================================
== File: docs/modules/servers/partials/RemoteAddrNotInNetwork.adoc
=====================================================
=== RemoteAddrInNetwork
Checks the IP address of the sending server against a comma-delimited list
of IP addresses, domain names or sub-nets.
See AbstractNetworkMatcher for details on how to specify entries.
=====================================================
== File: docs/modules/servers/partials/AtLeastPriority.adoc
=====================================================
=== AtLeastPriority
Numeric value. The priority of this mail should be at least the specified value to be matched.
Inclusive.
=====================================================
== File: docs/modules/servers/partials/ContactExtractor.adoc
=====================================================
=== ContactExtractor
Collects the sender and the recipients of a message and store them as JSON in a
specified message attribute.
Here is the JSON format:
....
{
"userEmail" : "sender@james.org",
"emails" : [ "to@james.org", "cc@james.org" ]
}
....
Sample configuration:
....
<mailet match="All" class="ContactExtractor">
<attribute>ExtractedContacts</attribute>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/Sign.adoc
=====================================================
=== Sign
Puts a *server-side* SMIME signature on a message.
It is a concrete subclass of Sign, with very few modifications to it,
to specialize for SMIME.
Handles the following init parameters:
* <keyHolderClass>: Sets the class of the KeyHolder object that will handle the cryptography functions,
for example org.apache.james.security.SMIMEKeyHolder for SMIME.
* <debug>: if *true* some useful information is logged.
The default is *false*.
* <keyStoreFileName>: the {@link java.security.KeyStore} full file name.
* <keyStorePassword>: the *KeyStore* password.
If given, it is used to check the integrity of the keystore data,
otherwise, if null, the integrity of the keystore is not checked.
* <keyAlias>: the alias name to use to search the Key using {@link java.security.KeyStore#getKey}.
The default is to look for the first and only alias in the keystore;
if zero or more than one is found a {@link java.security.KeyStoreException} is thrown.
* <keyAliasPassword>: the alias password. The default is to use the *KeyStore* password.
At least one of the passwords must be provided.
* <keyStoreType>: the type of the keystore. The default will use {@link java.security.KeyStore#getDefaultType}.
* <postmasterSigns>: if *true* the message will be signed even if the sender is the Postmaster. The default is *true*.
* <rebuildFrom>: If *true* will modify the "From:" header. The default is *true*.
* <signerName>: the name of the signer to be shown in the explanation text. The default is to use the "CN="
property of the signing certificate.
* <explanationText>. There is a default explanation string template in English, displaying
also all the headers of the original message.
=====================================================
== File: docs/modules/servers/partials/HasMailAttributeWithValue.adoc
=====================================================
=== HasMailAttributeWithValue
This Matcher determines if the mail contains the attribute specified in
the condition and if the value answered when the method toString() is
invoked on the attribute is equal to the String value specified in the
condition. If both tests are true, all recipients are returned, else null.
Notes:
The current matcher implementation expects a single String value to match
on. This matcher requires two values, the attribute name and attribute
value. This requires some implicit rules to govern how the single value
supplied to the matcher is parsed into two values.
* In the match condition, the split between the attribute name and the
attribute value is made at the first comma. Attribute names that include
a comma will parse incorrectly and therefore are not supported by this
matcher.
* Leading and trailing spaces are removed from both the attribute name and
attribute value specified in the condition and the tested attribute value in
the mail prior to matching. Therefore, "abc" , " abc", "abc " and " abc "
are considered equivalent.
* To test for an empty string, do not specify an attribute value after the
comma.
Sample configuration:
....
<mailet match="HasMailAttributeWithValue=name, value" class="<any-class>">
....
=====================================================
== File: docs/modules/servers/partials/DSNBounce.adoc
=====================================================
=== DSNBounce
Generates a Delivery Status Notification (DSN) Note that this is different
than a mail-client's reply, which would use the Reply-To or From header.
Bounced messages are attached in their entirety (headers and content) and the
resulting MIME part type is "message/rfc822".
The reverse-path and the Return-Path header of the response is set to "null"
("<>"), meaning that no reply should be sent.
A sender of the notification message can optionally be specified. If one is
not specified, the postmaster's address will be used.
Supports the <code>passThrough</code> init parameter (true if missing).
Sample configuration:
....
<mailet match="All" class="DSNBounce">
<sender>*an address or postmaster or sender or unaltered, default=postmaster*</sender>
<prefix>*optional subject prefix prepended to the original message*</prefix>
<attachment>*message, heads or none, default=message*</attachment>
<messageString>*the message sent in the bounce, the first occurrence of the pattern [machine] is replaced with the name of the executing machine, default=Hi. This is the James mail server at [machine] ... *</messageString>
<passThrough>*true or false, default=true*</passThrough>
<debug>*true or false, default=false*</debug>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/RemoteDeliveryFailedWithSMTPCode.adoc
=====================================================
=== RemoteDeliveryFailedWithSMTPCode
Checks the SMTP error code attached to remote delivery failures
=====================================================
== File: docs/modules/servers/partials/FoldLongLines.adoc
=====================================================
=== FoldLongLines
This mailet fold (wrap) any header lines of the mail that exceed the maximum number of characters. This sanitizing of EML message will prevent downstream server from applying it, and prevent them to break the DKIM signature positioned by James.
It takes only one parameter:
* maxCharacters: maximum number of characters. Default to 998 (This line limit is defined in RFC5322).
=====================================================
== File: docs/modules/servers/partials/HasMailAttribute.adoc
=====================================================
=== HasMailAttribute
This Matcher determines if the mail contains the attribute specified in the
condition, and returns all recipients if it is the case.
Sample configuration:
....
<mailet match="HasMailAttribute=whatever" class="<any-class>">
....
=====================================================
== File: docs/modules/servers/partials/ToSenderFolder.adoc
=====================================================
=== ToSenderFolder
Receives a Mail from the Queue and takes care to deliver the message
to a defined folder of the sender.
You have to define the folder name of the sender.
The flag 'consume' will tell is the mail will be further
processed by the upcoming processor mailets, or not.
....
<mailet match="RecipientIsLocal" class="ToSenderFolder">
<folder> *Sent Items* </folder>
<consume> *false* </consume>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/SenderHostIsLocal.adoc
=====================================================
=== SenderHostIsLocal
Checks the sender's displayed domain name against a the hosts serviced by
this mail context.
Sample Configuration:
....
<mailet match="SenderHostIsLocal" class="SpamAssassin"> </mailet>
....
=====================================================
== File: docs/modules/servers/partials/CompareNumericHeaderValue.adoc
=====================================================
=== CompareNumericHeaderValue
Matches mails containing a header with a numeric value whose comparison with the specified value is true.
If the header is missing in the message, there will be *no match*
Configuration string: The headerName, a comparison operator and the numeric headerValue
to compare with, *space or tab delimited*.
The comparison operators are: *<, <=, ==, >=, >*;
another set of operators is: *LT, LE, EQ, GE, GT*.
Also the following operators are accepted: *=<, =, =>*.
Example:
....
<mailet match="CompareNumericHeaderValue=X-MessageIsSpamProbability > 0.9" class="ToProcessor">
<processor> spam </processor>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/RecipientIsRegex.adoc
=====================================================
=== RecipientIsRegex
Matches recipients whose address matches a regular expression.
Is equivalent to the SenderIsRegex matcher but matching on the recipient.
Configuration string: a regular expression.
....
<mailet match="RecipientIsRegex=<regular-expression>" class="<any-class>">
....
The example below will match any recipient in the format user@log.anything
....
<mailet match="RecipientIsRegex=(.*)@log\.(.*)" class="<any-class>">
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/NotifySender.adoc
=====================================================
=== NotifySender
Sends a notification message to the sender of a message.
A sender of the notification message can optionally be specified. If one is
not specified, the postmaster's address will be used.
The "To:" header of the notification message can be set to "unaltered"; if
missing will be set to the sender of the notified message.
A notice text can be specified, and in such case will be inserted into the
notification inline text.
If the notified message has an "error message" set, it will be inserted into
the notification inline text. If the *attachError* init
parameter is set to true, such error message will be attached to the
notification message.
The notified messages are attached in their entirety (headers and content)
and the resulting MIME part type is "message/rfc822".
Supports the *passThrough* init parameter (true if missing).
Sample configuration:
....
<mailet match="All" class="NotifySender">
<sender>*an address or postmaster or sender or unaltered, default=postmaster*</sender>
<attachError>*true or false, default=false*</attachError>
<prefix>*optional subject prefix prepended to the original message*</prefix>
<inline>default=none*</inline>
<attachment>default=message*</attachment>
<passThrough>*true or false, default=true*</passThrough>
<fakeDomainCheck>*true or false, default=true*</fakeDomainCheck>
<to>*unaltered or sender or from(optional, defaults to sender)*</to>
<debug>*true or false, default=false*</debug>
</mailet>
....
The behaviour of this mailet is equivalent to using Resend with the following
configuration:
....
<mailet match="All" class="Resend">
<sender>*an address or postmaster or sender or unaltered*</sender>
<attachError>*true or false*</attachError>
<message>*<b>dynamically built</b>*</message>
<prefix>*a string*</prefix>
<passThrough>true</passThrough>
<fakeDomainCheck>*true or false*</fakeDomainCheck>
=====================================================
== File: docs/modules/servers/partials/LDAPMatchers.adoc
=====================================================
= LDAP matchers for Apache James
This project is an extension for Apache James that allows configuring conditions based on LDAP content within Apache
James mailetcontainer.
Those include:
- LDAP conditions based on attributes of the recipients
- LDAP conditions based on attributes of the sender
- LDAP groups of the recipients
- LDAP groups of the sender
Support is planned for LDAP groups both for sender and recipients.
== Set up
Build this project. For the root of the repository:
....bash
mvn clean install -DskipTests --am --pl :james-server-mailet-ldap
....
Then copy the JAR located in `/target` into the `extensions-jars` folder of your Apache James installation.
== Configuration
The LDAP settings are reused from the `usersrepository.xml` configuration file.
Then LDAP matchers can be configured within `mailetcontainer.xml`.
For instance:
....xml
<!-- Matches recipients that have the following attribute with the specified value-->
<mailet matcher="HasLDAPAttribute=description:blocked" class="Null">
</mailet>
....
or
....xml
<!-- Matches sender that have the following attribute with the specified value-->
<mailet matcher="SenderHasLDAPAttribute=description:blocked" class="Null">
</mailet>
....
or
=====================================================
== File: docs/modules/servers/partials/SMIMESign.adoc
=====================================================
=== SMIMESign
Puts a *server-side* signature on a message.
It is a concrete subclass of AbstractSign, with very few modifications to it.
A text file with an explanation text is attached to the original message,
and the resulting message with all its attachments is signed.
* The resulting appearance of the message is almost unchanged: only an extra attachment
* and the signature are added.
The kind of signature depends on the value of the <keyHolderClass> init parameter.
Handles the following init parameters:
* <keyHolderClass>: Sets the class of the KeyHolder object that will handle the cryptography functions,
for example org.apache.james.security.SMIMEKeyHolder for SMIME.
* <debug>: if *true* some useful information is logged.
The default is *false*.
* <keyStoreFileName>: the {@link java.security.KeyStore} full file name.
* <keyStorePassword>: the *KeyStore* password.
If given, it is used to check the integrity of the keystore data,
otherwise, if null, the integrity of the keystore is not checked.
* <keyAlias>: the alias name to use to search the Key using {@link java.security.KeyStore#getKey}.
The default is to look for the first and only alias in the keystore;
if zero or more than one is found a {@link java.security.KeyStoreException} is thrown.
* <keyAliasPassword>: the alias password. The default is to use the *KeyStore* password.
At least one of the passwords must be provided.
* <keyStoreType>: the type of the keystore. The default will use {@link java.security.KeyStore#getDefaultType}.
* <postmasterSigns>: if *true* the message will be signed even if the sender is the Postmaster. The default is *true*.
* <rebuildFrom>: If *true* will modify the "From:" header. The default is *true*.
* <signerName>: the name of the signer to be shown in the explanation text. The default is to use the "CN="
property of the signing certificate.
* <explanationText>. There is a default explanation string template in English, displaying
also all the headers of the original message.
=====================================================
== File: docs/modules/servers/partials/SubjectStartsWith.adoc
=====================================================
=== SubjectIs
Matches mail where the subject starts with a given phrase.
=====================================================
== File: docs/modules/servers/partials/SenderDomainIs.adoc
=====================================================
=== SenderDomainIs
SenderDomainIs will look at the envelope sender's domain. If equal to
configured value, then all recipients will be returned. Otherwise an empty
list will be returned.
Sample configuration:
....
<mailet match="SenderDomainIs=<domain.com>" class="<any-class>">
....
=====================================================
== File: docs/modules/servers/partials/IsRemoteDeliveryTemporaryError.adoc
=====================================================
=== IsRemoteDeliveryPermanentError
Checks if the mail has a temporary remote delivery failure attribute set to false (meaning it's a temporary error)
Example:
....
<mailet match="IsRemoteDeliveryTemporaryError" class="<any-class>"/>
....
=====================================================
== File: docs/modules/servers/partials/SentByMailet.adoc
=====================================================
=== SentByMailet
This matcher matches email sent automatically by mailets.
....
<mailet match="SentByMailetAny" class="<any-class>"/>
....
This matcher allows you, for instance, to enable/disable routing automatically generated emails out of your server.
=====================================================
== File: docs/modules/servers/partials/DLP.adoc
=====================================================
=== DLP
Enable evaluation of incoming emails against DLP rules (Data Leak Prevention) attached to the sender domains.
Example:
----
<mailet match="DLP" class="ToRepository">
<repositoryPath>/var/mail/quarantine</repositoryPath>
</mailet>
----
Rules can be administered via xref:distributed/operate/webadmin.adoc#_administrating_dlp_configuration[webAdmin].
Only available on top of Memory and Cassandra storages.
Additionally a cache can be added to reduce queries done to the underlying database.
Example:
----
<mailet match="DLP=cache:60s" class="ToRepository">
<repositoryPath>/var/mail/quarantine</repositoryPath>
</mailet>
----
Will query the DLP rules for a given domain only every 60 seconds.
Please note that querying DLP rules on top of Cassandra relies on Event sourcing, involves reading a potentially
large event stream and involves some SERIAL reads (LightWeight transactions) for each processed emails.
Efficiency of the cache can be tracked with the following metrics:
- `dlp.cache.hitRate`
- `dlp.cache.missCount`
- `dlp.cache.hitCount`
- `dlp.cache.size`
=====================================================
== File: docs/modules/servers/partials/SenderIsLocal.adoc
=====================================================
=== SenderIsLocal
Matches mail where the sender is local.
=====================================================
== File: docs/modules/servers/partials/RecipientIs.adoc
=====================================================
=== RecipientIs
This matcher matches a specific recipient (in the envelope of the mail), passed as a condition to
this matcher.
The example below will match only the recipient user@domain
....
<mailet match="RecipientIs=user@domain" class="<any-class>">
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/FromRepository.adoc
=====================================================
=== FromRepository
Re-spools Mail found in the specified Repository.
....
<mailet match="RecipientIs=respool@localhost" class="FromRepository">
<repositoryPath> *repository path* </repositoryPath>
<processor> *target processor* </repositoryPath>
<delete&t; [true|<b>false</b>] </delete>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/InSpammerBlacklist.adoc
=====================================================
=== InSpammerBlacklist
Checks the network IP address of the sending server against a blacklist of
spammers. There are 3 lists that support this...
* *blackholes.mail-abuse.org*: Rejected - see http://www.mail-abuse.org/rbl/
* *dialups.mail-abuse.org*: Dialup - see http://www.mail-abuse.org/dul/
* *relays.mail-abuse.org*: Open spam relay - see http://www.mail-abuse.org/rss/
Example:
....
<mailet match="InSpammerBlacklist=blackholes.mail-abuse.org." class="ToProcessor">
<processor>spam</processor>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/SenderHostIs.adoc
=====================================================
=== SenderHostIs
Checks the sender's displayed domain name against a supplied list.
Sample configuration:
....
<mailet match="SenderHostIs=domain.com" class="ToProcessor">
<processor> spam </processor>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/IsMarkedAsSpam.adoc
=====================================================
=== IsMarkedAsSpam
Matches mails having a *org.apache.james.spamassassin.status* per recipient header with a *Yes* value.
As an example, here is a part of a mailet pipeline which can be used in your LocalDelivery processor:
....
<!-- SpamAssassing mailets pipeline -->
<mailet match="RecipientIsLocal" class="SpamAssassin">
<spamdHost>spamassassin</spamdHost>
<spamdPort>783</spamdPort>
</mailet>
<mailet match="IsMarkedAsSpam" class="WithStorageDirective">
<targetFolderName>Spam</targetFolderName>
</mailet>
<!-- End of SpamAssassing mailets pipeline -->
....
In order to use this with `rspamd`, we need to declare a condition for the matcher
and drop the Rspamd jar (*third-party/rspamd*) in the James extensions-jars folder.
Eg: With the recipient header for Rspamd being *org.apache.james.rspamd.status*,
then the configuration would be:
....
<!-- Rspamd mailets pipeline -->
<mailet match="IsMarkedAsSpam=org.apache.james.rspamd.status" class="WithStorageDirective">
<targetFolderName>Spam</targetFolderName>
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/SMTPAuthSuccessful.adoc
=====================================================
=== SMTPAuthSuccessful
Matches mails that are sent by an SMTP authenticated user.
If the sender was not authenticated it will not match.
....
<mailet match="SMTPAuthSuccessful" class="<any-class>">
....
=====================================================
== File: docs/modules/servers/partials/HasHeader.adoc
=====================================================
=== HasHeader
use:
....
<mailet match="HasHeader={<header>[=value]}+" class="..." />
....
This matcher checks if the header is present in the message (global) and per recipient (specific). It complements the AddHeader mailet.
=====================================================
== File: docs/modules/servers/partials/HasMimeType.adoc
=====================================================
=== HasMimeType
This matcher checks if the content type matches.
This matcher does not walk down the mime tree and stops at the top level mime part.
use:
....
<mailet match="HasMimeType=text/plain,text/html" class="..." />
....
=====================================================
== File: docs/modules/servers/partials/OnlyText.adoc
=====================================================
=== OnlyText
Keep only the text part of a message.
If the message is text only then it doesn't touch it, if it is a multipart it
transform it a in plain text message with the first text part found.
* text/plain
* text/html => with a conversion to text only
* text/* as is.
=====================================================
== File: docs/modules/servers/partials/UseHeaderRecipients.adoc
=====================================================
=== UseHeaderRecipients
Mailet designed to process the recipients from the mail headers rather
than the recipients specified in the SMTP message header. This can be
useful if your mail is redirected on-route by a mail server that
substitutes a fixed recipient address for the original.
To use this, match against the redirection address using the
*RecipientIs* matcher and set the mailet 'class' to
*UseHeaderRecipients*. This will cause the email to be
re-injected into the root process with the recipient substituted
by all the recipients in the Mail-For, To and Cc headers
of the message.
e.g.
....
<mailet match="RecipientIs=forwarded@myhost" class="UseHeaderRecipients">
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/SentByJmap.adoc
=====================================================
=== SentByJmap
Matches mails sent via the JMAP protocol.
=====================================================
== File: docs/modules/servers/partials/ICSSanitizer.adoc
=====================================================
=== ICSSanitizer
Some senders embed 'text/calendar' content as part of Mime bodypart headers with an empty body.
This mailet duplicate the 'text/calendar' content to the Mime body part.
Example configuration:
....
<mailet match="All" class="ICSSanitizer"/>
....
=====================================================
== File: docs/modules/servers/partials/SenderIsRegex.adoc
=====================================================
=== SenderIsRegex
Matches mails that are sent by a sender whose address matches a regular expression.
Is equivalent to the RecipientIsRegex matcher but matching on the sender.
Configuration string: a regular expression.
....
<mailet match="SenderIsRegex=<regular-expression>" class="<any-class>">
....
The example below will match any sender in the format user@log.anything
....
<mailet match="SenderIsRegex=(.*)@log\.(.*)" class="<any-class>">
</mailet>
....
Another example below will match any sender having some variations of the string
*mp3* inside the username part.
....
<mailet match="SenderIsRegex=(.*)(mp3|emmepitre)(.*)@" class="<any-class>">
</mailet>
....
=====================================================
== File: docs/modules/servers/partials/configure/forProtocolsPartial.adoc
=====================================================
== For protocols
By omitting these files, the underlying protocols will be disabled.
** xref:{xref-base}/imap.adoc[*imapserver.xml*] allows configuration for the IMAP protocol link:{sample-configuration-prefix-url}imapserver.xml[example]
** xref:{xref-base}/jmap.adoc[*jmap.properties*] allows to configure the JMAP protocol link:{sample-configuration-prefix-url}jmap.properties[example]
** xref:{xref-base}/jmx.adoc[*jmx.properties*] allows configuration of JMX being used by the Command Line Interface link:{sample-configuration-prefix-url}jmx.properties[example]
** xref:{xref-base}/smtp.adoc#_lmtp_configuration[*lmtpserver.xml*] allows configuring the LMTP protocol link:{sample-configuration-prefix-url}lmtpserver.xml[example]
** *managesieveserver.xml* allows configuration for ManagedSieve (unsupported) link:{sample-configuration-prefix-url}managesieveserver.xml[example]
** xref:{xref-base}/pop3.adoc[*pop3server.xml*] allows configuration for the POP3 protocol (experimental) link:{sample-configuration-prefix-url}pop3server.xml[example]
** xref:{xref-base}/smtp.adoc[*smtpserver.xml*] allows configuration for the SMTP protocol link:{sample-configuration-prefix-url}smtpserver.xml[example]
*** xref:{xref-base}/smtp-hooks.adoc[This page] list SMTP hooks that can be used out of the box with the {server-name}.
** xref:{xref-base}/webadmin.adoc[*webadmin.properties*] enables configuration for the WebAdmin protocol link:{sample-configuration-prefix-url}webadmin.properties[example]
** xref:{xref-base}/ssl.adoc[This page] details SSL & TLS configuration.
** xref:{xref-base}/sieve.adoc[This page] details Sieve setup and how to enable ManageSieve.
=====================================================
== File: docs/modules/servers/partials/configure/collecting-events.adoc
=====================================================
== Motivation
Calendar applications typically add event invitations received via email directly to a user’s calendar.
This behavior requires the calendar application to recognize and process ICalendar-related emails.
== Design
The idea is to write a portion of mailet pipeline extracting Icalendar attachments and to hold them as attachments that
can later be sent to other applications over AMQP to be treated in an asynchronous, decoupled fashion.
== Configuration
We can achieve this goal by combining simple mailets building blocks.
Here is a sample pipeline achieving aforementioned objectives :
[source,xml]
....
<!-- ICAL pipeline -->
<mailet match="All" class="StripAttachment">
<mimeType>text/calendar</mimeType>
<attribute>rawIcalendar</attribute>
</mailet>
<mailet match="All" class="MimeDecodingMailet">
<attribute>rawIcalendar</attribute>
</mailet>
<mailet match="All" class="ICalendarParser">
<sourceAttribute>rawIcalendar</sourceAttribute>
<destinationAttribute>icalendar</destinationAttribute>
</mailet>
<mailet match="All" class="ICALToHeader">
<attribute>icalendar</attribute>
</mailet>
<mailet match="All" class="ICALToJsonAttribute">
<source>icalendar</source>
<destination>icalendarAsJson</destination>
<rawSource>rawIcalendar</rawSource>
</mailet>
<mailet match="All" class="AmqpForwardAttribute">
<uri>amqp://${env:JAMES_AMQP_USERNAME}:${env:JAMES_AMQP_PASSWORD}@${env:JAMES_AMQP_HOST}:${env:JAMES_AMQP_PORT}</uri>
<exchange>james:events</exchange>
<attribute>icalendarAsJson</attribute>
</mailet>
<!-- End of ICAL pipeline -->
....
The input of this pipeline is an ICS (ICalendar) file attached to an email. The pipeline processes the calendar attachment by decoding and parsing it, then transforming it into JSON format. This JSON data is added to the email object as an attribute named icalendarAsJson. Finally, it is published via AMQP for further processing by the Calendar app.
The `icalendarAsJson` attribute will look like the following:
=====================================================
== File: docs/modules/servers/partials/configure/matchers.adoc
=====================================================
This documentation page lists and documents Matchers that can be used within the
{server-name} MailetContainer in order to write your own mail processing logic with out-of-the-box components.
== Supported matchers
include::partial$All.adoc[]
include::partial$AtLeastPriority.adoc[]
include::partial$AtMost.adoc[]
include::partial$AtMostPriority.adoc[]
include::partial$DLP.adoc[]
include::partial$FetchedFrom.adoc[]
include::partial$HasAttachment.adoc[]
include::partial$HasException.adoc[]
include::partial$HasHeader.adoc[]
include::partial$HasHeaderWithPrefix.adoc[]
include::partial$HasMailAttribute.adoc[]
include::partial$HasMailAttributeWithValue.adoc[]
include::partial$HasMailAttributeWithValueRegex.adoc[]
include::partial$HasMimeType.adoc[]
include::partial$HasMimeTypeParameter.adoc[]
include::partial$HasPriority.adoc[]
include::partial$HostIs.adoc[]
include::partial$HostIsLocal.adoc[]
include::partial$IsMarkedAsSpam.adoc[]
include::partial$IsOverQuota.adoc[]
include::partial$IsRemoteDeliveryPermanentError.adoc[]
include::partial$IsRemoteDeliveryTemporaryError.adoc[]
include::partial$IsSenderInRRTLoop.adoc[]
=====================================================
== File: docs/modules/servers/partials/configure/mailets.adoc
=====================================================
This documentation page lists and documents Mailet that can be used within the
{server-name} MailetContainer in order to write your own mail processing logic with out-of-the-box components.
== Supported mailets
include::partial$AddDeliveredToHeader.adoc[]
include::partial$AddFooter.adoc[]
include::partial$AddSubjectPrefix.adoc[]
include::partial$AmqpForwardAttribute.adoc[]
include::partial$Bounce.adoc[]
include::partial$ContactExtractor.adoc[]
include::partial$ConvertTo7Bit.adoc[]
include::partial$DKIMSign.adoc[]
include::partial$DKIMVerify.adoc[]
include::partial$DSNBounce.adoc[]
include::partial$Expires.adoc[]
include::partial$ExtractMDNOriginalJMAPMessageId.adoc[]
include::partial$Forward.adoc[]
include::partial$ICalendarParser.adoc[]
include::partial$ICALToHeader.adoc[]
include::partial$ICALToJsonAttribute.adoc[]
include::partial$ICSSanitizer.adoc[]
include::partial$LocalDelivery.adoc[]
include::partial$LogMessage.adoc[]
include::partial$MailAttributesListToMimeHeaders.adoc[]
include::partial$MailAttributesToMimeHeaders.adoc[]
include::partial$MailToAllUsers.adoc[]
include::partial$MetricsMailet.adoc[]
=====================================================
== File: docs/modules/servers/partials/configure/batchsizes.adoc
=====================================================
This files allow to define the amount of data that should be fetched 'at once' when interacting with the mailbox. This is
needed as IMAP can generate some potentially large requests.
Increasing these values tend to fasten individual requests, at the cost of enabling potential higher load.
Consult this link:{sample-configuration-prefix-url}/batchsizes.properties[example]
to get some examples and hints.
.batchsizes.properties content
|===
| Property name | explanation
| fetch.metadata
| Optional, defaults to 200. How many messages should be read in a batch when using FetchType.MetaData
| fetch.headers
| Optional, defaults to 200. How many messages should be read in a batch when using FetchType.Header
| fetch.body
| Optional, defaults to 100. How many messages should be read in a batch when using FetchType.Body
| fetch.full
| Optional, defaults to 50. How many messages should be read in a batch when using FetchType.Full
| copy
| Optional, defaults to 200. How many messages should be copied in a batch.
| move
| Optional, defaults to 200. How many messages should be moved in a batch.
|===
=====================================================
== File: docs/modules/servers/partials/configure/forStorageDependenciesPartial.adoc
=====================================================
== For storage dependencies
Except specific documented cases, these files are required, at least to establish a connection with the storage components.
** xref:{xref-base}/blobstore.adoc[*blobstore.properties*] allows to configure the BlobStore link:{sample-configuration-prefix-url}/sample-configuration/blob.properties[example]
** xref:{xref-base}/opensearch.adoc[*opensearch.properties*] allows to configure OpenSearch driver link:{sample-configuration-prefix-url}/sample-configuration/opensearch.properties[example]
** xref:{xref-base}/rabbitmq.adoc[*rabbitmq.properties*] allows configuration for the RabbitMQ driver link:{sample-configuration-prefix-url}/sample-configuration/rabbitmq.properties[example]
** xref:{xref-base}/redis.adoc[*redis.properties*] allows configuration for the Redis driver link:https://github.com/apache/james-project/blob/fabfdf4874da3aebb04e6fe4a7277322a395536a/server/mailet/rate-limiter-redis/redis.properties[example], that is used by optional
distributed rate limiting component.
** xref:{xref-base}/tika.adoc[*tika.properties*] allows configuring Tika as a backend for text extraction link:{sample-configuration-prefix-url}/sample-configuration/tika.properties[example]
=====================================================
== File: docs/modules/servers/partials/configure/smtp-hooks.adoc
=====================================================
This documentation page lists and documents SMTP hooks that can be used within the
{server-name} SMTP protocol stack in order to customize the way your SMTP server
behaves without of the box components.
== DNSRBLHandler
This command handler check against https://www.wikiwand.com/en/Domain_Name_System-based_Blackhole_List[RBL-Lists]
(Real-time Blackhole List).
If getDetail is set to true it try to retrieve information from TXT Record
why the ip was blocked. Default to false.
before you enable out the DNS RBL handler documented as an example below,
please take a moment to review each block in the list.
We have included some that various JAMES committers use,
but you must decide which, if any, are appropriate
for your environment.
The mail servers hosting
@apache.org mailing lists, for example, use a
slightly different list than we have included below.
And it is likely that most JAMES committers also have
slightly different sets of lists.
The SpamAssassin user's list would be one good place to discuss the
measured quality of various block lists.
NOTA BENE: the domain names, below, are terminated
with '.' to ensure that they are absolute names in
DNS lookups. Under some circumstances, names that
are not explicitly absolute could be treated as
relative names, leading to incorrect results. This
has been observed on *nix and MS-Windows platforms
by users of multiple mail servers, and is not JAMES
specific. If you are unsure what this means for you,
please speak with your local system/network admins.
This handler should be considered experimental.
Example configuration:
[source,xml]
....
<handlerchain>
<!-- ... -->
<handler class="org.apache.james.smtpserver.fastfail.DNSRBLHandler">
<getDetail>false</getDetail>
<rblservers>
<whitelist>query.bondedsender.org.</whitelist>
<blacklist>sbl-xbl.spamhaus.org.</blacklist>
=====================================================
== File: docs/modules/servers/partials/configure/domainlist.adoc
=====================================================
Consult this link:{sample-configuration-prefix-url}/domainlist.xml[example]
to get some examples and hints.
This configuration block is defined by the *domainlist* tag.
.domainlist.xml content
|===
| Property name | explanation
| domainnames
| Domainnames identifies the DNS namespace served by this instance of James.
These domainnames are used for both matcher/mailet processing and SMTP auth
to determine when a mail is intended for local delivery - Only applicable for XMLDomainList. The entries mentionned here will be created upon start.
|autodetect
|true or false - If autodetect is true, James wil attempt to discover its own host name AND
use any explicitly specified servernames.
If autodetect is false, James will use only the specified domainnames. Defaults to false.
|autodetectIP
|true or false - If autodetectIP is not false, James will also allow add the IP address for each servername.
The automatic IP detection is to support RFC 2821, Sec 4.1.3, address literals. Defaults to false.
|defaultDomain
|Set the default domain which will be used if an email is send to a recipient without a domain part.
If no defaultdomain is set the first domain of the DomainList gets used. If the default is not yet contained by the Domain List, the domain will be created upon start.
|read.cache.enable
|Experimental. Boolean, defaults to false.
Whether or not to cache domainlist.contains calls. Enable a faster execution however writes will take time
to propagate.
|read.cache.expiracy
|Experimental. String (duration), defaults to 10 seconds (10s). Supported units are ms, s, m, h, d, w, month, y.
Expiracy of the cache. Longer means less reads are performed to the backend but writes will take longer to propagate.
Low values (a few seconds) are advised.
|===
To override autodetected domainnames simply add explicit domainname elements.
In most cases this will be necessary. By default, the domainname 'localhost' is specified. This can be removed, if required.
=====================================================
== File: docs/modules/servers/partials/configure/queue.adoc
=====================================================
This configuration helps you configure mail queue you want to select.
== Queue Configuration
.queue.properties content
|===
| Property name | explanation
| mail.queue.choice
| Mail queue can be implemented by many type of message brokers: Pulsar, RabbitMQ,... This property will choose which mail queue you want, defaulting to RABBITMQ
|===
`mail.queue.choice` supports the following options:
* You can specify the `RABBITMQ` if you want to choose RabbitMQ mail queue
* You can specify the `PULSAR` if you want to choose Pulsar mail queue
=====================================================
== File: docs/modules/servers/partials/configure/mta-sts.adoc
=====================================================
link:https://datatracker.ietf.org/doc/html/rfc8461[MTA-STS] is a standard for a SMTP server to advertise its TLS
set up and whether SSL is required for it to accept emails.
== Securing incoming traffic with MTA-STS
Apache James supports tools for MTA-STS on the incoming traffic.
The *EnforceMtaSts* SMTP hook can be used to ensure *MAIL FROM* transactions only happens on encrypted channels
and matches the MTA-STS 'enforce' policy.
Sample set up:
....xml
<handlerchain>
<!-- ... -->
<handler class="org.apache.james.smtpserver.tls.EnforceMtaSts"/>
</handlerchain>
....
The *TestMtaSts* SMTP hook can be used to audit *MAIL FROM* transactions on unencrypted channels
and matches the MTA-STS 'testing' policy. It will log but accept emails from such connections.
Sample set up:
....xml
<handlerchain>
<!-- ... -->
<handler class="org.apache.james.smtpserver.tls.TestMtaSts"/>
</handlerchain>
....
=== Advertizing MTA-STS support
Configuring the MTA is only part of the story. Remains telling the world about it.
First is needed a DNS record for the MTA-STS policy:
....
_mta-sts.mydomain.com. in TXT "v=STSv1; id=20250403T140800"
....
Then the policy should be published on `https://mta-sts.mydomain.com/.well-known/mta-sts.txt` which yields:
....
version: STSv1
mode: enforce
mx: mx.mydomain.com
max_age: 86400
....
=====================================================
== File: docs/modules/servers/partials/configure/dsn.adoc
=====================================================
DSN introduced in link:https://tools.ietf.org/html/rfc3461[RFC-3461] allows a SMTP sender to demand status messages,
defined in link:https://tools.ietf.org/html/rfc3464[RFC-3464] to be sent back to the `Return-Path` upon delivery
progress.
DSN support is not enabled by default, as it needs specific configuration of the
xref:{pages-path}/configure/mailetcontainer.adoc[mailetcontainer.xml] to be specification compliant.
To enable it you need to:
- Add DSN SMTP hooks as part of the SMTP server stack
- Configure xref:{pages-path}/configure/mailetcontainer.adoc[mailetcontainer.xml] to generate DSN bounces when needed
== Enabling DSN in SMTP server stack
For this simply add the `DSN hooks` in the handler chain in `smtpserver.xml` :
[source,xml]
....
<smtpserver enabled="true">
<...> <!-- The rest of your SMTP configuration, unchanged -->
<handlerchain>
<handler class="org.apache.james.smtpserver.dsn.DSNEhloHook"/>
<handler class="org.apache.james.smtpserver.dsn.DSNMailParameterHook"/>
<handler class="org.apache.james.smtpserver.dsn.DSNRcptParameterHook"/>
<handler class="org.apache.james.smtpserver.dsn.DSNMessageHook"/>
<...> <!-- other handlers, like: -->
<handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/> <!-- for instance -->
</handlerchain>
</smtpserver>
....
== Enabling DSN generation as part of mail processing
For the below conditions to be matched we assume you follow
xref:{pages-path}/configure/remote-delivery-error-handling.adoc[RemoteDelivery error handling for MXs], which is a
requirement for detailed RemoteDelivery error and delay handling on top of the {server-name}.
Here is a sample xref:{pages-path}/configure/mailetcontainer.adoc[mailetcontainer.xml] achieving the following DSN generation:
- Generate a generic `delivered` notification if LocalDelivery succeeded, if requested
- Generate a generic `failed` notification in case of local errors, if requested
- Generate a specific `failed` notification in case of a non existing local user, if requested
- Generate a specific `failed` notification in case of an address rewriting loop, if requested
- Generate a `failed` notification in case of remote permanent errors, if requested. We blame the remote server...
- Generate a `delayed` notification in case of temporary remote errors we are about to retry, if requested. We blame the remote server...
- Generate a `failed` notification in case of temporary remote errors we are not going to retry (failed too many time), if requested. We blame the remote server...
[subs=attributes+,xml]
----
<mailetcontainer enableJmx="true">
=====================================================
== File: docs/modules/servers/partials/configure/jmx.adoc
=====================================================
== Disclaimer
JMX poses several security concerns and had been leveraged to conduct arbitrary code execution.
This threat is mitigated by not allowing remote connections to JMX, setting up authentication and pre-authentication filters.
However, we recommend to either run James in isolation (docker / own virtual machine) or disable JMX altogether.<br/>
James JMX endpoint provides command line utilities and exposes a few metrics, also available on the metric endpoint.</p>
== Configuration
This is used to configure the JMX MBean server via which all management is achieved.
Consult this link:{sample-configuration-prefix-url}/jmx.properties[example]
in GIT to get some examples and hints.
.jmx.properties content
|===
| Property name | explanation
| jmx.enabled
| Boolean. Should the JMX server be enabled? Defaults to `true`.
| jmx.address
|The IP address (host name) the MBean Server will bind/listen to.
| jmx.port
| The port number the MBean Server will bind/listen to.
|===
To access from a remote location, it has been reported that `-Dcom.sun.management.jmxremote.ssl=false` is needed as
a JVM argument.
== JMX Security
In order to set up JMX authentication, we need to put `jmxremote.password` and `jmxremote.access` file
to `/conf` directory.
- `jmxremote.password`: define the username and password, that will be used by the client (here is james-cli)
File's content example:
```
james-admin pass1
```
- `jmxremote.access`: define the pair of username and access permission
File's content example:
```
james-admin readwrite
```
=====================================================
== File: docs/modules/servers/partials/configure/tika.adoc
=====================================================
When using OpenSearch, you can configure an external Tika server for extracting and indexing text from attachments.
Thus you can significantly improve user experience upon text searches.
Note: You can launch a tika server using this command line:
....
docker run --name tika linagora/docker-tikaserver:1.24
....
Here are the different properties:
.tika.properties content
|===
| Property name | explanation
| tika.enabled
| Should Tika text extractor be used?
If true, the TikaTextExtractor will be used behind a cache.
If false, the DefaultTextExtractor will be used (naive implementation only supporting text).
Defaults to false.
| tika.host
| IP or domain name of your Tika server. The default value is 127.0.0.1
| tika.port
| Port of your tika server. The default value is 9998
| tika.timeoutInMillis
| Timeout when issuing request to the tika server. The default value is 30 seconds.
| tika.cache.eviction.period
| A cache is used to avoid, when possible, query Tika multiple time for the same attachments.
This entry determines how long after the last read an entry vanishes.
Please note that units are supported (ms - millisecond, s - second, m - minute, h - hour, d - day). Default unit is seconds.
Default value is *1 day*
| tika.cache.enabled
| Should the cache be used? False by default
| tika.cache.weight.max
| Maximum weight of the cache.
A value of *0* disables the cache
Please note that units are supported (K for KB, M for MB, G for GB). Defaults is no units, so in bytes.
Default value is *100 MB*.
| tika.contentType.blacklist
| Blacklist of content type is known-to-be-failing with Tika. Specify the list with comma separator.
|===
=====================================================
== File: docs/modules/servers/partials/configure/jvm.adoc
=====================================================
This file may contain any additional system properties for tweaking JVM execution. When you normally would add a command line option `-Dmy.property=whatever`, you can put it in this file as `my.property=whatever` instead. These properties will be added as system properties on server start.
Note that in some rare cases this might not work,
when a property affects very early JVM start behaviour.
For testing purposes, you may specify a different file path via the command line option `-Dextra.props=/some/other/jvm.properties`.
== Adjusting the Mailbox folder delimiter
The delimiter used to separate parent/child folders.
WARNING: This value should only be changed when setting up a new deployment. Changing the parameter for an existing deployments will likely lead to failure of some system components, as occurrences of old the delimiter will still be present in the database/data store.
Optional. String. Defaults to 'dot'
Ex in `jvm.properties`
----
james.mailbox.folder.delimiter=dot
----
Allowed values are: dot (will use '.' as delimiter), slash (will use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
== Control the threshold memory
This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
In `jvm.properties`
----
james.message.memory.threshold=12K
----
(Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
== Enable the copy of message in memory
Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
be copied to temporary files?
----
james.message.usememorycopy=true
----
Optional. Boolean. Defaults to false. Recommended value is false.
== Running resource leak detection
It is used to detect a resource not be disposed of before it's garbage-collected.
In `jvm.properties`
----
james.lifecycle.leak.detection.mode=advanced
----
=====================================================
== File: docs/modules/servers/partials/configure/jmap.adoc
=====================================================
https://jmap.io/[JMAP] is intended to be a new standard for email clients to connect to mail
stores. It therefore intends to primarily replace IMAP + SMTP submission. It is also designed to be more
generic. It does not replace MTA-to-MTA SMTP transmission.
Consult this link:{sample-configuration-prefix-url}/jmap.properties[example]
to get some examples and hints.
.jmap.properties content
|===
| Property name | explanation
| enabled
| true/false. Governs whether JMAP should be enabled
| jmap.port
| Optional. Defaults to 80. The port this server will be listening on. This value must be a valid
port, ranging between 1 and 65535 (inclusive)
| tls.keystoreURL
| Keystore to be used for generating authentication tokens for password authentication mechanism.
This should not be the same keystore than the ones used by TLS based protocols.
| tls.secret
| Password used to read the keystore
| jwt.publickeypem.url
| Optional. Coma separated list of RSA public keys URLs to validate JWT tokens allowing requests to bypass authentication.
Defaults to an empty list.
| url.prefix
| Optional. Configuration urlPrefix for JMAP routes. Default value: http://localhost.
| websocket.url.prefix
| Optional. URL for JMAP WebSocket route. Default value: ws://localhost
| websocket.ping.interval
| Optional. Configure the duration of the interval between consecutive ping messages (as specified in RFC6455) sent by the server to the client over a WebSocket connection.
The supported unit is seconds (e.g: `3s` for a 3-second interval). Default is empty, this feature is disabled.
| email.send.max.size
| Optional. Configuration max size for message created in RFC-8621.
Default value: None. Supported units are B (bytes) K (KB) M (MB) G (GB).
| max.size.attachments.per.mail
| Optional. Defaults to 20MB. RFC-8621 `maxSizeAttachmentsPerEmail` advertised to JMAP client as part of the
`urn:ietf:params:jmap:mail` capability. This needs to be at least 33% lower than `email.send.max.size` property
(in order to account for text body, headers, base64 encoding and MIME structures).
JMAP clients would use this property in order not to create too big emails.
Default value: None. Supported units are B (bytes) K (KB) M (MB) G (GB).
=====================================================
== File: docs/modules/servers/partials/configure/mailrepositorystore.adoc
=====================================================
A `mail repository` allows storage of a mail as part of its
processing. Standard configuration relies on the following mail
repository.
A mail repository is identified by its *url*, constituted of a *protocol* and a *path*.
For instance in the url `{mailet-repository-path-prefix}://var/mail/error/` `{mail-repository-protocol}` is the protocol and `var/mail/error` the path.
The *mailrepositorystore.xml* file allows registration of available protocols, and their binding to actual MailRepository
implementation. Note that extension developers can write their own MailRepository implementations, load them via the
`extensions-jars` mechanism as documented in xref:customization:index.adoc['writing your own extensions'], and finally
associated to a protocol in *mailrepositorystore.xml* for a usage in *mailetcontainer.xml*.
== Configuration
Consult this link:{sample-configuration-prefix-url}/mailrepositorystore.xml[example]
to get some examples and hints.
[subs=attributes+,xml]
----
<mailrepositorystore>
<defaultProtocol>{mail-repository-protocol}</defaultProtocol>
<mailrepositories>
<mailrepository class="{mail-repository-class}">
<protocols>
<protocol>{mail-repository-protocol}</protocol>
</protocols>
</mailrepository>
</mailrepositories>
</mailrepositorystore>
----
Only the *{mail-repository-class}* is available by default for the {server-name}. Mails metadata are stored in
{mail-repository-protocol} while the headers and bodies are stored within the xref:{pages-path}/architecture/index.adoc#_blobstore[BlobStore].
=====================================================
== File: docs/modules/servers/partials/configure/collecting-contacts.adoc
=====================================================
== Motivation
Many modern applications combines email and contacts.
We want recipients of emails sent by a user to automatically be added to this user contacts, for convenience. This
should even be performed when a user sends emails via SMTP for example using thunderbird.
== Design
The idea is to send AMQP messages holding information about mail envelope for a traitment via a tierce application.
== Configuration
We can achieve this goal by combining simple mailets building blocks.
Here is a sample pipeline achieving aforementioned objectives :
[source,xml]
....
<mailet match="SenderIsLocal" class="ContactExtractor">
<attribute>extractedContacts</attribute>
</mailet>
<mailet match="All" class="AmqpForwardAttribute">
<uri>amqp://${env:JAMES_AMQP_USERNAME}:${env:JAMES_AMQP_PASSWORD}@${env:JAMES_AMQP_HOST}:${env:JAMES_AMQP_PORT}</uri>
<exchange>collector:email</exchange>
<attribute>extractedContacts</attribute>
</mailet>
....
A sample message looks like:
....
{
"userEmail": "sender@james.org",
"emails": ["to@james.org"]
}
....
=====================================================
== File: docs/modules/servers/partials/configure/droplists.adoc
=====================================================
The DropList, also known as the mail blacklist, is a collection of
domains and email addresses that are denied from sending emails within the system.
It is disabled by default.
To enable it, modify the `droplists.properties` file and include the `IsInDropList` matcher in the `mailetcontainer.xml`.
To disable it, adjust the `droplists.properties` file and remove the `IsInDropList` matcher from the `mailetcontainer.xml`.
.droplists.properties content
|===
| Property name | explanation
| enabled
| Boolean. Governs whether DropLists should be enabled. Defaults to `false`.
|===
== Enabling Matcher
Plug the `IsInDropList` matcher within `mailetcontainer.xml` :
[source,xml]
....
<mailet match="org.apache.james.transport.matchers.IsInDropList" class="ToProcessor">
<processor>transport</processor>
</mailet>
....
== DropList management
DropList management, including adding and deleting entries, is performed through the WebAdmin REST API or CLI.
See xref:{pages-path}/operate/webadmin.adoc#_administrating_droplists[WebAdmin DropLists].
See xref:distributed/operate/cli.adoc#_manage_droplist[CLI DropLists].
=====================================================
== File: docs/modules/servers/partials/configure/search.adoc
=====================================================
This configuration helps you configure the components used to back search.
.search.properties content
|===
| Property name | explanation
| implementation
| The implementation to be used for search. Should be one of:
- *opensearch* : Index and search mails into OpenSearch.
- *scanning* : Do not index documents and perform scanning search, scrolling mailbox for matching contents.
This implementation can have a prohibitive cost.
- *opensearch-disabled* : Saves events to index into event dead letter. Make searches fails.
This is useful to start James without OpenSearch while still tracking messages to index for later recovery. This
can be used in order to ease delays for disaster recovery action plans.
|===
=====================================================
== File: docs/modules/servers/partials/configure/blobstore.adoc
=====================================================
=== Encryption choice
Data can be optionally encrypted with a symmetric key using AES before being stored in the blobStore. As many user relies
on third party for object storage, a compromised third party will not escalate to a data disclosure. Of course, a
performance price have to be paid, as encryption takes resources.
*encryption.aes.enable* : Optional boolean, defaults to false.
If AES encryption is enabled, then the following properties MUST be present:
- *encryption.aes.password* : String
- *encryption.aes.salt* : Hexadecimal string
The following properties CAN be supplied:
- *encryption.aes.private.key.algorithm* : String, defaulting to PBKDF2WithHmacSHA512. Previously was
PBKDF2WithHmacSHA1.
WARNING: Once chosen this choice can not be reverted, all the data is either clear or encrypted. Mixed encryption
is not supported.
Here is an example of how you can generate the above values (be mindful to customize the byte lengths in order to add
enough entropy.
....
# Password generation
openssl rand -base64 64
# Salt generation
generate salt with : openssl rand -hex 16
....
AES blob store supports the following system properties that could be configured in `jvm.properties`:
....
# Threshold from which we should buffer the blob to a file upon encrypting
# Unit supported: K, M, G, default to no unit
james.blob.aes.file.threshold.encrypt=100K
# Threshold from which we should buffer the blob to a file upon decrypting
# Unit supported: K, M, G, default to no unit
james.blob.aes.file.threshold.decrypt=256K
# Maximum size of a blob. Larger blobs will be rejected.
# Unit supported: K, M, G, default to no unit
james.blob.aes.blob.max.size=100M
....
=== Object storage configuration
=====================================================
== File: docs/modules/servers/partials/configure/forCoreComponentsPartial.adoc
=====================================================
== For core components
By omitting these files, sane default values are used.
** xref:{xref-base}/batchsizes.adoc[*batchsizes.properties*] allows to configure mailbox read batch sizes link:{sample-configuration-prefix-url}/sample-configuration/batchsizes.properties[example]
** xref:{xref-base}/dns.adoc[*dnsservice.xml*] allows to configure DNS resolution link:{sample-configuration-prefix-url}/sample-configuration/dnsservice.xml[example]
** xref:{xref-base}/domainlist.adoc[*domainlist.xml*] allows to configure Domain storage link:{sample-configuration-prefix-url}/sample-configuration/domainlist.xml[example]
** xref:{xref-base}/healthcheck.adoc[*healthcheck.properties*] allows to configure periodical healthchecks link:{sample-configuration-prefix-url}/sample-configuration/healthcheck.properties[example]
** xref:{xref-base}/mailetcontainer.adoc[*mailetcontainer.xml*] allows configuring mail processing link:{sample-configuration-prefix-url}/sample-configuration/mailetcontainer.xml[example]
*** xref:{xref-base}/mailets.adoc[This page] list matchers that can be used out of the box with the {server-name}.
*** xref:{xref-base}/matchers.adoc[This page] list matchers that can be used out of the box with the {server-name}.
** xref:{xref-base}/mailrepositorystore.adoc[*mailrepositorystore.xml*] enables registration of allowed MailRepository protcols and link them to MailRepository implementations link:{sample-configuration-prefix-url}/sample-configuration/mailrepositorystore.xml[example]
** xref:{xref-base}/recipientrewritetable.adoc[*recipientrewritetable.xml*] enables advanced configuration for the Recipient Rewrite Table component link:{sample-configuration-prefix-url}/sample-configuration/recipientrewritetable.xml[example]
*** xref:{xref-base}/matchers.adoc[This page] allows choosing the indexing technology.
** xref:{xref-base}/usersrepository.adoc[*usersrepository.xml*] allows configuration of user storage link:{sample-configuration-prefix-url}/sample-configuration/usersrepository.xml[example]
=====================================================
== File: docs/modules/servers/partials/configure/extensions.adoc
=====================================================
This files enables an operator to define additional bindings used to instantiate others extensions
*guice.extension.module*: come separated list of fully qualified class name. These classes need to implement Guice modules.
Here is an example of such a class :
[source,java]
....
public class MyServiceModule extends AbstractModule {
@Override
protected void configure() {
bind(MyServiceImpl.class).in(Scopes.SINGLETON);
bind(MyService.class).to(MyServiceImpl.class);
}
}
....
Recording it in extensions.properties :
....
guice.extension.module=com.project.MyServiceModule
....
Enables to inject MyService into your extensions.
*guice.extension.tasks*: come separated list of fully qualified class name.
The extension can rely on the Task manager to supervise long-running task execution (progress, await, cancellation, scheduling...).
These extensions need to implement Task extension modules.
Here is an example of such a class :
[source,java]
....
public class RspamdTaskExtensionModule implements TaskExtensionModule {
@Inject
public RspamdTaskExtensionModule() {
}
@Override
public Set<TaskDTOModule<? extends Task, ? extends TaskDTO>> taskDTOModules() {
return Set.of(...);
}
@Override
public Set<AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends AdditionalInformationDTO>> taskAdditionalInformationDTOModules() {
return Set.of(...);
}
=====================================================
== File: docs/modules/servers/partials/configure/sieve.adoc
=====================================================
James servers are able to evaluate and execute Sieve scripts.
Sieve is an extensible mail filtering language. It's limited
expressiveness (no loops or variables, no tests with side
effects) allows user created scripts to be run safely on email
servers. Sieve is targeted at the final delivery phase (where
an incoming email is transferred to a user's mailbox).
The following Sieve capabilities are supported by Apache James:
- link:https://www.ietf.org/rfc/rfc2234.txt[RFC 2234 ABNF]
- link:https://www.ietf.org/rfc/rfc2244.txt[RFC 2244 ACAP]
- link:https://www.ietf.org/rfc/rfc2298.txt[RFC 2298 MDN]
- link:https://tools.ietf.org/html/rfc5228[RFC 5228 Sieve]
- link:https://tools.ietf.org/html/rfc4790[RFC 4790 IAPCR]
- link:https://tools.ietf.org/html/rfc5173[RFC 5173 Body Extension]
- link:https://datatracker.ietf.org/doc/html/rfc5230[RFC 5230 Vacations]
To be correctly executed, please note that the *Sieve* mailet is required to be positioned prior the
*LocalDelivery* mailet.
== Managing Sieve scripts
A user willing to manage his Sieve scripts on the server can do so via several means:
He can ask an admin to upload his script via the xref:{pages-path}/operate/cli.adoc[CLI]
As James supports ManageSieve (link:https://datatracker.ietf.org/doc/html/rfc5804[RFC-5804]) a user
can thus use compatible software to manage his Sieve scripts.</p>
== ManageSieve protocol
*WARNING*: ManageSieve protocol should be considered experimental.
Consult link:{sample-configuration-prefix-url}/managesieveserver.xml[managesieveserver.xml]
in GIT to get some examples and hints.
The service is controlled by a configuration block in the managesieveserver.xml.
The managesieveserver tag defines the boundaries of the configuration block. It encloses
all the relevant configuration for the ManageSieve server. The behavior of the ManageSieve service is
controlled by the attributes and children of this tag.
This tag has an optional boolean attribute - *enabled* - that defines whether the service is active or not.
The value defaults to "false" if
not present.
The standard children of the managesieveserver tag are:
.managesieveserver.xml content
|===
=====================================================
== File: docs/modules/servers/partials/configure/listeners.adoc
=====================================================
{server-name} relies on an event bus system to enrich mailbox capabilities. Each
operation performed on the mailbox will trigger related events, that can
be processed asynchronously by potentially any James node on a
distributed system.
Mailbox listeners can register themselves on this event bus system to be
called when an event is fired, allowing to do different kind of extra
operations on the system.
{server-name} allows the user to register potentially user defined additional mailbox listeners.
Consult this link:{sample-configuration-prefix-url}/listener.xml[example]
to get some examples and hints.
== Configuration
The <executeGroupListeners> controls whether to launch group mailbox listener consumption. Defaults to true. Use with caution:
never disable on standalone james servers, and ensure at least some instances do consume group mailbox listeners within a
clustered topology.
Mailbox listener configuration is under the XML element <listener>.
Some MailboxListener allows you to specify if you want to run them synchronously or asynchronously. To do so,
for MailboxListener that supports this, you can use the *async* attribute (optional, per mailet default) to govern the execution mode.
If *true* the execution will be scheduled in a reactor elastic scheduler. If *false*, the execution is synchronous.
Already provided additional listeners are documented below.
=== SpamAssassinListener
Provides per user real-time HAM/SPAM feedback to a SpamAssassin server depending on user actions.
This mailet is asynchronous by default, but this behaviour can be overridden by the *async*
configuration property.
This MailboxListener is supported.
Example:
[source,xml]
....
<listeners>
<!-- ... -->
<listener>
<class>org.apache.james.mailbox.spamassassin.SpamAssassinListener</class>
</listener>
</listeners>
....
Please note that a `spamassassin.properties` file is needed. Read also
=====================================================
== File: docs/modules/servers/partials/configure/vault.adoc
=====================================================
Deleted Messages Vault is the component in charge of retaining messages before they are going to be deleted.
Messages stored in the Deleted Messages Vault could be deleted after exceeding their retentionPeriod (explained below).
It also supports to restore or export messages matching with defined criteria in
xref:{pages-path}/operate/webadmin.adoc#_deleted_messages_vault[WebAdmin deleted messages vault document] by using
xref:{pages-path}/operate/webadmin.adoc#_deleted_messages_vault[WebAdmin endpoints].
== Deleted Messages Vault Configuration
Once the vault is active, James will start moving deleted messages to it asynchronously.
The Deleted Messages Vault also stores and manages deleted messages into a BlobStore. The BlobStore can be either
based on an object storage or on {backend-name}. For configuring the BlobStore the vault will use, you can look at
xref:{pages-path}/configure/blobstore.adoc[*blobstore.properties*] BlobStore Configuration section.
== deletedMessageVault.properties
Consult this link:{sample-configuration-prefix-url}/deletedMessageVault.properties[example]
to get some examples and hints.
.deletedMessageVault.properties content
|===
| Property name | explanation
| enabled
| Allows to enable or disable usage of the Deleted Message Vault. Default to false.
| workQueueEnabled
| Enable work queue to be used with deleted message vault. Default to false.
| retentionPeriod
| Deleted messages stored in the Deleted Messages Vault are expired after this period (default: 1 year). It can be expressed in *y* years, *d* days, *h* hours, ...
| restoreLocation
| Messages restored from the Deleted Messages Vault are placed in a mailbox with this name (default: ``Restored-Messages``). The mailbox will be created if it does not exist yet.
|===
=====================================================
== File: docs/modules/servers/partials/configure/imap.adoc
=====================================================
Consult this link:{sample-configuration-prefix-url}/imapserver.xml[example]
to get some examples and hints.
The IMAP4 service is controlled by a configuration block in the imap4server.xml.
The imap4server tag defines the boundaries of the configuration block. It encloses
all the relevant configuration for the IMAP4 server. The behavior of the IMAP4 service is
controlled by the attributes and children of this tag.
This tag has an optional boolean attribute - *enabled* - that defines whether the service is active or not.
The value defaults to "true" if not present.
The standard children of the imapserver tag are:
.imapserver.xml content
|===
| Property name | explanation
| bind
| Configure this to bind to a specific inetaddress. This is an optional integer value. This value is the port on which this IMAP4 server is configured
to listen. If the tag or value is absent then the service
will bind to all network interfaces for the machine If the tag or value is omitted, the value will default to the standard IMAP4 port
port 143 is the well-known/IANA registered port for IMAP
port 993 is the well-known/IANA registered port for IMAPS ie over SSL/TLS
| connectionBacklog
| Number of connection backlog of the server (maximum number of queued connection requests)
| compress
| true or false - Use or don't use COMPRESS extension. Defaults to false.
| maxLineLength
| Maximal allowed line-length before a BAD response will get returned to the client
This should be set with caution as a to high value can make the server a target for DOS (Denial of Service)!
| inMemorySizeLimit
| Optional. Size limit before we will start to stream to a temporary file.
Defaults to 10MB. Must be a positive integer, optionally with a unit: B, K, M, G.
| literalSizeLimit
| Optional. Maximum size of a literal (IMAP APPEND).
Defaults to 0 (unlimited). Must be a positive integer, optionally with a unit: B, K, M, G.
| plainAuthDisallowed
| Deprecated. Should use `auth.plainAuthEnabled`, `auth.requireSSL` instead.
Whether to enable Authentication PLAIN if the connection is not encrypted via SSL or STARTTLS. Defaults to `true`.
| auth.plainAuthEnabled
| Whether to enable Authentication PLAIN/ LOGIN command. Defaults to `true`.
| auth.requireSSL
=====================================================
== File: docs/modules/servers/partials/configure/ssl.adoc
=====================================================
This document explains how to enable James 3.0 servers to use Transport Layer Security (TLS)
for encrypted client-server communication.
== Configure a Server to Use SSL/TLS
Each of the servers xref:{pages-path}/configure/smtp.adoc[SMTP - LMTP],
xref:{pages-path}/configure/pop3.adoc[POP3] and xref:{pages-path}/configure/imap.adoc[IMAP]
supports use of SSL/TLS.
TLS (Transport Layer Security) and SSL (Secure Sockets Layer) are protocols that provide
data encryption and authentication between applications in scenarios where that data is
being sent across an insecure network, such as checking your email
(How does the Secure Socket Layer work?). The terms SSL and TLS are often used
interchangeably or in conjunction with each other (TLS/SSL),
but one is in fact the predecessor of the other — SSL 3.0 served as the basis
for TLS 1.0 which, as a result, is sometimes referred to as SSL 3.1.
You need to add a block in the corresponding configuration file (smtpserver.xml, pop3server.xml, imapserver.xml,..)
[source,xml]
....
<tls socketTLS="false" startTLS="true">
<keystore>file://conf/keystore</keystore>
<keystoreType>PKCS12</keystoreType>
<secret>yoursecret</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>
....
Alternatively TLS keys can be supplied via PEM files:
[source,xml]
....
<tls socketTLS="true" startTLS="false">
<privateKey>file://conf/private.key</privateKey>
<certificates>file://conf/certs.self-signed.csr</certificates>
</tls>
....
An optional secret might be specified for the private key:
[source,xml]
....
<tls socketTLS="true" startTLS="false">
<privateKey>file://conf/private.key</privateKey>
<certificates>file://conf/certs.self-signed.csr</certificates>
<secret>yoursecret</secret>
</tls>
....
=====================================================
== File: docs/modules/servers/partials/configure/systemPropertiesPartial.adoc
=====================================================
== System properties
Some tuning can be done via system properties. This includes:
.System properties
|===
| Property name | explanation
| james.message.memory.threshold
| (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
Below, data is stored in memory. Above data is stored on disk.
Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
should however support a high throughput. Higher values will lead to faster single mail processing at the cost
of higher heap usage.
| james.message.usememorycopy
|Optional. Boolean. Defaults to false. Recommended value is false.
Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
be copied to temporary files?
|===
=====================================================
== File: docs/modules/servers/partials/configure/smtp.adoc
=====================================================
== Incoming SMTP
Consult this link:{sample-configuration-prefix-url}/smtpserver.xml[example]
to get some examples and hints.
The SMTP service is controlled by a configuration block in the smptserver.xml.
The smtpserver tag defines the boundaries of the configuration block. It encloses
all the relevant configuration for the SMTP server. The behavior of the SMTP service is
controlled by the attributes and children of this tag.
This tag has an optional boolean attribute - *enabled* - that defines whether the service is active or not. The value defaults to "true" if
not present.
The standard children of the smtpserver tag are:
.smtpserver.xml content
|===
| Property name | explanation
| bind
| A list of address:port separed by comma - This is an optional value. If present, this value is a string describing
the IP address to which this service should be bound. If the tag or value is absent then the service
will bind to all network interfaces for the machine on port 25. Port 25 is the well-known/IANA registered port for SMTP.
Port 465 is the well-known/IANA registered port for SMTP over TLS.
| connectBacklog
|The IP address (host name) the MBean Server will bind/listen to.
| tls
| Set to true to support STARTTLS or SSL for the Socket.
To use this you need to copy sunjce_provider.jar to /path/james/lib directory. To create a new keystore execute:
`keytool -genkey -alias james -keyalg RSA -storetype PKCS12 -keystore /path/to/james/conf/keystore`.
The algorithm is optional and only needs to be specified when using something other
than the Sun JCE provider - You could use IbmX509 with IBM Java runtime.
Please note that each SMTP/LMTP server exposed on different port can specify its own keystore, independently from any other
TLS based protocols.
| helloName
| This is a required tag with an optional body that defines the server name
used in the initial service greeting. The tag may have an optional attribute - *autodetect*. If
the autodetect attribute is present and true, the service will use the local hostname
returned by the Java libraries. If autodetect is absent or false, the body of the tag will be used. In
this case, if nobody is present, the value "localhost" will be used.
| connectionTimeout
| This is an optional tag with a non-negative integer body. Connection timeout in seconds.
| connectionLimit
| Set the maximum simultaneous incoming connections for this service.
=====================================================
== File: docs/modules/servers/partials/configure/mailetcontainer.adoc
=====================================================
This documents explains how to configure Mail processing. Mails pass through the MailetContainer. The
MailetContainer is a Matchers (condition for executing a mailet) and Mailets (execution units that perform
actions based on incoming mail) pipeline arranged into processors (List of mailet/matcher pairs allowing
better logical organisation). You can read more about these concepts on
xref:{pages-path}/architecture/index.adoc#_mail_processing[the mailet container feature description].
Apache James Server includes a number of xref:{pages-path}/configure/mailets.adoc[Packaged Mailets] and
xref:{pages-path}/configure/matchers.adoc[Packaged Matchers].
Furthermore, you can write and use with James xref:customization:mail-processing.adoc[your own mailet and matchers].
Consult this link:{sample-configuration-prefix-url}/mailetcontainer.xml[example]
to get some examples and hints.
.mailetcontainer.xml content
|===
| Property name | explanation
| context.postmaster
| The body of this element is the address that the server
will consider its postmaster address. This address will be listed as the sender address
of all error messages that originate from James. Also, all messages addressed to
postmaster@<servername>, where <servername> is one of the domain names whose
mail is being handled by James, will be redirected to this email address.
Set this to the appropriate email address for error reports
If this is set to a non-local email address, the mail server
will still function, but will generate a warning on startup.
| spooler.threads
| Number of simultaneous threads used to spool the mails. Set to zero, it disables mail processing - use with
caution.
| spooler.errorRepository
| Mail repository to store email in after several unrecoverable errors. Mails failing processing, for which
the Mailet Container could not handle Error, will be stored there after their processing had been attempted
5 times. Note that if standard java Exception occurs, *Error handling* section below will be applied
instead.
|===
== The Mailet Tag
The mailet tag has two required attributes, condition tag and *class* tag.
The condition tag need to be one of these tag:
- The *match* attribute is set to the value of the specific Matcher class to be instantiated with a an
optional argument. If present, the argument is separated from the Matcher class name by an '='. Semantic
interpretation of the argument is left to the particular mailet.
Example:
=====================================================
== File: docs/modules/servers/partials/configure/webadmin.adoc
=====================================================
The web administration supports for now the CRUD operations on:
- The domains
- The users
- Their mailboxes
- Their quotas
- Managing mail repositories
- Performing cassandra migrations [small]*_(only for Distributed James Server that uses cassandra as backend)_*
- And much more, as described in the following sections.
*WARNING*: This API allows authentication only via the use of JWT. If not
configured with JWT, an administrator should ensure an attacker can not
use this API.
By the way, some endpoints are not filtered by authentication. Those endpoints are not related to data stored in James,
for example: Swagger documentation & James health checks.
== Configuration
Consult this link:{sample-configuration-prefix-url}/webadmin.properties[example]
to get some examples and hints.
.webadmin.properties content
|===
| Property name | explanation
| enabled
| Define if WebAdmin is launched (default: false)
| port
| Define WebAdmin's port (default: 8080)
| host
| Define WebAdmin's host (default: localhost, use 0.0.0.0 to listen on all addresses)
| cors.enable
| Allow the Cross-origin resource sharing (default: false)
| cors.origin
| Specify ths CORS origin (default: null)
| password
| Uses a configured static value for authentication. It relies on the Password header.
It supports several passwords, configured as a coma separated list.
....
password=secretA,secretB,secretC
....
Will allow request with
=====================================================
== File: docs/modules/servers/partials/configure/smtp-limitation-hoot.adoc
=====================================================
=== EnforceHeaderLimitationsMessageHook
The `EnforceHeaderLimitationsMessageHook` is used to enforce limitations on the headers of incoming emails. It ensures that emails comply with configurable restrictions on the number of header lines and the total size of headers.
To configure this hook, add it to the `<handlerchain>` section of your SMTP server configuration:
* `maxLines`: The maximum number of header lines allowed (default: 500).
* `maxSize`: The maximum total size of headers in kilobytes (default: 64 KB).
- If the number of header lines exceeds the `maxLines` limit, the email is rejected with the SMTP error code `552 Too many header lines`.
- If the total size of headers exceeds the `maxSize` limit, the email is rejected with the SMTP error code `552 Header size too large`.
- If both limits are respected, the hook declines further processing, allowing the email to proceed.
==== Example
Here is an example of a SetUp using this hook:
[source,xml]
....
<smtpserver enabled="true">
<handlerchain>
<handler class="org.apache.james.smtpserver.EnforceHeaderLimitationsMessageHook">
<maxLines>500</maxLines>
<maxSize>64</maxSize>
</handler>
<handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>
</handlerchain>
<gracefulShutdown>false</gracefulShutdown>
</smtpserver>
....
----
=====================================================
== File: docs/modules/servers/partials/configure/recipientrewritetable.adoc
=====================================================
Here are explanations on the different kinds about xref:{pages-path}/architecture/index.adoc#_recipient_rewrite_tables[recipient rewriting].
Consult this link:{sample-configuration-prefix-url}/recipientrewritetable.xml[example]
to get some examples and hints.
.recipientrewritetable.xml
|===
| Property name | explanation
| recursiveMapping
| If set to false only the first mapping will get processed - Default true.
| mappingLimit
|By setting the mappingLimit you can specify how much mapping will get processed before a bounce will send. This avoids infinity loops. Default 10.
|===
=====================================================
== File: docs/modules/servers/partials/configure/rabbitmq.adoc
=====================================================
This configuration helps you configure components using RabbitMQ.
Consult this link:{sample-configuration-prefix-url}/rabbitmq.properties[example]
to get some examples and hints.
== RabbitMQ Configuration
.rabbitmq.properties content
|===
| Property name | explanation
| uri
| the amqp URI pointing to RabbitMQ server. If you use a vhost, specify it as well at the end of the URI.
Details about amqp URI format is in https://www.rabbitmq.com/uri-spec.html[RabbitMQ URI Specification]
| management.uri
| the URI pointing to RabbitMQ Management Service. James need to retrieve some information about listing queues
from this service in runtime.
Details about URI format is in https://www.rabbitmq.com/management.html#usage-ui[RabbitMQ Management URI]
| management.user
| username used to access management service
| management.password
| password used to access management service
| connection.pool.retries
| Configure retries count to retrieve a connection. Exponential backoff is performed between each retries.
Optional integer, defaults to 10
| connection.pool.min.delay.ms
| Configure initial duration (in ms) between two connection retries. Exponential backoff is performed between each retries.
Optional integer, defaults to 100
| channel.pool.retries
| Configure retries count to retrieve a channel. Exponential backoff is performed between each retries.
Optional integer, defaults to 3
| channel.pool.max.delay.ms
| Configure timeout duration (in ms) to obtain a rabbitmq channel. Defaults to 30 seconds.
Optional integer, defaults to 30 seconds.
| channel.pool.size
| Configure the size of the channel pool.
Optional integer, defaults to 3
| driver.network.recovery.interval
| Optional, non-negative integer, default to 100ms. The interval (in ms) that RabbitMQ driver will automatic recovery wait before attempting to reconnect. See https://www.rabbitmq.com/client-libraries/java-api-guide#connection-recovery
| ssl.enabled
=====================================================
== File: docs/modules/servers/partials/configure/spam.adoc
=====================================================
Anti-Spam system can be configured via two main different mechanisms:
* SMTP Hooks;
* Mailets;
== AntiSpam SMTP Hooks
"FastFail" SMTP Hooks acts to reject before spooling
on the SMTP level. The Spam detector hook can be used as a fastfail hook, therefore
Spam filtering system must run as a server on the same machine as the Apache James Server.
SMTP Hooks for non-existent users, DSN filter, domains with invalid MX record,
can also be configured.
*SpamAssassinHandler* (experimental) also enables to classify the messages as spam or not
with a configurable score threshold (`0.0`, non-configurable). Only a global database is supported. Per user spam
detection is not supported by this hook.
== AntiSpam Mailets
James' repository provide two AntiSpam mailets: SpamAssassin and RspamdScanner.
We can select one in them for filtering spam mail.
* *SpamAssassin and RspamdScanner* Mailet is designed to classify the messages as spam or not
with a configurable score threshold. Usually a message will only be
considered as spam if it matches multiple criteria; matching just a single test
will not usually be enough to reach the threshold. Note that this mailet is executed on a per-user basis.
=== Rspamd
The Rspamd extension (optional) requires an extra configuration file `rspamd.properties` to configure RSpamd connection
.rspamd.properties content
|===
| Property name | explanation
| rSpamdUrl
| URL defining the Rspamd's server. Eg: http://rspamd:11334
| rSpamdPassword
| Password for pass authentication when request to Rspamd's server. Eg: admin
| rspamdTimeout
| Integer. Timeout for http requests to Rspamd. Default to 15 seconds.
| perUserBayes
| Boolean. Whether to scan/learn mails using per-user Bayes. Default to false.
|===
`RspamdScanner` supports the following options:
=====================================================
== File: docs/modules/servers/partials/configure/remote-delivery-error-handling.adoc
=====================================================
The advanced server mailQueue implemented by combining RabbitMQ for messaging and {mailet-repository-path-prefix} for administrative operation
does not support delays.
Delays are an important feature for Mail Exchange servers, allowing to defer in time the retries, potentially letting the
time for the remote server to recover. Furthermore, they enable implementation of advanced features like throttling and
rate limiting of emails sent to a given domain.
As such, the use of the distributed server as a Mail Exchange server is currently discouraged.
However, for operators willing to inter-operate with a limited set of well-identified, trusted remote mail servers, such
limitation can be reconsidered. The main concern then become error handling for remote mail server failures. The following
document will present a well tested strategy for Remote Delivery error handling leveraging standards Mail Processing components
and mechanisms.
== Expectations
Such a solution should:
- Attempt delivery a single time
- Store transient and permanent failure in different mail repositories
- After a given number of tries, transient failures should be considered permanent
== Design
image::remote-delivery-error-handling.png[Schema detailing the proposed solution]
- Remote Delivery is configured for performing a single retry.
- Remote Delivery attaches the error code and if the failure is permanent/temporary when transferring failed emails to the
bounce processor.
- The specified bounce processor will categorise the failure, and store temporary and permanent failures in different
mail repositories.
- A reprocessing of the temporary delivery errors mailRepository needs to be scheduled in a recurring basis. For
instance via a CRON job calling the right webadmin endpoint.
- A counter ensures that a configured number of delivery tries is not exceeded.
=== Limitation
MailRepositories are not meant for transient data storage, and thus are prone to tombstone issues.
This might be acceptable if you need to send mail to well-known peers. For instance handling your mail gateway failures.
However a Mail Exchange server doing relay on the internet would quickly hit this limitation.
Also note that external triggering of the retry process is needed.
== Operation
Here is an example of configuration achieving the proposed solution:
[subs=attributes+,xml]
----
=====================================================
== File: docs/modules/servers/partials/configure/forExtensionsPartial.adoc
=====================================================
== For extensions
By omitting these files, no extra behaviour is added.
** xref:{xref-base}/vault.adoc[*deletedMessageVault.properties*] allows to configure the DeletedMessageVault link:{sample-configuration-prefix-url}/sample-configuration/deletedMessageVault.properties[example]
** xref:{xref-base}/listeners.adoc[*listeners.xml*] enables configuration of Mailbox Listeners link:{sample-configuration-prefix-url}/sample-configuration/listeners.xml[example]
** xref:{xref-base}/extensions.adoc[*extensions.properties*] allows to extend James behaviour by loading your extensions in it link:{sample-configuration-prefix-url}/sample-configuration/extensions.properties[example]
** xref:{xref-base}/jvm.adoc[*jvm.properties*] lets you specify additional system properties without cluttering your command line
** xref:{xref-base}/spam.adoc[This page] documents Anti-Spam setup with SpamAssassin, Rspamd.
** xref:{xref-base}/remote-delivery-error-handling.adoc[This page] proposes a simple strategy for RemoteDelivery error handling.
** xref:{xref-base}/collecting-contacts.adoc[This page] documents contact collection
** xref:{xref-base}/collecting-events.adoc[This page] documents event collection
** xref:{xref-base}/dsn.adoc[This page] specified how to support SMTP Delivery Submission Notification (link:https://tools.ietf.org/html/rfc3461[RFC-3461])
** xref:{xref-base}/droplists.adoc[This page] allows configuring drop lists.
** xref:{xref-base}/mta-sts.adoc[This page] for configuring MTA-STS (RFC-8461)
=====================================================
== File: docs/modules/servers/partials/configure/dns.adoc
=====================================================
Consult this link:{sample-configuration-prefix-url}/dnsservice.xml[example]
to get some examples and hints.
Specifies DNS Server information for use by various components inside Apache James Server.
DNS Transport services are controlled by a configuration block in
the dnsservice.xml. This block affects SMTP remote delivery.
The dnsservice tag defines the boundaries of the configuration
block. It encloses all the relevant configuration for the DNS server.
The behavior of the DNS service is controlled by the attributes and
children of this tag.
.dnsservice.xml content
|===
| Property name | explanation
| servers
| Information includes a list of DNS Servers to be used by James. These are
specified by the server elements, each of which is a child element of the
servers element. Each server element is the IP address of a single DNS server.
The server elements can have multiple server children. Enter ip address of your DNS server, one IP address per server
element. If no DNS servers are found and you have not specified any below, 127.0.0.1 will be used
| autodiscover
| true or false - If you use autodiscover and add DNS servers manually a combination of all the DNS servers will be used.
If autodiscover is true, James will attempt to autodiscover the DNS servers configured on your underlying system.
Currently, this works if the OS has a unix-like /etc/resolv.xml,
or the system is Windows based with ipconfig or winipcfg. Change autodiscover to false if you would like to turn off autodiscovery
and set the DNS servers manually in the servers section
| authoritative
| *true/false* - This tag specifies whether or not
to require authoritative (non-cached) DNS records; to only accept DNS responses that are
authoritative for the domain. It is primarily useful in an intranet/extranet environment.
This should always be *false* unless you understand the implications.
| maxcachesize
| Maximum number of entries to maintain in the DNS cache (typically 50000)
| negativeCacheTTL
| Sets the maximum length of time that negative records will be stored in the DNS negative cache in
seconds (a negative record means the name has not been found in the DNS). Values for this cache
can be positive meaning the time in seconds before retrying to resolve the name, zero meaning no
cache or a negative value meaning infinite caching.
| singleIPperMX
| true or false (default) - Specifies if Apache James Server must try a single server for each multihomed mx host
| verbose
=====================================================
== File: docs/modules/servers/partials/configure/redis.adoc
=====================================================
This configuration helps you configure components using Redis. This so far only includes optional rate limiting component.
Consult this link:https://github.com/apache/james-project/blob/fabfdf4874da3aebb04e6fe4a7277322a395536a/server/mailet/rate-limiter-redis/redis.properties[example]
to get some examples and hints.
== Redis Configuration
.redis.properties content
|===
| Property name | explanation
| redisURL
| the Redis URI pointing to Redis server. Compulsory. The value must fit redis.topology
Reference: https://github.com/redis/lettuce/wiki/Redis-URI-and-connection-details
| redis.topology
| Redis server topology. Defaults to standalone. Possible values: standalone, cluster, master-replica, sentinel
| redis.readFrom
| The property to determine how Lettuce routes read operations to Redis server with topologies other than standalone. Defaults to master. Possible values: master, masterPreferred, replica, replicaPreferred, any
Reference: https://github.com/redis/lettuce/wiki/ReadFrom-Settings
| redis.sentinelPassword
| Redis sentinel password. If not specified, the redis driver will not set password for sentinel.
| redis.ssl.enabled
| To enable ssl connection. Defaults to false. Read TLS/SSL for more details.
| redis.ioThreads
| IO threads to be using for the underlying Netty networking resources. If unspecified driver defaults applies.
| redis.workerThreads
| Worker threads to be using for the underlying driver. If unspecified driver defaults applies.
|===
== Enabling Multithreading in Redis
Redis 6 and later versions support multithreading, but by default, Redis operates as a single-threaded process.
On a virtual machine with multiple CPU cores, you can enhance Redis performance by enabling multithreading. This can significantly improve I/O operations, particularly for workloads with high concurrency or large data volumes.
See link:https://redis.io/docs/latest/operate/oss_and_stack/management/config-file/[THREADED I/O section].
Example if you have a 4 cores CPU, you can enable the following lines in the `redis.conf` file:
....
io-threads 3
io-threads-do-reads yes
....
=====================================================
== File: docs/modules/servers/partials/configure/healthcheck.adoc
=====================================================
Consult this link:{sample-configuration-prefix-url}/healthcheck.properties[example]
to get some examples and hints.
Use this configuration to define the initial delay and period for the PeriodicalHealthChecks. It is only applicable with Guice products.
.healthcheck.properties content
|===
| Property name | explanation
| healthcheck.period
| Define the period between two periodical health checks (default: 60s). Units supported are (ms - millisecond, s - second, m - minute, h - hour, d - day). Default unit is millisecond.
| reception.check.user
| User to be using for running the "mail reception" health check. The user must exist.
If not specified, the mail reception check is a noop.
| reception.check.timeout
| Period after which mail reception is considered faulty. Defaults to one minute.
| additional.healthchecks
| List of fully qualified HealthCheck class names in addition to James' default healthchecks. Default to empty list.
|===
=====================================================
== File: docs/modules/servers/partials/configure/usersrepository.adoc
=====================================================
User repositories are required to store James user information and authentication data.
Consult this link:{sample-configuration-prefix-url}/usersrepository.xml[example]
to get some examples and hints.
== The user data model
A user has two attributes: username and password.
A valid user should satisfy these criteria:
* username and password cannot be null or empty
* username should not be longer than 255 characters
* username can not contain '/'
* username can not contain multiple domain delimiter('@')
* A username can have only a local part when virtualHosting is disabled. E.g.'myUser'
* When virtualHosting is enabled, a username should have a domain part, and the domain part should be concatenated
after a domain delimiter('@'). E.g. 'myuser@james.org'
A user is always considered as lower cased, so 'myUser' and 'myuser' are the same user, and can be used as well as
recipient local part than as login for different protocols.
== Configuration
.usersrepository.xml content
|===
| Property name | explanation
| enableVirtualHosting
| true or false. Add domain support for users (default: false, except for Cassandra Users Repository)
| administratorId
|user's name. Allow a user to access to the https://tools.ietf.org/html/rfc4616#section-2[impersonation command],
acting on the behalf of any user.
| administratorIds
| List of usernames. Allows multiple administrators to access the https://tools.ietf.org/html/rfc4616#section-2[impersonation command],
acting on behalf of any user by specifying multiple `<administratorId>` entries inside the `<administratorIds>` block.
Notes: Only one of the above `<administratorId>` property or this `<administratorIds>` block should be used to specify the administrator(s).
| verifyFailureDelay
| Delay after a failed authentication attempt with an invalid user name or password. Duration string defaulting to seconds, e.g. `2`, `2s`, `2000ms`. Default `0s` (disabled).
| algorithm
| use a specific hash algorithm to compute passwords, with optional mode `plain` (default) or `salted`; e.g. `SHA-512`, `SHA-512/plain`, `SHA-512/salted`, `PBKDF2`, `PBKDF2-SHA512` (default).
Note: When using `PBKDF2` or `PBKDF2-SHA512` one can specify the iteration count and the key size in bytes. You can specify it as part of the algorithm. EG: `PBKDF2-SHA512-2000-512` will use
2000 iterations with a key size of 512 bytes.
| hashingMode
=====================================================
== File: docs/modules/servers/partials/configure/opensearch.adoc
=====================================================
== Search overrides
*Search overrides* allow resolution of predefined search queries against alternative sources of data
and allow bypassing OpenSearch. This is useful to handle most resynchronisation queries that
are simple enough to be resolved against {package-tag}.
Possible values are:
- `org.apache.james.mailbox.{package-tag}.search.AllSearchOverride` Some IMAP clients uses SEARCH ALL to fully list messages in
a mailbox and detect deletions. This is typically done by clients not supporting QRESYNC and from an IMAP perspective
is considered an optimisation as less data is transmitted compared to a FETCH command. Resolving such requests against
Cassandra is enabled by this search override and likely desirable.
- `org.apache.james.mailbox.{package-tag}.search.UidSearchOverride`. Same as above but restricted by ranges.
- `org.apache.james.mailbox.{package-tag}.search.DeletedSearchOverride`. Find deleted messages by looking up in the relevant Cassandra
table.
- `org.apache.james.mailbox.{package-tag}.search.DeletedWithRangeSearchOverride`. Same as above but limited by ranges.
- `org.apache.james.mailbox.{package-tag}.search.NotDeletedWithRangeSearchOverride`. List non deleted messages in a given range.
Lists all messages and filters out deleted message thus this is based on the following heuristic: most messages are not marked as deleted.
- `org.apache.james.mailbox.{package-tag}.search.UnseenSearchOverride`. List unseen messages in the corresponding cassandra projection.
Please note that custom overrides can be defined here. `opensearch.search.overrides` allow specifying search overrides and is a
coma separated list of search override FQDNs. Default to none.
EG:
[subs=attributes+]
----
opensearch.search.overrides=org.apache.james.mailbox.{package-tag}.search.AllSearchOverride,org.apache.james.mailbox.{package-tag}.search.DeletedSearchOverride, org.apache.james.mailbox.{package-tag}.search.DeletedWithRangeSearchOverride,org.apache.james.mailbox.{package-tag}.search.NotDeletedWithRangeSearchOverride,org.apache.james.mailbox.{package-tag}.search.UidSearchOverride,org.apache.james.mailbox.{package-tag}.search.UnseenSearchOverride
----
Consult this link:{sample-configuration-prefix-url}/opensearch.properties[example]
to get some examples and hints.
If you want more explanation about OpenSearch configuration, you should visit the dedicated https://opensearch.org/[documentation].
== OpenSearch Configuration
This file section is used to configure the connection tp an OpenSearch cluster.
Here are the properties allowing to do so :
.opensearch.properties content
|===
| Property name | explanation
| opensearch.clusterName
| Is the name of the cluster used by James.
| opensearch.nb.shards
| Number of shards for index provisionned by James
=====================================================
== File: docs/modules/servers/partials/configure/pop3.adoc
=====================================================
Consult this link:{sample-configuration-prefix-url}/pop3server.xml[example]
to get some examples and hints.
The POP3 service is controlled by a configuration block in the pop3server.xml.
The pop3server tag defines the boundaries of the configuration block. It encloses
all the relevant configuration for the POP3 server. The behavior of the POP service is
controlled by the attributes and children of this tag.
This tag has an optional boolean attribute - *enabled* - that defines whether the service is active or not.
The value defaults to "true" if not present.
The standard children of the pop3server tag are:
.jmx.properties content
|===
| Property name | explanation
| bind
| Configure this to bind to a specific inetaddress. This is an optional integer value.
This value is the port on which this POP3 server is configured
to listen. If the tag or value is absent then the service
will bind to all network interfaces for the machine If the tag or value is omitted,
the value will default to the standard POP3 port, 11
port 995 is the well-known/IANA registered port for POP3S ie over SSL/TLS
port 110 is the well-known/IANA registered port for Standard POP3
| connectionBacklog
|
| tls
| Set to true to support STARTTLS or SSL for the Socket.
To create a new keystore execute:
`keytool -genkey -alias james -keyalg RSA -storetype PKCS12 -keystore /path/to/james/conf/keystore`
Please note that each POP3 server exposed on different port can specify its own keystore, independently from any other
TLS based protocols. Read xref:{pages-path}/configure/ssl.adoc[SSL configuration page] for more information.
| handler.helloName
| This is the name used by the server to identify itself in the POP3
protocol. If autodetect is TRUE, the server will discover its
own host name and use that in the protocol. If discovery fails,
the value of 'localhost' is used. If autodetect is FALSE, James
will use the specified value.
| handler.connectiontimeout
| Connection timeout in seconds
| handler.connectionLimit
| Set the maximum simultaneous incoming connections for this service
| handler.connectionLimitPerIP
=====================================================
== File: docs/modules/servers/partials/MetricsMailet.adoc
=====================================================
=== MetricsMailet
This Metrics mailet increments a counter on every incoming emails.
This counter is accessible via JMX, or grafana. Read xref:distributed/operate/metrics.adoc[more about metrics].
Example :
....
<mailet match="all" class="MetricsMailet">
<metricName>relayDenied</metricName>
</mailet>
....
Will increment a counter relayDenied
=====================================================
== File: docs/modules/servers/partials/PartHasContentType.adoc
=====================================================
=== PartHasContentType
Checks if at least one attachment has a content type header which matches any
element of a comma-separated or space-separated list of content type masks.
Syntax: *match="PartHasContentType=[-d] masks"*
The match is case-insensitive.
Multiple content types name masks can be specified, e.g.: 'application/json,image/png'.
If '*-d*' is coded, some debug info will be logged.
=====================================================
== File: docs/modules/servers/partials/SMTPAuthUserIs.adoc
=====================================================
=== SMTPAuthUserIs
Matches mails that are sent by an SMTP authenticated user present in a supplied list.
If the sender was not authenticated it will not match.
Configuration string: a comma, tab or space separated list of James users.
....
<mailet match="SMTPAuthUserIs=<list-of-user-names>" class="<any-class>">
....
=====================================================
== File: docs/modules/servers/partials/AddDeliveredToHeader.adoc
=====================================================
=== AddDeliveredToHeader
This mailet adds the de-facto standard QMail Delivered-To header.
Upon processing by LocalDelivery, a Delivered-To header matching the recipient mail address will be added before storage.
Example
....
<mailet match="All" class="AddDeliveredToHeader">
....
=====================================================
== File: docs/modules/servers/partials/SMIMEDecrypt.adoc
=====================================================
=== SMIMEDecrypt
This mailet decrypts a s/mime encrypted message. It takes as input an
encrypted message and it tries to dechiper it using the key specified in its
configuration. If the decryption is successful the mail will be changed and
it will contain the decrypted message. The mail attribute
*org.apache.james.SMIMEDecrypt* will contain the public
certificate of the key used in the process.
The configuration parameters of this mailet are summarized below. The firsts
define the keystore where the key that will be used to decrypt messages is
saved.
* keyStoreType (default: system dependent): defines the type of the store.
Usually jks, pkcs12 or pkcs7
* keyStoreFileName (mandatory): private key store path.
* keyStorePassword (default: ""): private key store password
The other parameters define which private key have to be used. (if the store
contains more than one key).
* keyAlias: private key alias.
* keyPass: private key password
=====================================================
== File: docs/modules/servers/partials/SizeGreaterThan.adoc
=====================================================
=== SizeGreaterThan
Checks whether the message (entire message, not just content) is greater
than a certain number of bytes. You can use 'k' and 'm' as optional postfixes.
In other words, "1m" is the same as writing "1024k", which is the same as
"1048576".
=====================================================
== File: docs/modules/servers/assets/images/storage_james_postgres.svg
=====================================================
<svg version="1.1" viewBox="0.0 0.0 960.0 720.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><clipPath id="p.0"><path d="m0 0l960.0 0l0 720.0l-960.0 0l0 -720.0z" clip-rule="nonzero"/></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l960.0 0l0 720.0l-960.0 0z" fill-rule="evenodd"/><path fill="#cfe2f3" d="m191.9685 138.49081l0 0c0 -12.428581 27.624374 -22.503937 61.70079 -22.503937l0 0c34.0764 0 61.70079 10.075356 61.70079 22.503937l0 0c0 12.428574 -27.62439 22.503937 -61.70079 22.503937l0 0c-34.076416 0 -61.70079 -10.075363 -61.70079 -22.503937z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m191.9685 138.49081l0 0c0 -12.428581 27.624374 -22.503937 61.70079 -22.503937l0 0c34.0764 0 61.70079 10.075356 61.70079 22.503937l0 0c0 12.428574 -27.62439 22.503937 -61.70079 22.503937l0 0c-34.076416 0 -61.70079 -10.075363 -61.70079 -22.503937z" fill-rule="evenodd"/><path fill="#000000" d="m222.79604 142.16081l1.359375 -0.1875q0.0625 1.3125 0.5 1.796875q0.4375 0.484375 1.203125 0.484375q0.578125 0 0.984375 -0.265625q0.421875 -0.265625 0.578125 -0.703125q0.15625 -0.453125 0.15625 -1.4375l0 -7.890625l1.515625 0l0 7.796875q0 1.4375 -0.359375 2.234375q-0.34375 0.78125 -1.09375 1.203125q-0.75 0.421875 -1.765625 0.421875q-1.515625 0 -2.3125 -0.875q-0.796875 -0.875 -0.765625 -2.578125zm14.0 2.21875q-0.78125 0.671875 -1.5 0.953125q-0.71875 0.265625 -1.546875 0.265625q-1.375 0 -2.109375 -0.671875q-0.734375 -0.671875 -0.734375 -1.703125q0 -0.609375 0.28125 -1.109375q0.28125 -0.515625 0.71875 -0.8125q0.453125 -0.3125 1.015625 -0.46875q0.421875 -0.109375 1.25 -0.203125q1.703125 -0.203125 2.515625 -0.484375q0 -0.296875 0 -0.375q0 -0.859375 -0.390625 -1.203125q-0.546875 -0.484375 -1.609375 -0.484375q-0.984375 0 -1.46875 0.359375q-0.46875 0.34375 -0.6875 1.21875l-1.375 -0.1875q0.1875 -0.875 0.609375 -1.421875q0.4375 -0.546875 1.25 -0.828125q0.8125 -0.296875 1.875 -0.296875q1.0625 0 1.71875 0.25q0.671875 0.25 0.984375 0.625q0.3125 0.375 0.4375 0.953125q0.078125 0.359375 0.078125 1.296875l0 1.875q0 1.96875 0.078125 2.484375q0.09375 0.515625 0.359375 1.0l-1.46875 0q-0.21875 -0.4375 -0.28125 -1.03125zm-0.109375 -3.140625q-0.765625 0.3125 -2.296875 0.53125q-0.875 0.125 -1.234375 0.28125q-0.359375 0.15625 -0.5625 0.46875q-0.1875 0.296875 -0.1875 0.65625q0 0.5625 0.421875 0.9375q0.4375 0.375 1.25 0.375q0.8125 0 1.4375 -0.34375q0.640625 -0.359375 0.9375 -0.984375q0.234375 -0.46875 0.234375 -1.40625l0 -0.515625zm3.6015625 4.171875l0 -8.296875l1.25 0l0 1.15625q0.390625 -0.609375 1.03125 -0.96875q0.65625 -0.375 1.484375 -0.375q0.921875 0 1.515625 0.390625q0.59375 0.375 0.828125 1.0625q0.984375 -1.453125 2.5625 -1.453125q1.234375 0 1.890625 0.6875q0.671875 0.671875 0.671875 2.09375l0 5.703125l-1.390625 0l0 -5.234375q0 -0.84375 -0.140625 -1.203125q-0.140625 -0.375 -0.5 -0.59375q-0.359375 -0.234375 -0.84375 -0.234375q-0.875 0 -1.453125 0.578125q-0.578125 0.578125 -0.578125 1.859375l0 4.828125l-1.40625 0l0 -5.390625q0 -0.9375 -0.34375 -1.40625q-0.34375 -0.46875 -1.125 -0.46875q-0.59375 0 -1.09375 0.3125q-0.5 0.3125 -0.734375 0.921875q-0.21875 0.59375 -0.21875 1.71875l0 4.3125l-1.40625 0zm18.999985 -2.671875l1.453125 0.171875q-0.34375 1.28125 -1.28125 1.984375q-0.921875 0.703125 -2.359375 0.703125q-1.8281097 0 -2.8906097 -1.125q-1.0625 -1.125 -1.0625 -3.140625q0 -2.09375 1.078125 -3.25q1.078125 -1.15625 2.7968597 -1.15625q1.65625 0 2.703125 1.140625q1.0625 1.125 1.0625 3.171875q0 0.125 0 0.375l-6.1874847 0q0.078125 1.375 0.765625 2.109375q0.70310974 0.71875 1.7343597 0.71875q0.78125 0 1.328125 -0.40625q0.546875 -0.40625 0.859375 -1.296875zm-4.6093597 -2.28125l4.6249847 0q-0.09375 -1.046875 -0.53125 -1.5625q-0.671875 -0.8125 -1.734375 -0.8125q-0.96875 0 -1.6406097 0.65625q-0.65625 0.640625 -0.71875 1.71875zm7.2734222 2.46875l1.390625 -0.21875q0.109375 0.84375 0.640625 1.296875q0.546875 0.4375 1.5 0.4375q0.96875 0 1.4375 -0.390625q0.46875 -0.40625 0.46875 -0.9375q0 -0.46875 -0.40625 -0.75q-0.296875 -0.1875 -1.4375 -0.46875q-1.546875 -0.390625 -2.15625 -0.671875q-0.59375 -0.296875 -0.90625 -0.796875q-0.296875 -0.5 -0.296875 -1.109375q0 -0.5625 0.25 -1.03125q0.25 -0.46875 0.6875 -0.78125q0.328125 -0.25 0.890625 -0.40625q0.578125 -0.171875 1.21875 -0.171875q0.984375 0 1.71875 0.28125q0.734375 0.28125 1.078125 0.765625q0.359375 0.46875 0.5 1.28125l-1.375 0.1875q-0.09375 -0.640625 -0.546875 -1.0q-0.453125 -0.359375 -1.265625 -0.359375q-0.96875 0 -1.390625 0.328125q-0.40625 0.3125 -0.40625 0.734375q0 0.28125 0.171875 0.5q0.171875 0.21875 0.53125 0.375q0.21875 0.078125 1.25 0.359375q1.484375 0.390625 2.078125 0.65625q0.59375 0.25 0.921875 0.734375q0.34375 0.484375 0.34375 1.203125q0 0.703125 -0.421875 1.328125q-0.40625 0.609375 -1.1875 0.953125q-0.765625 0.34375 -1.734375 0.34375q-1.625 0 -2.46875 -0.671875q-0.84375 -0.671875 -1.078125 -2.0z" fill-rule="nonzero"/><path fill="#000000" d="m281.5887 145.41081l-1.640625 0l0 -10.453125q-0.59375 0.5625 -1.5625 1.140625q-0.953125 0.5625 -1.71875 0.84375l0 -1.59375q1.375 -0.640625 2.40625 -1.5625q1.03125 -0.921875 1.453125 -1.78125l1.0625 0l0 13.40625z" fill-rule="nonzero"/><path fill="#cfe2f3" d="m191.9685 200.93964l0 0c0 -12.428589 27.624374 -22.503937 61.70079 -22.503937l0 0c34.0764 0 61.70079 10.075348 61.70079 22.503937l0 0c0 12.428574 -27.62439 22.503937 -61.70079 22.503937l0 0c-34.076416 0 -61.70079 -10.075363 -61.70079 -22.503937z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m191.9685 200.93964l0 0c0 -12.428589 27.624374 -22.503937 61.70079 -22.503937l0 0c34.0764 0 61.70079 10.075348 61.70079 22.503937l0 0c0 12.428574 -27.62439 22.503937 -61.70079 22.503937l0 0c-34.076416 0 -61.70079 -10.075363 -61.70079 -22.503937z" fill-rule="evenodd"/><path fill="#000000" d="m222.79604 204.60963l1.359375 -0.1875q0.0625 1.3125 0.5 1.796875q0.4375 0.484375 1.203125 0.484375q0.578125 0 0.984375 -0.265625q0.421875 -0.265625 0.578125 -0.703125q0.15625 -0.453125 0.15625 -1.4375l0 -7.890625l1.515625 0l0 7.796875q0 1.4375 -0.359375 2.234375q-0.34375 0.78125 -1.09375 1.203125q-0.75 0.421875 -1.765625 0.421875q-1.515625 0 -2.3125 -0.875q-0.796875 -0.875 -0.765625 -2.578125zm14.0 2.21875q-0.78125 0.671875 -1.5 0.953125q-0.71875 0.265625 -1.546875 0.265625q-1.375 0 -2.109375 -0.671875q-0.734375 -0.671875 -0.734375 -1.703125q0 -0.609375 0.28125 -1.109375q0.28125 -0.515625 0.71875 -0.8125q0.453125 -0.3125 1.015625 -0.46875q0.421875 -0.109375 1.25 -0.203125q1.703125 -0.203125 2.515625 -0.484375q0 -0.296875 0 -0.375q0 -0.859375 -0.390625 -1.203125q-0.546875 -0.484375 -1.609375 -0.484375q-0.984375 0 -1.46875 0.359375q-0.46875 0.34375 -0.6875 1.21875l-1.375 -0.1875q0.1875 -0.875 0.609375 -1.421875q0.4375 -0.546875 1.25 -0.828125q0.8125 -0.296875 1.875 -0.296875q1.0625 0 1.71875 0.25q0.671875 0.25 0.984375 0.625q0.3125 0.375 0.4375 0.953125q0.078125 0.359375 0.078125 1.296875l0 1.875q0 1.96875 0.078125 2.484375q0.09375 0.515625 0.359375 1.0l-1.46875 0q-0.21875 -0.4375 -0.28125 -1.03125zm-0.109375 -3.140625q-0.765625 0.3125 -2.296875 0.53125q-0.875 0.125 -1.234375 0.28125q-0.359375 0.15625 -0.5625 0.46875q-0.1875 0.296875 -0.1875 0.65625q0 0.5625 0.421875 0.9375q0.4375 0.375 1.25 0.375q0.8125 0 1.4375 -0.34375q0.640625 -0.359375 0.9375 -0.984375q0.234375 -0.46875 0.234375 -1.40625l0 -0.515625zm3.6015625 4.171875l0 -8.296875l1.25 0l0 1.15625q0.390625 -0.609375 1.03125 -0.96875q0.65625 -0.375 1.484375 -0.375q0.921875 0 1.515625 0.390625q0.59375 0.375 0.828125 1.0625q0.984375 -1.453125 2.5625 -1.453125q1.234375 0 1.890625 0.6875q0.671875 0.671875 0.671875 2.09375l0 5.703125l-1.390625 0l0 -5.234375q0 -0.84375 -0.140625 -1.203125q-0.140625 -0.375 -0.5 -0.59375q-0.359375 -0.234375 -0.84375 -0.234375q-0.875 0 -1.453125 0.578125q-0.578125 0.578125 -0.578125 1.859375l0 4.828125l-1.40625 0l0 -5.390625q0 -0.9375 -0.34375 -1.40625q-0.34375 -0.46875 -1.125 -0.46875q-0.59375 0 -1.09375 0.3125q-0.5 0.3125 -0.734375 0.921875q-0.21875 0.59375 -0.21875 1.71875l0 4.3125l-1.40625 0zm18.999985 -2.671875l1.453125 0.171875q-0.34375 1.28125 -1.28125 1.984375q-0.921875 0.703125 -2.359375 0.703125q-1.8281097 0 -2.8906097 -1.125q-1.0625 -1.125 -1.0625 -3.140625q0 -2.09375 1.078125 -3.25q1.078125 -1.15625 2.7968597 -1.15625q1.65625 0 2.703125 1.140625q1.0625 1.125 1.0625 3.171875q0 0.125 0 0.375l-6.1874847 0q0.078125 1.375 0.765625 2.109375q0.70310974 0.71875 1.7343597 0.71875q0.78125 0 1.328125 -0.40625q0.546875 -0.40625 0.859375 -1.296875zm-4.6093597 -2.28125l4.6249847 0q-0.09375 -1.046875 -0.53125 -1.5625q-0.671875 -0.8125 -1.734375 -0.8125q-0.96875 0 -1.6406097 0.65625q-0.65625 0.640625 -0.71875 1.71875zm7.2734222 2.46875l1.390625 -0.21875q0.109375 0.84375 0.640625 1.296875q0.546875 0.4375 1.5 0.4375q0.96875 0 1.4375 -0.390625q0.46875 -0.40625 0.46875 -0.9375q0 -0.46875 -0.40625 -0.75q-0.296875 -0.1875 -1.4375 -0.46875q-1.546875 -0.390625 -2.15625 -0.671875q-0.59375 -0.296875 -0.90625 -0.796875q-0.296875 -0.5 -0.296875 -1.109375q0 -0.5625 0.25 -1.03125q0.25 -0.46875 0.6875 -0.78125q0.328125 -0.25 0.890625 -0.40625q0.578125 -0.171875 1.21875 -0.171875q0.984375 0 1.71875 0.28125q0.734375 0.28125 1.078125 0.765625q0.359375 0.46875 0.5 1.28125l-1.375 0.1875q-0.09375 -0.640625 -0.546875 -1.0q-0.453125 -0.359375 -1.265625 -0.359375q-0.96875 0 -1.390625 0.328125q-0.40625 0.3125 -0.40625 0.734375q0 0.28125 0.171875 0.5q0.171875 0.21875 0.53125 0.375q0.21875 0.078125 1.25 0.359375q1.484375 0.390625 2.078125 0.65625q0.59375 0.25 0.921875 0.734375q0.34375 0.484375 0.34375 1.203125q0 0.703125 -0.421875 1.328125q-0.40625 0.609375 -1.1875 0.953125q-0.765625 0.34375 -1.734375 0.34375q-1.625 0 -2.46875 -0.671875q-0.84375 -0.671875 -1.078125 -2.0z" fill-rule="nonzero"/><path fill="#000000" d="m284.0262 206.28151l0 1.578125l-8.828125 0q-0.015625 -0.59375 0.1875 -1.140625q0.34375 -0.90625 1.078125 -1.78125q0.75 -0.875 2.15625 -2.015625q2.171875 -1.78125 2.9375 -2.828125q0.765625 -1.046875 0.765625 -1.96875q0 -0.984375 -0.703125 -1.640625q-0.6875 -0.671875 -1.8125 -0.671875q-1.1875 0 -1.90625 0.71875q-0.703125 0.703125 -0.703125 1.953125l-1.6875 -0.171875q0.171875 -1.890625 1.296875 -2.875q1.140625 -0.984375 3.03125 -0.984375q1.921875 0 3.046875 1.0625q1.125 1.0625 1.125 2.640625q0 0.796875 -0.328125 1.578125q-0.328125 0.78125 -1.09375 1.640625q-0.75 0.84375 -2.53125 2.34375q-1.46875 1.234375 -1.890625 1.6875q-0.421875 0.4375 -0.6875 0.875l6.546875 0z" fill-rule="nonzero"/><path fill="#cfe2f3" d="m194.93439 263.38846l0 0c0 -12.428589 27.624374 -22.503937 61.700775 -22.503937l0 0c34.076416 0 61.700806 10.075348 61.700806 22.503937l0 0c0 12.428589 -27.62439 22.503937 -61.700806 22.503937l0 0c-34.0764 0 -61.700775 -10.075348 -61.700775 -22.503937z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m194.93439 263.38846l0 0c0 -12.428589 27.624374 -22.503937 61.700775 -22.503937l0 0c34.076416 0 61.700806 10.075348 61.700806 22.503937l0 0c0 12.428589 -27.62439 22.503937 -61.700806 22.503937l0 0c-34.0764 0 -61.700775 -10.075348 -61.700775 -22.503937z" fill-rule="evenodd"/><path fill="#000000" d="m225.7619 267.05844l1.359375 -0.1875q0.0625 1.3125 0.5 1.796875q0.4375 0.484375 1.203125 0.484375q0.578125 0 0.984375 -0.265625q0.421875 -0.265625 0.578125 -0.703125q0.15625 -0.453125 0.15625 -1.4375l0 -7.890625l1.515625 0l0 7.796875q0 1.4375 -0.359375 2.234375q-0.34375 0.78125 -1.09375 1.203125q-0.75 0.421875 -1.765625 0.421875q-1.515625 0 -2.3125 -0.875q-0.796875 -0.875 -0.765625 -2.578125zm14.0 2.21875q-0.78125 0.671875 -1.5 0.953125q-0.71875 0.265625 -1.546875 0.265625q-1.375 0 -2.109375 -0.671875q-0.734375 -0.671875 -0.734375 -1.703125q0 -0.609375 0.28125 -1.109375q0.28125 -0.515625 0.71875 -0.8125q0.453125 -0.3125 1.015625 -0.46875q0.421875 -0.109375 1.25 -0.203125q1.703125 -0.203125 2.515625 -0.484375q0 -0.296875 0 -0.375q0 -0.859375 -0.390625 -1.203125q-0.546875 -0.484375 -1.609375 -0.484375q-0.984375 0 -1.46875 0.359375q-0.46875 0.34375 -0.6875 1.21875l-1.375 -0.1875q0.1875 -0.875 0.609375 -1.421875q0.4375 -0.546875 1.25 -0.828125q0.8125 -0.296875 1.875 -0.296875q1.0625 0 1.71875 0.25q0.671875 0.25 0.984375 0.625q0.3125 0.375 0.4375 0.953125q0.078125 0.359375 0.078125 1.296875l0 1.875q0 1.96875 0.078125 2.484375q0.09375 0.515625 0.359375 1.0l-1.46875 0q-0.21875 -0.4375 -0.28125 -1.03125zm-0.109375 -3.140625q-0.765625 0.3125 -2.296875 0.53125q-0.875 0.125 -1.234375 0.28125q-0.359375 0.15625 -0.5625 0.46875q-0.1875 0.296875 -0.1875 0.65625q0 0.5625 0.421875 0.9375q0.4375 0.375 1.25 0.375q0.8125 0 1.4375 -0.34375q0.640625 -0.359375 0.9375 -0.984375q0.234375 -0.46875 0.234375 -1.40625l0 -0.515625zm3.6015625 4.171875l0 -8.296875l1.25 0l0 1.15625q0.390625 -0.609375 1.03125 -0.96875q0.65625 -0.375 1.484375 -0.375q0.921875 0 1.515625 0.390625q0.59375 0.375 0.828125 1.0625q0.984375 -1.453125 2.5625 -1.453125q1.234375 0 1.890625 0.6875q0.671875 0.671875 0.671875 2.09375l0 5.703125l-1.390625 0l0 -5.234375q0 -0.84375 -0.140625 -1.203125q-0.140625 -0.375 -0.5 -0.59375q-0.359375 -0.234375 -0.84375 -0.234375q-0.875 0 -1.453125 0.578125q-0.578125 0.578125 -0.578125 1.859375l0 4.828125l-1.40625 0l0 -5.390625q0 -0.9375 -0.34375 -1.40625q-0.34375 -0.46875 -1.125 -0.46875q-0.59375 0 -1.09375 0.3125q-0.5 0.3125 -0.734375 0.921875q-0.21875 0.59375 -0.21875 1.71875l0 4.3125l-1.40625 0zm19.0 -2.671875l1.453125 0.171875q-0.34375 1.28125 -1.28125 1.984375q-0.921875 0.703125 -2.359375 0.703125q-1.828125 0 -2.890625 -1.125q-1.0625 -1.125 -1.0625 -3.140625q0 -2.09375 1.078125 -3.25q1.078125 -1.15625 2.796875 -1.15625q1.65625 0 2.703125 1.140625q1.0625 1.125 1.0625 3.171875q0 0.125 0 0.375l-6.1875 0q0.078125 1.375 0.765625 2.109375q0.703125 0.71875 1.734375 0.71875q0.78125 0 1.328125 -0.40625q0.546875 -0.40625 0.859375 -1.296875zm-4.609375 -2.28125l4.625 0q-0.09375 -1.046875 -0.53125 -1.5625q-0.671875 -0.8125 -1.734375 -0.8125q-0.96875 0 -1.640625 0.65625q-0.65625 0.640625 -0.71875 1.71875zm7.2734375 2.46875l1.390625 -0.21875q0.109375 0.84375 0.640625 1.296875q0.546875 0.4375 1.5 0.4375q0.96875 0 1.4375 -0.390625q0.46875 -0.40625 0.46875 -0.9375q0 -0.46875 -0.40625 -0.75q-0.296875 -0.1875 -1.4375 -0.46875q-1.546875 -0.390625 -2.15625 -0.671875q-0.59375 -0.296875 -0.90625 -0.796875q-0.296875 -0.5 -0.296875 -1.109375q0 -0.5625 0.25 -1.03125q0.25 -0.46875 0.6875 -0.78125q0.328125 -0.25 0.890625 -0.40625q0.578125 -0.171875 1.21875 -0.171875q0.984375 0 1.71875 0.28125q0.734375 0.28125 1.078125 0.765625q0.359375 0.46875 0.5 1.28125l-1.375 0.1875q-0.09375 -0.640625 -0.546875 -1.0q-0.453125 -0.359375 -1.265625 -0.359375q-0.96875 0 -1.390625 0.328125q-0.40625 0.3125 -0.40625 0.734375q0 0.28125 0.171875 0.5q0.171875 0.21875 0.53125 0.375q0.21875 0.078125 1.25 0.359375q1.484375 0.390625 2.078125 0.65625q0.59375 0.25 0.921875 0.734375q0.34375 0.484375 0.34375 1.203125q0 0.703125 -0.421875 1.328125q-0.40625 0.609375 -1.1875 0.953125q-0.765625 0.34375 -1.734375 0.34375q-1.625 0 -2.46875 -0.671875q-0.84375 -0.671875 -1.078125 -2.0z" fill-rule="nonzero"/><path fill="#000000" d="m278.38272 266.7772l1.640625 -0.21875q0.28125 1.40625 0.953125 2.015625q0.6875 0.609375 1.65625 0.609375q1.15625 0 1.953125 -0.796875q0.796875 -0.796875 0.796875 -1.984375q0 -1.125 -0.734375 -1.859375q-0.734375 -0.734375 -1.875 -0.734375q-0.46875 0 -1.15625 0.171875l0.1875 -1.4375q0.15625 0.015625 0.265625 0.015625q1.046875 0 1.875 -0.546875q0.84375 -0.546875 0.84375 -1.671875q0 -0.90625 -0.609375 -1.5q-0.609375 -0.59375 -1.578125 -0.59375q-0.953125 0 -1.59375 0.609375q-0.640625 0.59375 -0.8125 1.796875l-1.640625 -0.296875q0.296875 -1.640625 1.359375 -2.546875q1.0625 -0.90625 2.65625 -0.90625q1.09375 0 2.0 0.46875q0.921875 0.46875 1.40625 1.28125q0.5 0.8125 0.5 1.71875q0 0.859375 -0.46875 1.578125q-0.46875 0.703125 -1.375 1.125q1.1875 0.28125 1.84375 1.140625q0.65625 0.859375 0.65625 2.15625q0 1.734375 -1.28125 2.953125q-1.265625 1.21875 -3.21875 1.21875q-1.765625 0 -2.921875 -1.046875q-1.15625 -1.046875 -1.328125 -2.71875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m154.29921 77.191605l212.59843 0l0 247.49605l-212.59843 0z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="8.0,3.0,1.0,3.0" d="m154.29921 77.191605l212.59843 0l0 247.49605l-212.59843 0z" fill-rule="evenodd"/><path fill="#fff2cc" d="m117.20998 178.4357l68.220474 0l0 45.007874l-68.220474 0z" fill-rule="evenodd"/><path stroke="#fff2cc" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="8.0,3.0,1.0,3.0" d="m117.20998 178.4357l68.220474 0l0 45.007874l-68.220474 0z" fill-rule="evenodd"/><path fill="#000000" d="m141.93422 198.17963l0 -7.625l0.9375 0l0 7.625l-0.9375 0zm2.0393524 -2.765625q0 -1.53125 0.84375 -2.265625q0.71875 -0.625 1.734375 -0.625q1.140625 0 1.859375 0.75q0.734375 0.75 0.734375 2.0625q0 1.0625 -0.328125 1.6875q-0.3125 0.609375 -0.921875 0.953125q-0.609375 0.328125 -1.34375 0.328125q-1.15625 0 -1.875 -0.734375q-0.703125 -0.75 -0.703125 -2.15625zm0.953125 0q0 1.0625 0.46875 1.59375q0.46875 0.53125 1.15625 0.53125q0.703125 0 1.15625 -0.53125q0.46875 -0.53125 0.46875 -1.625q0 -1.015625 -0.46875 -1.546875q-0.453125 -0.53125 -1.15625 -0.53125q-0.6875 0 -1.15625 0.53125q-0.46875 0.515625 -0.46875 1.578125zm8.926498 2.078125q-0.53125 0.453125 -1.015625 0.640625q-0.46875 0.171875 -1.015625 0.171875q-0.921875 0 -1.40625 -0.4375q-0.484375 -0.453125 -0.484375 -1.140625q0 -0.40625 0.171875 -0.734375q0.1875 -0.34375 0.484375 -0.546875q0.3125 -0.203125 0.6875 -0.3125q0.265625 -0.0625 0.828125 -0.140625q1.125 -0.125 1.671875 -0.3125q0 -0.203125 0 -0.25q0 -0.578125 -0.265625 -0.8125q-0.359375 -0.3125 -1.0625 -0.3125q-0.65625 0 -0.984375 0.234375q-0.3125 0.234375 -0.453125 0.8125l-0.921875 -0.125q0.125 -0.578125 0.40625 -0.9375q0.296875 -0.375 0.828125 -0.5625q0.546875 -0.203125 1.25 -0.203125q0.71875 0 1.15625 0.171875q0.4375 0.171875 0.640625 0.421875q0.21875 0.25 0.296875 0.640625q0.046875 0.234375 0.046875 0.859375l0 1.25q0 1.296875 0.0625 1.65625q0.0625 0.34375 0.234375 0.65625l-0.96875 0q-0.15625 -0.296875 -0.1875 -0.6875zm-0.078125 -2.078125q-0.515625 0.203125 -1.53125 0.34375q-0.578125 0.078125 -0.828125 0.1875q-0.234375 0.109375 -0.359375 0.3125q-0.125 0.1875 -0.125 0.4375q0 0.375 0.28125 0.625q0.28125 0.25 0.828125 0.25q0.53125 0 0.953125 -0.234375q0.421875 -0.234375 0.625 -0.65625q0.15625 -0.3125 0.15625 -0.9375l0 -0.328125zm5.9733734 2.765625l0 -0.703125q-0.515625 0.828125 -1.546875 0.828125q-0.65625 0 -1.21875 -0.359375q-0.546875 -0.375 -0.859375 -1.015625q-0.296875 -0.65625 -0.296875 -1.5q0 -0.828125 0.28125 -1.5q0.28125 -0.6875 0.828125 -1.046875q0.546875 -0.359375 1.234375 -0.359375q0.5 0 0.890625 0.21875q0.390625 0.203125 0.625 0.546875l0 -2.734375l0.9375 0l0 7.625l-0.875 0zm-2.953125 -2.75q0 1.046875 0.4375 1.578125q0.453125 0.53125 1.0625 0.53125q0.609375 0 1.03125 -0.5q0.4375 -0.515625 0.4375 -1.53125q0 -1.140625 -0.4375 -1.671875q-0.4375 -0.53125 -1.078125 -0.53125q-0.609375 0 -1.03125 0.515625q-0.421875 0.5 -0.421875 1.609375z" fill-rule="nonzero"/><path fill="#000000" d="m132.44435 211.17963l-0.859375 0l0 -7.625l0.9375 0l0 2.71875q0.59375 -0.75 1.5 -0.75q0.515625 0 0.96875 0.21875q0.453125 0.203125 0.75 0.578125q0.296875 0.359375 0.453125 0.890625q0.171875 0.53125 0.171875 1.125q0 1.421875 -0.703125 2.203125q-0.703125 0.765625 -1.6875 0.765625q-0.96875 0 -1.53125 -0.8125l0 0.6875zm0 -2.796875q0 0.984375 0.265625 1.421875q0.4375 0.734375 1.1875 0.734375q0.625 0 1.0625 -0.53125q0.453125 -0.546875 0.453125 -1.59375q0 -1.078125 -0.4375 -1.59375q-0.421875 -0.515625 -1.03125 -0.515625q-0.609375 0 -1.0625 0.53125q-0.4375 0.53125 -0.4375 1.546875zm8.676498 2.109375q-0.53125 0.453125 -1.015625 0.640625q-0.46875 0.171875 -1.015625 0.171875q-0.921875 0 -1.40625 -0.4375q-0.484375 -0.453125 -0.484375 -1.140625q0 -0.40625 0.171875 -0.734375q0.1875 -0.34375 0.484375 -0.546875q0.3125 -0.203125 0.6875 -0.3125q0.265625 -0.0625 0.828125 -0.140625q1.125 -0.125 1.671875 -0.3125q0 -0.203125 0 -0.25q0 -0.578125 -0.265625 -0.8125q-0.359375 -0.3125 -1.0625 -0.3125q-0.65625 0 -0.984375 0.234375q-0.3125 0.234375 -0.453125 0.8125l-0.921875 -0.125q0.125 -0.578125 0.40625 -0.9375q0.296875 -0.375 0.828125 -0.5625q0.546875 -0.203125 1.25 -0.203125q0.71875 0 1.15625 0.171875q0.4375 0.171875 0.640625 0.421875q0.21875 0.25 0.296875 0.640625q0.046875 0.234375 0.046875 0.859375l0 1.25q0 1.296875 0.0625 1.65625q0.0625 0.34375 0.234375 0.65625l-0.96875 0q-0.15625 -0.296875 -0.1875 -0.6875zm-0.078125 -2.078125q-0.515625 0.203125 -1.53125 0.34375q-0.578125 0.078125 -0.828125 0.1875q-0.234375 0.109375 -0.359375 0.3125q-0.125 0.1875 -0.125 0.4375q0 0.375 0.28125 0.625q0.28125 0.25 0.828125 0.25q0.53125 0 0.953125 -0.234375q0.421875 -0.234375 0.625 -0.65625q0.15625 -0.3125 0.15625 -0.9375l0 -0.328125zm2.3796234 2.765625l0 -7.625l0.9375 0l0 7.625l-0.9375 0zm5.9924774 -0.6875q-0.53125 0.453125 -1.015625 0.640625q-0.46875 0.171875 -1.015625 0.171875q-0.921875 0 -1.40625 -0.4375q-0.484375 -0.453125 -0.484375 -1.140625q0 -0.40625 0.171875 -0.734375q0.1875 -0.34375 0.484375 -0.546875q0.3125 -0.203125 0.6875 -0.3125q0.265625 -0.0625 0.828125 -0.140625q1.125 -0.125 1.671875 -0.3125q0 -0.203125 0 -0.25q0 -0.578125 -0.265625 -0.8125q-0.359375 -0.3125 -1.0625 -0.3125q-0.65625 0 -0.984375 0.234375q-0.3125 0.234375 -0.453125 0.8125l-0.921875 -0.125q0.125 -0.578125 0.40625 -0.9375q0.296875 -0.375 0.828125 -0.5625q0.546875 -0.203125 1.25 -0.203125q0.71875 0 1.15625 0.171875q0.4375 0.171875 0.640625 0.421875q0.21875 0.25 0.296875 0.640625q0.046875 0.234375 0.046875 0.859375l0 1.25q0 1.296875 0.0625 1.65625q0.0625 0.34375 0.234375 0.65625l-0.96875 0q-0.15625 -0.296875 -0.1875 -0.6875zm-0.078125 -2.078125q-0.515625 0.203125 -1.53125 0.34375q-0.578125 0.078125 -0.828125 0.1875q-0.234375 0.109375 -0.359375 0.3125q-0.125 0.1875 -0.125 0.4375q0 0.375 0.28125 0.625q0.28125 0.25 0.828125 0.25q0.53125 0 0.953125 -0.234375q0.421875 -0.234375 0.625 -0.65625q0.15625 -0.3125 0.15625 -0.9375l0 -0.328125zm2.3952484 2.765625l0 -5.53125l0.84375 0l0 0.796875q0.609375 -0.921875 1.75 -0.921875q0.5 0 0.921875 0.1875q0.421875 0.171875 0.625 0.46875q0.21875 0.296875 0.296875 0.6875q0.046875 0.265625 0.046875 0.921875l0 3.390625l-0.9375 0l0 -3.359375q0 -0.578125 -0.109375 -0.859375q-0.109375 -0.28125 -0.390625 -0.453125q-0.265625 -0.171875 -0.640625 -0.171875q-0.59375 0 -1.03125 0.390625q-0.4375 0.375 -0.4375 1.4375l0 3.015625l-0.9375 0zm9.535873 -2.03125l0.921875 0.125q-0.15625 0.953125 -0.78125 1.5q-0.625 0.53125 -1.53125 0.53125q-1.125 0 -1.8125 -0.734375q-0.6875 -0.75 -0.6875 -2.125q0 -0.90625 0.296875 -1.578125q0.296875 -0.671875 0.890625 -1.0q0.609375 -0.34375 1.328125 -0.34375q0.890625 0 1.46875 0.46875q0.578125 0.453125 0.734375 1.28125l-0.90625 0.140625q-0.140625 -0.546875 -0.46875 -0.828125q-0.328125 -0.28125 -0.796875 -0.28125q-0.703125 0 -1.15625 0.515625q-0.4375 0.5 -0.4375 1.59375q0 1.109375 0.421875 1.625q0.4375 0.5 1.125 0.5q0.546875 0 0.90625 -0.34375q0.375 -0.34375 0.484375 -1.046875zm5.5 0.25l0.96875 0.125q-0.234375 0.84375 -0.859375 1.3125q-0.609375 0.46875 -1.578125 0.46875q-1.203125 0 -1.921875 -0.75q-0.703125 -0.75 -0.703125 -2.09375q0 -1.390625 0.71875 -2.15625q0.71875 -0.78125 1.859375 -0.78125q1.109375 0 1.8125 0.765625q0.703125 0.75 0.703125 2.125q0 0.078125 0 0.234375l-4.125 0q0.046875 0.921875 0.515625 1.40625q0.46875 0.484375 1.15625 0.484375q0.515625 0 0.875 -0.265625q0.359375 -0.28125 0.578125 -0.875zm-3.078125 -1.515625l3.09375 0q-0.0625 -0.6875 -0.359375 -1.046875q-0.453125 -0.53125 -1.15625 -0.53125q-0.640625 0 -1.09375 0.4375q-0.4375 0.421875 -0.484375 1.140625zm5.2077484 3.296875l0 -5.53125l0.84375 0l0 0.84375q0.328125 -0.59375 0.59375 -0.78125q0.28125 -0.1875 0.609375 -0.1875q0.46875 0 0.953125 0.3125l-0.3125 0.859375q-0.34375 -0.203125 -0.6875 -0.203125q-0.3125 0 -0.5625 0.1875q-0.234375 0.1875 -0.34375 0.515625q-0.15625 0.5 -0.15625 1.09375l0 2.890625l-0.9375 0z" fill-rule="nonzero"/><path fill="#cfe2f3" d="m15.532808 200.91077l14.6608925 -27.585312l43.982674 0l14.660896 27.585312l-14.660896 27.585297l-43.982674 0z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m15.532808 200.91077l14.6608925 -27.585312l43.982674 0l14.660896 27.585312l-14.660896 27.585297l-43.982674 0z" fill-rule="evenodd"/><path fill="#000000" d="m45.444805 193.59076l0 -5.734375l1.140625 0l1.359375 4.0625q0.1875 0.5625 0.265625 0.84375q0.109375 -0.3125 0.3125 -0.921875l1.375 -3.984375l1.015625 0l0 5.734375l-0.734375 0l0 -4.796875l-1.65625 4.796875l-0.6875 0l-1.65625 -4.875l0 4.875l-0.734375 0zm9.3046875 -0.515625q-0.390625 0.328125 -0.75 0.46875q-0.359375 0.140625 -0.78125 0.140625q-0.671875 0 -1.046875 -0.328125q-0.359375 -0.34375 -0.359375 -0.859375q0 -0.3125 0.125 -0.5625q0.140625 -0.25 0.359375 -0.390625q0.234375 -0.15625 0.515625 -0.234375q0.203125 -0.0625 0.625 -0.109375q0.859375 -0.109375 1.25 -0.25q0.015625 -0.140625 0.015625 -0.171875q0 -0.4375 -0.203125 -0.609375q-0.265625 -0.234375 -0.796875 -0.234375q-0.5 0 -0.734375 0.171875q-0.234375 0.171875 -0.359375 0.609375l-0.6875 -0.09375q0.09375 -0.4375 0.3125 -0.703125q0.21875 -0.28125 0.625 -0.421875q0.40625 -0.15625 0.9375 -0.15625q0.53125 0 0.859375 0.125q0.34375 0.125 0.5 0.328125q0.15625 0.1875 0.21875 0.46875q0.03125 0.1875 0.03125 0.65625l0 0.9375q0 0.96875 0.046875 1.234375q0.046875 0.265625 0.171875 0.5l-0.734375 0q-0.109375 -0.21875 -0.140625 -0.515625zm-0.0625 -1.5625q-0.375 0.15625 -1.140625 0.265625q-0.4375 0.0625 -0.625 0.140625q-0.171875 0.078125 -0.265625 0.234375q-0.09375 0.140625 -0.09375 0.328125q0 0.28125 0.203125 0.46875q0.21875 0.1875 0.625 0.1875q0.40625 0 0.71875 -0.171875q0.328125 -0.1875 0.46875 -0.5q0.109375 -0.234375 0.109375 -0.703125l0 -0.25zm1.8085938 -2.84375l0 -0.8125l0.703125 0l0 0.8125l-0.703125 0zm0 4.921875l0 -4.15625l0.703125 0l0 4.15625l-0.703125 0zm1.7617188 0l0 -5.734375l0.703125 0l0 5.734375l-0.703125 0z" fill-rule="nonzero"/><path fill="#000000" d="m48.114727 197.85638l0.765625 0l0 3.3125q0 0.859375 -0.203125 1.375q-0.1875 0.5 -0.703125 0.828125q-0.515625 0.3125 -1.34375 0.3125q-0.796875 0 -1.3125 -0.265625q-0.515625 -0.28125 -0.734375 -0.8125q-0.21875 -0.53125 -0.21875 -1.4375l0 -3.3125l0.765625 0l0 3.3125q0 0.75 0.140625 1.109375q0.140625 0.34375 0.46875 0.53125q0.34375 0.1875 0.828125 0.1875q0.84375 0 1.1875 -0.375q0.359375 -0.375 0.359375 -1.453125l0 -3.3125zm1.6523438 4.5l0.6875 -0.109375q0.0625 0.40625 0.328125 0.640625q0.265625 0.21875 0.75 0.21875q0.484375 0 0.71875 -0.1875q0.234375 -0.203125 0.234375 -0.46875q0 -0.25 -0.203125 -0.375q-0.140625 -0.09375 -0.71875 -0.25q-0.78125 -0.1875 -1.078125 -0.328125q-0.296875 -0.140625 -0.453125 -0.390625q-0.15625 -0.265625 -0.15625 -0.5625q0 -0.28125 0.125 -0.515625q0.140625 -0.234375 0.359375 -0.390625q0.15625 -0.125 0.4375 -0.203125q0.28125 -0.09375 0.609375 -0.09375q0.484375 0 0.859375 0.140625q0.375 0.140625 0.546875 0.390625q0.171875 0.234375 0.234375 0.640625l-0.6875 0.09375q-0.046875 -0.328125 -0.265625 -0.5q-0.21875 -0.1875 -0.640625 -0.1875q-0.484375 0 -0.6875 0.171875q-0.203125 0.15625 -0.203125 0.375q0 0.125 0.078125 0.234375q0.09375 0.125 0.28125 0.1875q0.09375 0.046875 0.609375 0.1875q0.75 0.203125 1.046875 0.328125q0.296875 0.125 0.453125 0.375q0.171875 0.234375 0.171875 0.59375q0 0.34375 -0.203125 0.65625q-0.203125 0.3125 -0.59375 0.484375q-0.375 0.171875 -0.875 0.171875q-0.796875 0 -1.234375 -0.328125q-0.421875 -0.34375 -0.53125 -1.0zm7.125 -0.109375l0.71875 0.09375q-0.171875 0.640625 -0.640625 1.0q-0.453125 0.34375 -1.1875 0.34375q-0.90625 0 -1.4375 -0.5625q-0.53125 -0.5625 -0.53125 -1.578125q0 -1.046875 0.53125 -1.625q0.546875 -0.578125 1.40625 -0.578125q0.828125 0 1.359375 0.578125q0.53125 0.5625 0.53125 1.59375q0 0.0625 -0.015625 0.1875l-3.09375 0q0.046875 0.671875 0.390625 1.046875q0.34375 0.359375 0.875 0.359375q0.375 0 0.640625 -0.203125q0.28125 -0.203125 0.453125 -0.65625zm-2.3125 -1.125l2.3125 0q-0.046875 -0.53125 -0.265625 -0.796875q-0.328125 -0.40625 -0.875 -0.40625q-0.484375 0 -0.8125 0.328125q-0.328125 0.328125 -0.359375 0.875zm3.9023438 2.46875l0 -4.15625l0.640625 0l0 0.640625q0.234375 -0.453125 0.4375 -0.59375q0.21875 -0.140625 0.453125 -0.140625q0.359375 0 0.734375 0.234375l-0.25 0.65625q-0.25 -0.15625 -0.515625 -0.15625q-0.234375 0 -0.421875 0.140625q-0.171875 0.140625 -0.25 0.375q-0.125 0.375 -0.125 0.828125l0 2.171875l-0.703125 0z" fill-rule="nonzero"/><path fill="#000000" d="m41.71629 213.59076l2.203125 -5.734375l0.8125 0l2.34375 5.734375l-0.859375 0l-0.671875 -1.734375l-2.390625 0l-0.625 1.734375l-0.8125 0zm1.65625 -2.359375l1.9375 0l-0.59375 -1.578125q-0.265625 -0.71875 -0.40625 -1.1875q-0.109375 0.546875 -0.3125 1.09375l-0.625 1.671875zm4.1015625 2.703125l0.671875 0.109375q0.046875 0.3125 0.25 0.453125q0.25 0.203125 0.703125 0.203125q0.5 0 0.765625 -0.203125q0.265625 -0.1875 0.359375 -0.546875q0.046875 -0.21875 0.046875 -0.90625q-0.46875 0.546875 -1.15625 0.546875q-0.84375 0 -1.3125 -0.609375q-0.46875 -0.625 -0.46875 -1.484375q0 -0.59375 0.203125 -1.09375q0.21875 -0.515625 0.625 -0.78125q0.40625 -0.28125 0.96875 -0.28125q0.734375 0 1.203125 0.59375l0 -0.5l0.65625 0l0 3.59375q0 0.96875 -0.203125 1.375q-0.203125 0.40625 -0.625 0.640625q-0.421875 0.234375 -1.046875 0.234375q-0.75 0 -1.203125 -0.34375q-0.453125 -0.328125 -0.4375 -1.0zm0.578125 -2.5q0 0.828125 0.3125 1.203125q0.328125 0.375 0.828125 0.375q0.484375 0 0.8125 -0.375q0.328125 -0.375 0.328125 -1.171875q0 -0.765625 -0.34375 -1.140625q-0.34375 -0.390625 -0.8125 -0.390625q-0.46875 0 -0.796875 0.375q-0.328125 0.375 -0.328125 1.125zm6.8398438 0.8125l0.71875 0.09375q-0.171875 0.640625 -0.640625 1.0q-0.453125 0.34375 -1.1875 0.34375q-0.90625 0 -1.4375 -0.5625q-0.53125 -0.5625 -0.53125 -1.578125q0 -1.046875 0.53125 -1.625q0.546875 -0.578125 1.40625 -0.578125q0.828125 0 1.359375 0.578125q0.53125 0.5625 0.53125 1.59375q0 0.0625 -0.015625 0.1875l-3.09375 0q0.046875 0.671875 0.390625 1.046875q0.34375 0.359375 0.875 0.359375q0.375 0 0.640625 -0.203125q0.28125 -0.203125 0.453125 -0.65625zm-2.3125 -1.125l2.3125 0q-0.046875 -0.53125 -0.265625 -0.796875q-0.328125 -0.40625 -0.875 -0.40625q-0.484375 0 -0.8125 0.328125q-0.328125 0.328125 -0.359375 0.875zm3.9179688 2.46875l0 -4.15625l0.625 0l0 0.59375q0.46875 -0.6875 1.328125 -0.6875q0.375 0 0.6875 0.140625q0.3125 0.140625 0.46875 0.359375q0.15625 0.21875 0.21875 0.515625q0.046875 0.1875 0.046875 0.6875l0 2.546875l-0.703125 0l0 -2.53125q0 -0.421875 -0.09375 -0.625q-0.078125 -0.21875 -0.296875 -0.34375q-0.203125 -0.140625 -0.484375 -0.140625q-0.4375 0 -0.765625 0.296875q-0.328125 0.28125 -0.328125 1.078125l0 2.265625l-0.703125 0zm5.9804688 -0.625l0.109375 0.609375q-0.296875 0.078125 -0.53125 0.078125q-0.390625 0 -0.609375 -0.125q-0.203125 -0.125 -0.296875 -0.3125q-0.078125 -0.203125 -0.078125 -0.84375l0 -2.390625l-0.515625 0l0 -0.546875l0.515625 0l0 -1.015625l0.703125 -0.421875l0 1.4375l0.703125 0l0 0.546875l-0.703125 0l0 2.4375q0 0.296875 0.03125 0.390625q0.046875 0.078125 0.125 0.125q0.078125 0.046875 0.234375 0.046875q0.125 0 0.3125 -0.015625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m88.83727 200.91077l28.377953 0.03149414" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m88.83727 200.91077l22.377953 0.02482605" fill-rule="evenodd"/><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m111.213394 202.58733l4.5399246 -1.646698l-4.536255 -1.6567688z" fill-rule="evenodd"/><path fill="#cfe2f3" d="m261.58005 479.979l0 0c0 -13.828857 21.448029 -25.039368 47.905518 -25.039368l0 0c26.457489 0 47.905518 11.21051 47.905518 25.039368l0 0c0 13.828857 -21.448029 25.039368 -47.905518 25.039368l0 0c-26.457489 0 -47.905518 -11.21051 -47.905518 -25.039368z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m261.58005 479.979l0 0c0 -13.828857 21.448029 -25.039368 47.905518 -25.039368l0 0c26.457489 0 47.905518 11.21051 47.905518 25.039368l0 0c0 13.828857 -21.448029 25.039368 -47.905518 25.039368l0 0c-26.457489 0 -47.905518 -11.21051 -47.905518 -25.039368z" fill-rule="evenodd"/><path fill="#000000" d="m288.76877 482.659l0 -5.734375l2.546875 0q0.765625 0 1.15625 0.15625q0.40625 0.15625 0.640625 0.546875q0.234375 0.390625 0.234375 0.859375q0 0.609375 -0.390625 1.03125q-0.390625 0.421875 -1.21875 0.53125q0.296875 0.140625 0.453125 0.28125q0.34375 0.3125 0.640625 0.765625l0.984375 1.5625l-0.953125 0l-0.75 -1.1875q-0.328125 -0.515625 -0.546875 -0.78125q-0.21875 -0.28125 -0.390625 -0.390625q-0.171875 -0.109375 -0.34375 -0.15625q-0.125 -0.03125 -0.421875 -0.03125l-0.875 0l0 2.546875l-0.765625 0zm0.765625 -3.203125l1.625 0q0.515625 0 0.8125 -0.109375q0.296875 -0.109375 0.4375 -0.34375q0.15625 -0.234375 0.15625 -0.515625q0 -0.40625 -0.296875 -0.65625q-0.28125 -0.265625 -0.921875 -0.265625l-1.8125 0l0 1.890625zm7.6210938 2.6875q-0.390625 0.328125 -0.75 0.46875q-0.359375 0.140625 -0.78125 0.140625q-0.671875 0 -1.046875 -0.328125q-0.359375 -0.34375 -0.359375 -0.859375q0 -0.3125 0.125 -0.5625q0.140625 -0.25 0.359375 -0.390625q0.234375 -0.15625 0.515625 -0.234375q0.203125 -0.0625 0.625 -0.109375q0.859375 -0.109375 1.25 -0.25q0.015625 -0.140625 0.015625 -0.171875q0 -0.4375 -0.203125 -0.609375q-0.265625 -0.234375 -0.796875 -0.234375q-0.5 0 -0.734375 0.171875q-0.234375 0.171875 -0.359375 0.609375l-0.6875 -0.09375q0.09375 -0.4375 0.3125 -0.703125q0.21875 -0.28125 0.625 -0.421875q0.40625 -0.15625 0.9375 -0.15625q0.53125 0 0.859375 0.125q0.34375 0.125 0.5 0.328125q0.15625 0.1875 0.21875 0.46875q0.03125 0.1875 0.03125 0.65625l0 0.9375q0 0.96875 0.046875 1.234375q0.046875 0.265625 0.171875 0.5l-0.734375 0q-0.109375 -0.21875 -0.140625 -0.515625zm-0.0625 -1.5625q-0.375 0.15625 -1.140625 0.265625q-0.4375 0.0625 -0.625 0.140625q-0.171875 0.078125 -0.265625 0.234375q-0.09375 0.140625 -0.09375 0.328125q0 0.28125 0.203125 0.46875q0.21875 0.1875 0.625 0.1875q0.40625 0 0.71875 -0.171875q0.328125 -0.1875 0.46875 -0.5q0.109375 -0.234375 0.109375 -0.703125l0 -0.25zm2.4492188 2.078125l-0.640625 0l0 -5.734375l0.703125 0l0 2.046875q0.4375 -0.5625 1.125 -0.5625q0.390625 0 0.734375 0.15625q0.34375 0.15625 0.5625 0.4375q0.21875 0.28125 0.34375 0.671875q0.125 0.390625 0.125 0.84375q0 1.0625 -0.53125 1.65625q-0.53125 0.578125 -1.265625 0.578125q-0.734375 0 -1.15625 -0.609375l0 0.515625zm0 -2.109375q0 0.75 0.203125 1.078125q0.328125 0.546875 0.890625 0.546875q0.46875 0 0.796875 -0.390625q0.34375 -0.40625 0.34375 -1.203125q0 -0.8125 -0.328125 -1.203125q-0.3125 -0.390625 -0.78125 -0.390625q-0.453125 0 -0.796875 0.40625q-0.328125 0.40625 -0.328125 1.15625zm4.4492188 2.109375l-0.640625 0l0 -5.734375l0.703125 0l0 2.046875q0.4375 -0.5625 1.125 -0.5625q0.390625 0 0.734375 0.15625q0.34375 0.15625 0.5625 0.4375q0.21875 0.28125 0.34375 0.671875q0.125 0.390625 0.125 0.84375q0 1.0625 -0.53125 1.65625q-0.53125 0.578125 -1.265625 0.578125q-0.734375 0 -1.15625 -0.609375l0 0.515625zm0 -2.109375q0 0.75 0.203125 1.078125q0.328125 0.546875 0.890625 0.546875q0.46875 0 0.796875 -0.390625q0.34375 -0.40625 0.34375 -1.203125q0 -0.8125 -0.328125 -1.203125q-0.3125 -0.390625 -0.78125 -0.390625q-0.453125 0 -0.796875 0.40625q-0.328125 0.40625 -0.328125 1.15625zm3.8085938 -2.8125l0 -0.8125l0.703125 0l0 0.8125l-0.703125 0zm0 4.921875l0 -4.15625l0.703125 0l0 4.15625l-0.703125 0zm3.3085938 -0.625l0.109375 0.609375q-0.296875 0.078125 -0.53125 0.078125q-0.390625 0 -0.609375 -0.125q-0.203125 -0.125 -0.296875 -0.3125q-0.078125 -0.203125 -0.078125 -0.84375l0 -2.390625l-0.515625 0l0 -0.546875l0.515625 0l0 -1.015625l0.703125 -0.421875l0 1.4375l0.703125 0l0 0.546875l-0.703125 0l0 2.4375q0 0.296875 0.03125 0.390625q0.046875 0.078125 0.125 0.125q0.078125 0.046875 0.234375 0.046875q0.125 0 0.3125 -0.015625zm0.75390625 0.625l0 -5.734375l1.140625 0l1.359375 4.0625q0.1875 0.5625 0.265625 0.84375q0.109375 -0.3125 0.3125 -0.921875l1.375 -3.984375l1.015625 0l0 5.734375l-0.734375 0l0 -4.796875l-1.65625 4.796875l-0.6875 0l-1.65625 -4.875l0 4.875l-0.734375 0zm11.0234375 -0.609375q0.53125 0.359375 0.984375 0.53125l-0.234375 0.53125q-0.609375 -0.234375 -1.21875 -0.71875q-0.640625 0.359375 -1.40625 0.359375q-0.78125 0 -1.421875 -0.375q-0.625 -0.375 -0.96875 -1.046875q-0.34375 -0.6875 -0.34375 -1.53125q0 -0.859375 0.34375 -1.546875q0.34375 -0.703125 0.96875 -1.0625q0.640625 -0.359375 1.4375 -0.359375q0.78125 0 1.421875 0.375q0.640625 0.375 0.96875 1.0625q0.34375 0.671875 0.34375 1.515625q0 0.71875 -0.21875 1.28125q-0.21875 0.5625 -0.65625 0.984375zm-1.65625 -0.96875q0.65625 0.171875 1.078125 0.546875q0.671875 -0.609375 0.671875 -1.84375q0 -0.6875 -0.25 -1.203125q-0.234375 -0.53125 -0.6875 -0.8125q-0.453125 -0.28125 -1.015625 -0.28125q-0.84375 0 -1.40625 0.578125q-0.5625 0.578125 -0.5625 1.734375q0 1.109375 0.546875 1.71875q0.5625 0.59375 1.421875 0.59375q0.40625 0 0.765625 -0.15625q-0.359375 -0.234375 -0.75 -0.328125l0.1875 -0.546875zm8.1328125 1.578125l-0.703125 0l0 -4.484375q-0.25 0.25 -0.671875 0.5q-0.40625 0.234375 -0.734375 0.34375l0 -0.671875q0.59375 -0.28125 1.03125 -0.671875q0.4375 -0.390625 0.625 -0.765625l0.453125 0l0 5.75z" fill-rule="nonzero"/><path fill="#cfe2f3" d="m374.11285 479.979l0 0c0 -13.828857 21.448029 -25.039368 47.905518 -25.039368l0 0c26.457489 0 47.905518 11.21051 47.905518 25.039368l0 0c0 13.828857 -21.448029 25.039368 -47.905518 25.039368l0 0c-26.457489 0 -47.905518 -11.21051 -47.905518 -25.039368z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m374.11285 479.979l0 0c0 -13.828857 21.448029 -25.039368 47.905518 -25.039368l0 0c26.457489 0 47.905518 11.21051 47.905518 25.039368l0 0c0 13.828857 -21.448029 25.039368 -47.905518 25.039368l0 0c-26.457489 0 -47.905518 -11.21051 -47.905518 -25.039368z" fill-rule="evenodd"/><path fill="#000000" d="m401.30157 482.659l0 -5.734375l2.546875 0q0.765625 0 1.15625 0.15625q0.40625 0.15625 0.640625 0.546875q0.234375 0.390625 0.234375 0.859375q0 0.609375 -0.390625 1.03125q-0.390625 0.421875 -1.21875 0.53125q0.296875 0.140625 0.453125 0.28125q0.34375 0.3125 0.640625 0.765625l0.984375 1.5625l-0.953125 0l-0.75 -1.1875q-0.328125 -0.515625 -0.546875 -0.78125q-0.21875 -0.28125 -0.390625 -0.390625q-0.171875 -0.109375 -0.34375 -0.15625q-0.125 -0.03125 -0.421875 -0.03125l-0.875 0l0 2.546875l-0.765625 0zm0.765625 -3.203125l1.625 0q0.515625 0 0.8125 -0.109375q0.296875 -0.109375 0.4375 -0.34375q0.15625 -0.234375 0.15625 -0.515625q0 -0.40625 -0.296875 -0.65625q-0.28125 -0.265625 -0.921875 -0.265625l-1.8125 0l0 1.890625zm7.6210938 2.6875q-0.390625 0.328125 -0.75 0.46875q-0.359375 0.140625 -0.78125 0.140625q-0.671875 0 -1.046875 -0.328125q-0.359375 -0.34375 -0.359375 -0.859375q0 -0.3125 0.125 -0.5625q0.140625 -0.25 0.359375 -0.390625q0.234375 -0.15625 0.515625 -0.234375q0.203125 -0.0625 0.625 -0.109375q0.859375 -0.109375 1.25 -0.25q0.015625 -0.140625 0.015625 -0.171875q0 -0.4375 -0.203125 -0.609375q-0.265625 -0.234375 -0.796875 -0.234375q-0.5 0 -0.734375 0.171875q-0.234375 0.171875 -0.359375 0.609375l-0.6875 -0.09375q0.09375 -0.4375 0.3125 -0.703125q0.21875 -0.28125 0.625 -0.421875q0.40625 -0.15625 0.9375 -0.15625q0.53125 0 0.859375 0.125q0.34375 0.125 0.5 0.328125q0.15625 0.1875 0.21875 0.46875q0.03125 0.1875 0.03125 0.65625l0 0.9375q0 0.96875 0.046875 1.234375q0.046875 0.265625 0.171875 0.5l-0.734375 0q-0.109375 -0.21875 -0.140625 -0.515625zm-0.0625 -1.5625q-0.375 0.15625 -1.140625 0.265625q-0.4375 0.0625 -0.625 0.140625q-0.171875 0.078125 -0.265625 0.234375q-0.09375 0.140625 -0.09375 0.328125q0 0.28125 0.203125 0.46875q0.21875 0.1875 0.625 0.1875q0.40625 0 0.71875 -0.171875q0.328125 -0.1875 0.46875 -0.5q0.109375 -0.234375 0.109375 -0.703125l0 -0.25zm2.4492188 2.078125l-0.640625 0l0 -5.734375l0.703125 0l0 2.046875q0.4375 -0.5625 1.125 -0.5625q0.390625 0 0.734375 0.15625q0.34375 0.15625 0.5625 0.4375q0.21875 0.28125 0.34375 0.671875q0.125 0.390625 0.125 0.84375q0 1.0625 -0.53125 1.65625q-0.53125 0.578125 -1.265625 0.578125q-0.734375 0 -1.15625 -0.609375l0 0.515625zm0 -2.109375q0 0.75 0.203125 1.078125q0.328125 0.546875 0.890625 0.546875q0.46875 0 0.796875 -0.390625q0.34375 -0.40625 0.34375 -1.203125q0 -0.8125 -0.328125 -1.203125q-0.3125 -0.390625 -0.78125 -0.390625q-0.453125 0 -0.796875 0.40625q-0.328125 0.40625 -0.328125 1.15625zm4.4492188 2.109375l-0.640625 0l0 -5.734375l0.703125 0l0 2.046875q0.4375 -0.5625 1.125 -0.5625q0.390625 0 0.734375 0.15625q0.34375 0.15625 0.5625 0.4375q0.21875 0.28125 0.34375 0.671875q0.125 0.390625 0.125 0.84375q0 1.0625 -0.53125 1.65625q-0.53125 0.578125 -1.265625 0.578125q-0.734375 0 -1.15625 -0.609375l0 0.515625zm0 -2.109375q0 0.75 0.203125 1.078125q0.328125 0.546875 0.890625 0.546875q0.46875 0 0.796875 -0.390625q0.34375 -0.40625 0.34375 -1.203125q0 -0.8125 -0.328125 -1.203125q-0.3125 -0.390625 -0.78125 -0.390625q-0.453125 0 -0.796875 0.40625q-0.328125 0.40625 -0.328125 1.15625zm3.8085938 -2.8125l0 -0.8125l0.703125 0l0 0.8125l-0.703125 0zm0 4.921875l0 -4.15625l0.703125 0l0 4.15625l-0.703125 0zm3.3085938 -0.625l0.109375 0.609375q-0.296875 0.078125 -0.53125 0.078125q-0.390625 0 -0.609375 -0.125q-0.203125 -0.125 -0.296875 -0.3125q-0.078125 -0.203125 -0.078125 -0.84375l0 -2.390625l-0.515625 0l0 -0.546875l0.515625 0l0 -1.015625l0.703125 -0.421875l0 1.4375l0.703125 0l0 0.546875l-0.703125 0l0 2.4375q0 0.296875 0.03125 0.390625q0.046875 0.078125 0.125 0.125q0.078125 0.046875 0.234375 0.046875q0.125 0 0.3125 -0.015625zm0.75390625 0.625l0 -5.734375l1.140625 0l1.359375 4.0625q0.1875 0.5625 0.265625 0.84375q0.109375 -0.3125 0.3125 -0.921875l1.375 -3.984375l1.015625 0l0 5.734375l-0.734375 0l0 -4.796875l-1.65625 4.796875l-0.6875 0l-1.65625 -4.875l0 4.875l-0.734375 0zm11.0234375 -0.609375q0.53125 0.359375 0.984375 0.53125l-0.234375 0.53125q-0.609375 -0.234375 -1.21875 -0.71875q-0.640625 0.359375 -1.40625 0.359375q-0.78125 0 -1.421875 -0.375q-0.625 -0.375 -0.96875 -1.046875q-0.34375 -0.6875 -0.34375 -1.53125q0 -0.859375 0.34375 -1.546875q0.34375 -0.703125 0.96875 -1.0625q0.640625 -0.359375 1.4375 -0.359375q0.78125 0 1.421875 0.375q0.640625 0.375 0.96875 1.0625q0.34375 0.671875 0.34375 1.515625q0 0.71875 -0.21875 1.28125q-0.21875 0.5625 -0.65625 0.984375zm-1.65625 -0.96875q0.65625 0.171875 1.078125 0.546875q0.671875 -0.609375 0.671875 -1.84375q0 -0.6875 -0.25 -1.203125q-0.234375 -0.53125 -0.6875 -0.8125q-0.453125 -0.28125 -1.015625 -0.28125q-0.84375 0 -1.40625 0.578125q-0.5625 0.578125 -0.5625 1.734375q0 1.109375 0.546875 1.71875q0.5625 0.59375 1.421875 0.59375q0.40625 0 0.765625 -0.15625q-0.359375 -0.234375 -0.75 -0.328125l0.1875 -0.546875zm9.1796875 0.90625l0 0.671875l-3.78125 0q-0.015625 -0.25 0.078125 -0.484375q0.140625 -0.390625 0.453125 -0.765625q0.328125 -0.375 0.921875 -0.875q0.9375 -0.765625 1.265625 -1.203125q0.328125 -0.453125 0.328125 -0.84375q0 -0.421875 -0.296875 -0.703125q-0.296875 -0.296875 -0.78125 -0.296875q-0.5 0 -0.8125 0.3125q-0.296875 0.296875 -0.3125 0.84375l-0.71875 -0.078125q0.078125 -0.8125 0.5625 -1.234375q0.484375 -0.421875 1.296875 -0.421875q0.828125 0 1.296875 0.453125q0.484375 0.453125 0.484375 1.140625q0 0.34375 -0.140625 0.671875q-0.140625 0.328125 -0.46875 0.703125q-0.3125 0.359375 -1.078125 1.0q-0.625 0.53125 -0.8125 0.71875q-0.171875 0.1875 -0.296875 0.390625l2.8125 0z" fill-rule="nonzero"/><path fill="#cfe2f3" d="m318.33597 537.34906l0 0c0 -13.828857 21.448029 -25.039368 47.905487 -25.039368l0 0c26.457489 0 47.905518 11.21051 47.905518 25.039368l0 0c0 13.828857 -21.448029 25.039368 -47.905518 25.039368l0 0c-26.457458 0 -47.905487 -11.21051 -47.905487 -25.039368z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m318.33597 537.34906l0 0c0 -13.828857 21.448029 -25.039368 47.905487 -25.039368l0 0c26.457489 0 47.905518 11.21051 47.905518 25.039368l0 0c0 13.828857 -21.448029 25.039368 -47.905518 25.039368l0 0c-26.457458 0 -47.905487 -11.21051 -47.905487 -25.039368z" fill-rule="evenodd"/><path fill="#000000" d="m345.52466 540.02905l0 -5.734375l2.546875 0q0.765625 0 1.15625 0.15625q0.40625 0.15625 0.640625 0.546875q0.234375 0.390625 0.234375 0.859375q0 0.609375 -0.390625 1.03125q-0.390625 0.421875 -1.21875 0.53125q0.296875 0.140625 0.453125 0.28125q0.34375 0.3125 0.640625 0.765625l0.984375 1.5625l-0.953125 0l-0.75 -1.1875q-0.328125 -0.515625 -0.546875 -0.78125q-0.21875 -0.28125 -0.390625 -0.390625q-0.171875 -0.109375 -0.34375 -0.15625q-0.125 -0.03125 -0.421875 -0.03125l-0.875 0l0 2.546875l-0.765625 0zm0.765625 -3.203125l1.625 0q0.515625 0 0.8125 -0.109375q0.296875 -0.109375 0.4375 -0.34375q0.15625 -0.234375 0.15625 -0.515625q0 -0.40625 -0.296875 -0.65625q-0.28125 -0.265625 -0.921875 -0.265625l-1.8125 0l0 1.890625zm7.6210938 2.6875q-0.390625 0.328125 -0.75 0.46875q-0.359375 0.140625 -0.78125 0.140625q-0.671875 0 -1.046875 -0.328125q-0.359375 -0.34375 -0.359375 -0.859375q0 -0.3125 0.125 -0.5625q0.140625 -0.25 0.359375 -0.390625q0.234375 -0.15625 0.515625 -0.234375q0.203125 -0.0625 0.625 -0.109375q0.859375 -0.109375 1.25 -0.25q0.015625 -0.140625 0.015625 -0.171875q0 -0.4375 -0.203125 -0.609375q-0.265625 -0.234375 -0.796875 -0.234375q-0.5 0 -0.734375 0.171875q-0.234375 0.171875 -0.359375 0.609375l-0.6875 -0.09375q0.09375 -0.4375 0.3125 -0.703125q0.21875 -0.28125 0.625 -0.421875q0.40625 -0.15625 0.9375 -0.15625q0.53125 0 0.859375 0.125q0.34375 0.125 0.5 0.328125q0.15625 0.1875 0.21875 0.46875q0.03125 0.1875 0.03125 0.65625l0 0.9375q0 0.96875 0.046875 1.234375q0.046875 0.265625 0.171875 0.5l-0.734375 0q-0.109375 -0.21875 -0.140625 -0.515625zm-0.0625 -1.5625q-0.375 0.15625 -1.140625 0.265625q-0.4375 0.0625 -0.625 0.140625q-0.171875 0.078125 -0.265625 0.234375q-0.09375 0.140625 -0.09375 0.328125q0 0.28125 0.203125 0.46875q0.21875 0.1875 0.625 0.1875q0.40625 0 0.71875 -0.171875q0.328125 -0.1875 0.46875 -0.5q0.109375 -0.234375 0.109375 -0.703125l0 -0.25zm2.4492188 2.078125l-0.640625 0l0 -5.734375l0.703125 0l0 2.046875q0.4375 -0.5625 1.125 -0.5625q0.390625 0 0.734375 0.15625q0.34375 0.15625 0.5625 0.4375q0.21875 0.28125 0.34375 0.671875q0.125 0.390625 0.125 0.84375q0 1.0625 -0.53125 1.65625q-0.53125 0.578125 -1.265625 0.578125q-0.734375 0 -1.15625 -0.609375l0 0.515625zm0 -2.109375q0 0.75 0.203125 1.078125q0.328125 0.546875 0.890625 0.546875q0.46875 0 0.796875 -0.390625q0.34375 -0.40625 0.34375 -1.203125q0 -0.8125 -0.328125 -1.203125q-0.3125 -0.390625 -0.78125 -0.390625q-0.453125 0 -0.796875 0.40625q-0.328125 0.40625 -0.328125 1.15625zm4.4492188 2.109375l-0.640625 0l0 -5.734375l0.703125 0l0 2.046875q0.4375 -0.5625 1.125 -0.5625q0.390625 0 0.734375 0.15625q0.34375 0.15625 0.5625 0.4375q0.21875 0.28125 0.34375 0.671875q0.125 0.390625 0.125 0.84375q0 1.0625 -0.53125 1.65625q-0.53125 0.578125 -1.265625 0.578125q-0.734375 0 -1.15625 -0.609375l0 0.515625zm0 -2.109375q0 0.75 0.203125 1.078125q0.328125 0.546875 0.890625 0.546875q0.46875 0 0.796875 -0.390625q0.34375 -0.40625 0.34375 -1.203125q0 -0.8125 -0.328125 -1.203125q-0.3125 -0.390625 -0.78125 -0.390625q-0.453125 0 -0.796875 0.40625q-0.328125 0.40625 -0.328125 1.15625zm3.8086243 -2.8125l0 -0.8125l0.703125 0l0 0.8125l-0.703125 0zm0 4.921875l0 -4.15625l0.703125 0l0 4.15625l-0.703125 0zm3.3085938 -0.625l0.109375 0.609375q-0.296875 0.078125 -0.53125 0.078125q-0.390625 0 -0.609375 -0.125q-0.203125 -0.125 -0.296875 -0.3125q-0.078125 -0.203125 -0.078125 -0.84375l0 -2.390625l-0.515625 0l0 -0.546875l0.515625 0l0 -1.015625l0.703125 -0.421875l0 1.4375l0.703125 0l0 0.546875l-0.703125 0l0 2.4375q0 0.296875 0.03125 0.390625q0.046875 0.078125 0.125 0.125q0.078125 0.046875 0.234375 0.046875q0.125 0 0.3125 -0.015625zm0.75390625 0.625l0 -5.734375l1.140625 0l1.359375 4.0625q0.1875 0.5625 0.265625 0.84375q0.109375 -0.3125 0.3125 -0.921875l1.375 -3.984375l1.015625 0l0 5.734375l-0.734375 0l0 -4.796875l-1.65625 4.796875l-0.6875 0l-1.65625 -4.875l0 4.875l-0.734375 0zm11.0234375 -0.609375q0.53125 0.359375 0.984375 0.53125l-0.234375 0.53125q-0.609375 -0.234375 -1.21875 -0.71875q-0.640625 0.359375 -1.40625 0.359375q-0.78125 0 -1.421875 -0.375q-0.625 -0.375 -0.96875 -1.046875q-0.34375 -0.6875 -0.34375 -1.53125q0 -0.859375 0.34375 -1.546875q0.34375 -0.703125 0.96875 -1.0625q0.640625 -0.359375 1.4375 -0.359375q0.78125 0 1.421875 0.375q0.640625 0.375 0.96875 1.0625q0.34375 0.671875 0.34375 1.515625q0 0.71875 -0.21875 1.28125q-0.21875 0.5625 -0.65625 0.984375zm-1.65625 -0.96875q0.65625 0.171875 1.078125 0.546875q0.671875 -0.609375 0.671875 -1.84375q0 -0.6875 -0.25 -1.203125q-0.234375 -0.53125 -0.6875 -0.8125q-0.453125 -0.28125 -1.015625 -0.28125q-0.84375 0 -1.40625 0.578125q-0.5625 0.578125 -0.5625 1.734375q0 1.109375 0.546875 1.71875q0.5625 0.59375 1.421875 0.59375q0.40625 0 0.765625 -0.15625q-0.359375 -0.234375 -0.75 -0.328125l0.1875 -0.546875zm5.4921875 0.0625l0.703125 -0.09375q0.109375 0.59375 0.40625 0.859375q0.296875 0.265625 0.703125 0.265625q0.5 0 0.84375 -0.34375q0.34375 -0.34375 0.34375 -0.84375q0 -0.484375 -0.328125 -0.796875q-0.3125 -0.328125 -0.796875 -0.328125q-0.203125 0 -0.5 0.078125l0.078125 -0.609375q0.078125 0 0.125 0q0.4375 0 0.796875 -0.234375q0.359375 -0.234375 0.359375 -0.71875q0 -0.390625 -0.265625 -0.640625q-0.25 -0.25 -0.671875 -0.25q-0.40625 0 -0.6875 0.265625q-0.265625 0.25 -0.34375 0.765625l-0.703125 -0.125q0.125 -0.703125 0.578125 -1.09375q0.46875 -0.390625 1.140625 -0.390625q0.46875 0 0.859375 0.203125q0.40625 0.203125 0.609375 0.546875q0.21875 0.34375 0.21875 0.734375q0 0.375 -0.203125 0.6875q-0.203125 0.296875 -0.59375 0.46875q0.515625 0.125 0.796875 0.5q0.28125 0.359375 0.28125 0.921875q0 0.75 -0.546875 1.28125q-0.546875 0.515625 -1.390625 0.515625q-0.75 0 -1.25 -0.453125q-0.5 -0.453125 -0.5625 -1.171875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m238.35432 422.27823l264.18896 0l0 187.24411l-264.18896 0z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="8.0,3.0" d="m238.35432 422.27823l264.18896 0l0 187.24411l-264.18896 0z" fill-rule="evenodd"/><path fill="#c9daf8" d="m590.33856 405.8819l0 0c0 -13.828857 31.361267 -25.039368 70.04724 -25.039368l0 0c38.686035 0 70.04724 11.21051 70.04724 25.039368l0 0c0 13.828857 -31.361206 25.039368 -70.04724 25.039368l0 0c-38.685974 0 -70.04724 -11.21051 -70.04724 -25.039368z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="8.0,3.0" d="m590.33856 405.8819l0 0c0 -13.828857 31.361267 -25.039368 70.04724 -25.039368l0 0c38.686035 0 70.04724 11.21051 70.04724 25.039368l0 0c0 13.828857 -31.361206 25.039368 -70.04724 25.039368l0 0c-38.685974 0 -70.04724 -11.21051 -70.04724 -25.039368z" fill-rule="evenodd"/><path fill="#000000" d="m627.4316 405.90314q0 -1.890625 1.015625 -2.96875q1.03125 -1.078125 2.640625 -1.078125q1.046875 0 1.890625 0.515625q0.859375 0.5 1.296875 1.40625q0.453125 0.890625 0.453125 2.046875q0 1.15625 -0.46875 2.078125q-0.46875 0.90625 -1.328125 1.375q-0.859375 0.46875 -1.859375 0.46875q-1.078125 0 -1.921875 -0.515625q-0.84375 -0.515625 -1.28125 -1.40625q-0.4375 -0.90625 -0.4375 -1.921875zm1.046875 0.015625q0 1.375 0.734375 2.171875q0.734375 0.796875 1.859375 0.796875q1.140625 0 1.875 -0.796875q0.734375 -0.8125 0.734375 -2.28125q0 -0.921875 -0.3125 -1.609375q-0.3125 -0.703125 -0.921875 -1.078125q-0.609375 -0.390625 -1.359375 -0.390625q-1.078125 0 -1.84375 0.734375q-0.765625 0.734375 -0.765625 2.453125zm7.4293823 5.828125l0 -7.65625l0.859375 0l0 0.71875q0.296875 -0.421875 0.671875 -0.625q0.390625 -0.21875 0.921875 -0.21875q0.703125 0 1.25 0.375q0.546875 0.359375 0.8125 1.03125q0.28125 0.65625 0.28125 1.453125q0 0.84375 -0.3125 1.53125q-0.296875 0.671875 -0.875 1.03125q-0.578125 0.359375 -1.21875 0.359375q-0.46875 0 -0.84375 -0.1875q-0.375 -0.203125 -0.609375 -0.515625l0 2.703125l-0.9375 0zm0.84375 -4.859375q0 1.0625 0.4375 1.578125q0.4375 0.515625 1.046875 0.515625q0.625 0 1.0625 -0.53125q0.453125 -0.53125 0.453125 -1.640625q0 -1.046875 -0.4375 -1.578125q-0.4375 -0.53125 -1.046875 -0.53125q-0.59375 0 -1.0625 0.5625q-0.453125 0.5625 -0.453125 1.625zm8.864014 0.953125l0.96875 0.125q-0.234375 0.84375 -0.859375 1.3125q-0.609375 0.46875 -1.578125 0.46875q-1.203125 0 -1.921875 -0.75q-0.703125 -0.75 -0.703125 -2.09375q0 -1.390625 0.71875 -2.15625q0.71875 -0.78125 1.859375 -0.78125q1.109375 0 1.8125 0.765625q0.703125 0.75 0.703125 2.125q0 0.078125 0 0.234375l-4.125 0q0.046875 0.921875 0.515625 1.40625q0.46875 0.484375 1.15625 0.484375q0.515625 0 0.875 -0.265625q0.359375 -0.28125 0.578125 -0.875zm-3.078125 -1.515625l3.09375 0q-0.0625 -0.6875 -0.359375 -1.046875q-0.453125 -0.53125 -1.15625 -0.53125q-0.640625 0 -1.09375 0.4375q-0.4375 0.421875 -0.484375 1.140625zm5.2233276 3.296875l0 -5.53125l0.84375 0l0 0.796875q0.609375 -0.921875 1.75 -0.921875q0.5 0 0.921875 0.1875q0.421875 0.171875 0.625 0.46875q0.21875 0.296875 0.296875 0.6875q0.046875 0.265625 0.046875 0.921875l0 3.390625l-0.9375 0l0 -3.359375q0 -0.578125 -0.109375 -0.859375q-0.109375 -0.28125 -0.390625 -0.453125q-0.265625 -0.171875 -0.640625 -0.171875q-0.59375 0 -1.03125 0.390625q-0.4375 0.375 -0.4375 1.4375l0 3.015625l-0.9375 0zm5.5515137 -1.65625l0.921875 -0.140625q0.078125 0.5625 0.4375 0.859375q0.359375 0.296875 1.0 0.296875q0.640625 0 0.953125 -0.265625q0.3125 -0.265625 0.3125 -0.625q0 -0.3125 -0.28125 -0.5q-0.1875 -0.125 -0.953125 -0.3125q-1.03125 -0.265625 -1.4375 -0.453125q-0.390625 -0.1875 -0.59375 -0.515625q-0.203125 -0.34375 -0.203125 -0.75q0 -0.359375 0.171875 -0.671875q0.171875 -0.328125 0.453125 -0.53125q0.21875 -0.15625 0.59375 -0.265625q0.390625 -0.125 0.8125 -0.125q0.65625 0 1.140625 0.1875q0.5 0.1875 0.734375 0.515625q0.234375 0.3125 0.3125 0.859375l-0.90625 0.125q-0.0625 -0.4375 -0.375 -0.671875q-0.296875 -0.234375 -0.828125 -0.234375q-0.65625 0 -0.9375 0.21875q-0.265625 0.203125 -0.265625 0.484375q0 0.1875 0.109375 0.328125q0.125 0.15625 0.359375 0.25q0.140625 0.0625 0.828125 0.25q1.0 0.265625 1.390625 0.4375q0.390625 0.15625 0.609375 0.484375q0.234375 0.3125 0.234375 0.796875q0 0.46875 -0.28125 0.890625q-0.265625 0.40625 -0.78125 0.640625q-0.515625 0.21875 -1.171875 0.21875q-1.078125 0 -1.640625 -0.4375q-0.5625 -0.453125 -0.71875 -1.34375zm9.484375 -0.125l0.96875 0.125q-0.234375 0.84375 -0.859375 1.3125q-0.609375 0.46875 -1.578125 0.46875q-1.203125 0 -1.921875 -0.75q-0.703125 -0.75 -0.703125 -2.09375q0 -1.390625 0.71875 -2.15625q0.71875 -0.78125 1.859375 -0.78125q1.109375 0 1.8125 0.765625q0.703125 0.75 0.703125 2.125q0 0.078125 0 0.234375l-4.125 0q0.046875 0.921875 0.515625 1.40625q0.46875 0.484375 1.15625 0.484375q0.515625 0 0.875 -0.265625q0.359375 -0.28125 0.578125 -0.875zm-3.078125 -1.515625l3.09375 0q-0.0625 -0.6875 -0.359375 -1.046875q-0.453125 -0.53125 -1.15625 -0.53125q-0.640625 0 -1.09375 0.4375q-0.4375 0.421875 -0.484375 1.140625zm8.832764 2.609375q-0.53125 0.453125 -1.015625 0.640625q-0.46875 0.171875 -1.015625 0.171875q-0.921875 0 -1.40625 -0.4375q-0.484375 -0.453125 -0.484375 -1.140625q0 -0.40625 0.171875 -0.734375q0.1875 -0.34375 0.484375 -0.546875q0.3125 -0.203125 0.6875 -0.3125q0.265625 -0.0625 0.828125 -0.140625q1.125 -0.125 1.671875 -0.3125q0 -0.203125 0 -0.25q0 -0.578125 -0.265625 -0.8125q-0.359375 -0.3125 -1.0625 -0.3125q-0.65625 0 -0.984375 0.234375q-0.3125 0.234375 -0.453125 0.8125l-0.921875 -0.125q0.125 -0.578125 0.40625 -0.9375q0.296875 -0.375 0.828125 -0.5625q0.546875 -0.203125 1.25 -0.203125q0.71875 0 1.15625 0.171875q0.4375 0.171875 0.640625 0.421875q0.21875 0.25 0.296875 0.640625q0.046875 0.234375 0.046875 0.859375l0 1.25q0 1.296875 0.0625 1.65625q0.0625 0.34375 0.234375 0.65625l-0.96875 0q-0.15625 -0.296875 -0.1875 -0.6875zm-0.078125 -2.078125q-0.515625 0.203125 -1.53125 0.34375q-0.578125 0.078125 -0.828125 0.1875q-0.234375 0.109375 -0.359375 0.3125q-0.125 0.1875 -0.125 0.4375q0 0.375 0.28125 0.625q0.28125 0.25 0.828125 0.25q0.53125 0 0.953125 -0.234375q0.421875 -0.234375 0.625 -0.65625q0.15625 -0.3125 0.15625 -0.9375l0 -0.328125zm2.3796387 2.765625l0 -5.53125l0.84375 0l0 0.84375q0.328125 -0.59375 0.59375 -0.78125q0.28125 -0.1875 0.609375 -0.1875q0.46875 0 0.953125 0.3125l-0.3125 0.859375q-0.34375 -0.203125 -0.6875 -0.203125q-0.3125 0 -0.5625 0.1875q-0.234375 0.1875 -0.34375 0.515625q-0.15625 0.5 -0.15625 1.09375l0 2.890625l-0.9375 0zm7.173584 -2.03125l0.921875 0.125q-0.15625 0.953125 -0.78125 1.5q-0.625 0.53125 -1.53125 0.53125q-1.125 0 -1.8125 -0.734375q-0.6875 -0.75 -0.6875 -2.125q0 -0.90625 0.296875 -1.578125q0.296875 -0.671875 0.890625 -1.0q0.609375 -0.34375 1.328125 -0.34375q0.890625 0 1.46875 0.46875q0.578125 0.453125 0.734375 1.28125l-0.90625 0.140625q-0.140625 -0.546875 -0.46875 -0.828125q-0.328125 -0.28125 -0.796875 -0.28125q-0.703125 0 -1.15625 0.515625q-0.4375 0.5 -0.4375 1.59375q0 1.109375 0.421875 1.625q0.4375 0.5 1.125 0.5q0.546875 0 0.90625 -0.34375q0.375 -0.34375 0.484375 -1.046875zm1.71875 2.03125l0 -7.625l0.9375 0l0 2.734375q0.65625 -0.765625 1.65625 -0.765625q0.609375 0 1.0625 0.25q0.453125 0.234375 0.640625 0.671875q0.203125 0.421875 0.203125 1.234375l0 3.5l-0.9375 0l0 -3.5q0 -0.703125 -0.3125 -1.015625q-0.296875 -0.328125 -0.859375 -0.328125q-0.40625 0 -0.78125 0.21875q-0.359375 0.21875 -0.515625 0.59375q-0.15625 0.359375 -0.15625 1.015625l0 3.015625l-0.9375 0zm12.152771 0l-0.9375 0l0 -5.96875q-0.34375 0.328125 -0.890625 0.65625q-0.546875 0.3125 -0.984375 0.46875l0 -0.90625q0.796875 -0.359375 1.375 -0.890625q0.59375 -0.53125 0.828125 -1.015625l0.609375 0l0 7.65625z" fill-rule="nonzero"/><path fill="#c9daf8" d="m651.33856 463.25198l0 0c0 -13.828888 31.361267 -25.039398 70.04724 -25.039398l0 0c38.686035 0 70.04724 11.21051 70.04724 25.039398l0 0c0 13.828857 -31.361206 25.039368 -70.04724 25.039368l0 0c-38.685974 0 -70.04724 -11.21051 -70.04724 -25.039368z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="8.0,3.0" d="m651.33856 463.25198l0 0c0 -13.828888 31.361267 -25.039398 70.04724 -25.039398l0 0c38.686035 0 70.04724 11.21051 70.04724 25.039398l0 0c0 13.828857 -31.361206 25.039368 -70.04724 25.039368l0 0c-38.685974 0 -70.04724 -11.21051 -70.04724 -25.039368z" fill-rule="evenodd"/><path fill="#000000" d="m688.4316 463.27322q0 -1.890625 1.015625 -2.96875q1.03125 -1.078125 2.640625 -1.078125q1.046875 0 1.890625 0.515625q0.859375 0.5 1.296875 1.40625q0.453125 0.890625 0.453125 2.046875q0 1.15625 -0.46875 2.078125q-0.46875 0.90625 -1.328125 1.375q-0.859375 0.46875 -1.859375 0.46875q-1.078125 0 -1.921875 -0.515625q-0.84375 -0.515625 -1.28125 -1.40625q-0.4375 -0.90625 -0.4375 -1.921875zm1.046875 0.015625q0 1.375 0.734375 2.171875q0.734375 0.796875 1.859375 0.796875q1.140625 0 1.875 -0.796875q0.734375 -0.8125 0.734375 -2.28125q0 -0.921875 -0.3125 -1.609375q-0.3125 -0.703125 -0.921875 -1.078125q-0.609375 -0.390625 -1.359375 -0.390625q-1.078125 0 -1.84375 0.734375q-0.765625 0.734375 -0.765625 2.453125zm7.4293823 5.828125l0 -7.65625l0.859375 0l0 0.71875q0.296875 -0.421875 0.671875 -0.625q0.390625 -0.21875 0.921875 -0.21875q0.703125 0 1.25 0.375q0.546875 0.359375 0.8125 1.03125q0.28125 0.65625 0.28125 1.453125q0 0.84375 -0.3125 1.53125q-0.296875 0.671875 -0.875 1.03125q-0.578125 0.359375 -1.21875 0.359375q-0.46875 0 -0.84375 -0.1875q-0.375 -0.203125 -0.609375 -0.515625l0 2.703125l-0.9375 0zm0.84375 -4.859375q0 1.0625 0.4375 1.578125q0.4375 0.515625 1.046875 0.515625q0.625 0 1.0625 -0.53125q0.453125 -0.53125 0.453125 -1.640625q0 -1.046875 -0.4375 -1.578125q-0.4375 -0.53125 -1.046875 -0.53125q-0.59375 0 -1.0625 0.5625q-0.453125 0.5625 -0.453125 1.625zm8.864014 0.953125l0.96875 0.125q-0.234375 0.84375 -0.859375 1.3125q-0.609375 0.46875 -1.578125 0.46875q-1.203125 0 -1.921875 -0.75q-0.703125 -0.75 -0.703125 -2.09375q0 -1.390625 0.71875 -2.15625q0.71875 -0.78125 1.859375 -0.78125q1.109375 0 1.8125 0.765625q0.703125 0.75 0.703125 2.125q0 0.078125 0 0.234375l-4.125 0q0.046875 0.921875 0.515625 1.40625q0.46875 0.484375 1.15625 0.484375q0.515625 0 0.875 -0.265625q0.359375 -0.28125 0.578125 -0.875zm-3.078125 -1.515625l3.09375 0q-0.0625 -0.6875 -0.359375 -1.046875q-0.453125 -0.53125 -1.15625 -0.53125q-0.640625 0 -1.09375 0.4375q-0.4375 0.421875 -0.484375 1.140625zm5.2233276 3.296875l0 -5.53125l0.84375 0l0 0.796875q0.609375 -0.921875 1.75 -0.921875q0.5 0 0.921875 0.1875q0.421875 0.171875 0.625 0.46875q0.21875 0.296875 0.296875 0.6875q0.046875 0.265625 0.046875 0.921875l0 3.390625l-0.9375 0l0 -3.359375q0 -0.578125 -0.109375 -0.859375q-0.109375 -0.28125 -0.390625 -0.453125q-0.265625 -0.171875 -0.640625 -0.171875q-0.59375 0 -1.03125 0.390625q-0.4375 0.375 -0.4375 1.4375l0 3.015625l-0.9375 0zm5.5515137 -1.65625l0.921875 -0.140625q0.078125 0.5625 0.4375 0.859375q0.359375 0.296875 1.0 0.296875q0.640625 0 0.953125 -0.265625q0.3125 -0.265625 0.3125 -0.625q0 -0.3125 -0.28125 -0.5q-0.1875 -0.125 -0.953125 -0.3125q-1.03125 -0.265625 -1.4375 -0.453125q-0.390625 -0.1875 -0.59375 -0.515625q-0.203125 -0.34375 -0.203125 -0.75q0 -0.359375 0.171875 -0.671875q0.171875 -0.328125 0.453125 -0.53125q0.21875 -0.15625 0.59375 -0.265625q0.390625 -0.125 0.8125 -0.125q0.65625 0 1.140625 0.1875q0.5 0.1875 0.734375 0.515625q0.234375 0.3125 0.3125 0.859375l-0.90625 0.125q-0.0625 -0.4375 -0.375 -0.671875q-0.296875 -0.234375 -0.828125 -0.234375q-0.65625 0 -0.9375 0.21875q-0.265625 0.203125 -0.265625 0.484375q0 0.1875 0.109375 0.328125q0.125 0.15625 0.359375 0.25q0.140625 0.0625 0.828125 0.25q1.0 0.265625 1.390625 0.4375q0.390625 0.15625 0.609375 0.484375q0.234375 0.3125 0.234375 0.796875q0 0.46875 -0.28125 0.890625q-0.265625 0.40625 -0.78125 0.640625q-0.515625 0.21875 -1.171875 0.21875q-1.078125 0 -1.640625 -0.4375q-0.5625 -0.453125 -0.71875 -1.34375zm9.484375 -0.125l0.96875 0.125q-0.234375 0.84375 -0.859375 1.3125q-0.609375 0.46875 -1.578125 0.46875q-1.203125 0 -1.921875 -0.75q-0.703125 -0.75 -0.703125 -2.09375q0 -1.390625 0.71875 -2.15625q0.71875 -0.78125 1.859375 -0.78125q1.109375 0 1.8125 0.765625q0.703125 0.75 0.703125 2.125q0 0.078125 0 0.234375l-4.125 0q0.046875 0.921875 0.515625 1.40625q0.46875 0.484375 1.15625 0.484375q0.515625 0 0.875 -0.265625q0.359375 -0.28125 0.578125 -0.875zm-3.078125 -1.515625l3.09375 0q-0.0625 -0.6875 -0.359375 -1.046875q-0.453125 -0.53125 -1.15625 -0.53125q-0.640625 0 -1.09375 0.4375q-0.4375 0.421875 -0.484375 1.140625zm8.832764 2.609375q-0.53125 0.453125 -1.015625 0.640625q-0.46875 0.171875 -1.015625 0.171875q-0.921875 0 -1.40625 -0.4375q-0.484375 -0.453125 -0.484375 -1.140625q0 -0.40625 0.171875 -0.734375q0.1875 -0.34375 0.484375 -0.546875q0.3125 -0.203125 0.6875 -0.3125q0.265625 -0.0625 0.828125 -0.140625q1.125 -0.125 1.671875 -0.3125q0 -0.203125 0 -0.25q0 -0.578125 -0.265625 -0.8125q-0.359375 -0.3125 -1.0625 -0.3125q-0.65625 0 -0.984375 0.234375q-0.3125 0.234375 -0.453125 0.8125l-0.921875 -0.125q0.125 -0.578125 0.40625 -0.9375q0.296875 -0.375 0.828125 -0.5625q0.546875 -0.203125 1.25 -0.203125q0.71875 0 1.15625 0.171875q0.4375 0.171875 0.640625 0.421875q0.21875 0.25 0.296875 0.640625q0.046875 0.234375 0.046875 0.859375l0 1.25q0 1.296875 0.0625 1.65625q0.0625 0.34375 0.234375 0.65625l-0.96875 0q-0.15625 -0.296875 -0.1875 -0.6875zm-0.078125 -2.078125q-0.515625 0.203125 -1.53125 0.34375q-0.578125 0.078125 -0.828125 0.1875q-0.234375 0.109375 -0.359375 0.3125q-0.125 0.1875 -0.125 0.4375q0 0.375 0.28125 0.625q0.28125 0.25 0.828125 0.25q0.53125 0 0.953125 -0.234375q0.421875 -0.234375 0.625 -0.65625q0.15625 -0.3125 0.15625 -0.9375l0 -0.328125zm2.3796387 2.765625l0 -5.53125l0.84375 0l0 0.84375q0.328125 -0.59375 0.59375 -0.78125q0.28125 -0.1875 0.609375 -0.1875q0.46875 0 0.953125 0.3125l-0.3125 0.859375q-0.34375 -0.203125 -0.6875 -0.203125q-0.3125 0 -0.5625 0.1875q-0.234375 0.1875 -0.34375 0.515625q-0.15625 0.5 -0.15625 1.09375l0 2.890625l-0.9375 0zm7.173584 -2.03125l0.921875 0.125q-0.15625 0.953125 -0.78125 1.5q-0.625 0.53125 -1.53125 0.53125q-1.125 0 -1.8125 -0.734375q-0.6875 -0.75 -0.6875 -2.125q0 -0.90625 0.296875 -1.578125q0.296875 -0.671875 0.890625 -1.0q0.609375 -0.34375 1.328125 -0.34375q0.890625 0 1.46875 0.46875q0.578125 0.453125 0.734375 1.28125l-0.90625 0.140625q-0.140625 -0.546875 -0.46875 -0.828125q-0.328125 -0.28125 -0.796875 -0.28125q-0.703125 0 -1.15625 0.515625q-0.4375 0.5 -0.4375 1.59375q0 1.109375 0.421875 1.625q0.4375 0.5 1.125 0.5q0.546875 0 0.90625 -0.34375q0.375 -0.34375 0.484375 -1.046875zm1.71875 2.03125l0 -7.625l0.9375 0l0 2.734375q0.65625 -0.765625 1.65625 -0.765625q0.609375 0 1.0625 0.25q0.453125 0.234375 0.640625 0.671875q0.203125 0.421875 0.203125 1.234375l0 3.5l-0.9375 0l0 -3.5q0 -0.703125 -0.3125 -1.015625q-0.296875 -0.328125 -0.859375 -0.328125q-0.40625 0 -0.78125 0.21875q-0.359375 0.21875 -0.515625 0.59375q-0.15625 0.359375 -0.15625 1.015625l0 3.015625l-0.9375 0zm8.637146 -2.015625l0.9375 -0.125q0.15625 0.796875 0.546875 1.15625q0.390625 0.34375 0.9375 0.34375q0.65625 0 1.109375 -0.453125q0.46875 -0.46875 0.46875 -1.140625q0 -0.640625 -0.421875 -1.0625q-0.421875 -0.421875 -1.078125 -0.421875q-0.265625 0 -0.65625 0.109375l0.109375 -0.828125q0.09375 0.015625 0.140625 0.015625q0.59375 0 1.078125 -0.3125q0.484375 -0.3125 0.484375 -0.96875q0 -0.515625 -0.359375 -0.84375q-0.34375 -0.34375 -0.890625 -0.34375q-0.546875 0 -0.921875 0.34375q-0.359375 0.34375 -0.453125 1.03125l-0.9375 -0.171875q0.171875 -0.9375 0.78125 -1.453125q0.609375 -0.515625 1.5 -0.515625q0.625 0 1.15625 0.265625q0.53125 0.265625 0.796875 0.734375q0.28125 0.453125 0.28125 0.984375q0 0.484375 -0.265625 0.890625q-0.265625 0.40625 -0.78125 0.65625q0.671875 0.15625 1.046875 0.65625q0.375 0.484375 0.375 1.21875q0 1.0 -0.734375 1.703125q-0.71875 0.6875 -1.828125 0.6875q-1.0 0 -1.671875 -0.59375q-0.65625 -0.609375 -0.75 -1.5625z" fill-rule="nonzero"/><path fill="#c9daf8" d="m746.43304 405.8819l0 0c0 -13.828857 31.361267 -25.039368 70.04724 -25.039368l0 0c38.686035 0 70.0473 11.21051 70.0473 25.039368l0 0c0 13.828857 -31.361267 25.039368 -70.0473 25.039368l0 0c-38.685974 0 -70.04724 -11.21051 -70.04724 -25.039368z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="8.0,3.0" d="m746.43304 405.8819l0 0c0 -13.828857 31.361267 -25.039368 70.04724 -25.039368l0 0c38.686035 0 70.0473 11.21051 70.0473 25.039368l0 0c0 13.828857 -31.361267 25.039368 -70.0473 25.039368l0 0c-38.685974 0 -70.04724 -11.21051 -70.04724 -25.039368z" fill-rule="evenodd"/><path fill="#000000" d="m783.52606 405.90314q0 -1.890625 1.015625 -2.96875q1.03125 -1.078125 2.640625 -1.078125q1.046875 0 1.890625 0.515625q0.859375 0.5 1.296875 1.40625q0.453125 0.890625 0.453125 2.046875q0 1.15625 -0.46875 2.078125q-0.46875 0.90625 -1.328125 1.375q-0.859375 0.46875 -1.859375 0.46875q-1.078125 0 -1.921875 -0.515625q-0.84375 -0.515625 -1.28125 -1.40625q-0.4375 -0.90625 -0.4375 -1.921875zm1.046875 0.015625q0 1.375 0.734375 2.171875q0.734375 0.796875 1.859375 0.796875q1.140625 0 1.875 -0.796875q0.734375 -0.8125 0.734375 -2.28125q0 -0.921875 -0.3125 -1.609375q-0.3125 -0.703125 -0.921875 -1.078125q-0.609375 -0.390625 -1.359375 -0.390625q-1.078125 0 -1.84375 0.734375q-0.765625 0.734375 -0.765625 2.453125zm7.4293823 5.828125l0 -7.65625l0.859375 0l0 0.71875q0.296875 -0.421875 0.671875 -0.625q0.390625 -0.21875 0.921875 -0.21875q0.703125 0 1.25 0.375q0.546875 0.359375 0.8125 1.03125q0.28125 0.65625 0.28125 1.453125q0 0.84375 -0.3125 1.53125q-0.296875 0.671875 -0.875 1.03125q-0.578125 0.359375 -1.21875 0.359375q-0.46875 0 -0.84375 -0.1875q-0.375 -0.203125 -0.609375 -0.515625l0 2.703125l-0.9375 0zm0.84375 -4.859375q0 1.0625 0.4375 1.578125q0.4375 0.515625 1.046875 0.515625q0.625 0 1.0625 -0.53125q0.453125 -0.53125 0.453125 -1.640625q0 -1.046875 -0.4375 -1.578125q-0.4375 -0.53125 -1.046875 -0.53125q-0.59375 0 -1.0625 0.5625q-0.453125 0.5625 -0.453125 1.625zm8.864014 0.953125l0.96875 0.125q-0.234375 0.84375 -0.859375 1.3125q-0.609375 0.46875 -1.578125 0.46875q-1.203125 0 -1.921875 -0.75q-0.703125 -0.75 -0.703125 -2.09375q0 -1.390625 0.71875 -2.15625q0.71875 -0.78125 1.859375 -0.78125q1.109375 0 1.8125 0.765625q0.703125 0.75 0.703125 2.125q0 0.078125 0 0.234375l-4.125 0q0.046875 0.921875 0.515625 1.40625q0.46875 0.484375 1.15625 0.484375q0.515625 0 0.875 -0.265625q0.359375 -0.28125 0.578125 -0.875zm-3.078125 -1.515625l3.09375 0q-0.0625 -0.6875 -0.359375 -1.046875q-0.453125 -0.53125 -1.15625 -0.53125q-0.640625 0 -1.09375 0.4375q-0.4375 0.421875 -0.484375 1.140625zm5.2233887 3.296875l0 -5.53125l0.84375 0l0 0.796875q0.609375 -0.921875 1.75 -0.921875q0.5 0 0.921875 0.1875q0.421875 0.171875 0.625 0.46875q0.21875 0.296875 0.296875 0.6875q0.046875 0.265625 0.046875 0.921875l0 3.390625l-0.9375 0l0 -3.359375q0 -0.578125 -0.109375 -0.859375q-0.109375 -0.28125 -0.390625 -0.453125q-0.265625 -0.171875 -0.640625 -0.171875q-0.59375 0 -1.03125 0.390625q-0.4375 0.375 -0.4375 1.4375l0 3.015625l-0.9375 0zm5.5514526 -1.65625l0.921875 -0.140625q0.078125 0.5625 0.4375 0.859375q0.359375 0.296875 1.0 0.296875q0.640625 0 0.953125 -0.265625q0.3125 -0.265625 0.3125 -0.625q0 -0.3125 -0.28125 -0.5q-0.1875 -0.125 -0.953125 -0.3125q-1.03125 -0.265625 -1.4375 -0.453125q-0.390625 -0.1875 -0.59375 -0.515625q-0.203125 -0.34375 -0.203125 -0.75q0 -0.359375 0.171875 -0.671875q0.171875 -0.328125 0.453125 -0.53125q0.21875 -0.15625 0.59375 -0.265625q0.390625 -0.125 0.8125 -0.125q0.65625 0 1.140625 0.1875q0.5 0.1875 0.734375 0.515625q0.234375 0.3125 0.3125 0.859375l-0.90625 0.125q-0.0625 -0.4375 -0.375 -0.671875q-0.296875 -0.234375 -0.828125 -0.234375q-0.65625 0 -0.9375 0.21875q-0.265625 0.203125 -0.265625 0.484375q0 0.1875 0.109375 0.328125q0.125 0.15625 0.359375 0.25q0.140625 0.0625 0.828125 0.25q1.0 0.265625 1.390625 0.4375q0.390625 0.15625 0.609375 0.484375q0.234375 0.3125 0.234375 0.796875q0 0.46875 -0.28125 0.890625q-0.265625 0.40625 -0.78125 0.640625q-0.515625 0.21875 -1.171875 0.21875q-1.078125 0 -1.640625 -0.4375q-0.5625 -0.453125 -0.71875 -1.34375zm9.484375 -0.125l0.96875 0.125q-0.234375 0.84375 -0.859375 1.3125q-0.609375 0.46875 -1.578125 0.46875q-1.203125 0 -1.921875 -0.75q-0.703125 -0.75 -0.703125 -2.09375q0 -1.390625 0.71875 -2.15625q0.71875 -0.78125 1.859375 -0.78125q1.109375 0 1.8125 0.765625q0.703125 0.75 0.703125 2.125q0 0.078125 0 0.234375l-4.125 0q0.046875 0.921875 0.515625 1.40625q0.46875 0.484375 1.15625 0.484375q0.515625 0 0.875 -0.265625q0.359375 -0.28125 0.578125 -0.875zm-3.078125 -1.515625l3.09375 0q-0.0625 -0.6875 -0.359375 -1.046875q-0.453125 -0.53125 -1.15625 -0.53125q-0.640625 0 -1.09375 0.4375q-0.4375 0.421875 -0.484375 1.140625zm8.832764 2.609375q-0.53125 0.453125 -1.015625 0.640625q-0.46875 0.171875 -1.015625 0.171875q-0.921875 0 -1.40625 -0.4375q-0.484375 -0.453125 -0.484375 -1.140625q0 -0.40625 0.171875 -0.734375q0.1875 -0.34375 0.484375 -0.546875q0.3125 -0.203125 0.6875 -0.3125q0.265625 -0.0625 0.828125 -0.140625q1.125 -0.125 1.671875 -0.3125q0 -0.203125 0 -0.25q0 -0.578125 -0.265625 -0.8125q-0.359375 -0.3125 -1.0625 -0.3125q-0.65625 0 -0.984375 0.234375q-0.3125 0.234375 -0.453125 0.8125l-0.921875 -0.125q0.125 -0.578125 0.40625 -0.9375q0.296875 -0.375 0.828125 -0.5625q0.546875 -0.203125 1.25 -0.203125q0.71875 0 1.15625 0.171875q0.4375 0.171875 0.640625 0.421875q0.21875 0.25 0.296875 0.640625q0.046875 0.234375 0.046875 0.859375l0 1.25q0 1.296875 0.0625 1.65625q0.0625 0.34375 0.234375 0.65625l-0.96875 0q-0.15625 -0.296875 -0.1875 -0.6875zm-0.078125 -2.078125q-0.515625 0.203125 -1.53125 0.34375q-0.578125 0.078125 -0.828125 0.1875q-0.234375 0.109375 -0.359375 0.3125q-0.125 0.1875 -0.125 0.4375q0 0.375 0.28125 0.625q0.28125 0.25 0.828125 0.25q0.53125 0 0.953125 -0.234375q0.421875 -0.234375 0.625 -0.65625q0.15625 -0.3125 0.15625 -0.9375l0 -0.328125zm2.3796387 2.765625l0 -5.53125l0.84375 0l0 0.84375q0.328125 -0.59375 0.59375 -0.78125q0.28125 -0.1875 0.609375 -0.1875q0.46875 0 0.953125 0.3125l-0.3125 0.859375q-0.34375 -0.203125 -0.6875 -0.203125q-0.3125 0 -0.5625 0.1875q-0.234375 0.1875 -0.34375 0.515625q-0.15625 0.5 -0.15625 1.09375l0 2.890625l-0.9375 0zm7.173584 -2.03125l0.921875 0.125q-0.15625 0.953125 -0.78125 1.5q-0.625 0.53125 -1.53125 0.53125q-1.125 0 -1.8125 -0.734375q-0.6875 -0.75 -0.6875 -2.125q0 -0.90625 0.296875 -1.578125q0.296875 -0.671875 0.890625 -1.0q0.609375 -0.34375 1.328125 -0.34375q0.890625 0 1.46875 0.46875q0.578125 0.453125 0.734375 1.28125l-0.90625 0.140625q-0.140625 -0.546875 -0.46875 -0.828125q-0.328125 -0.28125 -0.796875 -0.28125q-0.703125 0 -1.15625 0.515625q-0.4375 0.5 -0.4375 1.59375q0 1.109375 0.421875 1.625q0.4375 0.5 1.125 0.5q0.546875 0 0.90625 -0.34375q0.375 -0.34375 0.484375 -1.046875zm1.71875 2.03125l0 -7.625l0.9375 0l0 2.734375q0.65625 -0.765625 1.65625 -0.765625q0.609375 0 1.0625 0.25q0.453125 0.234375 0.640625 0.671875q0.203125 0.421875 0.203125 1.234375l0 3.5l-0.9375 0l0 -3.5q0 -0.703125 -0.3125 -1.015625q-0.296875 -0.328125 -0.859375 -0.328125q-0.40625 0 -0.78125 0.21875q-0.359375 0.21875 -0.515625 0.59375q-0.15625 0.359375 -0.15625 1.015625l0 3.015625l-0.9375 0zm13.543396 -0.90625l0 0.90625l-5.03125 0q-0.015625 -0.34375 0.109375 -0.65625q0.1875 -0.515625 0.609375 -1.015625q0.421875 -0.5 1.234375 -1.140625q1.234375 -1.03125 1.671875 -1.625q0.4375 -0.59375 0.4375 -1.125q0 -0.5625 -0.40625 -0.9375q-0.390625 -0.390625 -1.03125 -0.390625q-0.671875 0 -1.078125 0.40625q-0.40625 0.40625 -0.40625 1.125l-0.96875 -0.09375q0.09375 -1.078125 0.734375 -1.640625q0.65625 -0.5625 1.734375 -0.5625q1.109375 0 1.75 0.609375q0.640625 0.609375 0.640625 1.5q0 0.46875 -0.1875 0.90625q-0.1875 0.4375 -0.625 0.9375q-0.4375 0.484375 -1.453125 1.328125q-0.828125 0.71875 -1.078125 0.96875q-0.234375 0.25 -0.390625 0.5l3.734375 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m585.01575 351.0971l317.51184 0l0 193.7638l-317.51184 0z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="8.0,3.0" d="m585.01575 351.0971l317.51184 0l0 193.7638l-317.51184 0z" fill-rule="evenodd"/><path fill="#cfe2f3" d="m667.33856 134.52231l0 0c0 8.005951 25.96045 14.496063 57.984253 14.496063c32.023865 0 57.984253 -6.4901123 57.984253 -14.496063l0 125.212585c0 8.005981 -25.960388 14.496063 -57.984253 14.496063c-32.023804 0 -57.984253 -6.490082 -57.984253 -14.496063z" fill-rule="evenodd"/><path fill="#e2edf7" d="m667.33856 134.52231l0 0c0 -8.005951 25.96045 -14.496063 57.984253 -14.496063c32.023865 0 57.984253 6.4901123 57.984253 14.496063l0 0c0 8.005951 -25.960388 14.496063 -57.984253 14.496063c-32.023804 0 -57.984253 -6.4901123 -57.984253 -14.496063z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m783.30707 134.52231l0 0c0 8.005951 -25.960388 14.496063 -57.984253 14.496063c-32.023804 0 -57.984253 -6.4901123 -57.984253 -14.496063l0 0c0 -8.005951 25.96045 -14.496063 57.984253 -14.496063c32.023865 0 57.984253 6.4901123 57.984253 14.496063l0 125.212585c0 8.005981 -25.960388 14.496063 -57.984253 14.496063c-32.023804 0 -57.984253 -6.490082 -57.984253 -14.496063l0 -125.212585" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m783.30707 134.52231l0 0c0 8.005951 -25.960388 14.496063 -57.984253 14.496063c-32.023804 0 -57.984253 -6.4901123 -57.984253 -14.496063l0 0c0 -8.005951 25.96045 -14.496063 57.984253 -14.496063c32.023865 0 57.984253 6.4901123 57.984253 14.496063l0 125.212585c0 8.005981 -25.960388 14.496063 -57.984253 14.496063c-32.023804 0 -57.984253 -6.490082 -57.984253 -14.496063l0 -125.212585" fill-rule="evenodd"/><path fill="#000000" d="m699.26953 193.79665q0 -3.328125 1.78125 -5.203125q1.78125 -1.890625 4.609375 -1.890625q1.84375 0 3.328125 0.890625q1.484375 0.875 2.265625 2.46875q0.78125 1.578125 0.78125 3.578125q0 2.03125 -0.828125 3.640625q-0.8125 1.59375 -2.3125 2.421875q-1.5 0.828125 -3.25 0.828125q-1.875 0 -3.359375 -0.90625q-1.484375 -0.921875 -2.25 -2.5q-0.765625 -1.578125 -0.765625 -3.328125zm1.8125 0.015625q0 2.421875 1.296875 3.8125q1.296875 1.390625 3.265625 1.390625q2.0 0 3.28125 -1.40625q1.28125 -1.40625 1.28125 -3.984375q0 -1.625 -0.546875 -2.84375q-0.546875 -1.21875 -1.609375 -1.875q-1.0625 -0.671875 -2.375 -0.671875q-1.890625 0 -3.25 1.296875q-1.34375 1.28125 -1.34375 4.28125zm14.527039 6.484375l-1.515625 0l0 -13.359375l1.640625 0l0 4.765625q1.046875 -1.296875 2.65625 -1.296875q0.890625 0 1.6875 0.359375q0.796875 0.359375 1.3125 1.015625q0.515625 0.640625 0.796875 1.5625q0.296875 0.921875 0.296875 1.96875q0 2.484375 -1.234375 3.84375q-1.21875 1.359375 -2.953125 1.359375q-1.703125 0 -2.6875 -1.4375l0 1.21875zm-0.015625 -4.90625q0 1.734375 0.484375 2.515625q0.765625 1.265625 2.09375 1.265625q1.078125 0 1.859375 -0.9375q0.78125 -0.9375 0.78125 -2.78125q0 -1.890625 -0.75 -2.796875q-0.75 -0.90625 -1.828125 -0.90625q-1.0625 0 -1.859375 0.9375q-0.78125 0.9375 -0.78125 2.703125zm8.875732 -6.546875l0 -1.90625l1.640625 0l0 1.90625l-1.640625 0zm-2.078125 15.203125l0.3125 -1.390625q0.5 0.125 0.78125 0.125q0.5 0 0.734375 -0.328125q0.25 -0.328125 0.25 -1.671875l0 -10.15625l1.640625 0l0 10.203125q0 1.78125 -0.46875 2.484375q-0.59375 0.90625 -1.96875 0.90625q-0.65625 0 -1.28125 -0.171875zm12.863586 -6.859375l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625zm15.453796 2.21875l1.609375 0.21875q-0.265625 1.65625 -1.359375 2.609375q-1.078125 0.9375 -2.671875 0.9375q-1.984375 0 -3.1875 -1.296875q-1.203125 -1.296875 -1.203125 -3.71875q0 -1.578125 0.515625 -2.75q0.515625 -1.171875 1.578125 -1.75q1.0625 -0.59375 2.3125 -0.59375q1.578125 0 2.578125 0.796875q1.0 0.796875 1.28125 2.265625l-1.59375 0.234375q-0.234375 -0.96875 -0.8125 -1.453125q-0.578125 -0.5 -1.390625 -0.5q-1.234375 0 -2.015625 0.890625q-0.78125 0.890625 -0.78125 2.8125q0 1.953125 0.75 2.84375q0.75 0.875 1.953125 0.875q0.96875 0 1.609375 -0.59375q0.65625 -0.59375 0.828125 -1.828125zm6.59375 2.078125l0.234375 1.453125q-0.6875 0.140625 -1.234375 0.140625q-0.890625 0 -1.390625 -0.28125q-0.484375 -0.28125 -0.6875 -0.734375q-0.203125 -0.46875 -0.203125 -1.9375l0 -5.578125l-1.203125 0l0 -1.265625l1.203125 0l0 -2.390625l1.625 -0.984375l0 3.375l1.65625 0l0 1.265625l-1.65625 0l0 5.671875q0 0.6875 0.078125 0.890625q0.09375 0.203125 0.28125 0.328125q0.203125 0.109375 0.578125 0.109375q0.265625 0 0.71875 -0.0625z" fill-rule="nonzero"/><path fill="#000000" d="m693.49536 217.99977l1.65625 -0.140625q0.125 1.0 0.546875 1.640625q0.4375 0.640625 1.34375 1.046875q0.921875 0.390625 2.0625 0.390625q1.0 0 1.78125 -0.296875q0.78125 -0.296875 1.15625 -0.8125q0.375 -0.53125 0.375 -1.15625q0 -0.625 -0.375 -1.09375q-0.359375 -0.46875 -1.1875 -0.796875q-0.546875 -0.203125 -2.390625 -0.640625q-1.828125 -0.453125 -2.5625 -0.84375q-0.96875 -0.5 -1.4375 -1.234375q-0.46875 -0.75 -0.46875 -1.671875q0 -1.0 0.578125 -1.875q0.578125 -0.890625 1.671875 -1.34375q1.109375 -0.453125 2.453125 -0.453125q1.484375 0 2.609375 0.484375q1.140625 0.46875 1.75 1.40625q0.609375 0.921875 0.65625 2.09375l-1.6875 0.125q-0.140625 -1.265625 -0.9375 -1.90625q-0.78125 -0.65625 -2.3125 -0.65625q-1.609375 0 -2.34375 0.59375q-0.734375 0.59375 -0.734375 1.421875q0 0.71875 0.53125 1.171875q0.5 0.46875 2.65625 0.96875q2.15625 0.484375 2.953125 0.84375q1.171875 0.53125 1.71875 1.359375q0.5625 0.828125 0.5625 1.90625q0 1.0625 -0.609375 2.015625q-0.609375 0.9375 -1.75 1.46875q-1.140625 0.515625 -2.578125 0.515625q-1.8125 0 -3.046875 -0.53125q-1.21875 -0.53125 -1.921875 -1.59375q-0.6875 -1.0625 -0.71875 -2.40625zm16.412354 2.828125l0.234375 1.453125q-0.6875 0.140625 -1.234375 0.140625q-0.890625 0 -1.390625 -0.28125q-0.484375 -0.28125 -0.6875 -0.734375q-0.203125 -0.46875 -0.203125 -1.9375l0 -5.578125l-1.203125 0l0 -1.265625l1.203125 0l0 -2.390625l1.625 -0.984375l0 3.375l1.65625 0l0 1.265625l-1.65625 0l0 5.671875q0 0.6875 0.078125 0.890625q0.09375 0.203125 0.28125 0.328125q0.203125 0.109375 0.578125 0.109375q0.265625 0 0.71875 -0.0625zm0.9957886 -3.375q0 -2.6875 1.484375 -3.96875q1.25 -1.078125 3.046875 -1.078125q2.0 0 3.265625 1.3125q1.265625 1.296875 1.265625 3.609375q0 1.859375 -0.5625 2.9375q-0.5625 1.0625 -1.640625 1.65625q-1.0625 0.59375 -2.328125 0.59375q-2.03125 0 -3.28125 -1.296875q-1.25 -1.3125 -1.25 -3.765625zm1.6875 0q0 1.859375 0.796875 2.796875q0.8125 0.921875 2.046875 0.921875q1.21875 0 2.03125 -0.921875q0.8125 -0.9375 0.8125 -2.84375q0 -1.796875 -0.8125 -2.71875q-0.8125 -0.921875 -2.03125 -0.921875q-1.234375 0 -2.046875 0.921875q-0.796875 0.90625 -0.796875 2.765625zm9.281982 4.84375l0 -9.671875l1.46875 0l0 1.46875q0.5625 -1.03125 1.03125 -1.359375q0.484375 -0.328125 1.0625 -0.328125q0.828125 0 1.6875 0.53125l-0.5625 1.515625q-0.609375 -0.359375 -1.203125 -0.359375q-0.546875 0 -0.96875 0.328125q-0.421875 0.328125 -0.609375 0.890625q-0.28125 0.875 -0.28125 1.921875l0 5.0625l-1.625 0zm12.5407715 -1.1875q-0.921875 0.765625 -1.765625 1.09375q-0.828125 0.3125 -1.796875 0.3125q-1.59375 0 -2.453125 -0.78125q-0.859375 -0.78125 -0.859375 -1.984375q0 -0.71875 0.328125 -1.296875q0.328125 -0.59375 0.84375 -0.9375q0.53125 -0.359375 1.1875 -0.546875q0.46875 -0.125 1.453125 -0.25q1.984375 -0.234375 2.921875 -0.5625q0.015625 -0.34375 0.015625 -0.421875q0 -1.0 -0.46875 -1.421875q-0.625 -0.546875 -1.875 -0.546875q-1.15625 0 -1.703125 0.40625q-0.546875 0.40625 -0.8125 1.421875l-1.609375 -0.21875q0.21875 -1.015625 0.71875 -1.640625q0.5 -0.640625 1.453125 -0.984375q0.953125 -0.34375 2.1875 -0.34375q1.25 0 2.015625 0.296875q0.78125 0.28125 1.140625 0.734375q0.375 0.4375 0.515625 1.109375q0.078125 0.421875 0.078125 1.515625l0 2.1875q0 2.28125 0.109375 2.890625q0.109375 0.59375 0.40625 1.15625l-1.703125 0q-0.265625 -0.515625 -0.328125 -1.1875zm-0.140625 -3.671875q-0.890625 0.375 -2.671875 0.625q-1.015625 0.140625 -1.4375 0.328125q-0.421875 0.1875 -0.65625 0.53125q-0.21875 0.34375 -0.21875 0.78125q0 0.65625 0.5 1.09375q0.5 0.4375 1.453125 0.4375q0.9375 0 1.671875 -0.40625q0.75 -0.421875 1.09375 -1.140625q0.265625 -0.5625 0.265625 -1.640625l0 -0.609375zm3.8913574 5.65625l1.59375 0.234375q0.109375 0.75 0.5625 1.078125q0.609375 0.453125 1.671875 0.453125q1.140625 0 1.75 -0.453125q0.625 -0.453125 0.84375 -1.265625q0.125 -0.5 0.109375 -2.109375q-1.0625 1.265625 -2.671875 1.265625q-2.0 0 -3.09375 -1.4375q-1.09375 -1.4375 -1.09375 -3.453125q0 -1.390625 0.5 -2.5625q0.515625 -1.171875 1.453125 -1.796875q0.953125 -0.640625 2.25 -0.640625q1.703125 0 2.8125 1.375l0 -1.15625l1.515625 0l0 8.359375q0 2.265625 -0.46875 3.203125q-0.453125 0.9375 -1.453125 1.484375q-0.984375 0.546875 -2.453125 0.546875q-1.71875 0 -2.796875 -0.78125q-1.0625 -0.765625 -1.03125 -2.34375zm1.359375 -5.8125q0 1.90625 0.75 2.78125q0.765625 0.875 1.90625 0.875q1.125 0 1.890625 -0.859375q0.765625 -0.875 0.765625 -2.734375q0 -1.78125 -0.796875 -2.671875q-0.78125 -0.90625 -1.890625 -0.90625q-1.09375 0 -1.859375 0.890625q-0.765625 0.875 -0.765625 2.625zm15.953857 1.90625l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625z" fill-rule="nonzero"/><path fill="#cfe2f3" d="m619.0236 51.207348c0 -20.743292 47.591797 -37.559055 106.299194 -37.559055l0 0c58.70746 0 106.299255 16.815762 106.299255 37.559055l0 0c0 20.743298 -47.591797 37.559055 -106.299255 37.559055l0 0c-58.707397 0 -106.299194 -16.815758 -106.299194 -37.559055z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m619.0236 51.207348c0 -20.743292 47.591797 -37.559055 106.299194 -37.559055l0 0c58.70746 0 106.299255 16.815762 106.299255 37.559055l0 0c0 20.743298 -47.591797 37.559055 -106.299255 37.559055l0 0c-58.707397 0 -106.299194 -16.815758 -106.299194 -37.559055z" fill-rule="evenodd"/><path fill="#000000" d="m682.6886 58.127346l0 -13.359375l5.046875 0q1.328125 0 2.03125 0.125q0.96875 0.171875 1.640625 0.640625q0.671875 0.453125 1.078125 1.28125q0.40625 0.828125 0.40625 1.828125q0 1.703125 -1.09375 2.890625q-1.078125 1.171875 -3.921875 1.171875l-3.421875 0l0 5.421875l-1.765625 0zm1.765625 -7.0l3.453125 0q1.71875 0 2.4375 -0.640625q0.71875 -0.640625 0.71875 -1.796875q0 -0.84375 -0.421875 -1.4375q-0.421875 -0.59375 -1.125 -0.78125q-0.4375 -0.125 -1.640625 -0.125l-3.421875 0l0 4.78125zm9.8654175 2.15625q0 -2.6875 1.484375 -3.96875q1.25 -1.078125 3.046875 -1.078125q2.0 0 3.265625 1.3125q1.265625 1.296875 1.265625 3.609375q0 1.859375 -0.5625 2.9375q-0.5625 1.0625 -1.640625 1.65625q-1.0625 0.59375 -2.328125 0.59375q-2.03125 0 -3.28125 -1.296875q-1.25 -1.3125 -1.25 -3.765625zm1.6875 0q0 1.859375 0.796875 2.796875q0.8125 0.921875 2.046875 0.921875q1.21875 0 2.03125 -0.921875q0.8125 -0.9375 0.8125 -2.84375q0 -1.796875 -0.8125 -2.71875q-0.8125 -0.921875 -2.03125 -0.921875q-1.234375 0 -2.046875 0.921875q-0.796875 0.90625 -0.796875 2.765625zm8.641357 1.953125l1.625 -0.25q0.125 0.96875 0.75 1.5q0.625 0.515625 1.75 0.515625q1.125 0 1.671875 -0.453125q0.546875 -0.46875 0.546875 -1.09375q0 -0.546875 -0.484375 -0.875q-0.328125 -0.21875 -1.671875 -0.546875q-1.8125 -0.46875 -2.515625 -0.796875q-0.6875 -0.328125 -1.046875 -0.90625q-0.359375 -0.59375 -0.359375 -1.3125q0 -0.640625 0.296875 -1.1875q0.296875 -0.5625 0.8125 -0.921875q0.375 -0.28125 1.03125 -0.46875q0.671875 -0.203125 1.421875 -0.203125q1.140625 0 2.0 0.328125q0.859375 0.328125 1.265625 0.890625q0.421875 0.5625 0.578125 1.5l-1.609375 0.21875q-0.109375 -0.75 -0.640625 -1.171875q-0.515625 -0.421875 -1.46875 -0.421875q-1.140625 0 -1.625 0.375q-0.46875 0.375 -0.46875 0.875q0 0.3125 0.1875 0.578125q0.203125 0.265625 0.640625 0.4375q0.234375 0.09375 1.4375 0.421875q1.75 0.453125 2.4375 0.75q0.6875 0.296875 1.078125 0.859375q0.390625 0.5625 0.390625 1.40625q0 0.828125 -0.484375 1.546875q-0.46875 0.71875 -1.375 1.125q-0.90625 0.390625 -2.046875 0.390625q-1.875 0 -2.875 -0.78125q-0.984375 -0.78125 -1.25 -2.328125zm13.5625 1.421875l0.234375 1.453125q-0.6875 0.140625 -1.234375 0.140625q-0.890625 0 -1.390625 -0.28125q-0.484375 -0.28125 -0.6875 -0.734375q-0.203125 -0.46875 -0.203125 -1.9375l0 -5.578125l-1.203125 0l0 -1.265625l1.203125 0l0 -2.390625l1.625 -0.984375l0 3.375l1.65625 0l0 1.265625l-1.65625 0l0 5.671875q0 0.6875 0.078125 0.890625q0.09375 0.203125 0.28125 0.328125q0.203125 0.109375 0.578125 0.109375q0.265625 0 0.71875 -0.0625zm1.2926636 2.265625l1.59375 0.234375q0.109375 0.75 0.5625 1.078125q0.609375 0.453125 1.671875 0.453125q1.140625 0 1.75 -0.453125q0.625 -0.453125 0.84375 -1.265625q0.125 -0.5 0.109375 -2.109375q-1.0625 1.265625 -2.671875 1.265625q-2.0 0 -3.09375 -1.4375q-1.09375 -1.4375 -1.09375 -3.453125q0 -1.390625 0.5 -2.5625q0.515625 -1.171875 1.453125 -1.796875q0.953125 -0.640625 2.25 -0.640625q1.703125 0 2.8125 1.375l0 -1.15625l1.515625 0l0 8.359375q0 2.265625 -0.46875 3.203125q-0.453125 0.9375 -1.453125 1.484375q-0.984375 0.546875 -2.453125 0.546875q-1.71875 0 -2.796875 -0.78125q-1.0625 -0.765625 -1.03125 -2.34375zm1.359375 -5.8125q0 1.90625 0.75 2.78125q0.765625 0.875 1.90625 0.875q1.125 0 1.890625 -0.859375q0.765625 -0.875 0.765625 -2.734375q0 -1.78125 -0.796875 -2.671875q-0.78125 -0.90625 -1.890625 -0.90625q-1.09375 0 -1.859375 0.890625q-0.765625 0.875 -0.765625 2.625zm9.313232 5.015625l0 -9.671875l1.46875 0l0 1.46875q0.5625 -1.03125 1.03125 -1.359375q0.484375 -0.328125 1.0625 -0.328125q0.828125 0 1.6875 0.53125l-0.5625 1.515625q-0.609375 -0.359375 -1.203125 -0.359375q-0.546875 0 -0.96875 0.328125q-0.421875 0.328125 -0.609375 0.890625q-0.28125 0.875 -0.28125 1.921875l0 5.0625l-1.625 0zm12.8533325 -3.109375l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625zm8.485046 2.875l1.625 -0.25q0.125 0.96875 0.75 1.5q0.625 0.515625 1.75 0.515625q1.125 0 1.671875 -0.453125q0.546875 -0.46875 0.546875 -1.09375q0 -0.546875 -0.484375 -0.875q-0.328125 -0.21875 -1.671875 -0.546875q-1.8125 -0.46875 -2.515625 -0.796875q-0.6875 -0.328125 -1.046875 -0.90625q-0.359375 -0.59375 -0.359375 -1.3125q0 -0.640625 0.296875 -1.1875q0.296875 -0.5625 0.8125 -0.921875q0.375 -0.28125 1.03125 -0.46875q0.671875 -0.203125 1.421875 -0.203125q1.140625 0 2.0 0.328125q0.859375 0.328125 1.265625 0.890625q0.421875 0.5625 0.578125 1.5l-1.609375 0.21875q-0.109375 -0.75 -0.640625 -1.171875q-0.515625 -0.421875 -1.46875 -0.421875q-1.140625 0 -1.625 0.375q-0.46875 0.375 -0.46875 0.875q0 0.3125 0.1875 0.578125q0.203125 0.265625 0.640625 0.4375q0.234375 0.09375 1.4375 0.421875q1.75 0.453125 2.4375 0.75q0.6875 0.296875 1.078125 0.859375q0.390625 0.5625 0.390625 1.40625q0 0.828125 -0.484375 1.546875q-0.46875 0.71875 -1.375 1.125q-0.90625 0.390625 -2.046875 0.390625q-1.875 0 -2.875 -0.78125q-0.984375 -0.78125 -1.25 -2.328125zm16.140625 6.59375l0 -4.734375q-0.375 0.546875 -1.0625 0.90625q-0.6875 0.34375 -1.46875 0.34375q-1.71875 0 -2.96875 -1.375q-1.234375 -1.375 -1.234375 -3.765625q0 -1.46875 0.5 -2.625q0.515625 -1.15625 1.46875 -1.75q0.96875 -0.59375 2.109375 -0.59375q1.796875 0 2.828125 1.515625l0 -1.296875l1.46875 0l0 13.375l-1.640625 0zm-5.046875 -8.5625q0 1.859375 0.78125 2.796875q0.78125 0.9375 1.875 0.9375q1.046875 0 1.796875 -0.890625q0.765625 -0.890625 0.765625 -2.703125q0 -1.9375 -0.796875 -2.90625q-0.796875 -0.96875 -1.875 -0.96875q-1.0625 0 -1.8125 0.90625q-0.734375 0.90625 -0.734375 2.828125zm9.219482 4.859375l0 -13.359375l1.640625 0l0 13.359375l-1.640625 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m366.89764 200.93964l283.27557 -123.18111" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m366.89764 200.93964l277.77332 -120.78846" fill-rule="evenodd"/><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m645.3296 81.66589l3.5029907 -3.3243942l-4.8203125 0.29496002z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m366.89764 200.93964l300.44092 -3.81102" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m366.89764 200.93964l294.4414 -3.7349396" fill-rule="evenodd"/><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m661.36 198.85631l4.5167847 -1.7091522l-4.558655 -1.5940399z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m366.89764 200.93964l376.8819 150.17322" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m366.89764 200.93964l371.30804 147.95227" fill-rule="evenodd"/><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m737.5943 350.4263l4.8271484 0.14541626l-3.604309 -3.214203z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m247.02362 609.521l232.97638 0l0 42.015747l-232.97638 0z" fill-rule="evenodd"/><path fill="#000000" d="m257.46112 636.441l0 -13.359375l4.609375 0q1.546875 0 2.375 0.203125q1.140625 0.25 1.953125 0.953125q1.0625 0.890625 1.578125 2.28125q0.53125 1.390625 0.53125 3.171875q0 1.515625 -0.359375 2.703125q-0.359375 1.171875 -0.921875 1.9375q-0.546875 0.765625 -1.203125 1.21875q-0.65625 0.4375 -1.59375 0.671875q-0.9375 0.21875 -2.140625 0.21875l-4.828125 0zm1.765625 -1.578125l2.859375 0q1.3125 0 2.0625 -0.234375q0.75 -0.25 1.203125 -0.703125q0.625 -0.625 0.96875 -1.6875q0.359375 -1.0625 0.359375 -2.578125q0 -2.09375 -0.6875 -3.21875q-0.6875 -1.125 -1.671875 -1.5q-0.703125 -0.28125 -2.28125 -0.28125l-2.8125 0l0 10.203125zm11.504211 -9.890625l0 -1.890625l1.640625 0l0 1.890625l-1.640625 0zm0 11.46875l0 -9.671875l1.640625 0l0 9.671875l-1.640625 0zm3.488556 -2.890625l1.625 -0.25q0.125 0.96875 0.75 1.5q0.625 0.515625 1.75 0.515625q1.125 0 1.671875 -0.453125q0.546875 -0.46875 0.546875 -1.09375q0 -0.546875 -0.484375 -0.875q-0.328125 -0.21875 -1.671875 -0.546875q-1.8125 -0.46875 -2.515625 -0.796875q-0.6875 -0.328125 -1.046875 -0.90625q-0.359375 -0.59375 -0.359375 -1.3125q0 -0.640625 0.296875 -1.1875q0.296875 -0.5625 0.8125 -0.921875q0.375 -0.28125 1.03125 -0.46875q0.671875 -0.203125 1.421875 -0.203125q1.140625 0 2.0 0.328125q0.859375 0.328125 1.265625 0.890625q0.421875 0.5625 0.578125 1.5l-1.609375 0.21875q-0.109375 -0.75 -0.640625 -1.171875q-0.515625 -0.421875 -1.46875 -0.421875q-1.140625 0 -1.625 0.375q-0.46875 0.375 -0.46875 0.875q0 0.3125 0.1875 0.578125q0.203125 0.265625 0.640625 0.4375q0.234375 0.09375 1.4375 0.421875q1.75 0.453125 2.4375 0.75q0.6875 0.296875 1.078125 0.859375q0.390625 0.5625 0.390625 1.40625q0 0.828125 -0.484375 1.546875q-0.46875 0.71875 -1.375 1.125q-0.90625 0.390625 -2.046875 0.390625q-1.875 0 -2.875 -0.78125q-0.984375 -0.78125 -1.25 -2.328125zm13.5625 1.421875l0.234375 1.453125q-0.6875 0.140625 -1.234375 0.140625q-0.890625 0 -1.390625 -0.28125q-0.484375 -0.28125 -0.6875 -0.734375q-0.203125 -0.46875 -0.203125 -1.9375l0 -5.578125l-1.203125 0l0 -1.265625l1.203125 0l0 -2.390625l1.625 -0.984375l0 3.375l1.65625 0l0 1.265625l-1.65625 0l0 5.671875q0 0.6875 0.078125 0.890625q0.09375 0.203125 0.28125 0.328125q0.203125 0.109375 0.578125 0.109375q0.265625 0 0.71875 -0.0625zm1.5895691 1.46875l0 -9.671875l1.46875 0l0 1.46875q0.5625 -1.03125 1.03125 -1.359375q0.484375 -0.328125 1.0625 -0.328125q0.828125 0 1.6875 0.53125l-0.5625 1.515625q-0.609375 -0.359375 -1.203125 -0.359375q-0.546875 0 -0.96875 0.328125q-0.421875 0.328125 -0.609375 0.890625q-0.28125 0.875 -0.28125 1.921875l0 5.0625l-1.625 0zm6.228302 -11.46875l0 -1.890625l1.640625 0l0 1.890625l-1.640625 0zm0 11.46875l0 -9.671875l1.640625 0l0 9.671875l-1.640625 0zm5.644806 0l-1.515625 0l0 -13.359375l1.640625 0l0 4.765625q1.046875 -1.296875 2.65625 -1.296875q0.890625 0 1.6875 0.359375q0.796875 0.359375 1.3125 1.015625q0.515625 0.640625 0.796875 1.5625q0.296875 0.921875 0.296875 1.96875q0 2.484375 -1.234375 3.84375q-1.21875 1.359375 -2.953125 1.359375q-1.703125 0 -2.6875 -1.4375l0 1.21875zm-0.015625 -4.90625q0 1.734375 0.484375 2.515625q0.765625 1.265625 2.09375 1.265625q1.078125 0 1.859375 -0.9375q0.78125 -0.9375 0.78125 -2.78125q0 -1.890625 -0.75 -2.796875q-0.75 -0.90625 -1.828125 -0.90625q-1.0625 0 -1.859375 0.9375q-0.78125 0.9375 -0.78125 2.703125zm15.219482 4.90625l0 -1.421875q-1.125 1.640625 -3.0625 1.640625q-0.859375 0 -1.609375 -0.328125q-0.734375 -0.328125 -1.09375 -0.828125q-0.359375 -0.5 -0.5 -1.21875q-0.109375 -0.46875 -0.109375 -1.53125l0 -5.984375l1.640625 0l0 5.359375q0 1.28125 0.109375 1.734375q0.15625 0.640625 0.65625 1.015625q0.5 0.375 1.234375 0.375q0.734375 0 1.375 -0.375q0.65625 -0.390625 0.921875 -1.03125q0.265625 -0.65625 0.265625 -1.890625l0 -5.1875l1.640625 0l0 9.671875l-1.46875 0zm7.625702 -1.46875l0.234375 1.453125q-0.6875 0.140625 -1.234375 0.140625q-0.890625 0 -1.390625 -0.28125q-0.484375 -0.28125 -0.6875 -0.734375q-0.203125 -0.46875 -0.203125 -1.9375l0 -5.578125l-1.203125 0l0 -1.265625l1.203125 0l0 -2.390625l1.625 -0.984375l0 3.375l1.65625 0l0 1.265625l-1.65625 0l0 5.671875q0 0.6875 0.078125 0.890625q0.09375 0.203125 0.28125 0.328125q0.203125 0.109375 0.578125 0.109375q0.265625 0 0.71875 -0.0625zm8.230194 -1.640625l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625zm15.406952 5.765625l0 -1.21875q-0.90625 1.4375 -2.703125 1.4375q-1.15625 0 -2.125 -0.640625q-0.96875 -0.640625 -1.5 -1.78125q-0.53125 -1.140625 -0.53125 -2.625q0 -1.453125 0.484375 -2.625q0.484375 -1.1875 1.4375 -1.8125q0.96875 -0.625 2.171875 -0.625q0.875 0 1.546875 0.375q0.6875 0.359375 1.109375 0.953125l0 -4.796875l1.640625 0l0 13.359375l-1.53125 0zm-5.171875 -4.828125q0 1.859375 0.78125 2.78125q0.78125 0.921875 1.84375 0.921875q1.078125 0 1.828125 -0.875q0.75 -0.890625 0.75 -2.6875q0 -1.984375 -0.765625 -2.90625q-0.765625 -0.9375 -1.890625 -0.9375q-1.078125 0 -1.8125 0.890625q-0.734375 0.890625 -0.734375 2.8125zm14.621521 4.828125l0 -13.359375l2.65625 0l3.15625 9.453125q0.4375 1.328125 0.640625 1.984375q0.234375 -0.734375 0.703125 -2.140625l3.203125 -9.296875l2.375 0l0 13.359375l-1.703125 0l0 -11.171875l-3.875 11.171875l-1.59375 0l-3.859375 -11.375l0 11.375l-1.703125 0zm22.009552 -3.109375l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625zm8.485107 2.875l1.625 -0.25q0.125 0.96875 0.75 1.5q0.625 0.515625 1.75 0.515625q1.125 0 1.671875 -0.453125q0.546875 -0.46875 0.546875 -1.09375q0 -0.546875 -0.484375 -0.875q-0.328125 -0.21875 -1.671875 -0.546875q-1.8125 -0.46875 -2.515625 -0.796875q-0.6875 -0.328125 -1.046875 -0.90625q-0.359375 -0.59375 -0.359375 -1.3125q0 -0.640625 0.296875 -1.1875q0.296875 -0.5625 0.8125 -0.921875q0.375 -0.28125 1.03125 -0.46875q0.671875 -0.203125 1.421875 -0.203125q1.140625 0 2.0 0.328125q0.859375 0.328125 1.265625 0.890625q0.421875 0.5625 0.578125 1.5l-1.609375 0.21875q-0.109375 -0.75 -0.640625 -1.171875q-0.515625 -0.421875 -1.46875 -0.421875q-1.140625 0 -1.625 0.375q-0.46875 0.375 -0.46875 0.875q0 0.3125 0.1875 0.578125q0.203125 0.265625 0.640625 0.4375q0.234375 0.09375 1.4375 0.421875q1.75 0.453125 2.4375 0.75q0.6875 0.296875 1.078125 0.859375q0.390625 0.5625 0.390625 1.40625q0 0.828125 -0.484375 1.546875q-0.46875 0.71875 -1.375 1.125q-0.90625 0.390625 -2.046875 0.390625q-1.875 0 -2.875 -0.78125q-0.984375 -0.78125 -1.25 -2.328125zm9.328125 0l1.625 -0.25q0.125 0.96875 0.75 1.5q0.625 0.515625 1.75 0.515625q1.125 0 1.671875 -0.453125q0.546875 -0.46875 0.546875 -1.09375q0 -0.546875 -0.484375 -0.875q-0.328125 -0.21875 -1.671875 -0.546875q-1.8125 -0.46875 -2.515625 -0.796875q-0.6875 -0.328125 -1.046875 -0.90625q-0.359375 -0.59375 -0.359375 -1.3125q0 -0.640625 0.296875 -1.1875q0.296875 -0.5625 0.8125 -0.921875q0.375 -0.28125 1.03125 -0.46875q0.671875 -0.203125 1.421875 -0.203125q1.140625 0 2.0 0.328125q0.859375 0.328125 1.265625 0.890625q0.421875 0.5625 0.578125 1.5l-1.609375 0.21875q-0.109375 -0.75 -0.640625 -1.171875q-0.515625 -0.421875 -1.46875 -0.421875q-1.140625 0 -1.625 0.375q-0.46875 0.375 -0.46875 0.875q0 0.3125 0.1875 0.578125q0.203125 0.265625 0.640625 0.4375q0.234375 0.09375 1.4375 0.421875q1.75 0.453125 2.4375 0.75q0.6875 0.296875 1.078125 0.859375q0.390625 0.5625 0.390625 1.40625q0 0.828125 -0.484375 1.546875q-0.46875 0.71875 -1.375 1.125q-0.90625 0.390625 -2.046875 0.390625q-1.875 0 -2.875 -0.78125q-0.984375 -0.78125 -1.25 -2.328125zm16.296875 1.703125q-0.921875 0.765625 -1.765625 1.09375q-0.828125 0.3125 -1.796875 0.3125q-1.59375 0 -2.453125 -0.78125q-0.859375 -0.78125 -0.859375 -1.984375q0 -0.71875 0.328125 -1.296875q0.328125 -0.59375 0.84375 -0.9375q0.53125 -0.359375 1.1875 -0.546875q0.46875 -0.125 1.453125 -0.25q1.984375 -0.234375 2.921875 -0.5625q0.015625 -0.34375 0.015625 -0.421875q0 -1.0 -0.46875 -1.421875q-0.625 -0.546875 -1.875 -0.546875q-1.15625 0 -1.703125 0.40625q-0.546875 0.40625 -0.8125 1.421875l-1.609375 -0.21875q0.21875 -1.015625 0.71875 -1.640625q0.5 -0.640625 1.453125 -0.984375q0.953125 -0.34375 2.1875 -0.34375q1.25 0 2.015625 0.296875q0.78125 0.28125 1.140625 0.734375q0.375 0.4375 0.515625 1.109375q0.078125 0.421875 0.078125 1.515625l0 2.1875q0 2.28125 0.109375 2.890625q0.109375 0.59375 0.40625 1.15625l-1.703125 0q-0.265625 -0.515625 -0.328125 -1.1875zm-0.140625 -3.671875q-0.890625 0.375 -2.671875 0.625q-1.015625 0.140625 -1.4375 0.328125q-0.421875 0.1875 -0.65625 0.53125q-0.21875 0.34375 -0.21875 0.78125q0 0.65625 0.5 1.09375q0.5 0.4375 1.453125 0.4375q0.9375 0 1.671875 -0.40625q0.75 -0.421875 1.09375 -1.140625q0.265625 -0.5625 0.265625 -1.640625l0 -0.609375zm3.891327 5.65625l1.59375 0.234375q0.109375 0.75 0.5625 1.078125q0.609375 0.453125 1.671875 0.453125q1.140625 0 1.75 -0.453125q0.625 -0.453125 0.84375 -1.265625q0.125 -0.5 0.109375 -2.109375q-1.0625 1.265625 -2.671875 1.265625q-2.0 0 -3.09375 -1.4375q-1.09375 -1.4375 -1.09375 -3.453125q0 -1.390625 0.5 -2.5625q0.515625 -1.171875 1.453125 -1.796875q0.953125 -0.640625 2.25 -0.640625q1.703125 0 2.8125 1.375l0 -1.15625l1.515625 0l0 8.359375q0 2.265625 -0.46875 3.203125q-0.453125 0.9375 -1.453125 1.484375q-0.984375 0.546875 -2.453125 0.546875q-1.71875 0 -2.796875 -0.78125q-1.0625 -0.765625 -1.03125 -2.34375zm1.359375 -5.8125q0 1.90625 0.75 2.78125q0.765625 0.875 1.90625 0.875q1.125 0 1.890625 -0.859375q0.765625 -0.875 0.765625 -2.734375q0 -1.78125 -0.796875 -2.671875q-0.78125 -0.90625 -1.890625 -0.90625q-1.09375 0 -1.859375 0.890625q-0.765625 0.875 -0.765625 2.625zm9.328857 -6.453125l0 -1.890625l1.640625 0l0 1.890625l-1.640625 0zm0 11.46875l0 -9.671875l1.640625 0l0 9.671875l-1.640625 0zm4.144806 0l0 -9.671875l1.46875 0l0 1.375q1.0625 -1.59375 3.078125 -1.59375q0.875 0 1.609375 0.3125q0.734375 0.3125 1.09375 0.828125q0.375 0.5 0.515625 1.203125q0.09375 0.453125 0.09375 1.59375l0 5.953125l-1.640625 0l0 -5.890625q0 -1.0 -0.203125 -1.484375q-0.1875 -0.5 -0.671875 -0.796875q-0.484375 -0.296875 -1.140625 -0.296875q-1.046875 0 -1.8125 0.671875q-0.75 0.65625 -0.75 2.515625l0 5.28125l-1.640625 0zm10.063232 0.796875l1.59375 0.234375q0.109375 0.75 0.5625 1.078125q0.609375 0.453125 1.671875 0.453125q1.140625 0 1.75 -0.453125q0.625 -0.453125 0.84375 -1.265625q0.125 -0.5 0.109375 -2.109375q-1.0625 1.265625 -2.671875 1.265625q-2.0 0 -3.09375 -1.4375q-1.09375 -1.4375 -1.09375 -3.453125q0 -1.390625 0.5 -2.5625q0.515625 -1.171875 1.453125 -1.796875q0.953125 -0.640625 2.25 -0.640625q1.703125 0 2.8125 1.375l0 -1.15625l1.515625 0l0 8.359375q0 2.265625 -0.46875 3.203125q-0.453125 0.9375 -1.453125 1.484375q-0.984375 0.546875 -2.453125 0.546875q-1.71875 0 -2.796875 -0.78125q-1.0625 -0.765625 -1.03125 -2.34375zm1.359375 -5.8125q0 1.90625 0.75 2.78125q0.765625 0.875 1.90625 0.875q1.125 0 1.890625 -0.859375q0.765625 -0.875 0.765625 -2.734375q0 -1.78125 -0.796875 -2.671875q-0.78125 -0.90625 -1.890625 -0.90625q-1.09375 0 -1.859375 0.890625q-0.765625 0.875 -0.765625 2.625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m575.81366 545.5315l232.97638 0l0 42.015747l-232.97638 0z" fill-rule="evenodd"/><path fill="#000000" d="m586.25116 572.4515l0 -13.359375l4.609375 0q1.546875 0 2.375 0.203125q1.140625 0.25 1.953125 0.953125q1.0625 0.890625 1.578125 2.28125q0.53125 1.390625 0.53125 3.171875q0 1.515625 -0.359375 2.703125q-0.359375 1.171875 -0.921875 1.9375q-0.546875 0.765625 -1.203125 1.21875q-0.65625 0.4375 -1.59375 0.671875q-0.9375 0.21875 -2.140625 0.21875l-4.828125 0zm1.765625 -1.578125l2.859375 0q1.3125 0 2.0625 -0.234375q0.75 -0.25 1.203125 -0.703125q0.625 -0.625 0.96875 -1.6875q0.359375 -1.0625 0.359375 -2.578125q0 -2.09375 -0.6875 -3.21875q-0.6875 -1.125 -1.671875 -1.5q-0.703125 -0.28125 -2.28125 -0.28125l-2.8125 0l0 10.203125zm11.504211 -9.890625l0 -1.890625l1.640625 0l0 1.890625l-1.640625 0zm0 11.46875l0 -9.671875l1.640625 0l0 9.671875l-1.640625 0zm3.4885254 -2.890625l1.625 -0.25q0.125 0.96875 0.75 1.5q0.625 0.515625 1.75 0.515625q1.125 0 1.671875 -0.453125q0.546875 -0.46875 0.546875 -1.09375q0 -0.546875 -0.484375 -0.875q-0.328125 -0.21875 -1.671875 -0.546875q-1.8125 -0.46875 -2.515625 -0.796875q-0.6875 -0.328125 -1.046875 -0.90625q-0.359375 -0.59375 -0.359375 -1.3125q0 -0.640625 0.296875 -1.1875q0.296875 -0.5625 0.8125 -0.921875q0.375 -0.28125 1.03125 -0.46875q0.671875 -0.203125 1.421875 -0.203125q1.140625 0 2.0 0.328125q0.859375 0.328125 1.265625 0.890625q0.421875 0.5625 0.578125 1.5l-1.609375 0.21875q-0.109375 -0.75 -0.640625 -1.171875q-0.515625 -0.421875 -1.46875 -0.421875q-1.140625 0 -1.625 0.375q-0.46875 0.375 -0.46875 0.875q0 0.3125 0.1875 0.578125q0.203125 0.265625 0.640625 0.4375q0.234375 0.09375 1.4375 0.421875q1.75 0.453125 2.4375 0.75q0.6875 0.296875 1.078125 0.859375q0.390625 0.5625 0.390625 1.40625q0 0.828125 -0.484375 1.546875q-0.46875 0.71875 -1.375 1.125q-0.90625 0.390625 -2.046875 0.390625q-1.875 0 -2.875 -0.78125q-0.984375 -0.78125 -1.25 -2.328125zm13.5625 1.421875l0.234375 1.453125q-0.6875 0.140625 -1.234375 0.140625q-0.890625 0 -1.390625 -0.28125q-0.484375 -0.28125 -0.6875 -0.734375q-0.203125 -0.46875 -0.203125 -1.9375l0 -5.578125l-1.203125 0l0 -1.265625l1.203125 0l0 -2.390625l1.625 -0.984375l0 3.375l1.65625 0l0 1.265625l-1.65625 0l0 5.671875q0 0.6875 0.078125 0.890625q0.09375 0.203125 0.28125 0.328125q0.203125 0.109375 0.578125 0.109375q0.265625 0 0.71875 -0.0625zm1.5895996 1.46875l0 -9.671875l1.46875 0l0 1.46875q0.5625 -1.03125 1.03125 -1.359375q0.484375 -0.328125 1.0625 -0.328125q0.828125 0 1.6875 0.53125l-0.5625 1.515625q-0.609375 -0.359375 -1.203125 -0.359375q-0.546875 0 -0.96875 0.328125q-0.421875 0.328125 -0.609375 0.890625q-0.28125 0.875 -0.28125 1.921875l0 5.0625l-1.625 0zm6.2282715 -11.46875l0 -1.890625l1.640625 0l0 1.890625l-1.640625 0zm0 11.46875l0 -9.671875l1.640625 0l0 9.671875l-1.640625 0zm5.6448364 0l-1.515625 0l0 -13.359375l1.640625 0l0 4.765625q1.046875 -1.296875 2.65625 -1.296875q0.890625 0 1.6875 0.359375q0.796875 0.359375 1.3125 1.015625q0.515625 0.640625 0.796875 1.5625q0.296875 0.921875 0.296875 1.96875q0 2.484375 -1.234375 3.84375q-1.21875 1.359375 -2.953125 1.359375q-1.703125 0 -2.6875 -1.4375l0 1.21875zm-0.015625 -4.90625q0 1.734375 0.484375 2.515625q0.765625 1.265625 2.09375 1.265625q1.078125 0 1.859375 -0.9375q0.78125 -0.9375 0.78125 -2.78125q0 -1.890625 -0.75 -2.796875q-0.75 -0.90625 -1.828125 -0.90625q-1.0625 0 -1.859375 0.9375q-0.78125 0.9375 -0.78125 2.703125zm15.219482 4.90625l0 -1.421875q-1.125 1.640625 -3.0625 1.640625q-0.859375 0 -1.609375 -0.328125q-0.734375 -0.328125 -1.09375 -0.828125q-0.359375 -0.5 -0.5 -1.21875q-0.109375 -0.46875 -0.109375 -1.53125l0 -5.984375l1.640625 0l0 5.359375q0 1.28125 0.109375 1.734375q0.15625 0.640625 0.65625 1.015625q0.5 0.375 1.234375 0.375q0.734375 0 1.375 -0.375q0.65625 -0.390625 0.921875 -1.03125q0.265625 -0.65625 0.265625 -1.890625l0 -5.1875l1.640625 0l0 9.671875l-1.46875 0zm7.6256714 -1.46875l0.234375 1.453125q-0.6875 0.140625 -1.234375 0.140625q-0.890625 0 -1.390625 -0.28125q-0.484375 -0.28125 -0.6875 -0.734375q-0.203125 -0.46875 -0.203125 -1.9375l0 -5.578125l-1.203125 0l0 -1.265625l1.203125 0l0 -2.390625l1.625 -0.984375l0 3.375l1.65625 0l0 1.265625l-1.65625 0l0 5.671875q0 0.6875 0.078125 0.890625q0.09375 0.203125 0.28125 0.328125q0.203125 0.109375 0.578125 0.109375q0.265625 0 0.71875 -0.0625zm8.230225 -1.640625l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625zm15.406921 5.765625l0 -1.21875q-0.90625 1.4375 -2.703125 1.4375q-1.15625 0 -2.125 -0.640625q-0.96875 -0.640625 -1.5 -1.78125q-0.53125 -1.140625 -0.53125 -2.625q0 -1.453125 0.484375 -2.625q0.484375 -1.1875 1.4375 -1.8125q0.96875 -0.625 2.171875 -0.625q0.875 0 1.546875 0.375q0.6875 0.359375 1.109375 0.953125l0 -4.796875l1.640625 0l0 13.359375l-1.53125 0zm-5.171875 -4.828125q0 1.859375 0.78125 2.78125q0.78125 0.921875 1.84375 0.921875q1.078125 0 1.828125 -0.875q0.75 -0.890625 0.75 -2.6875q0 -1.984375 -0.765625 -2.90625q-0.765625 -0.9375 -1.890625 -0.9375q-1.078125 0 -1.8125 0.890625q-0.734375 0.890625 -0.734375 2.8125zm14.074646 0.53125l1.65625 -0.140625q0.125 1.0 0.546875 1.640625q0.4375 0.640625 1.34375 1.046875q0.921875 0.390625 2.0625 0.390625q1.0 0 1.78125 -0.296875q0.78125 -0.296875 1.15625 -0.8125q0.375 -0.53125 0.375 -1.15625q0 -0.625 -0.375 -1.09375q-0.359375 -0.46875 -1.1875 -0.796875q-0.546875 -0.203125 -2.390625 -0.640625q-1.828125 -0.453125 -2.5625 -0.84375q-0.96875 -0.5 -1.4375 -1.234375q-0.46875 -0.75 -0.46875 -1.671875q0 -1.0 0.578125 -1.875q0.578125 -0.890625 1.671875 -1.34375q1.109375 -0.453125 2.453125 -0.453125q1.484375 0 2.609375 0.484375q1.140625 0.46875 1.75 1.40625q0.609375 0.921875 0.65625 2.09375l-1.6875 0.125q-0.140625 -1.265625 -0.9375 -1.90625q-0.78125 -0.65625 -2.3125 -0.65625q-1.609375 0 -2.34375 0.59375q-0.734375 0.59375 -0.734375 1.421875q0 0.71875 0.53125 1.171875q0.5 0.46875 2.65625 0.96875q2.15625 0.484375 2.953125 0.84375q1.171875 0.53125 1.71875 1.359375q0.5625 0.828125 0.5625 1.90625q0 1.0625 -0.609375 2.015625q-0.609375 0.9375 -1.75 1.46875q-1.140625 0.515625 -2.578125 0.515625q-1.8125 0 -3.046875 -0.53125q-1.21875 -0.53125 -1.921875 -1.59375q-0.6875 -1.0625 -0.71875 -2.40625zm19.459229 1.1875l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625zm15.453857 4.578125q-0.921875 0.765625 -1.765625 1.09375q-0.828125 0.3125 -1.796875 0.3125q-1.59375 0 -2.453125 -0.78125q-0.859375 -0.78125 -0.859375 -1.984375q0 -0.71875 0.328125 -1.296875q0.328125 -0.59375 0.84375 -0.9375q0.53125 -0.359375 1.1875 -0.546875q0.46875 -0.125 1.453125 -0.25q1.984375 -0.234375 2.921875 -0.5625q0.015625 -0.34375 0.015625 -0.421875q0 -1.0 -0.46875 -1.421875q-0.625 -0.546875 -1.875 -0.546875q-1.15625 0 -1.703125 0.40625q-0.546875 0.40625 -0.8125 1.421875l-1.609375 -0.21875q0.21875 -1.015625 0.71875 -1.640625q0.5 -0.640625 1.453125 -0.984375q0.953125 -0.34375 2.1875 -0.34375q1.25 0 2.015625 0.296875q0.78125 0.28125 1.140625 0.734375q0.375 0.4375 0.515625 1.109375q0.078125 0.421875 0.078125 1.515625l0 2.1875q0 2.28125 0.109375 2.890625q0.109375 0.59375 0.40625 1.15625l-1.703125 0q-0.265625 -0.515625 -0.328125 -1.1875zm-0.140625 -3.671875q-0.890625 0.375 -2.671875 0.625q-1.015625 0.140625 -1.4375 0.328125q-0.421875 0.1875 -0.65625 0.53125q-0.21875 0.34375 -0.21875 0.78125q0 0.65625 0.5 1.09375q0.5 0.4375 1.453125 0.4375q0.9375 0 1.671875 -0.40625q0.75 -0.421875 1.09375 -1.140625q0.265625 -0.5625 0.265625 -1.640625l0 -0.609375zm4.1881714 4.859375l0 -9.671875l1.46875 0l0 1.46875q0.5625 -1.03125 1.03125 -1.359375q0.484375 -0.328125 1.0625 -0.328125q0.828125 0 1.6875 0.53125l-0.5625 1.515625q-0.609375 -0.359375 -1.203125 -0.359375q-0.546875 0 -0.96875 0.328125q-0.421875 0.328125 -0.609375 0.890625q-0.28125 0.875 -0.28125 1.921875l0 5.0625l-1.625 0zm12.5408325 -3.546875l1.609375 0.21875q-0.265625 1.65625 -1.359375 2.609375q-1.078125 0.9375 -2.671875 0.9375q-1.984375 0 -3.1875 -1.296875q-1.203125 -1.296875 -1.203125 -3.71875q0 -1.578125 0.515625 -2.75q0.515625 -1.171875 1.578125 -1.75q1.0625 -0.59375 2.3125 -0.59375q1.578125 0 2.578125 0.796875q1.0 0.796875 1.28125 2.265625l-1.59375 0.234375q-0.234375 -0.96875 -0.8125 -1.453125q-0.578125 -0.5 -1.390625 -0.5q-1.234375 0 -2.015625 0.890625q-0.78125 0.890625 -0.78125 2.8125q0 1.953125 0.75 2.84375q0.75 0.875 1.953125 0.875q0.96875 0 1.609375 -0.59375q0.65625 -0.59375 0.828125 -1.828125zm3.015625 3.546875l0 -13.359375l1.640625 0l0 4.796875q1.140625 -1.328125 2.890625 -1.328125q1.078125 0 1.859375 0.421875q0.796875 0.421875 1.140625 1.171875q0.34375 0.75 0.34375 2.171875l0 6.125l-1.640625 0l0 -6.125q0 -1.234375 -0.53125 -1.796875q-0.53125 -0.5625 -1.515625 -0.5625q-0.71875 0 -1.359375 0.390625q-0.640625 0.375 -0.921875 1.015625q-0.265625 0.640625 -0.265625 1.78125l0 5.296875l-1.640625 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m799.43304 153.49081l146.5827 0l0 87.27559l-146.5827 0z" fill-rule="evenodd"/><path fill="#000000" d="m809.87054 180.41081l0 -13.359375l4.609375 0q1.546875 0 2.375 0.203125q1.140625 0.25 1.953125 0.953125q1.0625 0.890625 1.578125 2.28125q0.53125 1.390625 0.53125 3.171875q0 1.515625 -0.359375 2.703125q-0.359375 1.171875 -0.921875 1.9375q-0.546875 0.765625 -1.203125 1.21875q-0.65625 0.4375 -1.59375 0.671875q-0.9375 0.21875 -2.140625 0.21875l-4.828125 0zm1.765625 -1.578125l2.859375 0q1.3125 0 2.0625 -0.234375q0.75 -0.25 1.203125 -0.703125q0.625 -0.625 0.96875 -1.6875q0.359375 -1.0625 0.359375 -2.578125q0 -2.09375 -0.6875 -3.21875q-0.6875 -1.125 -1.671875 -1.5q-0.703125 -0.28125 -2.28125 -0.28125l-2.8125 0l0 10.203125zm11.504211 -9.890625l0 -1.890625l1.640625 0l0 1.890625l-1.640625 0zm0 11.46875l0 -9.671875l1.640625 0l0 9.671875l-1.640625 0zm3.4885864 -2.890625l1.625 -0.25q0.125 0.96875 0.75 1.5q0.625 0.515625 1.75 0.515625q1.125 0 1.671875 -0.453125q0.546875 -0.46875 0.546875 -1.09375q0 -0.546875 -0.484375 -0.875q-0.328125 -0.21875 -1.671875 -0.546875q-1.8125 -0.46875 -2.515625 -0.796875q-0.6875 -0.328125 -1.046875 -0.90625q-0.359375 -0.59375 -0.359375 -1.3125q0 -0.640625 0.296875 -1.1875q0.296875 -0.5625 0.8125 -0.921875q0.375 -0.28125 1.03125 -0.46875q0.671875 -0.203125 1.421875 -0.203125q1.140625 0 2.0 0.328125q0.859375 0.328125 1.265625 0.890625q0.421875 0.5625 0.578125 1.5l-1.609375 0.21875q-0.109375 -0.75 -0.640625 -1.171875q-0.515625 -0.421875 -1.46875 -0.421875q-1.140625 0 -1.625 0.375q-0.46875 0.375 -0.46875 0.875q0 0.3125 0.1875 0.578125q0.203125 0.265625 0.640625 0.4375q0.234375 0.09375 1.4375 0.421875q1.75 0.453125 2.4375 0.75q0.6875 0.296875 1.078125 0.859375q0.390625 0.5625 0.390625 1.40625q0 0.828125 -0.484375 1.546875q-0.46875 0.71875 -1.375 1.125q-0.90625 0.390625 -2.046875 0.390625q-1.875 0 -2.875 -0.78125q-0.984375 -0.78125 -1.25 -2.328125zm13.5625 1.421875l0.234375 1.453125q-0.6875 0.140625 -1.234375 0.140625q-0.890625 0 -1.390625 -0.28125q-0.484375 -0.28125 -0.6875 -0.734375q-0.203125 -0.46875 -0.203125 -1.9375l0 -5.578125l-1.203125 0l0 -1.265625l1.203125 0l0 -2.390625l1.625 -0.984375l0 3.375l1.65625 0l0 1.265625l-1.65625 0l0 5.671875q0 0.6875 0.078125 0.890625q0.09375 0.203125 0.28125 0.328125q0.203125 0.109375 0.578125 0.109375q0.265625 0 0.71875 -0.0625zm1.5895386 1.46875l0 -9.671875l1.46875 0l0 1.46875q0.5625 -1.03125 1.03125 -1.359375q0.484375 -0.328125 1.0625 -0.328125q0.828125 0 1.6875 0.53125l-0.5625 1.515625q-0.609375 -0.359375 -1.203125 -0.359375q-0.546875 0 -0.96875 0.328125q-0.421875 0.328125 -0.609375 0.890625q-0.28125 0.875 -0.28125 1.921875l0 5.0625l-1.625 0zm6.2283325 -11.46875l0 -1.890625l1.640625 0l0 1.890625l-1.640625 0zm0 11.46875l0 -9.671875l1.640625 0l0 9.671875l-1.640625 0zm5.6447754 0l-1.515625 0l0 -13.359375l1.640625 0l0 4.765625q1.046875 -1.296875 2.65625 -1.296875q0.890625 0 1.6875 0.359375q0.796875 0.359375 1.3125 1.015625q0.515625 0.640625 0.796875 1.5625q0.296875 0.921875 0.296875 1.96875q0 2.484375 -1.234375 3.84375q-1.21875 1.359375 -2.953125 1.359375q-1.703125 0 -2.6875 -1.4375l0 1.21875zm-0.015625 -4.90625q0 1.734375 0.484375 2.515625q0.765625 1.265625 2.09375 1.265625q1.078125 0 1.859375 -0.9375q0.78125 -0.9375 0.78125 -2.78125q0 -1.890625 -0.75 -2.796875q-0.75 -0.90625 -1.828125 -0.90625q-1.0625 0 -1.859375 0.9375q-0.78125 0.9375 -0.78125 2.703125zm15.219482 4.90625l0 -1.421875q-1.125 1.640625 -3.0625 1.640625q-0.859375 0 -1.609375 -0.328125q-0.734375 -0.328125 -1.09375 -0.828125q-0.359375 -0.5 -0.5 -1.21875q-0.109375 -0.46875 -0.109375 -1.53125l0 -5.984375l1.640625 0l0 5.359375q0 1.28125 0.109375 1.734375q0.15625 0.640625 0.65625 1.015625q0.5 0.375 1.234375 0.375q0.734375 0 1.375 -0.375q0.65625 -0.390625 0.921875 -1.03125q0.265625 -0.65625 0.265625 -1.890625l0 -5.1875l1.640625 0l0 9.671875l-1.46875 0zm7.6257324 -1.46875l0.234375 1.453125q-0.6875 0.140625 -1.234375 0.140625q-0.890625 0 -1.390625 -0.28125q-0.484375 -0.28125 -0.6875 -0.734375q-0.203125 -0.46875 -0.203125 -1.9375l0 -5.578125l-1.203125 0l0 -1.265625l1.203125 0l0 -2.390625l1.625 -0.984375l0 3.375l1.65625 0l0 1.265625l-1.65625 0l0 5.671875q0 0.6875 0.078125 0.890625q0.09375 0.203125 0.28125 0.328125q0.203125 0.109375 0.578125 0.109375q0.265625 0 0.71875 -0.0625zm8.230164 -1.640625l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625zm15.406982 5.765625l0 -1.21875q-0.90625 1.4375 -2.703125 1.4375q-1.15625 0 -2.125 -0.640625q-0.96875 -0.640625 -1.5 -1.78125q-0.53125 -1.140625 -0.53125 -2.625q0 -1.453125 0.484375 -2.625q0.484375 -1.1875 1.4375 -1.8125q0.96875 -0.625 2.171875 -0.625q0.875 0 1.546875 0.375q0.6875 0.359375 1.109375 0.953125l0 -4.796875l1.640625 0l0 13.359375l-1.53125 0zm-5.171875 -4.828125q0 1.859375 0.78125 2.78125q0.78125 0.921875 1.84375 0.921875q1.078125 0 1.828125 -0.875q0.75 -0.890625 0.75 -2.6875q0 -1.984375 -0.765625 -2.90625q-0.765625 -0.9375 -1.890625 -0.9375q-1.078125 0 -1.8125 0.890625q-0.734375 0.890625 -0.734375 2.8125z" fill-rule="nonzero"/><path fill="#000000" d="m809.7924 202.8108l0 -13.359375l1.78125 0l0 11.78125l6.5625 0l0 1.578125l-8.34375 0zm16.563232 -1.1875q-0.921875 0.765625 -1.765625 1.09375q-0.828125 0.3125 -1.796875 0.3125q-1.59375 0 -2.453125 -0.78125q-0.859375 -0.78125 -0.859375 -1.984375q0 -0.71875 0.328125 -1.296875q0.328125 -0.59375 0.84375 -0.9375q0.53125 -0.359375 1.1875 -0.546875q0.46875 -0.125 1.453125 -0.25q1.984375 -0.234375 2.921875 -0.5625q0.015625 -0.34375 0.015625 -0.421875q0 -1.0 -0.46875 -1.421875q-0.625 -0.546875 -1.875 -0.546875q-1.15625 0 -1.703125 0.40625q-0.546875 0.40625 -0.8125 1.421875l-1.609375 -0.21875q0.21875 -1.015625 0.71875 -1.640625q0.5 -0.640625 1.453125 -0.984375q0.953125 -0.34375 2.1875 -0.34375q1.25 0 2.015625 0.296875q0.78125 0.28125 1.140625 0.734375q0.375 0.4375 0.515625 1.109375q0.078125 0.421875 0.078125 1.515625l0 2.1875q0 2.28125 0.109375 2.890625q0.109375 0.59375 0.40625 1.15625l-1.703125 0q-0.265625 -0.515625 -0.328125 -1.1875zm-0.140625 -3.671875q-0.890625 0.375 -2.671875 0.625q-1.015625 0.140625 -1.4375 0.328125q-0.421875 0.1875 -0.65625 0.53125q-0.21875 0.34375 -0.21875 0.78125q0 0.65625 0.5 1.09375q0.5 0.4375 1.453125 0.4375q0.9375 0 1.671875 -0.40625q0.75 -0.421875 1.09375 -1.140625q0.265625 -0.5625 0.265625 -1.640625l0 -0.609375zm4.1882324 4.859375l0 -9.671875l1.46875 0l0 1.46875q0.5625 -1.03125 1.03125 -1.359375q0.484375 -0.328125 1.0625 -0.328125q0.828125 0 1.6875 0.53125l-0.5625 1.515625q-0.609375 -0.359375 -1.203125 -0.359375q-0.546875 0 -0.96875 0.328125q-0.421875 0.328125 -0.609375 0.890625q-0.28125 0.875 -0.28125 1.921875l0 5.0625l-1.625 0zm5.9157715 0.796875l1.59375 0.234375q0.109375 0.75 0.5625 1.078125q0.609375 0.453125 1.671875 0.453125q1.140625 0 1.75 -0.453125q0.625 -0.453125 0.84375 -1.265625q0.125 -0.5 0.109375 -2.109375q-1.0625 1.265625 -2.671875 1.265625q-2.0 0 -3.09375 -1.4375q-1.09375 -1.4375 -1.09375 -3.453125q0 -1.390625 0.5 -2.5625q0.515625 -1.171875 1.453125 -1.796875q0.953125 -0.640625 2.25 -0.640625q1.703125 0 2.8125 1.375l0 -1.15625l1.515625 0l0 8.359375q0 2.265625 -0.46875 3.203125q-0.453125 0.9375 -1.453125 1.484375q-0.984375 0.546875 -2.453125 0.546875q-1.71875 0 -2.796875 -0.78125q-1.0625 -0.765625 -1.03125 -2.34375zm1.359375 -5.8125q0 1.90625 0.75 2.78125q0.765625 0.875 1.90625 0.875q1.125 0 1.890625 -0.859375q0.765625 -0.875 0.765625 -2.734375q0 -1.78125 -0.796875 -2.671875q-0.78125 -0.90625 -1.890625 -0.90625q-1.09375 0 -1.859375 0.890625q-0.765625 0.875 -0.765625 2.625zm15.953857 1.90625l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625z" fill-rule="nonzero"/><path fill="#000000" d="m809.3393 218.7108q0 -3.328125 1.78125 -5.203125q1.78125 -1.890625 4.609375 -1.890625q1.84375 0 3.328125 0.890625q1.484375 0.875 2.265625 2.46875q0.78125 1.578125 0.78125 3.578125q0 2.03125 -0.828125 3.640625q-0.8125 1.59375 -2.3125 2.421875q-1.5 0.828125 -3.25 0.828125q-1.875 0 -3.359375 -0.90625q-1.484375 -0.921875 -2.25 -2.5q-0.765625 -1.578125 -0.765625 -3.328125zm1.8125 0.015625q0 2.421875 1.296875 3.8125q1.296875 1.390625 3.265625 1.390625q2.0 0 3.28125 -1.40625q1.28125 -1.40625 1.28125 -3.984375q0 -1.625 -0.546875 -2.84375q-0.546875 -1.21875 -1.609375 -1.875q-1.0625 -0.671875 -2.375 -0.671875q-1.890625 0 -3.25 1.296875q-1.34375 1.28125 -1.34375 4.28125zm14.5271 6.484375l-1.515625 0l0 -13.359375l1.640625 0l0 4.765625q1.046875 -1.296875 2.65625 -1.296875q0.890625 0 1.6875 0.359375q0.796875 0.359375 1.3125 1.015625q0.515625 0.640625 0.796875 1.5625q0.296875 0.921875 0.296875 1.96875q0 2.484375 -1.234375 3.84375q-1.21875 1.359375 -2.953125 1.359375q-1.703125 0 -2.6875 -1.4375l0 1.21875zm-0.015625 -4.90625q0 1.734375 0.484375 2.515625q0.765625 1.265625 2.09375 1.265625q1.078125 0 1.859375 -0.9375q0.78125 -0.9375 0.78125 -2.78125q0 -1.890625 -0.75 -2.796875q-0.75 -0.90625 -1.828125 -0.90625q-1.0625 0 -1.859375 0.9375q-0.78125 0.9375 -0.78125 2.703125zm8.875671 -6.546875l0 -1.90625l1.640625 0l0 1.90625l-1.640625 0zm-2.078125 15.203125l0.3125 -1.390625q0.5 0.125 0.78125 0.125q0.5 0 0.734375 -0.328125q0.25 -0.328125 0.25 -1.671875l0 -10.15625l1.640625 0l0 10.203125q0 1.78125 -0.46875 2.484375q-0.59375 0.90625 -1.96875 0.90625q-0.65625 0 -1.28125 -0.171875zm12.863586 -6.859375l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625zm15.453857 2.21875l1.609375 0.21875q-0.265625 1.65625 -1.359375 2.609375q-1.078125 0.9375 -2.671875 0.9375q-1.984375 0 -3.1875 -1.296875q-1.203125 -1.296875 -1.203125 -3.71875q0 -1.578125 0.515625 -2.75q0.515625 -1.171875 1.578125 -1.75q1.0625 -0.59375 2.3125 -0.59375q1.578125 0 2.578125 0.796875q1.0 0.796875 1.28125 2.265625l-1.59375 0.234375q-0.234375 -0.96875 -0.8125 -1.453125q-0.578125 -0.5 -1.390625 -0.5q-1.234375 0 -2.015625 0.890625q-0.78125 0.890625 -0.78125 2.8125q0 1.953125 0.75 2.84375q0.75 0.875 1.953125 0.875q0.96875 0 1.609375 -0.59375q0.65625 -0.59375 0.828125 -1.828125zm6.59375 2.078125l0.234375 1.453125q-0.6875 0.140625 -1.234375 0.140625q-0.890625 0 -1.390625 -0.28125q-0.484375 -0.28125 -0.6875 -0.734375q-0.203125 -0.46875 -0.203125 -1.9375l0 -5.578125l-1.203125 0l0 -1.265625l1.203125 0l0 -2.390625l1.625 -0.984375l0 3.375l1.65625 0l0 1.265625l-1.65625 0l0 5.671875q0 0.6875 0.078125 0.890625q0.09375 0.203125 0.28125 0.328125q0.203125 0.109375 0.578125 0.109375q0.265625 0 0.71875 -0.0625zm6.397827 -2.828125l1.65625 -0.140625q0.125 1.0 0.546875 1.640625q0.4375 0.640625 1.34375 1.046875q0.921875 0.390625 2.0625 0.390625q1.0 0 1.78125 -0.296875q0.78125 -0.296875 1.15625 -0.8125q0.375 -0.53125 0.375 -1.15625q0 -0.625 -0.375 -1.09375q-0.359375 -0.46875 -1.1875 -0.796875q-0.546875 -0.203125 -2.390625 -0.640625q-1.828125 -0.453125 -2.5625 -0.84375q-0.96875 -0.5 -1.4375 -1.234375q-0.46875 -0.75 -0.46875 -1.671875q0 -1.0 0.578125 -1.875q0.578125 -0.890625 1.671875 -1.34375q1.109375 -0.453125 2.453125 -0.453125q1.484375 0 2.609375 0.484375q1.140625 0.46875 1.75 1.40625q0.609375 0.921875 0.65625 2.09375l-1.6875 0.125q-0.140625 -1.265625 -0.9375 -1.90625q-0.78125 -0.65625 -2.3125 -0.65625q-1.609375 0 -2.34375 0.59375q-0.734375 0.59375 -0.734375 1.421875q0 0.71875 0.53125 1.171875q0.5 0.46875 2.65625 0.96875q2.15625 0.484375 2.953125 0.84375q1.171875 0.53125 1.71875 1.359375q0.5625 0.828125 0.5625 1.90625q0 1.0625 -0.609375 2.015625q-0.609375 0.9375 -1.75 1.46875q-1.140625 0.515625 -2.578125 0.515625q-1.8125 0 -3.046875 -0.53125q-1.21875 -0.53125 -1.921875 -1.59375q-0.6875 -1.0625 -0.71875 -2.40625zm16.412354 2.828125l0.234375 1.453125q-0.6875 0.140625 -1.234375 0.140625q-0.890625 0 -1.390625 -0.28125q-0.484375 -0.28125 -0.6875 -0.734375q-0.203125 -0.46875 -0.203125 -1.9375l0 -5.578125l-1.203125 0l0 -1.265625l1.203125 0l0 -2.390625l1.625 -0.984375l0 3.375l1.65625 0l0 1.265625l-1.65625 0l0 5.671875q0 0.6875 0.078125 0.890625q0.09375 0.203125 0.28125 0.328125q0.203125 0.109375 0.578125 0.109375q0.265625 0 0.71875 -0.0625zm0.9957886 -3.375q0 -2.6875 1.484375 -3.96875q1.25 -1.078125 3.046875 -1.078125q2.0 0 3.265625 1.3125q1.265625 1.296875 1.265625 3.609375q0 1.859375 -0.5625 2.9375q-0.5625 1.0625 -1.640625 1.65625q-1.0625 0.59375 -2.328125 0.59375q-2.03125 0 -3.28125 -1.296875q-1.25 -1.3125 -1.25 -3.765625zm1.6875 0q0 1.859375 0.796875 2.796875q0.8125 0.921875 2.046875 0.921875q1.21875 0 2.03125 -0.921875q0.8125 -0.9375 0.8125 -2.84375q0 -1.796875 -0.8125 -2.71875q-0.8125 -0.921875 -2.03125 -0.921875q-1.234375 0 -2.046875 0.921875q-0.796875 0.90625 -0.796875 2.765625zm9.281982 4.84375l0 -9.671875l1.46875 0l0 1.46875q0.5625 -1.03125 1.03125 -1.359375q0.484375 -0.328125 1.0625 -0.328125q0.828125 0 1.6875 0.53125l-0.5625 1.515625q-0.609375 -0.359375 -1.203125 -0.359375q-0.546875 0 -0.96875 0.328125q-0.421875 0.328125 -0.609375 0.890625q-0.28125 0.875 -0.28125 1.921875l0 5.0625l-1.625 0zm12.5407715 -1.1875q-0.921875 0.765625 -1.765625 1.09375q-0.828125 0.3125 -1.796875 0.3125q-1.59375 0 -2.453125 -0.78125q-0.859375 -0.78125 -0.859375 -1.984375q0 -0.71875 0.328125 -1.296875q0.328125 -0.59375 0.84375 -0.9375q0.53125 -0.359375 1.1875 -0.546875q0.46875 -0.125 1.453125 -0.25q1.984375 -0.234375 2.921875 -0.5625q0.015625 -0.34375 0.015625 -0.421875q0 -1.0 -0.46875 -1.421875q-0.625 -0.546875 -1.875 -0.546875q-1.15625 0 -1.703125 0.40625q-0.546875 0.40625 -0.8125 1.421875l-1.609375 -0.21875q0.21875 -1.015625 0.71875 -1.640625q0.5 -0.640625 1.453125 -0.984375q0.953125 -0.34375 2.1875 -0.34375q1.25 0 2.015625 0.296875q0.78125 0.28125 1.140625 0.734375q0.375 0.4375 0.515625 1.109375q0.078125 0.421875 0.078125 1.515625l0 2.1875q0 2.28125 0.109375 2.890625q0.109375 0.59375 0.40625 1.15625l-1.703125 0q-0.265625 -0.515625 -0.328125 -1.1875zm-0.140625 -3.671875q-0.890625 0.375 -2.671875 0.625q-1.015625 0.140625 -1.4375 0.328125q-0.421875 0.1875 -0.65625 0.53125q-0.21875 0.34375 -0.21875 0.78125q0 0.65625 0.5 1.09375q0.5 0.4375 1.453125 0.4375q0.9375 0 1.671875 -0.40625q0.75 -0.421875 1.09375 -1.140625q0.265625 -0.5625 0.265625 -1.640625l0 -0.609375zm3.8913574 5.65625l1.59375 0.234375q0.109375 0.75 0.5625 1.078125q0.609375 0.453125 1.671875 0.453125q1.140625 0 1.75 -0.453125q0.625 -0.453125 0.84375 -1.265625q0.125 -0.5 0.109375 -2.109375q-1.0625 1.265625 -2.671875 1.265625q-2.0 0 -3.09375 -1.4375q-1.09375 -1.4375 -1.09375 -3.453125q0 -1.390625 0.5 -2.5625q0.515625 -1.171875 1.453125 -1.796875q0.953125 -0.640625 2.25 -0.640625q1.703125 0 2.8125 1.375l0 -1.15625l1.515625 0l0 8.359375q0 2.265625 -0.46875 3.203125q-0.453125 0.9375 -1.453125 1.484375q-0.984375 0.546875 -2.453125 0.546875q-1.71875 0 -2.796875 -0.78125q-1.0625 -0.765625 -1.03125 -2.34375zm1.359375 -5.8125q0 1.90625 0.75 2.78125q0.765625 0.875 1.90625 0.875q1.125 0 1.890625 -0.859375q0.765625 -0.875 0.765625 -2.734375q0 -1.78125 -0.796875 -2.671875q-0.78125 -0.90625 -1.890625 -0.90625q-1.09375 0 -1.859375 0.890625q-0.765625 0.875 -0.765625 2.625zm15.953857 1.90625l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m86.07874 13.648276l68.22047 0l0 90.96063l-68.22047 0z" fill-rule="evenodd"/><g transform="matrix(0.3032020997375328 0.0 0.0 0.3032020997375328 86.07874015748031 13.648276377952756)"><clipPath id="p.1"><path d="m0 0l225.0 0l0 300.0l-225.0 0z" clip-rule="evenodd"/></clipPath><image clip-path="url(#p.1)" fill="#000" width="225.0" height="300.0" x="0.0" y="0.0" preserveAspectRatio="none" xlink:href="data:image/png;base64,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"/></g><path fill="#000000" fill-opacity="0.0" d="m145.8084 579.92255l101.21533 0l0 101.21509l-101.21533 0z" fill-rule="evenodd"/><g transform="matrix(0.12651916010498687 0.0 0.0 0.12651889763779528 145.80839895013122 579.9225202099738)"><clipPath id="p.2"><path d="m-2.2737368E-13 0l800.0 0l0 800.0l-800.0 0z" clip-rule="evenodd"/></clipPath><image clip-path="url(#p.2)" fill="#000" width="800.0" height="800.0" x="0.0" y="0.0" preserveAspectRatio="none" xlink:href="data:image/png;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAS6i4H1GqP/SsAAAAASUVORK5CYII="/></g><path fill="#000000" fill-opacity="0.0" d="m836.0945 -1.4557372l105.136536 0l0 105.32545l-105.136536 0z" fill-rule="evenodd"/><g transform="matrix(0.1897771653543307 0.0 0.0 0.18977559055118107 836.0944881889764 -1.4557372703412073)"><clipPath id="p.3"><path d="m0 0l554.0 0l0 555.0l-554.0 0z" clip-rule="evenodd"/></clipPath><image clip-path="url(#p.3)" fill="#000" width="554.0" height="555.0" x="0.0" y="0.0" preserveAspectRatio="none" xlink:href="data:image/png;base64,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"/></g><path fill="#000000" fill-opacity="0.0" d="m746.43304 549.11176l179.66406 0l0 34.85669l-179.66406 0z" fill-rule="evenodd"/><g transform="matrix(0.23393753280839896 0.0 0.0 0.23393727034120734 746.4330708661417 549.111764304462)"><clipPath id="p.4"><path d="m4.5474735E-13 0l768.0 0l0 149.0l-768.0 0z" clip-rule="evenodd"/></clipPath><image clip-path="url(#p.4)" fill="#000" width="768.0" height="149.0" x="0.0" y="0.0" preserveAspectRatio="none" xlink:href="data:image/png;base64,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"/></g><path fill="#000000" fill-opacity="0.0" d="m831.6221 228.49606l68.22046 0l0 68.22049l-68.22046 0z" fill-rule="evenodd"/><g transform="matrix(0.08527559055118111 0.0 0.0 0.08527559055118111 831.6220472440945 228.4960650918635)"><clipPath id="p.5"><path d="m0 0l800.0 0l0 800.0l-800.0 0z" clip-rule="evenodd"/></clipPath><image clip-path="url(#p.5)" fill="#000" width="800.0" height="800.0" x="0.0" y="0.0" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAMgCAYAAADbcAZoAACAAElEQVR4XuzdCZgcVbn4/xkgISwhma5TMyEEDRoVQXDBBfUviiLuK0bcjahzIVOnqpsEcEHp64I/3NeruFwU1ztIkulzqpMAOqiIqLkqonBFEBVQ9lWWhJD5v2/1oPH0ELLM0j39/T7P55lkkkAyU9V9TnfVOV1dREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREtD3N73e7zy2vnBtV3D5xZWhRX5IfFFn3VGPrz45T92KT5S/tq+SvMJl7Q5T5N0Wpf2uUugFlrF8WZ/49hTQ/1aT5aca6j8vv+69SUjvdpO4rpcx/x9j8ew9G/jvOpLXVOyJO/Irwv7u5kvXf0b+PitLaZ+Xf9NHi75r6Dzzw95fPVR74d8m//y36b5Vff52p1F+mX4NeWz8yHsgPM0n+5FJlzYF9y2v7mWRofk//4Jyu6uDM8OtKRERERNQ6Vas7dfWfPmPhkuFZfcvX7lGy9b3mHOd75i9zpjcb6tOBrXxuwdyB/OF9SW0/Gfw+0gzkj44St38xOSi750SpTAp0gGzdO02mE4H8ZB38y4//Swb+39ZBeWT9Ghl0/8gktYti6y+JbO1y+dxf5NdvkT97h0wg7pc/s6mQbgu/JSNtIPw7B8J/7xb88+vnN8pk6Db5eGPxNU7cpfK9+q1M4n4m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"/></g></g></svg>
=====================================================
== File: docs/modules/concepts/nav.adoc
=====================================================
* xref:index.adoc[]
** xref:user/index.adoc[]
** xref:mail/index.adoc[]
*** xref:messages/index.adoc[]
**** xref:messages/imf.adoc[]
**** xref:messages/mime.adoc[]
** xref:protocols/index.adoc[]
*** xref:protocols/smtp.adoc[]
*** xref:protocols/pop.adoc[]
*** xref:protocols/imap.adoc[]
*** xref:protocols/jmap.adoc[]
*** xref:protocols/esmtp.adoc[]
*** xref:protocols/lmtp.adoc[]
** xref:storage/index.adoc[]
*** xref:storage/mailbox.adoc[]
*** xref:storage/users.adoc[]
** xref:processing/index.adoc[]
** xref:configuration.adoc[]
** xref:glossary.adoc[]
=====================================================
== File: docs/modules/concepts/pages/configuration.adoc
=====================================================
= Configuration
== Overview
An important aspect to understand about James is the idea of "configuration".
Sometimes "configuration" means different things to different people, so we
wanted to ensure that what we mean by the concept is clear and precise,
because in order operate a James server, you will necessarily need to
configure it.
A "*Configuration*" is a https://martinfowler.com/bliki/ValueObject.html[value object]
that communicates to a James server how the xref:user/index.adoc#_operator[Operator] wishes the
server to behave. It is very similar to an interface, but yet it is not quite an interface
(which is why we call it something different).
An "interface" provides a means for an Operator to interact with a server as part of the
normal course of ongoing operations. Interfacing with the system essentially means either
reading the server's current state, or updating the server's current state. A typical example
would be adding a new mailbox via the xref:concepts:???.adoc[Useradmin API]. Each time the Operator
interacts with the system via an interface, although the *state* of the system may change,
the *behavior* of the system is not expected to change.
By contrast, "configuration" of a system (also a noun, but yet not the same as the
"Configuration" we mention above) is more like a switching mechanism that instructs the server
how to behave given some kind of interaction via an interface. For example, if a James server
is configured to allow multiple domains, then if an Operator adds "user@domain1.com" and
"user@domain2.com", the server will happily accept the command. If only a single domain is
permitted via configuration, then only one of those mailboxes will be allowed. In other words,
given the same interaction by the Operator, given different configurations the behavior of
the system is different.
Some systems call these "settings", so as a user of a system you would "configure your settings".
=====================================================
== File: docs/modules/concepts/pages/mail/index.adoc
=====================================================
= All About Emails
:navtitle: Emails
The https://en.wikipedia.org/wiki/History_of_email[history of email] has resulted
in a convoluted patchwork of standards and practices, which can be very difficult
to understand and decipher. Fortunately, James has your back.
We have built up our own view of emails that allows us to process messages in a
consistent and comprehensible way.
To help you understand how James approaches emails, we have divided this section
up into the following parts:
* xref:messages/index.adoc[]
* xref:protocols/index.adoc[]
=====================================================
== File: docs/modules/concepts/pages/storage/mailbox.adoc
=====================================================
= Mailboxes
:navtitle: Mailboxes
== Overview
To (over)use the analogy once again of a postal system, we think of a mailbox
as a place where a letter is placed to await pickup by its recipient. Although
current methods have evolved considerably, the original idea used for the development
of email was exactly that. The concept <<RFC196,has been around officially>> since
at least 1971. The image of a mailbox is so prevalent that, although current
systems have evolved to do so much more than just hold messages for processing,
the industry continues to apply the concept.
The more general term is "Email Storage". It is necessary to store email for
many reasons:
* As a mailbox system — part of a queue to await processing
* As a persistence mechanism — a place where you can go back and predictably
locate a message that you may want to refer to again in the future
* As an archive — a place where you may want to store "deleted" emails so that
you can potentially retrieve them if you wish to change your mind later
* As a temporary step in a process — perhaps you have a "todo" folder where
you temporarily store an email that you intend to process soon
There are numerous ways to store emails, just as there are numerous reasons for
storing them:
* A <<Specifications,standardized>> "mailbox" format
* A relational database
* A custom file-based mechanism
* Etc.
This section briefly describes how email storage is a core concept in an
email system.
== Specifications
=== Electronic Mail Box
==== RFC196
The concept of an "electronic mail box" was
https://tools.ietf.org/html/rfc196[initially specified] way back in 1971.
It is amusing to read the retro concepts in the initial description of this
document:
The purpose of this protocol is to provide at each site a
standard mechanism to receive sequential files for immediate or
=====================================================
== File: docs/modules/concepts/pages/storage/users.adoc
=====================================================
= User Repository
:navtitle: Users
== Overview
Whereas xref:storage/mailbox.adoc[mailboxes] are clearly a core component of
any email system, user management is a lighter shade of gray.
// "Repository" should be "Directory". See JAMES-3360.
On the one hand, mailboxes ought to match up with actual
xref:user/index.adoc#_user[Users], so there is
a clear relationship between mailbox management and user management.
Because of this relationship, it is not at all strange to include a user respository
within an email system.
However, on the other hand email is only one of many applications that require
user management. It is therefore also completely reasonable to use some kind of
centralized user directory, and ensure that mailboxes somehow synchronize with
this external system.
The former case is much simpler to manage, but requires duplicate and therefore
unproductive work. The latter case can become quite complex from a technological
perspective (and all the risks that are associated with it), but reduces the
amount of unproductive work.
== Common Operations
// "Repository" should be "Directory". See JAMES-3360.
Because the user repository is used in the context of managing mailboxes, there
are some operations that are relatively common to any email system.
=== Domain Management
A mailbox belongs to a https://en.wikipedia.org/wiki/Domain_name[domain]. For a mail
system that can process multiple domains, the system will usually have operations to:
* List available domains
* Add a domain
* Remove a domain
* Update a user's password
=== User Management
A User has at least one mail box, and will usually have a canonical mailbox
that matches the user's identity in the system.
For each domain that is managed by the system, it is common to be able to:
* List all users for the domain
* Add a user
=====================================================
== File: docs/modules/concepts/pages/storage/index.adoc
=====================================================
= Storage
:navtitle: Storage
== Overview
Email is useful because any one person can send a message to any other person,
anywhere in the world. The heart of email is the ability to transfer some message
based on a commonly-understood message format between two different systems that
may have been developed entirely independently of each other. The concept is relatively
simple, but the fact that email is so ubiquitous is simply a miracle.
However, there is more to email than just the transfer of messages.
For starters, I want people I know to be able to send me a mail even when
I happen to be out mountain climbing. I want to be able to receive the message
when I'm not available, then review it afterward when I am back at my desk.
For this reason, email is by design asynchronous. Time can pass between the moment
a mail is sent and the moment it is read.
In the meantime, it needs to be stored somewhere.
Additionally, although it is possible to read a message, then discard it, never to be seen again,
it is more common for people to archive a message. Some people even get creative and
use their email for various other purposes, such as a kind of poor man's information archive.
Many corporations use email for business purposes, which requires administration of
users within the organization.
Even individuals with a self-hosted email server want to ensure that their system does
not get abused as an xref:concepts:glossary.adoc#open_relay[open relay].
All of these types of concerns requires that the system maintain some kind of state,
whether that be the messages themselves, information about the system's users,
and even in some cases user credentials. Keeping state requires a storage system.
The system of storage must work intimately with the various
xref:protocols/index.adoc[protocols].
In this section, we describe the two principle types of storage that James manages:
* xref:storage/mailbox.adoc[Mailboxes] for email storage, and
// "Repository" should be "Directory". See JAMES-3360.
* xref:storage/users.adoc[User Repository] for data about Mailbox users.
=====================================================
== File: docs/modules/concepts/pages/messages/mime.adoc
=====================================================
= Multipurpose Internet Mail Extensions
:navtitle: MIME
== Overview
The base format of an email message is xref:messages/imf.adoc[Internet Message Format"],
but most contemporary messages use a format called
https://en.wikipedia.org/wiki/MIME["Multipurpose Internet Mail Extensions"].
MIME specifies how to extend a valid IMF message, dealing with character encodings,
various file formats, and many other odds and ends that make email what it is today.
A user of email rarely has to be concerned with the MIME specifications. Usually the
communications system should take care of all the nitty gritty, and even then MIME
processing is usually at a very low level. For this reason, the blissfully simple
conception of a simple "email" is usually just fine from the perspective of a user
and even in most cases for a developer.
== Specifications
Multipurpose Internet Mail Extensions, or just MIME, functions much like an extension
to IMF in order to:
* Add different character sets for internationalization
* Allow for processing of media types other than plain text
=== RFC2045
https://tools.ietf.org/html/rfc2045[RFC2045] ("Multipurpose Internet Mail Extensions
Part One: Format of Internet Message Bodies")
describes the message body format of an email. It is part of a serious of MIME
specifications including <<RFC2046>>, <<RFC2047>>, <<RFC2048>>, and <<RFC2049>>.
This particular document in the series specifies the various headers that
are used to describe the structure of a MIME message.
=== RFC2046
https://tools.ietf.org/html/rfc2046[RFC2046] ("Multipurpose Internet Mail Extensions
Part Two: Media Types") describes the various MIME media types, such as
plain text, images, videos, etc. It is part of the serious of MIME specifications
that includes <<RFC2045>>, <<RFC2047>>, <<RFC2048>>, and <<RFC2049>>.
=== RFC2047
=====================================================
== File: docs/modules/concepts/pages/messages/imf.adoc
=====================================================
= Internet Message Format
:navtitle: IMF
== Overview
What people casually call "email" actually refers more specifically to a
text message written in a specified format called
https://en.wikipedia.org/wiki/Email["Internet Message Format"] or "IMF".
After the first IMF specification was published in 1982 there was no looking back.
Email took the world by storm. Today it is arguably the most prevalent means of
communicating with a distant party.
IMF is very basic, and is limited to only specifying a syntax for text messages.
For the transmission of images, audio, or other types of data we need to make
use of the xref:mail/messages/mime.adoc[MIME] specification.
Although IMF forms the base standard upon which
email is based, email today is rarely used without MIME. We therefore consider
for practical purposes that an email message is essentially the equivalent of
a MIME message.
== Specifications
The specifications for Internet Message Format (IMF) form the basis of what we commonly
call "email".
=== RFC822
https://tools.ietf.org/html/rfc822[RFC822] ("Standard for the Format of ARPA Internet Text Messages")
was the original standard that defined the format of an email. It was obsoleted by
<<RFC2822>>. The definition of an email under this standard was an attempt to take the lessons
learned from the ARPANET and extend the use of text messaging to a broader context.
Electronic mail messages are defined as having contents and an envelope. The contents
consist of header fields and, optionally, a body. The body is nothing more than
a (potentially empty) sequence of lines of text.
Although this sounds like an extremely simple concept, to get two completely separate systems
to agree and understand each other is a surprisingly complex problem that most people
today take for granted. Most of RFC822 deals with the nitty-gritty of formatting and parsing
this type of text message.
This specification deals with the headers, additionally relating them to the sending and
forwarding of messages. The body content is dealt with in <<RFC2045>>
=== RFC2822
=====================================================
== File: docs/modules/concepts/pages/messages/index.adoc
=====================================================
= Email Messages
:navtitle: Messages
An email message is essentially a simple text message that is communicated
from one party to another. It is no miracle that two unknown parties are
able to communicate; rather we can thank a set of standards that
allow any two unrelated systems to process an email even if the system owners
do not know each other.
The two most important standards upon which today's emails are based
are:
* xref:messages/imf.adoc[Internet Mail Format] (IMF)
* xref:messages/mime.adoc[Multipurpose Internet Mail Extensions] (MIME)
=====================================================
== File: docs/modules/concepts/pages/protocols/jmap.adoc
=====================================================
= JSON Meta Application Protocol (JMAP)
:navtitle: JMAP
== Overview
https://jmap.io/[JSON Meta Application Protocol] ("JMAP")
is
From <<RFC8620>>:
The JSON Meta Application Protocol (JMAP) is used for synchronising
data, such as mail, calendars, or contacts, between a client and a
server. It is optimised for mobile and web environments and aims to
provide a consistent interface to different data types.
This specification is for the generic mechanism of data
synchronisation. Further specifications define the data models for
different data types that may be synchronised via JMAP.
== Specifications
=== RFC8620
https://tools.ietf.org/html/rfc8620[RFC8620] ("The JSON Meta Application Protocol (JMAP)")
== Related Concepts
=====================================================
== File: docs/modules/concepts/pages/protocols/imap.adoc
=====================================================
= Internet Message Access Protocol (IMAP)
:navtitle: IMAP
== Overview
https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol[Internet Message Access Protocol],
or IMAP, is a protocol used by email clients to retrieve
xref:messages/index.adoc[email messages] from a xref:glossary.adoc#email_server[mail server].
One could say that it is effectively in competition with xref:protocols/pop.adoc[POP]
because it accomplishes a function similar in nature, and most clients will force you
to choose one or the other.
These days, the natural choice of protocol tends to be IMAP rather than POP.
The main difference between IMAP and POP is that messages are kept on the server, which
keeps a kind of master reference. Instead of transferring the message to the client,
only an image, or copy of the message is kept locally. When the client synchronises with
the state of the server, it will tend to mimic that state. So if a new message is stored
in a mailbox, it will appear on the client, or if a message is deleted from the server,
it will also be deleted from the client.
The user can control the state of server from the client by adding, deleting, or moving
messages between folders. The user can also add folders from the client, the state of which
will be stored on the server.
== Specifications
=== IMAP
Apparently, no official specification exists for the original IMAP.
It became a specification with the publication of <<IMAP2>>
=== IMAP2
==== RFC1064
https://tools.ietf.org/html/rfc1064[RFC1064] ("Interactive Mail Access Protocol - Version 2")
was the original IMAP2 specification, published in 1988. The specification was obsoleted
by <<RFC1176>>.
==== RFC1176
https://tools.ietf.org/html/rfc1176[RFC1176] ("Interactive Mail Access Protocol - Version 2")
provides various, somewhat minor updates to <<RFC1064>>. This specification was superseded by
the first IMAP3 specification, <<RFC1203>>.
=== IMAP3
==== RFC1203
=====================================================
== File: docs/modules/concepts/pages/protocols/smtp.adoc
=====================================================
= Simple Mail Transfer Protocol (SMTP)
:navtitle: SMTP
== Overview
When the original specification for Simple Mail Transfer Protocol, or SMTP,
was published almost 40 years ago together with
xref:messages/imf.adoc[IMF], email as we know it today was born.
== Specifications
=== RFC821
https://tools.ietf.org/html/rfc821[RFC821] ("Simple Mail Transfer Protocol")
was the original SMTP specification published in 1982.
It was obsoleted by <<RFC2821>> in 2001.
=== RFC2821
https://tools.ietf.org/html/rfc2821[RFC2821] ("Simple Mail Transfer Protocol") replaced
<<RFC821>>. It was itself replaced by <<RFC5321>> in 2008.
=== RFC 5321
https://tools.ietf.org/html/rfc5321[RFC5321] is the currently used standard for
"Simple Mail Transfer Protocol", or "SMTP". Published in 2008, it is "a specification of the basic
protocol for Internet electronic mail transport". If you are interested in all
the gory details, we recommend that you read this document.
This specification has many dependencies with xref:messages/imf.adoc[IMF],
xref:messages/mime.adoc[MIME], and other technical concepts, which can quickly
become utterly confusing.
Here, we provide a very short and simplified description of those portions of the
specification that we felt were interesting enough to repeat here.
As the spec mentions, "SMTP transports a mail object", a mail object being described
as an object that contains both an envelope and content. An SMTP client connects
to a server and communicates via a session. Both client and server provide a
mail transport service, and are therefore act as "Mail Transfer Agents", or
"MTAs". A mail originates and terminates with a "Mail User Agent" ("MUA").
On the originating side, a MUA may, for instance, collect mail to be transmitted
by a user and hand it off to an MTA. On the terminating side, an MTA would
hand a mail off to an MUA.
"SMTP sessions are stateful, with both parties carefully maintaining a
common view of the current state." The session is initiated by the client,
which establishes a two-way channel to an SMTP server. The session must either
close successful (or with a failure message), else delivery is considered to
=====================================================
== File: docs/modules/concepts/pages/protocols/index.adoc
=====================================================
= Transmission Protocols
:navtitle: Protocols
The true value of email is that any one party can communicate with any
other party located virtually anywhere. All they need are a common understanding
of a xref:messages/index.adoc[message format], and a means of
transmitting the message.
Transmitting email messages between parties requires a mutually-known protocol.
It turns out that there are several standard protocols used for the
transmission of email messages, each with a different purpose:
** xref:protocols/smtp.adoc[Simple Mail Transfer]
** xref:protocols/pop.adoc[Post Office]
** xref:protocols/imap.adoc[Internet Message Access]
** xref:protocols/jmap.adoc[JSON Meta Application]
** xref:protocols/lmtp.adoc[Local Mail Transfer]
=====================================================
== File: docs/modules/concepts/pages/protocols/pop.adoc
=====================================================
= Post Office Protocol (POP)
:navtitle: POP
== Overview
The https://en.wikipedia.org/wiki/Post_Office_Protocol[Post Office Protocol],
or POP, is described in the original specification
as being "a simple method for workstations to dynamically access mail from
a xref:storage/index.adoc[mailbox server]" (though interestingly "mailbox server"
is never actually defined in this specification nor in later specifications. ??)
POP was proposed as the first non-xref:protocols/smtp.adoc[SMTP] protocol aimed
at users for the purpose of retrieving emails stored remotely for local consumption.
POP was developed in pre-spam days, so was inherently a non-secure protocol.
It has been updated several times to address several issues, including lack of
security, so that POP3 is now the current specification.
As the name suggests, the protocol is modeled after a post office. The analogy being:
* The various SMTP servers along the transmission chain are like post offices
* The user's mail server is the local post office that will dispatch the mail to the recipient
* The postman is, ummm, well no analogy is perfect ??
* The mail gets dropped into the user's mailbox (though just to make the analogy even
muddier there is an option to leave a copy on the server)
Analogies aside, the protocol worked quite well for most users, and is still widely
in use today.
POP requires essentially two pieces, the POP Client and the POP Server. How the
message gets initially delivered to the POP Server and how a message is managed
once delivered to the POP Client is out of scope of the POP protocol.
== Specifications
=== POP
POP has been around since the early days of email. The original specification
<<RFC918>> was published in 1984.
==== RFC918
https://tools.ietf.org/html/rfc918[RFC918] ("Post Office Protocol") was the original
specification published in 1984. The RFC "suggests a simple method for workstations
to dynamically access mail from a mailbox server."
Like xref:protocols/smtp.adoc[SMTP] that came before it, POP is a session-based
protocol with a handful of defined commands.
This RFC was obsoleted shortly after its publication by <<RFC937>>.
=====================================================
== File: docs/modules/concepts/pages/protocols/esmtp.adoc
=====================================================
= SMTP Service Extensions (ESMTP)
:navtitle: ESMTP
== Overview
https://en.wikipedia.org/wiki/Extended_SMTP[SMTP Service Extensions], written as "ESMTP"
and characterized in the literature as "Extended SMTP" (and sometimes "Enhanced SMTP")
is a framework for extending SMTP. Extensions are expected to be registered with
IANA and negotiated between the client and server.
Whereas SMTP mandates that a session begins with the "HELO" command, ESMTP requires
the "EHLO" (extended hello) command. Note that nowadays even "standard" SMTP uses
EHLO as its initial greeting, and only falls back to HELO, so in a sense every
SMTP server has effectively become an ESMTP server.
The ESMTP specification itself no longer actually exists independently of SMTP.
We mention it here mostly for completion, historical purposes, and as a reference
to a concept that is still very much in use, albeit now as a concept internal to
SMTP.
== Specifications
=== RFC1425
https://tools.ietf.org/html/rfc1425[RFC1425] ("SMTP Service Extensions") is the originally
published ESMTP specification. It was obsoleted by <<RFC1651>>.
=== RFC1651
https://tools.ietf.org/html/rfc1651[RFC1651] ("SMTP Service Extensions") obsoletes <<RFC1425>>
and was itself obsoleted by <<RFC1869>>.
=== RFC1869
https://tools.ietf.org/html/rfc1869[RFC1869] ("SMTP Service Extensions") obsoletes <<RFC1651>>, and
is essentially the final specification in which ESMTP was defined separately from SMTP. When this
spec was obsoleted by xref:protocols/smtp.adoc#RFC2821[RFC2821], it was incorporated into the
SMTP specification.
== Related Concepts
* *xref:protocols/smtp.adoc[SMTP]*, because ESMTP defines an extension framework for SMTP
* *xref:protocols/lmtp.adoc[LMTP]*, as LMTP is defined by the ESMTP framework
=====================================================
== File: docs/modules/concepts/pages/protocols/lmtp.adoc
=====================================================
= Local Mail Transfer Protocol (LMTP)
:navtitle: LMTP
== Overview
https://en.wikipedia.org/wiki/Local_Mail_Transfer_Protocol[Local Mail Transfer Protocol] ("LMTP")
is
From <<RFC2033>>:
Although LMTP is an alternative protocol to ESMTP, it uses (with a
few changes) the syntax and semantics of ESMTP. This design permits
LMTP to utilize the extensions defined for ESMTP. LMTP should be
used only by specific prior arrangement and configuration, and it
MUST NOT be used on TCP port 25.
== Specifications
=== RFC2033
https://tools.ietf.org/html/rfc2033[RFC2033] ("Local Mail Transfer Protocol") was published
in 1996, and defines a simplified protocol for local mail delivery mainly inspired by
xref:protocols/esmtp.adoc[ESMTP]. It is the first, last, and only specification of its kind.
== Related Concepts
LMTP relates to:
* *xref:protocols/esmtp.adoc[ESMTP]*, as it is a derivative thereof
=====================================================
== File: docs/modules/concepts/pages/user/index.adoc
=====================================================
= James User Model
:navtitle: User Model
For clarity, we have defined various roles for actors who interact
with xref:servers:index.adoc[James servers] in one way or another.
The deliverables we make available are produced with these roles in mind.
Note that any given person may play more than one role, even at the same
time.
* <<User>>
* <<Operator>>
* <<Integrator>>
* <<Developer>>
* <<Contributor>>
* <<Committer>>
* <<PMC Member>>
== User
A **User** simply uses email without any notion of what server is providing the service.
More precisely, in typical cases a User will have an email client for reading and writing email. The
xref:glossary.adoc[email client] will connect to the James server via
xref:protocols/smtp.adoc[SMTP],
xref:protocols/pop.adoc[POP], or
xref:protocols/imap.adoc[IMAP].
The User will have no indication anywhere that the server is a James server.
== Operator
An **Operator** installs and runs James for the benefit of Users.
The Operator does not compile any Java code, and does not require any software
development environment.
Apache James offers Operators a range of servers for various use cases, including:
* A xref:servers:basic/index.adoc[Basic Server] ideal for busy Operators who
are interested in an easy-to-use self-hosting solution, but who may not have the
time to gain deep expertise
* An xref:server/advanced/index.adoc[Advanced Server] well-suited for Operators with
advanced skills and resources who are not daunted by getting their hands dirty
with configurations or using built-in extensions
== Integrator
An **Integrator** has some expertise with Java or a JVM-based language. Based
=====================================================
== File: docs/modules/concepts/pages/processing/index.adoc
=====================================================
= Mail Processing Domain Model
:navtitle: Processing
(TODO)
=====================================================
== File: docs/modules/concepts/pages/glossary.adoc
=====================================================
= Glossary
[[email_client]]
Email Client::
Any software application that acts as a POP Client or an IMAP Client.
xref:messages/imf.adoc[IMF]::
*Internet Message Format* (IMF) is the base specification that defines the
syntax of an email message.
[[email_server]]
Email Server (or Mail Server)::
Any host that contains a software application that acts as a POP Server, an
IMAP Server, or an MTA.
IMAP::
IMAP Client::
One of the main actors in an email system that implements the IMAP protocol. The client
acts as a slave, in that it mirrors the state of the IMAP Server.
IMAP Server::
One of the main actors in an email system that implements the IMAP protocol. The server
acts as the master, in that it dictates the state that will be seen on each of the
IMAP Clients.
JMAP::
xref:messages/mime.adoc[MIME]::
*Multipurpose Internet Mail Extension* (MIME) is a specification that extends
IMF, defining most of the "advanced" features of email.
[[mta]]
MTA::
A *Mail Transfer Agent* (MTA) is a host that is capable of providing a mail
transport service compliant with the SMTP protocol.
MUA::
A *Mail User Agent* (MUA) is either an agent that hands over a message to an initial
MTA on the originating side of a transmission, or receives the message from the
final MTA on the terminating side of a transmission. It is in some respects similar to
an MTA, but is local in scope and does not necessarily follow a known specification.
xref:protocols/smtp.adoc[SMTP]::
*Simple Mail Transfer Protocol* (SMTP) is a protocol that specifies how to transmit
a valid email message from one MTA to another.
[[open_relay]]
Open Relay::
=====================================================
== File: docs/modules/concepts/pages/index.adoc
=====================================================
= Apache James Core Concepts
:navtitle: Concepts
The core domain of Apache James is intimately related to email communications.
Therefore this section is divided into topics that deal with the various
aspect of email systems.
* <<emails>>
* <<protocols>>
* <<mailbox>>
* <<processing>>
[#emails]
== Email Messages
Electronic Mail (often written as "e-mail" or "email") is a means of
exchanging messages over a data network. In our context, it is obvious
that we mean "electronic mail" and not "postal mail", so we usually just
write "mail".
xref:mail/index.adoc[Email messages] are based on a few specifications
that are not easy to digest, so we make an effort to provide a simplified
model.
[#protocols]
== Transmission Protocols
Emails are only useful because people can communicate with each other.
To allow for this, obviously there must be a means of transmitting messages
from one user to another. A number of different protocols have emerged to
handle the various different requirements of using email in a practical
manner. The most common xref:protocols/index.adoc[transmission protocols]
are SMTP, POP, and IMAP. More recently JMAP is an interesting protocol
that merits attention.
[#mailbox]
== Mailbox and Email Storage
Email would not be very useful if, like in https://www.youtube.com/watch?v=0TiqXFssKMY[Mission Impossible],
a message would self-destruct immediately after being read.
For those of us who are not secret agents, we generally prefer to keep
a record of those messages that we receive. For this reason we need a means
of xref:storage/index.adoc[storing messages].
=====================================================
== File: docs/modules/ROOT/nav.adoc
=====================================================
* Apache James Reference Documentation
=====================================================
== File: docs/modules/ROOT/pages/index.adoc
=====================================================
= Welcome
Welcome to the Apache James Reference Documentation! These documents are for version {page-version} of James.
Apache James is a flexible email platform that provides out-of-the-box mail servers that you can start
using in production immediately.
James runs on the JVM and is highly customizable.
This Reference Book is divided into the following Parts:
* xref:james-project:concepts:index.adoc[James Core Concepts]
** These are the core concepts that describe what James is all about.
Start here if you want to learn more about what James can do
and how it is designed.
* xref:james-project:servers:index.adoc[James Servers]
** We provide a few out-of-the-box servers that you can
choose from depending on your needs. Start here if you just
want to get up and running quickly with a working production-grade mail server.
* xref:james-project:customization:index.adoc[Customization]
** Shows how you can customize any James server with the
functionalities that you need.
Check out this section if you have special business or technical
needs and are interested in a custom solution.
* xref:james-project:development:index.adoc[James Developer Guide]
** A guide aimed at experienced developers, describing
how you can assemble your own specialized server.
* xref:james-project:community:index.adoc[James Community]
** All about the Apache James community, and how you can be
part of this active and dynamic group, too!
Please note that this Reference Documentation is a **living document**. It is subject to change. You are currently reading version {page-version}. If you find anything that is unclear, unfinished, or confusing, please do not hestiate to xref:james-project:community:index.adoc[lend us a hand].
=====================================================
== File: docs/modules/development/nav.adoc
=====================================================
* xref:index.adoc[]
** xref:logging.adoc[]
=====================================================
== File: docs/modules/development/pages/deployment-tests.adoc
=====================================================
= How to run deployment Tests
:navtitle: Deployment tests
We wrote some MPT (James' Mail Protocols Tests subproject) deployment tests to validate a James
deployment.
It uses the External-James module, that uses environment variables to locate a remote
IMAP server and run integration tests against it.
For that, the target James Server needs to be configured with a domain `domain` and a user `imapuser`
with password `password`. Read above documentation to see how you can do this.
You have to run MPT tests inside docker. As you need to use maven, the simplest option is to
use james/parent image, and override the entry point ( as git and maven are already configured
there ) :
$ export JAMES_ADDRESS=127.0.0.1
$ export JAMES_IMAP_PORT=143
$ export JAMES_SMTP_PORT=25
$ mvn -T 1C -DskipTests -pl org.apache.james:apache-james-mpt-external-james -am install
$ mvn -T 1C -pl org.apache.james:apache-james-mpt-external-james test -Pintegration-tests
Where :
* JAMES_IP: IP address or DNS entry for your James server
* JAMES_IMAP_PORT: Port allocated to James' IMAP port (should be 143).
* JAMES_SMTP_PORT: Port allocated to James' SMTP port (should be 25).
=====================================================
== File: docs/modules/development/pages/logging.adoc
=====================================================
= Logging in Apache James
NOTE: This information targets developers.
Logging is very important when running a software.
Most of the time people use logs for debugging and troubleshooting issues in production.
In Apache James we leverage a logging facade for logging http://www.slf4j.org/[Slf4j] .
Please see the documentation for exact details.
In a typical application logs are stored for a specific period.
This can be 1 day, 1 week, etc.
Some other typical scenarios include:
* Rotating logs periodically.
* Shipping logs centrally.
* Saving some logging messages to other files / end devices
By leveraging a logging facade like Slf4j, the end user has the ability to use different logging back ends and achieve the above requirements.
Logging is something we do to help the people running our code.
We also help ourselves when they encounter bugs, and they need to share information with us for a fix.
As developers, we should be mindful of the logging statements.
We should also be mindful about the performance implications of logging and not abuse it.
== Loggers used in code
You can define a logger using a string or a class.
For common loggers it's ok to use a string name.
[source,java]
--
private static final Logger LOGGER = LoggerFactory.getLogger("org.apache.james.CONFIGURATION");
private static final Logger LOGGER = LoggerFactory.getLogger(JamesServerMain.class);
--
Loggers can be hierarchical.
This helps when we build a logger from a class name, and we use package structure to drive the logger hierarchy.
The most useful loggers should to be documented below.
Please maintain this list of loggers.
org.apache.james.CONFIGURATION:: It is used to log events related to configuration loading and updating.
== Logging when debugging tests
When investigating failing tests, increasing the log level can provide valuable insights.
=== Log Configuration
=====================================================
== File: docs/modules/development/pages/index.adoc
=====================================================
= Apache James Developer Guide
:navtitle: Developer Guide
This page aggregates common knowledge for contributing to Apache james servers.
xref:community:contributing.adoc[Contribution guidelines] apply.
xref:logging.adoc[This page] explains how *logging* should be done.
Help of kind contributors is more than welcome to write guides explaining newcomers your hard-learned lessons!
=====================================================
== File: docs/modules/community/nav.adoc
=====================================================
* xref:index.adoc[]
** xref:mailing-lists.adoc[]
** xref:contributing.adoc[]
** xref:guidelines.adoc[]
** xref:download.adoc[]
** xref:website.adoc[]
** xref:release.adoc[]
** xref:support.adoc[]
** Apache Software Foundation
*** https://www.apache.org/[ASF]
*** https://www.apache.org/foundation/getinvolved.html[Get involved]
*** https://www.apache.org/foundation/faq.html[FAQ]
*** https://www.apache.org/licenses/[Licenses]
*** https://www.apache.org/security/[Security]
*** https://www.apache.org/foundation/sponsorship.html[Sponsorship]
*** https://www.apache.org/foundation/thanks.html[Thanks]
=====================================================
== File: docs/modules/community/pages/support.adoc
=====================================================
= Professional support
Here is a list of companies which can provide you some support on James.
== Baechler Craftsmanship
mailto:matthieu@baechler-craftsmanship.fr[*Baechler Craftsmanship*] has a very strong knowledge both on email and James. The company is
run by a long-time contributor and PMC of James which contributed significant enhancements
over the years.
The company is committed to contribute to James and offers consultancy for companies willing
to use James on their own infrastructure and/or need enhancements to fit their own needs.
Free Software is a core value of the company and it can also help customers to work with
James community in an efficient and positive way.
== Linagora
image::linagora.png[link=https://linagora.com]
*Linagora* is an Open Source Software Company.
Their mission is to bring digital independence to their customers.
They are focused on large organizations both from private and public sector. They have set themselves the goal of
helping Governments to achieve their digital sovereignty.
*Linagora* can offer professional services related to James: support, feature development or project integration.
=====================================================
== File: docs/modules/community/pages/website.adoc
=====================================================
= Building and publishing the website
The source code of website https://james.apache.org[james.apache.org] is located in src/homepage.
Here are the instructions how to publish new changes to the website.
1. Install Apache Maven 3.0.2+ and make its binary 'mvn' available on your PATH.
See http://maven.apache.org/download.html#Installation.
2. run "mvn clean site"
3. Test the built site in your browser from the {path}/target/site folder
4. If everything looks OK, deploy the site using "mvn clean site-deploy".
5. Wait for the changes to replicate to the Apache web server or setup 140.211.11.10:80 as
a proxy to review the changes (described here: http://www.apache.org/dev/project-site.html)
To deploy the technical reports use the "-Psite-reports" profile.
For wagon-ssh-external configuration see
http://maven.apache.org/plugins/maven-deploy-plugin/examples/deploy-ssh-external.html
You can alternatively use a docker container to build the website :
You need to build the homepage by:
$ docker build -t james/homepage src/homepage-docker
$ docker run -v $PWD:/origin -v $PWD/site:/destination james/homepage master
In order to test the homepage, you can use this command:
$ docker run --rm -v $PWD/site:/srv/jekyll -p 4000:4000 -it jekyll/minimal:3.8.3 jekyll serve
the site will be available at http://localhost:4000/
Then you build the other pages by:
$ docker build -t james/site src/site-docker
$ docker run -v $PWD/.m2:/root/.m2 -v $PWD:/origin -v $PWD/site:/destination james/site master
If you need to update the current site, checkout the branch asf-site from Apache git:
$ git clone https://git-wip-us.apache.org/repos/asf/james-site.git
$ cd james-site
$ git checkout origin/asf-site -b asf-site
And replace in the previous commands `$PWD/site` by `<james-site-clone-directory>/content`, for example:
$ docker run -v $PWD:/origin -v $PWD/../james-site/content:/destination james/homepage master
$ docker run -v $PWD/.m2:/root/.m2 -v $PWD/../james-site/content:/origin -v $PWD/site:/destination james/site master
Then just push the new site:
$ cd ../james-site
=====================================================
== File: docs/modules/community/pages/guidelines.adoc
=====================================================
= Apache James Project guidelines
:navtitle: Guidelines
This document defines the guidelines for the Apache James Project. It includes definitions of how conflict is being
resolved by voting and who is able to vote.
The objective here is to avoid unnecessary conflicts over changes and continue to produce a quality system in a timely
manner. Not all conflict can be avoided, but at least we can agree on the procedures for conflicts to be resolved.
== People, Places, and Things
=== Apache James Project Management Committee
The group of volunteers who are responsible for managing the Apache James Project. This includes deciding what is
distributed as products of the Apache James Project, maintaining the Project's shared resources, speaking on behalf of
the Project, resolving license disputes regarding Apache James products, nominating new PMC members or committers,
and establishing these guidelines.
Membership in the Apache James PMC is by invitation only and must be approved by consensus of the active Apache James
PMC members. A PMC member is considered inactive by their own declaration or by not contributing in any form to the
project for over six months. An inactive member can become active again by reversing whichever condition made them
inactive (i.e., by reversing their earlier declaration or by once again contributing toward the project's work).
Membership can be revoked by a unanimous vote of all the active PMC members other than the member in question.
=== Apache James Committers
The group of volunteers who are responsible for the technical aspects of the Apache James Project. This group has write
access to the appropriate source repositories and these volunteers may cast non-binding votes on any technical discussion.
Membership as a Committer is by invitation only and must be approved by consensus of the active Apache James PMC members.
A Committer is considered inactive by their own declaration or by not contributing in any form to the project for over
six months. An inactive member can become active again by reversing whichever condition made them inactive (i.e., by
reversing their earlier declaration or by once again contributing toward the project's work). Membership can be revoked
by a unanimous vote of all the active PMC members (except the member in question if they are a PMC member).
=== Mailing list
The Apache committers' primary mailing list for discussion of issues and changes related to the project
(xref:mailing-lists.adoc#_server_developer_list[server-dev@james.apache.org]). Subscription to the list is open, but
only subscribers can post directly to the list.
=== Private list
The Apache James Project's private mailing list for discussion of issues that are inappropriate for public discussion,
such as legal, personal, or security issues prior to a published fix. Subscription to the list is only opened to Apache
James PMC members and Apache Software Foundation Members.
Topics to be discussed on the private mailing list:
- Discussion of board reports. PMC members need to report quarterly project activity to the Apache board of directors,
=====================================================
== File: docs/modules/community/pages/download.adoc
=====================================================
= Download Apache James releases
:navtitle: Download releases
https://james.apache.org/download[Download Apache James releases]
=====================================================
== File: docs/modules/community/pages/mailing-lists.adoc
=====================================================
= Mailing lists
Please read the <<_guidelines>> below before subscribing to our lists and join our community.
== James mailing lists
Most James mailing lists are open and also archived and available online.
You can read them even if you are not subscribed.
You can post only if you are subscribed.
=== Mailing list archives and web browsing
You can browse the mailing list archives online using the https://lists.apache.org/list.html?james.apache.org[Pony Mail] instance.
=== Server user list
*Low traffic*
mailto:server-user-subscribe@james.apache.org[Subscribe]
mailto:server-user-unsubscribe@james.apache.org[Unsubscribe]
link:++https://lists.apache.org/list.html?server-user@james.apache.org++[Archive]
This is the list where users of the Apache James (Server) meet and discuss issues. Developers are also expected to be
subscribed to this list to offer support to users of Apache James (Server).
=== Server developer list
*Medium traffic*
mailto:server-dev-subscribe@james.apache.org[Subscribe]
mailto:server-dev-unsubscribe@james.apache.org[Unsubscribe]
link:++https://lists.apache.org/list.html?server-dev@james.apache.org++[Archive]
This is the list where participating developers of the Apache James Project meet and discuss issues, code changes/additions,
etc. Do not send mail to this list with usage questions or configuration problems -- that's what server-user@james is for.
=== Mime4j
*Medium traffic*
mailto:mime4j-dev-subscribe@james.apache.org[Subscribe]
mailto:mime4j-dev-unsubscribe@james.apache.org[Unsubscribe]
link:++https://lists.apache.org/list.html?mime4j-dev@james.apache.org++[Archive]
Discussions on the http://james.apache.org/mime4j[Mime4j] parser library.
=== James general list
*Low traffic*
mailto:general-subscribe@james.apache.org[Subscribe]
mailto:general-unsubscribe@james.apache.org[Unsubscribe]
link:++https://lists.apache.org/list.html?general@james.apache.org++[Archive]
=====================================================
== File: docs/modules/community/pages/release.adoc
=====================================================
= Creating an official Apache James release
Read details about http://www.apache.org/dev/publishing-maven-artifacts.html[Publishing Maven releases to Maven Central Repository]
In short, just follow the 'standard' process:
* prepare pom for release
* publish snapshot
* prepare release
* stage the release for a vote (don't forget to close the staging repository)
* vote
* release
Don't forget to add your key to https://downloads.apache.org/james/KEYS
$ ssh people.apache.org
$ cd /www/www.apache.org/dist/james
== Release cheat sheet
First, discuss your intention to perform a release on server-dev mailing list, to ensure a consensus would be reached
before starting this time-consuming process.
Then you can prepare the release materials:
* Ensure the `CHANGELOG.md` and `upgrade-instructions.md` files are up to date.
* Freeze your version in it and initiate a new iteration.
* Write a blog post within `/src/homepage/_post` about your release.
* Update the documentation website `/docs`, `src/site`, and `README.md` to point to your new release.
* Update the `/dockerfiles`
Open a pull request to validate the changes.
=== Running a maven release
Once merged, it is time for the maven release.
Set up your maven configuration in `~/.m2/settings.xml` :
[source,bash]
----
<settings>
<servers>
<server>
<id>apache.snapshots.https</id>
<username>apacheId</username>
<password>xxxxxx</password>
</server>
<!-- To stage a release of some part of Maven -->
<server>
=====================================================
== File: docs/modules/community/pages/index.adoc
=====================================================
= Apache James Community
:navtitle: Community
Apache James Project is an Open Source all-volunteer project obtaining its strength from its Community made of
developers and users. All are welcome to the Community!
== Join the community
There are many ways for Users, Developers, Curious and Fans to join and be part of the James Community:
* https://james.apache.org/[Apache James Website]
* xref:mailing-lists.adoc[Mailing lists]: Subscribe to the appropriate Mailing Lists according to your interests and profile.
* https://gitter.im/apache/james-project[Gitter chat room]: Chat in live with the community on Gitter.
* https://twitter.com/ApacheJames[Twitter]: Express yourself and follow us @ApacheJames.
* https://github.com/apache/james-project[GitHub]: Read and contribute to the source code of the project.
* https://issues.apache.org/jira/projects/JAMES[JIRA]: Report issues or make suggestions for the project on our bug tracker.
* https://builds.apache.org/job/ApacheJames/[CI]: Check the status of James builds on our Jenkins CI.
* xref:download.adoc[Download releases]: Download artifacts and sources your need for the James Server and James libraries.
* xref:support.adoc[Professional support]: Find a list of companies which can provide you some support on James.
== Contribute
James is a project that lives from the contributions of its community. *Anyone can contribute!*
That's right, we always want to hear from people with contributions to the code, the documentation, the website,
and bug reports. We more than welcome non-coding contributions.
You can find more information on how to contribute to the James project on the xref:contributing.adoc[contributing] section.
== Articles for contributors
** xref:website.adoc[]
** xref:release.adoc[]
== The Apache Software Foundation
James is a project belonging to the https://www.apache.org/[Apache Software Foundation [ASF\]]. Thus, the Apache Jame project
is governed by a number of xref:guidelines.adoc[guidelines] directly depending on the *ASF*.
If you wish to get more involved with the *ASF* community in general, those links might interest you as well:
* https://www.apache.org/foundation/getinvolved.html[Get involved with the ASF]
* https://www.apache.org/foundation/faq.html[Apache FAQ]
* https://www.apache.org/licenses/[Apache Licenses]
* https://www.apache.org/security/[The Apache security team]
* https://www.apache.org/foundation/sponsorship.html[Sponsorship program]
* https://www.apache.org/foundation/thanks.html[Sponsors list]
=====================================================
== File: docs/modules/community/pages/contributing.adoc
=====================================================
= Contributing
This document defines the different ways available for contributing to the Apache James project.
To keep you informed on James issues, subscribe to the relevant xref:mailing-lists.adoc[mailing lists].
== Be involved in the community
An easy start is to be involved in the community.
Share your experiences with James, your needs, your enhancements proposition via the
xref:mailing-lists.adoc[mailing lists], on https://gitter.im/apache/james-project[Gitter], or on our
https://issues.apache.org/jira/projects/JAMES/issues[Bug Tracker].
Don't hesitate to write articles and blog posts. Use your preferred media to spread the love!
== Reporting bugs
Many improvements come as a direct result of bug reports.
To report a bug, please use the appropriate Bug Tracker JIRA link according to the project you want to address:
* https://issues.apache.org/jira/browse/JAMES[Server]
* https://issues.apache.org/jira/browse/MAILET[Mailet]
* https://issues.apache.org/jira/browse/MAILBOX[Mailbox]
* https://issues.apache.org/jira/browse/PROTOCOLS[Protocols]
* https://issues.apache.org/jira/browse/MPT[MPT]
* https://issues.apache.org/jira/browse/MIME4J[Mime4j]
* https://issues.apache.org/jira/browse/JSIEVE[jSieve]
* https://issues.apache.org/jira/browse/JSPF[jSPF]
* https://issues.apache.org/jira/browse/JDKIM[jDKIM]
Once you are logged on the appropriate JIRA page, click on the red Create button, then complete the different fields
as accurately as possible, so that any user can reproduce the reported bug. Also, note that all your information must be
readable (use markdown).
Then, you have to click on Create to submit your bug.
=== Reporting security vulnerabilities
http://www.apache.org/security/[Security vulnerabilities] should be announced to the Apache Security team.
PMCs will be notified about them, and will work hard to propose fixes as fast as possible.
Specific details about security in James can be found here.
== Documentation
Documentation is an easy way to get on board! Check out the
link:https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20documentation%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC[~documentation]
label on JIRA to get some ideas.
=====================================================
== File: docs/README.md
=====================================================
# Building and serving documentation locally
## Executing within source code
(Clone `https://github.com/apache/james-project` locally, go into `docs` folder)
**Step 1**: [Install Antora](https://docs.antora.org/antora/latest/install-and-run-quickstart/)
**Step 2**: Build the Antora content locally
```
antora antora-playbook-local.yml
```
**Step 3**: Open `build/site/index.html` in your browser.
## Building with Dockerfile
To build the document from apache-james repository, you can use the Dockerfile provided in this folder.
Build the Docker image:
```
docker build --build-arg JAMES_CHECKOUT=master -f Dockerfile -t james-site-antora .
```
Then run the Docker image:
```
docker run -p 80:80 james-site-antora
```
Go to `http://localhost` in your browser.
=====================================================
== File: docs/antora-playbook-local.yml
=====================================================
#
# Use this configuration for local testing / docs develop.
#
# Note: Executing Antora can only be done from within a git repository.
# When UNZIPPING the application, you will need to initialize the git repository:
#
# $ git init
# $ git add .
# $ git commit -m "First commit"
#
# You may want to update paths below too...
site:
title: Apache James Server
url: https://james.apache.org/
start_page: james-project::index.adoc
content:
sources:
# url should match the relative position for your git repository. A value for a git repo located in the docs folder would be:
# - url: ./
- url: ./../
branches: HEAD
# Must match the relative position of the Antora docs files within the git repository stated above.
# A value for a git repo located in the docs folder would be:
# start_path: ./
start_path: ./docs
ui:
bundle:
url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/master/raw/build/ui-bundle.zip?job=bundle-stable
supplemental_files: ./ui-overrides
runtime:
fetch: true
=====================================================
== File: docs/antora.yml
=====================================================
name: james-project
title: Apache James Server
version: '3.9.0'
prerelease: SNAPSHOT
nav:
- modules/concepts/nav.adoc
- modules/servers/nav.adoc
- modules/customization/nav.adoc
- modules/development/nav.adoc
- modules/community/nav.adoc
=====================================================
== File: testing/base/src/main/resources/logback-test.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<!-- NOTE: To activate debug mode, follow Steps 1 & 2 -->
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>target/test-run.log</file>
<append>false</append>
<!-- set immediateFlush to false for much higher logging throughput -->
<immediateFlush>false</immediateFlush>
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{35} - %msg%n%rEx</pattern>
</encoder>
</appender>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
</encoder>
<immediateFlush>false</immediateFlush>
<!-- Step 1: Disable below block for debug logs mode-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<!-- Step 2: Set log level to DEBUG-->
<root level="WARN">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
<logger name="org.apache.james" level="DEBUG" />
<logger name="org.testcontainers" level="DEBUG"/>
<logger name="org.apache.james.metrics" level="INFO"/>
</configuration>
=====================================================
== File: testing/base/src/main/resources/testcontainers.properties
=====================================================
checks.disable = false