├── .ci
├── compose.yaml
├── config-test.inc.php
├── docker-images
│ ├── Dockerfile
│ └── build.sh
├── run_browser_tests.sh
├── run_test_message_rendering.sh
└── run_tests.sh
├── .editorconfig
├── .eslintrc.js
├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.yml
│ ├── config.yml
│ └── feature_request.yml
├── dependabot.yml
└── workflows
│ ├── bot-create-manual-reminder.yml
│ ├── bot-manual-reminder.yml
│ ├── browser_tests.yml
│ ├── ci.yml
│ ├── docker_image.yml
│ ├── message_rendering.yml
│ └── tests.yml
├── .gitignore
├── .php-cs-fixer.dist.php
├── .tx
└── config
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── INSTALL
├── LICENSE
├── Makefile
├── README.md
├── RELEASE_MANAGEMENT.md
├── SECURITY.md
├── SOCIAL_WORK_GUIDELINES.md
├── SQL
├── mysql.initial.sql
├── mysql
│ ├── 2008030300.sql
│ ├── 2008040500.sql
│ ├── 2008060900.sql
│ ├── 2008092100.sql
│ ├── 2009090400.sql
│ ├── 2009103100.sql
│ ├── 2010042300.sql
│ ├── 2010100600.sql
│ ├── 2011011200.sql
│ ├── 2011092800.sql
│ ├── 2011111600.sql
│ ├── 2011121400.sql
│ ├── 2012080700.sql
│ ├── 2013011000.sql
│ ├── 2013042700.sql
│ ├── 2013052500.sql
│ ├── 2013061000.sql
│ ├── 2014042900.sql
│ ├── 2015030800.sql
│ ├── 2015111100.sql
│ ├── 2016081200.sql
│ ├── 2016100900.sql
│ ├── 2016112200.sql
│ ├── 2018021600.sql
│ ├── 2018122300.sql
│ ├── 2019092900.sql
│ ├── 2020020100.sql
│ ├── 2020020101.sql
│ ├── 2020091000.sql
│ ├── 2020122900.sql
│ ├── 2021081000.sql
│ ├── 2021100300.sql
│ ├── 2022081200.sql
│ └── 2022100100.sql
├── postgres.initial.sql
├── postgres
│ ├── 2008030300.sql
│ ├── 2008060900.sql
│ ├── 2008092100.sql
│ ├── 2009090400.sql
│ ├── 2009103100.sql
│ ├── 2010042300.sql
│ ├── 2010100600.sql
│ ├── 2011011200.sql
│ ├── 2011092800.sql
│ ├── 2011111600.sql
│ ├── 2011121400.sql
│ ├── 2012080700.sql
│ ├── 2013011000.sql
│ ├── 2013042700.sql
│ ├── 2013052500.sql
│ ├── 2013061000.sql
│ ├── 2014042900.sql
│ ├── 2015030800.sql
│ ├── 2015111100.sql
│ ├── 2016081200.sql
│ ├── 2016100900.sql
│ ├── 2016112200.sql
│ ├── 2018021600.sql
│ ├── 2018122300.sql
│ ├── 2019092900.sql
│ ├── 2020020100.sql
│ ├── 2020020101.sql
│ ├── 2020091000.sql
│ ├── 2020122900.sql
│ ├── 2021081000.sql
│ ├── 2021100300.sql
│ ├── 2022081200.sql
│ └── 2022100100.sql
├── sqlite.initial.sql
└── sqlite
│ ├── 2008030300.sql
│ ├── 2008060900.sql
│ ├── 2008092100.sql
│ ├── 2009090400.sql
│ ├── 2009103100.sql
│ ├── 2010042300.sql
│ ├── 2010100600.sql
│ ├── 2011011200.sql
│ ├── 2011092800.sql
│ ├── 2011111600.sql
│ ├── 2011121400.sql
│ ├── 2012080700.sql
│ ├── 2013011000.sql
│ ├── 2013011700.sql
│ ├── 2013042700.sql
│ ├── 2013052500.sql
│ ├── 2013061000.sql
│ ├── 2014042900.sql
│ ├── 2015030800.sql
│ ├── 2015111100.sql
│ ├── 2016081200.sql
│ ├── 2016100900.sql
│ ├── 2016112200.sql
│ ├── 2018021600.sql
│ ├── 2018122300.sql
│ ├── 2019092900.sql
│ ├── 2020020100.sql
│ ├── 2020020101.sql
│ ├── 2020091000.sql
│ ├── 2020122900.sql
│ ├── 2021081000.sql
│ ├── 2021100300.sql
│ ├── 2022081200.sql
│ └── 2022100100.sql
├── UPGRADING
├── bin
├── cleandb.sh
├── cssshrink.sh
├── decrypt.sh
├── deluser.sh
├── gc.sh
├── identity.sh
├── indexcontacts.sh
├── initdb.sh
├── install-jsdeps.sh
├── installto.sh
├── jsshrink.sh
├── makedoc.sh
├── moduserprefs.sh
├── msgexport.sh
├── msgimport.sh
├── transifexpull.sh
├── update.sh
├── updatecss.sh
└── updatedb.sh
├── composer.json
├── config
├── .htaccess
├── config.inc.php.sample
├── defaults.inc.php
└── mimetypes.php
├── index.php
├── installer
├── check.php
├── client.js
├── config.php
├── images
│ ├── add.png
│ ├── banner_gradient.gif
│ ├── banner_schraffur.gif
│ ├── delete.png
│ ├── error.png
│ └── roundcube_logo.png
├── index.php
├── styles.css
└── test.php
├── jsdeps.json
├── logs
└── .htaccess
├── package.json
├── phpstan.neon.dist
├── plugins
├── acl
│ ├── acl.js
│ ├── acl.php
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── ast.inc
│ │ ├── az_AZ.inc
│ │ ├── be_BE.inc
│ │ ├── bg_BG.inc
│ │ ├── bn_BD.inc
│ │ ├── br.inc
│ │ ├── bs_BA.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_CA.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── eo.inc
│ │ ├── es_419.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fa_AF.inc
│ │ ├── fa_IR.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hi_IN.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── hy_AM.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── ka_GE.inc
│ │ ├── kab.inc
│ │ ├── km_KH.inc
│ │ ├── kn_IN.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── ku_IQ.inc
│ │ ├── lb_LU.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── ml_IN.inc
│ │ ├── mn_MN.inc
│ │ ├── mr_IN.inc
│ │ ├── ms_MY.inc
│ │ ├── nb_NO.inc
│ │ ├── ne_NP.inc
│ │ ├── nl_BE.inc
│ │ ├── nl_NL.inc
│ │ ├── nn_NO.inc
│ │ ├── pl_PL.inc
│ │ ├── ps.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── si_LK.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── ta_IN.inc
│ │ ├── th_TH.inc
│ │ ├── ti.inc
│ │ ├── tr_TR.inc
│ │ ├── tzl.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── uz.inc
│ │ ├── vi_VN.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ ├── skins
│ │ └── elastic
│ │ │ └── templates
│ │ │ └── table.html
│ └── tests
│ │ └── AclTest.php
├── additional_message_headers
│ ├── additional_message_headers.php
│ ├── composer.json
│ ├── config.inc.php.dist
│ └── tests
│ │ └── AdditionalMessageHeadersTest.php
├── archive
│ ├── archive.js
│ ├── archive.php
│ ├── composer.json
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── ast.inc
│ │ ├── az_AZ.inc
│ │ ├── be_BE.inc
│ │ ├── bg_BG.inc
│ │ ├── bn_BD.inc
│ │ ├── br.inc
│ │ ├── bs_BA.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_CA.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── eo.inc
│ │ ├── es_419.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fa_AF.inc
│ │ ├── fa_IR.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hi_IN.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── hy_AM.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── ka_GE.inc
│ │ ├── kab.inc
│ │ ├── km_KH.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── ku_IQ.inc
│ │ ├── lb_LU.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── ml_IN.inc
│ │ ├── mn_MN.inc
│ │ ├── mr_IN.inc
│ │ ├── ms_MY.inc
│ │ ├── nb_NO.inc
│ │ ├── ne_NP.inc
│ │ ├── nl_BE.inc
│ │ ├── nl_NL.inc
│ │ ├── nn_NO.inc
│ │ ├── pl_PL.inc
│ │ ├── ps.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── si_LK.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── ta_IN.inc
│ │ ├── th_TH.inc
│ │ ├── tr_TR.inc
│ │ ├── tzl.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── uz.inc
│ │ ├── vi_VN.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ └── tests
│ │ ├── ArchiveTest.php
│ │ └── Browser
│ │ ├── MailTest.php
│ │ └── SettingsTest.php
├── attachment_reminder
│ ├── attachment_reminder.js
│ ├── attachment_reminder.php
│ ├── composer.json
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── ast.inc
│ │ ├── az_AZ.inc
│ │ ├── be_BE.inc
│ │ ├── bg_BG.inc
│ │ ├── br.inc
│ │ ├── bs_BA.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_CA.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── es_419.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fa_AF.inc
│ │ ├── fa_IR.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── kab.inc
│ │ ├── km_KH.inc
│ │ ├── kn_IN.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── ku_IQ.inc
│ │ ├── lb_LU.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── ml_IN.inc
│ │ ├── mn_MN.inc
│ │ ├── nb_NO.inc
│ │ ├── nl_BE.inc
│ │ ├── nl_NL.inc
│ │ ├── pl_PL.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── tr_TR.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── uz.inc
│ │ ├── vi_VN.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ └── tests
│ │ ├── AttachmentReminderTest.php
│ │ └── Browser
│ │ └── PluginTest.php
├── autologon
│ ├── autologon.php
│ ├── composer.json
│ └── tests
│ │ └── AutologonTest.php
├── autologout
│ ├── autologout.php
│ ├── composer.json
│ └── tests
│ │ └── AutologoutTest.php
├── database_attachments
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── database_attachments.php
│ └── tests
│ │ └── DatabaseAttachmentsTest.php
├── debug_logger
│ ├── composer.json
│ ├── debug_logger.php
│ ├── runlog
│ │ └── runlog.php
│ └── tests
│ │ └── DebugLoggerTest.php
├── emoticons
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── emoticons.php
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── bg_BG.inc
│ │ ├── br.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── ko_KR.inc
│ │ ├── ku_IQ.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── nb_NO.inc
│ │ ├── nl_BE.inc
│ │ ├── nl_NL.inc
│ │ ├── pl_PL.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── tr_TR.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── uz.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ └── tests
│ │ └── EmoticonsTest.php
├── enigma
│ ├── .gitignore
│ ├── README
│ ├── bin
│ │ └── import_keys.sh
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── enigma.js
│ ├── enigma.php
│ ├── lib
│ │ ├── enigma_driver.php
│ │ ├── enigma_driver_gnupg.php
│ │ ├── enigma_driver_phpssl.php
│ │ ├── enigma_engine.php
│ │ ├── enigma_error.php
│ │ ├── enigma_key.php
│ │ ├── enigma_mime_message.php
│ │ ├── enigma_signature.php
│ │ ├── enigma_subkey.php
│ │ ├── enigma_ui.php
│ │ └── enigma_userid.php
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── ast.inc
│ │ ├── az_AZ.inc
│ │ ├── be_BE.inc
│ │ ├── bg_BG.inc
│ │ ├── bn_BD.inc
│ │ ├── br.inc
│ │ ├── bs_BA.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_CA.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── eo.inc
│ │ ├── es_419.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fa_AF.inc
│ │ ├── fa_IR.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hi_IN.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── hy_AM.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── ka_GE.inc
│ │ ├── kab.inc
│ │ ├── km_KH.inc
│ │ ├── kn_IN.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── ku_IQ.inc
│ │ ├── lb_LU.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── ml_IN.inc
│ │ ├── mn_MN.inc
│ │ ├── mr_IN.inc
│ │ ├── ms_MY.inc
│ │ ├── nb_NO.inc
│ │ ├── ne_NP.inc
│ │ ├── nl_BE.inc
│ │ ├── nl_NL.inc
│ │ ├── nn_NO.inc
│ │ ├── pl_PL.inc
│ │ ├── ps.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── si_LK.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── ta_IN.inc
│ │ ├── th_TH.inc
│ │ ├── ti.inc
│ │ ├── tr_TR.inc
│ │ ├── tzl.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── ur_PK.inc
│ │ ├── uz.inc
│ │ ├── vi_VN.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ ├── skins
│ │ └── elastic
│ │ │ └── templates
│ │ │ ├── keycreate.html
│ │ │ ├── keyimport.html
│ │ │ ├── keyinfo.html
│ │ │ ├── keys.html
│ │ │ └── keysearch.html
│ └── tests
│ │ ├── EnigmaDriverGnupgTest.php
│ │ ├── EnigmaEngineTest.php
│ │ ├── EnigmaErrorTest.php
│ │ ├── EnigmaKeyTest.php
│ │ ├── EnigmaMimeMessageTest.php
│ │ ├── EnigmaSignatureTest.php
│ │ ├── EnigmaSubkeyTest.php
│ │ ├── EnigmaTest.php
│ │ └── EnigmaUseridTest.php
├── example_addressbook
│ ├── composer.json
│ ├── example_addressbook.php
│ ├── example_addressbook_backend.php
│ └── tests
│ │ └── ExampleAddressbookTest.php
├── filesystem_attachments
│ ├── composer.json
│ ├── filesystem_attachments.php
│ └── tests
│ │ └── FilesystemAttachmentsTest.php
├── help
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── content
│ │ └── license.html
│ ├── help.js
│ ├── help.php
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── ast.inc
│ │ ├── az_AZ.inc
│ │ ├── be_BE.inc
│ │ ├── bg_BG.inc
│ │ ├── br.inc
│ │ ├── bs_BA.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_CA.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── eo.inc
│ │ ├── es_419.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fa_AF.inc
│ │ ├── fa_IR.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── hy_AM.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── km_KH.inc
│ │ ├── kn_IN.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── ku_IQ.inc
│ │ ├── lb_LU.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── ml_IN.inc
│ │ ├── mn_MN.inc
│ │ ├── mr_IN.inc
│ │ ├── nb_NO.inc
│ │ ├── nl_BE.inc
│ │ ├── nl_NL.inc
│ │ ├── nn_NO.inc
│ │ ├── pl_PL.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── si_LK.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── th_TH.inc
│ │ ├── ti.inc
│ │ ├── tr_TR.inc
│ │ ├── tzl.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── uz.inc
│ │ ├── vi_VN.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ ├── skins
│ │ └── elastic
│ │ │ └── templates
│ │ │ ├── content.html
│ │ │ └── help.html
│ └── tests
│ │ └── HelpTest.php
├── hide_blockquote
│ ├── composer.json
│ ├── hide_blockquote.js
│ ├── hide_blockquote.php
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── ast.inc
│ │ ├── az_AZ.inc
│ │ ├── be_BE.inc
│ │ ├── bg_BG.inc
│ │ ├── bn_BD.inc
│ │ ├── br.inc
│ │ ├── bs_BA.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_CA.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── eo.inc
│ │ ├── es.inc
│ │ ├── es_419.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fa_AF.inc
│ │ ├── fa_IR.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── hy_AM.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── ka_GE.inc
│ │ ├── km_KH.inc
│ │ ├── kn_IN.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── ku_IQ.inc
│ │ ├── lb_LU.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── ml_IN.inc
│ │ ├── mn_MN.inc
│ │ ├── nb_NO.inc
│ │ ├── nl_BE.inc
│ │ ├── nl_NL.inc
│ │ ├── nn_NO.inc
│ │ ├── pl_PL.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── th_TH.inc
│ │ ├── tr_TR.inc
│ │ ├── tzl.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── ur_PK.inc
│ │ ├── uz.inc
│ │ ├── vi_VN.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ └── tests
│ │ └── HideBlockquoteTest.php
├── http_authentication
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── http_authentication.php
│ ├── logout.html
│ └── tests
│ │ └── HttpAuthenticationTest.php
├── identicon
│ ├── composer.json
│ ├── identicon.php
│ ├── identicon_engine.php
│ └── tests
│ │ ├── IdenticonEngineTest.php
│ │ └── IdenticonTest.php
├── identity_select
│ ├── composer.json
│ ├── identity_select.php
│ └── tests
│ │ └── IdentitySelectTest.php
├── jqueryui
│ ├── README
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── jqueryui.php
│ ├── js
│ │ ├── i18n
│ │ │ ├── datepicker-af.js
│ │ │ ├── datepicker-ar-DZ.js
│ │ │ ├── datepicker-ar.js
│ │ │ ├── datepicker-az.js
│ │ │ ├── datepicker-be.js
│ │ │ ├── datepicker-bg.js
│ │ │ ├── datepicker-bs.js
│ │ │ ├── datepicker-ca.js
│ │ │ ├── datepicker-cs.js
│ │ │ ├── datepicker-cy-GB.js
│ │ │ ├── datepicker-da.js
│ │ │ ├── datepicker-de-AT.js
│ │ │ ├── datepicker-de.js
│ │ │ ├── datepicker-el.js
│ │ │ ├── datepicker-en-AU.js
│ │ │ ├── datepicker-en-GB.js
│ │ │ ├── datepicker-en-NZ.js
│ │ │ ├── datepicker-eo.js
│ │ │ ├── datepicker-es.js
│ │ │ ├── datepicker-et.js
│ │ │ ├── datepicker-eu.js
│ │ │ ├── datepicker-fa.js
│ │ │ ├── datepicker-fi.js
│ │ │ ├── datepicker-fo.js
│ │ │ ├── datepicker-fr-CA.js
│ │ │ ├── datepicker-fr-CH.js
│ │ │ ├── datepicker-fr.js
│ │ │ ├── datepicker-gl.js
│ │ │ ├── datepicker-he.js
│ │ │ ├── datepicker-hi.js
│ │ │ ├── datepicker-hr.js
│ │ │ ├── datepicker-hu.js
│ │ │ ├── datepicker-hy.js
│ │ │ ├── datepicker-id.js
│ │ │ ├── datepicker-is.js
│ │ │ ├── datepicker-it-CH.js
│ │ │ ├── datepicker-it.js
│ │ │ ├── datepicker-ja.js
│ │ │ ├── datepicker-ka.js
│ │ │ ├── datepicker-kk.js
│ │ │ ├── datepicker-km.js
│ │ │ ├── datepicker-ko.js
│ │ │ ├── datepicker-ky.js
│ │ │ ├── datepicker-lb.js
│ │ │ ├── datepicker-lt.js
│ │ │ ├── datepicker-lv.js
│ │ │ ├── datepicker-mk.js
│ │ │ ├── datepicker-ml.js
│ │ │ ├── datepicker-ms.js
│ │ │ ├── datepicker-nb.js
│ │ │ ├── datepicker-nl-BE.js
│ │ │ ├── datepicker-nl.js
│ │ │ ├── datepicker-nn.js
│ │ │ ├── datepicker-no.js
│ │ │ ├── datepicker-pl.js
│ │ │ ├── datepicker-pt-BR.js
│ │ │ ├── datepicker-pt.js
│ │ │ ├── datepicker-rm.js
│ │ │ ├── datepicker-ro.js
│ │ │ ├── datepicker-ru.js
│ │ │ ├── datepicker-sk.js
│ │ │ ├── datepicker-sl.js
│ │ │ ├── datepicker-sq.js
│ │ │ ├── datepicker-sr-SR.js
│ │ │ ├── datepicker-sr.js
│ │ │ ├── datepicker-sv.js
│ │ │ ├── datepicker-ta.js
│ │ │ ├── datepicker-th.js
│ │ │ ├── datepicker-tj.js
│ │ │ ├── datepicker-tr.js
│ │ │ ├── datepicker-uk.js
│ │ │ ├── datepicker-vi.js
│ │ │ ├── datepicker-zh-CN.js
│ │ │ ├── datepicker-zh-HK.js
│ │ │ └── datepicker-zh-TW.js
│ │ ├── jquery-ui-accessible-datepicker.js
│ │ ├── jquery-ui.min.js
│ │ ├── jquery.minicolors.min.js
│ │ └── jquery.tagedit.js
│ ├── tests
│ │ └── JqueryuiTest.php
│ └── themes
│ │ └── elastic
│ │ ├── images
│ │ ├── jquery.minicolors.png
│ │ ├── ui-icons-datepicker.png
│ │ ├── ui-icons_444444_256x240.png
│ │ └── ui-icons_777777_256x240.png
│ │ ├── jquery-ui.css
│ │ ├── jquery-ui.css.diff
│ │ ├── jquery.minicolors.css
│ │ └── jquery.minicolors.css.diff
├── krb_authentication
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── krb_authentication.php
│ └── tests
│ │ └── KrbAuthenticationTest.php
├── managesieve
│ ├── Changelog
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── helpdocs
│ │ ├── en_US
│ │ │ ├── settings-filters.rst
│ │ │ └── settings-vacation.rst
│ │ └── po
│ │ │ ├── settings-filters.pot
│ │ │ └── settings-vacation.pot
│ ├── lib
│ │ └── Roundcube
│ │ │ ├── rcube_sieve.php
│ │ │ ├── rcube_sieve_engine.php
│ │ │ ├── rcube_sieve_forward.php
│ │ │ ├── rcube_sieve_script.php
│ │ │ └── rcube_sieve_vacation.php
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── ast.inc
│ │ ├── az_AZ.inc
│ │ ├── be_BE.inc
│ │ ├── bg_BG.inc
│ │ ├── bn_BD.inc
│ │ ├── br.inc
│ │ ├── bs_BA.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_CA.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── eo.inc
│ │ ├── es_419.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fa_AF.inc
│ │ ├── fa_IR.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hi_IN.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── hy_AM.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── ka_GE.inc
│ │ ├── kab.inc
│ │ ├── km_KH.inc
│ │ ├── kn_IN.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── ku_IQ.inc
│ │ ├── lb_LU.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── ml_IN.inc
│ │ ├── mn_MN.inc
│ │ ├── mr_IN.inc
│ │ ├── ms_MY.inc
│ │ ├── nb_NO.inc
│ │ ├── ne_NP.inc
│ │ ├── nl_BE.inc
│ │ ├── nl_NL.inc
│ │ ├── nn_NO.inc
│ │ ├── pl_PL.inc
│ │ ├── ps.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── si_LK.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── ta_IN.inc
│ │ ├── th_TH.inc
│ │ ├── ti.inc
│ │ ├── tr_TR.inc
│ │ ├── tzl.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── ur_PK.inc
│ │ ├── uz.inc
│ │ ├── vi_VN.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ ├── managesieve.js
│ ├── managesieve.php
│ ├── skins
│ │ └── elastic
│ │ │ └── templates
│ │ │ ├── filteredit.html
│ │ │ ├── forward.html
│ │ │ ├── managesieve.html
│ │ │ ├── setedit.html
│ │ │ ├── seteditraw.html
│ │ │ └── vacation.html
│ └── tests
│ │ ├── ManagesieveEngineTest.php
│ │ ├── ManagesieveForwardTest.php
│ │ ├── ManagesieveScriptTest.php
│ │ ├── ManagesieveTest.php
│ │ ├── ManagesieveVacationTest.php
│ │ └── src
│ │ ├── parser
│ │ ├── parser.out
│ │ ├── parser_body
│ │ ├── parser_comments
│ │ ├── parser_comments.out
│ │ ├── parser_date
│ │ ├── parser_duplicate
│ │ ├── parser_editheader
│ │ ├── parser_enotify_a
│ │ ├── parser_enotify_b
│ │ ├── parser_imapflags
│ │ ├── parser_include
│ │ ├── parser_index
│ │ ├── parser_kep14
│ │ ├── parser_kep14.out
│ │ ├── parser_nesting
│ │ ├── parser_nesting.out
│ │ ├── parser_notify_a
│ │ ├── parser_notify_b
│ │ ├── parser_prefix
│ │ ├── parser_relational
│ │ ├── parser_spamtest
│ │ ├── parser_subaddress
│ │ ├── parser_vacation
│ │ ├── parser_vacation_seconds
│ │ └── parser_variables
├── markasjunk
│ ├── README.md
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── drivers
│ │ ├── amavis_blacklist.php
│ │ ├── cmd_learn.php
│ │ ├── dir_learn.php
│ │ ├── edit_headers.php
│ │ ├── email_learn.php
│ │ ├── jsevent.php
│ │ ├── sa_blacklist.php
│ │ └── sa_detach.php
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── bg_BG.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fi_FI.inc
│ │ ├── fr_FR.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── nb_NO.inc
│ │ ├── nl_NL.inc
│ │ ├── pl_PL.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ru_RU.inc
│ │ ├── sk_SK.inc
│ │ ├── sq_AL.inc
│ │ ├── sv_SE.inc
│ │ ├── tr_TR.inc
│ │ ├── ug.inc
│ │ └── zh_TW.inc
│ ├── markasjunk.js
│ ├── markasjunk.php
│ └── tests
│ │ ├── Browser
│ │ └── MailTest.php
│ │ └── MarkasjunkTest.php
├── new_user_dialog
│ ├── composer.json
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── ast.inc
│ │ ├── az_AZ.inc
│ │ ├── be_BE.inc
│ │ ├── bg_BG.inc
│ │ ├── br.inc
│ │ ├── bs_BA.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_CA.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── eo.inc
│ │ ├── es.inc
│ │ ├── es_419.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fa_AF.inc
│ │ ├── fa_IR.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── hy_AM.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── km_KH.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── ku_IQ.inc
│ │ ├── lb_LU.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── ml_IN.inc
│ │ ├── mn_MN.inc
│ │ ├── mr_IN.inc
│ │ ├── nb_NO.inc
│ │ ├── nl_BE.inc
│ │ ├── nl_NL.inc
│ │ ├── nn_NO.inc
│ │ ├── pl_PL.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── th_TH.inc
│ │ ├── tr_TR.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── vi_VN.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ ├── new_user_dialog.php
│ └── tests
│ │ └── NewUserDialogTest.php
├── new_user_identity
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── new_user_identity.php
│ └── tests
│ │ └── NewUserIdentityTest.php
├── newmail_notifier
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── favicon.ico
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── ast.inc
│ │ ├── az_AZ.inc
│ │ ├── be_BE.inc
│ │ ├── bg_BG.inc
│ │ ├── br.inc
│ │ ├── bs_BA.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_CA.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── eo.inc
│ │ ├── es_419.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fa_IR.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── hy_AM.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── km_KH.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── ku_IQ.inc
│ │ ├── lb_LU.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── ml_IN.inc
│ │ ├── mn_MN.inc
│ │ ├── mr_IN.inc
│ │ ├── nb_NO.inc
│ │ ├── nl_BE.inc
│ │ ├── nl_NL.inc
│ │ ├── nn_NO.inc
│ │ ├── pl_PL.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── si_LK.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── th_TH.inc
│ │ ├── ti.inc
│ │ ├── tr_TR.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── uz.inc
│ │ ├── vi_VN.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ ├── mail.png
│ ├── newmail_notifier.js
│ ├── newmail_notifier.php
│ ├── overlay.ico
│ ├── sound.mp3
│ ├── sound.wav
│ └── tests
│ │ └── NewmailNotifierTest.php
├── password
│ ├── README
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── drivers
│ │ ├── chpasswd.php
│ │ ├── cpanel.php
│ │ ├── dbmail.php
│ │ ├── directadmin.php
│ │ ├── domainfactory.php
│ │ ├── dovecot_passwdfile.php
│ │ ├── expect.php
│ │ ├── gearman.php
│ │ ├── hmail.php
│ │ ├── httpapi.php
│ │ ├── kpasswd.php
│ │ ├── ldap.php
│ │ ├── ldap_exop.php
│ │ ├── ldap_ppolicy.php
│ │ ├── ldap_samba_ad.php
│ │ ├── ldap_simple.php
│ │ ├── mailcow.php
│ │ ├── miab.php
│ │ ├── modoboa.php
│ │ ├── pam.php
│ │ ├── plesk.php
│ │ ├── poppassd.php
│ │ ├── pw_usermod.php
│ │ ├── pwned.php
│ │ ├── sasl.php
│ │ ├── smb.php
│ │ ├── sql.php
│ │ ├── tinycp.php
│ │ ├── virtualmin.php
│ │ ├── vpopmaild.php
│ │ ├── ximss.php
│ │ ├── xmail.php
│ │ └── zxcvbn.php
│ ├── helpers
│ │ ├── change_ldap_pass.pl
│ │ ├── chgdbmailusers.c
│ │ ├── chgsaslpasswd.c
│ │ ├── chgvirtualminpasswd.c
│ │ ├── chpass-wrapper.py
│ │ └── passwd-expect
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── ast.inc
│ │ ├── az_AZ.inc
│ │ ├── be_BE.inc
│ │ ├── bg_BG.inc
│ │ ├── br.inc
│ │ ├── bs_BA.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_CA.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── eo.inc
│ │ ├── es_419.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fa_AF.inc
│ │ ├── fa_IR.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── hy_AM.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── kab.inc
│ │ ├── km_KH.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── ku_IQ.inc
│ │ ├── lb_LU.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── ml_IN.inc
│ │ ├── mn_MN.inc
│ │ ├── nb_NO.inc
│ │ ├── nl_BE.inc
│ │ ├── nl_NL.inc
│ │ ├── nn_NO.inc
│ │ ├── pl_PL.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── th_TH.inc
│ │ ├── ti.inc
│ │ ├── tr_TR.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── uz.inc
│ │ ├── vi_VN.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ ├── password.js
│ ├── password.php
│ └── tests
│ │ └── PasswordTest.php
├── reconnect
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── readme.md
│ ├── reconnect.php
│ └── tests
│ │ └── ReconnectTest.php
├── redundant_attachments
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── redundant_attachments.php
│ └── tests
│ │ └── RedundantAttachmentsTest.php
├── show_additional_headers
│ ├── composer.json
│ ├── show_additional_headers.php
│ └── tests
│ │ └── ShowAdditionalHeadersTest.php
├── squirrelmail_usercopy
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── squirrelmail_usercopy.php
│ └── tests
│ │ └── SquirrelmailUsercopyTest.php
├── subscriptions_option
│ ├── composer.json
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── ast.inc
│ │ ├── az_AZ.inc
│ │ ├── be_BE.inc
│ │ ├── bg_BG.inc
│ │ ├── br.inc
│ │ ├── bs_BA.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_CA.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── eo.inc
│ │ ├── es.inc
│ │ ├── es_419.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fa_AF.inc
│ │ ├── fa_IR.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── hy_AM.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── km_KH.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── lb_LU.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── ml_IN.inc
│ │ ├── mn_MN.inc
│ │ ├── nb_NO.inc
│ │ ├── nl_NL.inc
│ │ ├── nn_NO.inc
│ │ ├── pl_PL.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── th_TH.inc
│ │ ├── tr_TR.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── uz.inc
│ │ ├── vi_VN.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ ├── subscriptions_option.php
│ └── tests
│ │ └── SubscriptionsOptionTest.php
├── userinfo
│ ├── composer.json
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── ast.inc
│ │ ├── az_AZ.inc
│ │ ├── be_BE.inc
│ │ ├── bg_BG.inc
│ │ ├── br.inc
│ │ ├── bs_BA.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_CA.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── eo.inc
│ │ ├── es_419.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fa_AF.inc
│ │ ├── fa_IR.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── hy_AM.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── km_KH.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── ku_IQ.inc
│ │ ├── lb_LU.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── ml_IN.inc
│ │ ├── mn_MN.inc
│ │ ├── mr_IN.inc
│ │ ├── nb_NO.inc
│ │ ├── nl_BE.inc
│ │ ├── nl_NL.inc
│ │ ├── nn_NO.inc
│ │ ├── pl_PL.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── th_TH.inc
│ │ ├── ti.inc
│ │ ├── tr_TR.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── uz.inc
│ │ ├── vi_VN.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ ├── tests
│ │ └── UserinfoTest.php
│ └── userinfo.php
├── vcard_attachments
│ ├── composer.json
│ ├── localization
│ │ ├── ar.inc
│ │ ├── ar_SA.inc
│ │ ├── ast.inc
│ │ ├── az_AZ.inc
│ │ ├── be_BE.inc
│ │ ├── bg_BG.inc
│ │ ├── br.inc
│ │ ├── bs_BA.inc
│ │ ├── ca_ES.inc
│ │ ├── cs_CZ.inc
│ │ ├── cy_GB.inc
│ │ ├── da_DK.inc
│ │ ├── de_CH.inc
│ │ ├── de_DE.inc
│ │ ├── el_GR.inc
│ │ ├── en_CA.inc
│ │ ├── en_GB.inc
│ │ ├── en_US.inc
│ │ ├── eo.inc
│ │ ├── es_419.inc
│ │ ├── es_AR.inc
│ │ ├── es_ES.inc
│ │ ├── et_EE.inc
│ │ ├── eu_ES.inc
│ │ ├── fa_IR.inc
│ │ ├── fi_FI.inc
│ │ ├── fo_FO.inc
│ │ ├── fr_FR.inc
│ │ ├── fy_NL.inc
│ │ ├── ga_IE.inc
│ │ ├── gl_ES.inc
│ │ ├── he_IL.inc
│ │ ├── hr_HR.inc
│ │ ├── hu_HU.inc
│ │ ├── hy_AM.inc
│ │ ├── ia.inc
│ │ ├── id_ID.inc
│ │ ├── is_IS.inc
│ │ ├── it_IT.inc
│ │ ├── ja_JP.inc
│ │ ├── km_KH.inc
│ │ ├── ko_KR.inc
│ │ ├── ku.inc
│ │ ├── lb_LU.inc
│ │ ├── lt_LT.inc
│ │ ├── lv_LV.inc
│ │ ├── mk_MK.inc
│ │ ├── ml_IN.inc
│ │ ├── mn_MN.inc
│ │ ├── mr_IN.inc
│ │ ├── nb_NO.inc
│ │ ├── nl_NL.inc
│ │ ├── nn_NO.inc
│ │ ├── pl_PL.inc
│ │ ├── pt_BR.inc
│ │ ├── pt_PT.inc
│ │ ├── ro_RO.inc
│ │ ├── ru_RU.inc
│ │ ├── si_LK.inc
│ │ ├── sk_SK.inc
│ │ ├── sl_SI.inc
│ │ ├── sq_AL.inc
│ │ ├── sr_CS.inc
│ │ ├── sv_SE.inc
│ │ ├── th_TH.inc
│ │ ├── tr_TR.inc
│ │ ├── ug.inc
│ │ ├── uk_UA.inc
│ │ ├── uz.inc
│ │ ├── vi_VN.inc
│ │ ├── zh_CN.inc
│ │ └── zh_TW.inc
│ ├── tests
│ │ └── VcardAttachmentsTest.php
│ ├── vcard_attachments.php
│ └── vcardattach.js
├── virtuser_file
│ ├── composer.json
│ ├── tests
│ │ └── VirtuserFileTest.php
│ └── virtuser_file.php
├── virtuser_query
│ ├── composer.json
│ ├── tests
│ │ └── VirtuserQueryTest.php
│ └── virtuser_query.php
└── zipdownload
│ ├── README
│ ├── composer.json
│ ├── config.inc.php.dist
│ ├── localization
│ ├── ar.inc
│ ├── ar_SA.inc
│ ├── ast.inc
│ ├── az_AZ.inc
│ ├── be_BE.inc
│ ├── bg_BG.inc
│ ├── br.inc
│ ├── bs_BA.inc
│ ├── ca_ES.inc
│ ├── cs_CZ.inc
│ ├── cy_GB.inc
│ ├── da_DK.inc
│ ├── de_CH.inc
│ ├── de_DE.inc
│ ├── el_GR.inc
│ ├── en_CA.inc
│ ├── en_GB.inc
│ ├── en_US.inc
│ ├── eo.inc
│ ├── es_419.inc
│ ├── es_AR.inc
│ ├── es_ES.inc
│ ├── et_EE.inc
│ ├── eu_ES.inc
│ ├── fa_AF.inc
│ ├── fa_IR.inc
│ ├── fi_FI.inc
│ ├── fo_FO.inc
│ ├── fr_FR.inc
│ ├── fy_NL.inc
│ ├── ga_IE.inc
│ ├── gl_ES.inc
│ ├── he_IL.inc
│ ├── hr_HR.inc
│ ├── hu_HU.inc
│ ├── hy_AM.inc
│ ├── ia.inc
│ ├── id_ID.inc
│ ├── is_IS.inc
│ ├── it_IT.inc
│ ├── ja_JP.inc
│ ├── km_KH.inc
│ ├── ko_KR.inc
│ ├── ku.inc
│ ├── ku_IQ.inc
│ ├── lb_LU.inc
│ ├── lt_LT.inc
│ ├── lv_LV.inc
│ ├── mk_MK.inc
│ ├── ml_IN.inc
│ ├── mn_MN.inc
│ ├── nb_NO.inc
│ ├── nl_NL.inc
│ ├── nn_NO.inc
│ ├── pl_PL.inc
│ ├── pt_BR.inc
│ ├── pt_PT.inc
│ ├── ro_RO.inc
│ ├── ru_RU.inc
│ ├── sk_SK.inc
│ ├── sl_SI.inc
│ ├── sq_AL.inc
│ ├── sr_CS.inc
│ ├── sv_SE.inc
│ ├── th_TH.inc
│ ├── tr_TR.inc
│ ├── ug.inc
│ ├── uk_UA.inc
│ ├── uz.inc
│ ├── vi_VN.inc
│ ├── zh_CN.inc
│ └── zh_TW.inc
│ ├── tests
│ ├── Browser
│ │ └── MailTest.php
│ └── ZipdownloadTest.php
│ ├── zipdownload.js
│ └── zipdownload.php
├── program
├── actions
│ ├── contacts
│ │ ├── copy.php
│ │ ├── delete.php
│ │ ├── edit.php
│ │ ├── export.php
│ │ ├── group_addmembers.php
│ │ ├── group_create.php
│ │ ├── group_delete.php
│ │ ├── group_delmembers.php
│ │ ├── group_rename.php
│ │ ├── import.php
│ │ ├── index.php
│ │ ├── list.php
│ │ ├── mailto.php
│ │ ├── move.php
│ │ ├── photo.php
│ │ ├── print.php
│ │ ├── qrcode.php
│ │ ├── save.php
│ │ ├── search.php
│ │ ├── search_create.php
│ │ ├── search_delete.php
│ │ ├── show.php
│ │ ├── undo.php
│ │ └── upload_photo.php
│ ├── login
│ │ ├── oauth.php
│ │ └── oauth_backchannel.php
│ ├── mail
│ │ ├── addcontact.php
│ │ ├── attachment_delete.php
│ │ ├── attachment_display.php
│ │ ├── attachment_rename.php
│ │ ├── attachment_upload.php
│ │ ├── autocomplete.php
│ │ ├── bounce.php
│ │ ├── check_recent.php
│ │ ├── compose.php
│ │ ├── copy.php
│ │ ├── delete.php
│ │ ├── folder_expunge.php
│ │ ├── folder_purge.php
│ │ ├── get.php
│ │ ├── getunread.php
│ │ ├── group_expand.php
│ │ ├── headers.php
│ │ ├── import.php
│ │ ├── index.php
│ │ ├── list.php
│ │ ├── list_contacts.php
│ │ ├── mark.php
│ │ ├── move.php
│ │ ├── pagenav.php
│ │ ├── search.php
│ │ ├── search_contacts.php
│ │ ├── send.php
│ │ ├── sendmdn.php
│ │ ├── show.php
│ │ └── viewsource.php
│ ├── settings
│ │ ├── about.php
│ │ ├── folder_create.php
│ │ ├── folder_delete.php
│ │ ├── folder_edit.php
│ │ ├── folder_purge.php
│ │ ├── folder_rename.php
│ │ ├── folder_save.php
│ │ ├── folder_size.php
│ │ ├── folder_subscribe.php
│ │ ├── folder_unsubscribe.php
│ │ ├── folders.php
│ │ ├── identities.php
│ │ ├── identity_create.php
│ │ ├── identity_delete.php
│ │ ├── identity_edit.php
│ │ ├── identity_save.php
│ │ ├── index.php
│ │ ├── prefs_edit.php
│ │ ├── prefs_save.php
│ │ ├── response_create.php
│ │ ├── response_delete.php
│ │ ├── response_edit.php
│ │ ├── response_get.php
│ │ ├── response_save.php
│ │ ├── responses.php
│ │ ├── upload.php
│ │ └── upload_display.php
│ └── utils
│ │ ├── error.php
│ │ ├── html2text.php
│ │ ├── killcache.php
│ │ ├── modcss.php
│ │ ├── save_pref.php
│ │ ├── spell.php
│ │ ├── spell_html.php
│ │ └── text2html.php
├── include
│ ├── clisetup.php
│ ├── iniset.php
│ ├── rcmail.php
│ ├── rcmail_action.php
│ ├── rcmail_attachment_handler.php
│ ├── rcmail_html_page.php
│ ├── rcmail_install.php
│ ├── rcmail_oauth.php
│ ├── rcmail_output.php
│ ├── rcmail_output_cli.php
│ ├── rcmail_output_html.php
│ ├── rcmail_output_json.php
│ ├── rcmail_resend_mail.php
│ ├── rcmail_sendmail.php
│ ├── rcmail_string_replacer.php
│ └── rcmail_utils.php
├── js
│ ├── app.js
│ ├── common.js
│ ├── editor.js
│ ├── googiespell.js
│ ├── list.js
│ └── treelist.js
├── lib
│ └── Roundcube
│ │ ├── README.md
│ │ ├── bootstrap.php
│ │ ├── cache
│ │ ├── apcu.php
│ │ ├── db.php
│ │ ├── memcache.php
│ │ ├── memcached.php
│ │ └── redis.php
│ │ ├── db
│ │ ├── mysql.php
│ │ ├── param.php
│ │ ├── pgsql.php
│ │ └── sqlite.php
│ │ ├── html.php
│ │ ├── rcube.php
│ │ ├── rcube_addressbook.php
│ │ ├── rcube_addresses.php
│ │ ├── rcube_base_replacer.php
│ │ ├── rcube_browser.php
│ │ ├── rcube_cache.php
│ │ ├── rcube_charset.php
│ │ ├── rcube_config.php
│ │ ├── rcube_contacts.php
│ │ ├── rcube_content_filter.php
│ │ ├── rcube_csv2vcard.php
│ │ ├── rcube_db.php
│ │ ├── rcube_enriched.php
│ │ ├── rcube_html2text.php
│ │ ├── rcube_image.php
│ │ ├── rcube_imap.php
│ │ ├── rcube_imap_cache.php
│ │ ├── rcube_imap_generic.php
│ │ ├── rcube_imap_search.php
│ │ ├── rcube_ldap.php
│ │ ├── rcube_ldap_generic.php
│ │ ├── rcube_message.php
│ │ ├── rcube_message_header.php
│ │ ├── rcube_message_part.php
│ │ ├── rcube_mime.php
│ │ ├── rcube_mime_decode.php
│ │ ├── rcube_output.php
│ │ ├── rcube_plugin.php
│ │ ├── rcube_plugin_api.php
│ │ ├── rcube_result_index.php
│ │ ├── rcube_result_multifolder.php
│ │ ├── rcube_result_set.php
│ │ ├── rcube_result_thread.php
│ │ ├── rcube_session.php
│ │ ├── rcube_smtp.php
│ │ ├── rcube_spellchecker.php
│ │ ├── rcube_spoofchecker.php
│ │ ├── rcube_storage.php
│ │ ├── rcube_string_replacer.php
│ │ ├── rcube_text2html.php
│ │ ├── rcube_tnef_decoder.php
│ │ ├── rcube_uploads.php
│ │ ├── rcube_user.php
│ │ ├── rcube_utils.php
│ │ ├── rcube_vcard.php
│ │ ├── rcube_washtml.php
│ │ ├── session
│ │ ├── db.php
│ │ ├── memcache.php
│ │ ├── memcached.php
│ │ ├── php.php
│ │ └── redis.php
│ │ └── spellchecker
│ │ ├── atd.php
│ │ ├── enchant.php
│ │ ├── engine.php
│ │ ├── googie.php
│ │ └── pspell.php
├── localization
│ ├── ar
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── ar_SA
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── ast
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── az_AZ
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── be_BE
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── ber
│ │ └── labels.inc
│ ├── bg_BG
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── bn_BD
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── br
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── bs_BA
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── ca_ES
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── cs_CZ
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── cy_GB
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── da_DK
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── de_CH
│ │ ├── csv2vcard.inc
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── de_DE
│ │ ├── csv2vcard.inc
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── el_GR
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── en_CA
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── en_GB
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── en_US
│ │ ├── csv2vcard.inc
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── eo
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── es_419
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── es_AR
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── es_ES
│ │ ├── csv2vcard.inc
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── et_EE
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── eu_ES
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── fa_AF
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── fa_IR
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── fi_FI
│ │ ├── csv2vcard.inc
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── fo_FO
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── fr_FR
│ │ ├── csv2vcard.inc
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── fy_NL
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── ga_IE
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── gl_ES
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── he_IL
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── hi_IN
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── hr_HR
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── hu_HU
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── hy_AM
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── ia
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── id_ID
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── index.inc
│ ├── is_IS
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── it_IT
│ │ ├── csv2vcard.inc
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── ja_JP
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── ka_GE
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── kab
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── km_KH
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── kn_IN
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── ko_KR
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── ku
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── ku_IQ
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── lb_LU
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── lt_LT
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── lv_LV
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── mk_MK
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── ml_IN
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── mn_MN
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── mr_IN
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── ms_MY
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── nb_NO
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── ne_NP
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── nl_BE
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── nl_NL
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── nn_NO
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── pl_PL
│ │ ├── csv2vcard.inc
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── ps
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── pt_BR
│ │ ├── csv2vcard.inc
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── pt_PT
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── ro_RO
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── ru_RU
│ │ ├── csv2vcard.inc
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── si_LK
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── sk_SK
│ │ ├── csv2vcard.inc
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── sl_SI
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── sq_AL
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── sr_CS
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── sv_SE
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── ta_IN
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── th_TH
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── ti
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── tr_TR
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── tzl
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── ug
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── uk_UA
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── ur_PK
│ │ └── labels.inc
│ ├── uz
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
│ ├── vi_VN
│ │ ├── labels.inc
│ │ └── messages.inc
│ ├── zh_CN
│ │ ├── labels.inc
│ │ └── messages.inc
│ └── zh_TW
│ │ ├── csv2vcard.inc
│ │ ├── labels.inc
│ │ ├── messages.inc
│ │ └── timezones.inc
└── resources
│ ├── blank.gif
│ ├── blank.tiff
│ ├── blank.webp
│ ├── blocked.gif
│ ├── dummy.pdf
│ ├── error.html
│ └── tinymce
│ ├── browser.css
│ ├── content.css
│ └── video.png
├── public_html
├── .htaccess
├── index.php
├── installer.php
└── static.php
├── skins
└── elastic
│ ├── .gitignore
│ ├── Makefile
│ ├── README.md
│ ├── fonts
│ ├── fa-regular-400.woff
│ ├── fa-regular-400.woff2
│ ├── fa-solid-900.woff
│ ├── fa-solid-900.woff2
│ ├── roboto-v29-italic-700.woff
│ ├── roboto-v29-italic-700.woff2
│ ├── roboto-v29-italic.woff
│ ├── roboto-v29-italic.woff2
│ ├── roboto-v29-regular-700.woff
│ ├── roboto-v29-regular-700.woff2
│ ├── roboto-v29-regular.woff
│ └── roboto-v29-regular.woff2
│ ├── images
│ ├── contactgroup.svg
│ ├── contactpic.svg
│ ├── corner-handle.svg
│ ├── download.svg
│ ├── favicon.ico
│ ├── google-icon.svg
│ ├── logo.svg
│ └── microsoft-icon.svg
│ ├── meta.json
│ ├── styles
│ ├── colors.less
│ ├── dark.less
│ ├── embed.less
│ ├── fontawesome.less
│ ├── global.less
│ ├── layout.less
│ ├── mixins.less
│ ├── print.less
│ ├── styles.less
│ ├── variables.less
│ └── widgets
│ │ ├── buttons.less
│ │ ├── common.less
│ │ ├── dialogs.less
│ │ ├── editor.less
│ │ ├── forms.less
│ │ ├── jqueryui.less
│ │ ├── lists.less
│ │ ├── menu.less
│ │ └── messages.less
│ ├── templates
│ ├── about.html
│ ├── addressbook.html
│ ├── bounce.html
│ ├── compose.html
│ ├── contact.html
│ ├── contactedit.html
│ ├── contactimport.html
│ ├── contactprint.html
│ ├── contactsearch.html
│ ├── dialog.html
│ ├── error.html
│ ├── folderedit.html
│ ├── folders.html
│ ├── identities.html
│ ├── identityedit.html
│ ├── includes
│ │ ├── footer.html
│ │ ├── layout.html
│ │ ├── mail-menu.html
│ │ ├── menu.html
│ │ ├── pagenav.html
│ │ └── settings-menu.html
│ ├── login.html
│ ├── mail.html
│ ├── message.html
│ ├── messagepart.html
│ ├── messageprint.html
│ ├── plugin.html
│ ├── responseedit.html
│ ├── responses.html
│ ├── settings.html
│ └── settingsedit.html
│ ├── thumbnail.png
│ ├── ui.js
│ └── watermark.html
├── temp
└── .htaccess
└── tests
├── .gitattributes
├── ActionTestCase.php
├── Actions
├── Contacts
│ ├── CopyTest.php
│ ├── DeleteTest.php
│ ├── EditTest.php
│ ├── ExportTest.php
│ ├── Group_AddmembersTest.php
│ ├── Group_CreateTest.php
│ ├── Group_DeleteTest.php
│ ├── Group_DelmembersTest.php
│ ├── Group_RenameTest.php
│ ├── ImportTest.php
│ ├── IndexTest.php
│ ├── ListTest.php
│ ├── MailtoTest.php
│ ├── MoveTest.php
│ ├── PhotoTest.php
│ ├── PrintTest.php
│ ├── QrcodeTest.php
│ ├── SaveTest.php
│ ├── SearchTest.php
│ ├── Search_CreateTest.php
│ ├── Search_DeleteTest.php
│ ├── ShowTest.php
│ ├── UndoTest.php
│ └── Upload_PhotoTest.php
├── Login
│ └── OauthTest.php
├── Mail
│ ├── AddcontactTest.php
│ ├── AttachmentDeleteTest.php
│ ├── AttachmentDisplayTest.php
│ ├── AttachmentRenameTest.php
│ ├── AttachmentUploadTest.php
│ ├── AutocompleteTest.php
│ ├── BounceTest.php
│ ├── CheckRecentTest.php
│ ├── ComposeTest.php
│ ├── CopyTest.php
│ ├── DeleteTest.php
│ ├── FolderExpungeTest.php
│ ├── FolderPurgeTest.php
│ ├── GetTest.php
│ ├── GetunreadTest.php
│ ├── GroupExpandTest.php
│ ├── HeadersTest.php
│ ├── ImportTest.php
│ ├── IndexTest.php
│ ├── ListContactsTest.php
│ ├── ListTest.php
│ ├── MarkTest.php
│ ├── MoveTest.php
│ ├── PagenavTest.php
│ ├── SearchContactsTest.php
│ ├── SearchTest.php
│ ├── SendTest.php
│ ├── SendmdnTest.php
│ ├── ShowTest.php
│ └── ViewsourceTest.php
├── Settings
│ ├── AboutTest.php
│ ├── FolderCreateTest.php
│ ├── FolderDeleteTest.php
│ ├── FolderEditTest.php
│ ├── FolderPurgeTest.php
│ ├── FolderRenameTest.php
│ ├── FolderSaveTest.php
│ ├── FolderSizeTest.php
│ ├── FolderSubscribeTest.php
│ ├── FolderUnsubscribeTest.php
│ ├── FoldersTest.php
│ ├── IdentitiesTest.php
│ ├── IdentityCreateTest.php
│ ├── IdentityDeleteTest.php
│ ├── IdentityEditTest.php
│ ├── IdentitySaveTest.php
│ ├── IndexTest.php
│ ├── PrefsEditTest.php
│ ├── PrefsSaveTest.php
│ ├── ResponseCreateTest.php
│ ├── ResponseDeleteTest.php
│ ├── ResponseEditTest.php
│ ├── ResponseGetTest.php
│ ├── ResponseSaveTest.php
│ ├── ResponsesTest.php
│ ├── UploadDisplayTest.php
│ └── UploadTest.php
└── Utils
│ ├── ErrorTest.php
│ ├── Html2textTest.php
│ ├── KillcacheTest.php
│ ├── ModcssTest.php
│ ├── SavePrefTest.php
│ ├── SpellHtmlTest.php
│ ├── SpellTest.php
│ └── Text2htmlTest.php
├── Browser
├── Browser.php
├── Components
│ ├── App.php
│ ├── Dialog.php
│ ├── HtmlEditor.php
│ ├── Popupmenu.php
│ ├── RecipientInput.php
│ ├── Taskmenu.php
│ └── Toolbarmenu.php
├── Contacts
│ ├── ContactsTest.php
│ ├── ExportTest.php
│ ├── GroupsTest.php
│ ├── ImportTest.php
│ └── PrintTest.php
├── Logon
│ ├── LoginTest.php
│ └── LogoutTest.php
├── Mail
│ ├── ComposeTest.php
│ ├── GetunreadTest.php
│ ├── ListTest.php
│ ├── MailTest.php
│ ├── OpenTest.php
│ ├── PreviewTest.php
│ └── PrintTest.php
├── README.md
├── Settings
│ ├── AboutTest.php
│ ├── FoldersTest.php
│ ├── IdentitiesTest.php
│ ├── Preferences
│ │ ├── GeneralTest.php
│ │ └── ServerTest.php
│ ├── PreferencesTest.php
│ ├── ResponsesTest.php
│ └── SettingsTest.php
├── TestCase.php
├── bootstrap.php
├── data
│ ├── contacts.vcf
│ ├── data.sql
│ └── mail
│ │ ├── list_00.eml
│ │ └── list_01.eml
├── downloads
│ └── .keep
├── install.php
└── phpunit.xml
├── ExitException.php
├── Framework
├── AddressbookTest.php
├── AddressesTest.php
├── BaseReplacerTest.php
├── BootstrapTest.php
├── BrowserTest.php
├── CacheDBTest.php
├── CacheTest.php
├── CharsetTest.php
├── ConfigTest.php
├── ContactsTest.php
├── ContentFilterTest.php
├── Csv2vcardTest.php
├── DBMysqlTest.php
├── DBPgsqlTest.php
├── DBSqliteTest.php
├── DBTest.php
├── EnrichedTest.php
├── Html2textTest.php
├── HtmlCheckboxTest.php
├── HtmlTest.php
├── ImageTest.php
├── ImapCacheTest.php
├── ImapGenericTest.php
├── ImapSearchTest.php
├── ImapTest.php
├── LdapGenericTest.php
├── LdapTest.php
├── MessageHeaderTest.php
├── MessagePartTest.php
├── MessageTest.php
├── MimeDecodeTest.php
├── MimeTest.php
├── OutputTest.php
├── PluginApiTest.php
├── RcubeTest.php
├── ResultIndexTest.php
├── ResultMultifolderTest.php
├── ResultSetTest.php
├── ResultThreadTest.php
├── SessionTest.php
├── SmtpTest.php
├── SpellcheckerAtdTest.php
├── SpellcheckerEnchantTest.php
├── SpellcheckerGoogieTest.php
├── SpellcheckerPspellTest.php
├── SpellcheckerTest.php
├── SpoofcheckerTest.php
├── StringReplacerTest.php
├── Text2HtmlTest.php
├── TnefDecoderTest.php
├── UserTest.php
├── UtilsTest.php
├── VCardTest.php
└── WashtmlTest.php
├── HttpClientMock.php
├── MessageRendering
├── .gitignore
├── BasicMessagesTest.php
├── InlineImageTest.php
├── MessageRenderingTestCase.php
├── MessageRfc822Test.php
├── SingleAttachedImageNoTextTest.php
├── TnefEmailsTest.php
├── bootstrap.php
├── data
│ └── greenmail
│ │ └── test-message-rendering@localhost
│ │ └── INBOX
│ │ ├── attached-image-with-content-id-in-multipart-alternative.eml
│ │ ├── attached-image-with-content-id.eml
│ │ ├── attachment-gh9443.eml
│ │ ├── filename.eml
│ │ ├── fwd_lines.eml
│ │ ├── list_00.eml
│ │ ├── list_01.eml
│ │ ├── spam-with-image-data-uri.eml
│ │ ├── tnef1.eml
│ │ ├── tnef2.eml
│ │ └── tnef3.eml
└── phpunit.xml
├── OutputHtmlMock.php
├── OutputJsonMock.php
├── Public
├── InstallerTest.php
└── StaticTest.php
├── Rcmail
├── ActionTest.php
├── AttachmentHandlerTest.php
├── HtmlPageTest.php
├── InstallTest.php
├── OauthTest.php
├── OutputCliTest.php
├── OutputHtmlTest.php
├── OutputJsonTest.php
├── RcmailTest.php
├── ResendMailTest.php
├── SendmailTest.php
├── StringReplacerTest.php
└── UtilsTest.php
├── ServerTestCase.php
├── StderrMock.php
├── StorageMock.php
├── bootstrap.php
├── phpunit.xml
└── src
├── BID-26800.txt
├── Csv2vcard
├── email.csv
├── email.vcf
├── gmail.csv
├── gmail.vcf
├── outlook.csv
├── outlook.vcf
├── tb_plain.csv
└── tb_plain.vcf
├── apple.vcf
├── body.tnef
├── filename.eml
├── format-flowed-unfolded.txt
├── format-flowed.txt
├── html.msg
├── htmlbase.txt
├── htmlbody.txt
├── htmlcom.txt
├── htmlxss.txt
├── imap_thread.txt
├── import.mbox
├── invalidchars.html
├── johndoe.vcf
├── mail0.eml
├── mailto.txt
├── media.css
├── one-file.tnef
├── photo.vcf
├── plainbody.txt
├── sample.rtf
├── sql
├── contacts.sql
├── identities.sql
├── init.sql
├── responses.sql
└── searches.sql
├── test.base64
├── test.pdf
├── test.uuencode
├── thebat.vcf
├── utf-16_sample.vcf
└── valid.css
/.ci/docker-images/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | case "$1" in
4 | 8.1|8.3)
5 | phpversion="$1"
6 | ;;
7 | *)
8 | echo "Error: first and only argument must be the wanted PHP version."
9 | echo "Usage: $(basename $0) 8.1|8.3"
10 | exit 1
11 | ;;
12 | esac
13 |
14 | exec docker build --build-arg "PHPVERSION=$phpversion" -f "$(realpath $(dirname $0)/Dockerfile)" -t "ghcr.io/pabzm/roundcubemail-testrunner:php$phpversion" "$(realpath $(dirname $0)/../../..)"
15 |
--------------------------------------------------------------------------------
/.ci/run_test_message_rendering.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash -ex
2 |
3 | if ! test -f config/config-test.inc.php; then
4 | cp -v .ci/config-test.inc.php config/config-test.inc.php
5 | fi
6 |
7 | # Install dependencies, prefer highest.
8 | composer update --prefer-dist --no-interaction --no-progress
9 |
10 | # Execute tests.
11 | vendor/bin/phpunit -c ./tests/MessageRendering/phpunit.xml --fail-on-warning --fail-on-risky
12 |
--------------------------------------------------------------------------------
/.ci/run_tests.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash -ex
2 |
3 | if ! test -f config/config-test.inc.php; then
4 | cp -v .ci/config-test.inc.php config/config-test.inc.php
5 | fi
6 |
7 | composer require "kolab/net_ldap3:~1.1.4" --no-update
8 |
9 | # Install dependencies, prefer highest.
10 | composer update --prefer-dist --no-interaction --no-progress
11 |
12 | # Execute tests.
13 | vendor/bin/phpunit -c tests/phpunit.xml --fail-on-warning --fail-on-risky
14 |
15 | # Downgrade dependencies to the lowest versions.
16 | composer update --prefer-dist --prefer-stable --prefer-lowest --no-interaction --no-progress --optimize-autoloader
17 |
18 | # Execute tests again.
19 | vendor/bin/phpunit -c tests/phpunit.xml --fail-on-warning --fail-on-risky
20 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # top-most EditorConfig file
2 | root = true
3 |
4 | # Unix-style newlines with a newline ending every file
5 | [*]
6 | end_of_line = lf
7 | insert_final_newline = true
8 |
9 | [*.{json, php, sh, js}]
10 | charset = utf-8
11 | indent_style = space
12 | indent_size = 4
13 | trim_trailing_whitespace = true
14 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | contact_links:
2 | - name: Ask for help
3 | url: https://www.roundcubeforum.net/
4 | about: Ask and discuss questions with other Roundcube community members.
5 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "github-actions"
4 | directory: "/"
5 | schedule:
6 | interval: "weekly"
7 | - package-ecosystem: "composer"
8 | directory: "/"
9 | schedule:
10 | interval: "weekly"
11 | versioning-strategy: "widen"
12 | - package-ecosystem: "npm"
13 | directory: "/"
14 | schedule:
15 | interval: "weekly"
16 | versioning-strategy: "widen"
17 |
--------------------------------------------------------------------------------
/.github/workflows/bot-create-manual-reminder.yml:
--------------------------------------------------------------------------------
1 | name: 'Create reminder from comment'
2 |
3 | permissions:
4 | issues: write
5 | pull-requests: write
6 |
7 | on:
8 | issue_comment:
9 | types: [created, edited]
10 |
11 | jobs:
12 | reminder:
13 | if: github.repository == 'roundcube/roundcubemail'
14 | runs-on: ubuntu-latest
15 |
16 | steps:
17 | - name: 👀 check for reminder
18 | uses: agrc/create-reminder-action@9ff30cde74284045941af16a04362938957253b1 # v1.1.17
19 |
--------------------------------------------------------------------------------
/.github/workflows/bot-manual-reminder.yml:
--------------------------------------------------------------------------------
1 | name: 'Notify manually requested reminders'
2 |
3 | on:
4 | schedule:
5 | - cron: '0 * * * *'
6 |
7 | permissions:
8 | issues: write
9 | pull-requests: write
10 |
11 | jobs:
12 | reminder:
13 | if: github.repository == 'roundcube/roundcubemail'
14 | runs-on: ubuntu-latest
15 |
16 | steps:
17 | - name: check reminders and notify
18 | uses: agrc/reminder-action@96f2ec2e1a7a53ead156504922e9bc36d64f49ee # v1.0.16
19 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # ignore files added to these directories
2 | logs/*
3 | temp/*
4 | config/*
5 | plugins/*/config.inc.php
6 |
7 | # this is for the sample plugin (via composer)
8 | plugins/rcsample
9 | plugins/plugin_manager
10 |
11 | # composer-related
12 | composer.phar
13 | composer.lock
14 | vendor
15 |
16 | # javascript dependencies
17 | plugins/enigma/openpgp.min.js
18 | plugins/managesieve/codemirror/
19 | program/js/jquery.min.js
20 | program/js/jstz.min.js
21 | program/js/publickey.js
22 | program/js/tinymce/
23 |
24 | # eslint dependencies
25 | /node_modules
26 | /package.json
27 | /package-lock.json
28 |
29 | # skin customization files
30 | skins/elastic/styles/_styles.less
31 | skins/elastic/styles/_variables.less
32 |
33 | # ignore IDE files
34 | .vscode
35 | .DS_Store
36 | .idea
37 |
38 | # Ignore files used for local overriding.
39 | /tests/MessageRendering/.env
40 |
--------------------------------------------------------------------------------
/SQL/mysql/2008030300.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.1-stable
2 |
3 | TRUNCATE TABLE `messages`;
4 |
5 | ALTER TABLE `messages`
6 | DROP INDEX `idx`,
7 | DROP INDEX `uid`;
8 |
9 | ALTER TABLE `cache`
10 | DROP INDEX `cache_key`,
11 | DROP INDEX `session_id`,
12 | ADD INDEX `user_cache_index` (`user_id`,`cache_key`);
13 |
14 | ALTER TABLE `users`
15 | ADD INDEX `username_index` (`username`),
16 | ADD INDEX `alias_index` (`alias`);
17 |
--------------------------------------------------------------------------------
/SQL/mysql/2008040500.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.1.1
2 |
3 | ALTER TABLE `identities`
4 | MODIFY `signature` text,
5 | MODIFY `bcc` varchar(128) NOT NULL DEFAULT '',
6 | MODIFY `reply-to` varchar(128) NOT NULL DEFAULT '',
7 | MODIFY `organization` varchar(128) NOT NULL DEFAULT '',
8 | MODIFY `name` varchar(128) NOT NULL,
9 | MODIFY `email` varchar(128) NOT NULL;
10 |
--------------------------------------------------------------------------------
/SQL/mysql/2008060900.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.2-alpha
2 |
3 | ALTER TABLE `messages`
4 | ADD INDEX `created_index` (`created`);
5 |
--------------------------------------------------------------------------------
/SQL/mysql/2008092100.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.2-beta (InnoDB required)
2 |
3 | ALTER TABLE `cache`
4 | DROP `session_id`;
5 |
6 | ALTER TABLE `session`
7 | ADD INDEX `changed_index` (`changed`);
8 |
9 | ALTER TABLE `cache`
10 | ADD INDEX `created_index` (`created`);
11 |
12 | ALTER TABLE `users`
13 | CHANGE `language` `language` varchar(5);
14 |
15 | ALTER TABLE `cache` ENGINE=InnoDB;
16 | ALTER TABLE `session` ENGINE=InnoDB;
17 | ALTER TABLE `messages` ENGINE=InnoDB;
18 | ALTER TABLE `users` ENGINE=InnoDB;
19 | ALTER TABLE `contacts` ENGINE=InnoDB;
20 | ALTER TABLE `identities` ENGINE=InnoDB;
21 |
--------------------------------------------------------------------------------
/SQL/mysql/2009090400.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.3-stable
2 |
3 | TRUNCATE `messages`;
4 |
5 | ALTER TABLE `messages`
6 | ADD INDEX `index_index` (`user_id`, `cache_key`, `idx`);
7 |
8 | ALTER TABLE `session`
9 | CHANGE `vars` `vars` MEDIUMTEXT NOT NULL;
10 |
11 | ALTER TABLE `contacts`
12 | ADD INDEX `user_contacts_index` (`user_id`,`email`);
13 |
--------------------------------------------------------------------------------
/SQL/mysql/2010042300.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.4-beta
2 |
3 | ALTER TABLE `users` CHANGE `last_login` `last_login` datetime DEFAULT NULL;
4 | UPDATE `users` SET `last_login` = NULL WHERE `last_login` = '1000-01-01 00:00:00';
5 |
--------------------------------------------------------------------------------
/SQL/mysql/2010100600.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.4.2
2 |
3 | ALTER TABLE `users` DROP INDEX `username_index`;
4 | ALTER TABLE `users` ADD UNIQUE `username` (`username`, `mail_host`);
5 |
6 | ALTER TABLE `contacts` MODIFY `email` varchar(255) NOT NULL;
7 |
8 | TRUNCATE TABLE `messages`;
9 |
--------------------------------------------------------------------------------
/SQL/mysql/2011011200.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.5.x
2 |
3 | ALTER TABLE `contacts` ADD `words` TEXT NULL AFTER `vcard`;
4 | ALTER TABLE `contacts` CHANGE `vcard` `vcard` LONGTEXT /*!40101 CHARACTER SET utf8 */ NULL DEFAULT NULL;
5 | ALTER TABLE `contactgroupmembers` ADD INDEX `contactgroupmembers_contact_index` (`contact_id`);
6 |
7 | TRUNCATE TABLE `messages`;
8 | TRUNCATE TABLE `cache`;
9 |
--------------------------------------------------------------------------------
/SQL/mysql/2011111600.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.7-beta
2 |
3 | ALTER TABLE `session` CHANGE `sess_id` `sess_id` varchar(128) NOT NULL;
4 |
--------------------------------------------------------------------------------
/SQL/mysql/2012080700.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.8
2 |
3 | ALTER TABLE `cache` DROP COLUMN `cache_id`;
4 | ALTER TABLE `users` DROP COLUMN `alias`;
5 | ALTER TABLE `identities` ADD INDEX `email_identities_index` (`email`, `del`);
6 |
--------------------------------------------------------------------------------
/SQL/mysql/2013011000.sql:
--------------------------------------------------------------------------------
1 | -- Upgrade from 0.9-beta
2 |
3 | CREATE TABLE IF NOT EXISTS `system` (
4 | `name` varchar(64) NOT NULL,
5 | `value` mediumtext,
6 | PRIMARY KEY(`name`)
7 | ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
8 |
--------------------------------------------------------------------------------
/SQL/mysql/2013042700.sql:
--------------------------------------------------------------------------------
1 | -- empty
--------------------------------------------------------------------------------
/SQL/mysql/2013052500.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `cache_shared` (
2 | `cache_key` varchar(255) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL,
3 | `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
4 | `data` longtext NOT NULL,
5 | INDEX `created_index` (`created`),
6 | INDEX `cache_key_index` (`cache_key`)
7 | ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
8 |
--------------------------------------------------------------------------------
/SQL/mysql/2014042900.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `users` CHANGE `preferences` `preferences` longtext;
2 |
--------------------------------------------------------------------------------
/SQL/mysql/2015030800.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `identities` CHANGE `signature` `signature` longtext;
2 |
--------------------------------------------------------------------------------
/SQL/mysql/2015111100.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `users`
2 | ADD `failed_login` datetime DEFAULT NULL,
3 | ADD `failed_login_counter` int(10) UNSIGNED DEFAULT NULL;
4 |
--------------------------------------------------------------------------------
/SQL/mysql/2016081200.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `session` DROP COLUMN `created`;
2 |
--------------------------------------------------------------------------------
/SQL/mysql/2016100900.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `session` MODIFY `ip` varchar(40) NOT NULL;
2 |
--------------------------------------------------------------------------------
/SQL/mysql/2018021600.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `filestore` (
2 | `file_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
3 | `user_id` int(10) UNSIGNED NOT NULL,
4 | `filename` varchar(128) NOT NULL,
5 | `mtime` int(10) NOT NULL,
6 | `data` longtext NOT NULL,
7 | PRIMARY KEY (`file_id`),
8 | CONSTRAINT `user_id_fk_filestore` FOREIGN KEY (`user_id`)
9 | REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
10 | UNIQUE `uniqueness` (`user_id`, `filename`)
11 | ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
12 |
--------------------------------------------------------------------------------
/SQL/mysql/2018122300.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `filestore` ADD COLUMN `context` varchar(32) NOT NULL;
2 | UPDATE `filestore` SET `context` = 'enigma';
3 | ALTER TABLE `filestore` DROP FOREIGN KEY `user_id_fk_filestore`;
4 | ALTER TABLE `filestore` DROP INDEX `uniqueness`;
5 | ALTER TABLE `filestore` ADD UNIQUE INDEX `uniqueness` (`user_id`, `context`, `filename`);
6 | ALTER TABLE `filestore` ADD CONSTRAINT `user_id_fk_filestore` FOREIGN KEY (`user_id`)
7 | REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
8 |
--------------------------------------------------------------------------------
/SQL/mysql/2019092900.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `cache` CHANGE `cache_key` `cache_key` varchar(128) BINARY NOT NULL;
2 | ALTER TABLE `cache_shared` CHANGE `cache_key` `cache_key` varchar(255) BINARY NOT NULL;
3 |
--------------------------------------------------------------------------------
/SQL/mysql/2020020100.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `users` MODIFY `language` varchar(16);
2 | ALTER TABLE `dictionary` MODIFY `language` varchar(16) NOT NULL;
3 |
--------------------------------------------------------------------------------
/SQL/mysql/2020091000.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `collected_addresses` (
2 | `address_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
3 | `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
4 | `name` varchar(255) NOT NULL DEFAULT '',
5 | `email` varchar(255) NOT NULL,
6 | `user_id` int(10) UNSIGNED NOT NULL,
7 | `type` int(10) UNSIGNED NOT NULL,
8 | PRIMARY KEY(`address_id`),
9 | CONSTRAINT `user_id_fk_collected_addresses` FOREIGN KEY (`user_id`)
10 | REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
11 | UNIQUE INDEX `user_email_collected_addresses_index` (`user_id`, `type`, `email`)
12 | ) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
13 |
--------------------------------------------------------------------------------
/SQL/mysql/2020122900.sql:
--------------------------------------------------------------------------------
1 | -- empty
2 |
--------------------------------------------------------------------------------
/SQL/mysql/2021081000.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `responses` (
2 | `response_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
3 | `user_id` int(10) UNSIGNED NOT NULL,
4 | `name` varchar(255) NOT NULL,
5 | `data` longtext NOT NULL,
6 | `is_html` tinyint(1) NOT NULL DEFAULT '0',
7 | `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
8 | `del` tinyint(1) NOT NULL DEFAULT '0',
9 | PRIMARY KEY (`response_id`),
10 | CONSTRAINT `user_id_fk_responses` FOREIGN KEY (`user_id`)
11 | REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
12 | INDEX `user_responses_index` (`user_id`, `del`)
13 | ) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
14 |
--------------------------------------------------------------------------------
/SQL/mysql/2021100300.sql:
--------------------------------------------------------------------------------
1 | -- SQLite only
--------------------------------------------------------------------------------
/SQL/mysql/2022081200.sql:
--------------------------------------------------------------------------------
1 | -- SQLite/Postgres only
--------------------------------------------------------------------------------
/SQL/mysql/2022100100.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `uploads` (
2 | `upload_id` varchar(64) NOT NULL,
3 | `session_id` varchar(128) NOT NULL,
4 | `group` varchar(128) NOT NULL,
5 | `metadata` mediumtext NOT NULL,
6 | `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
7 | PRIMARY KEY (`upload_id`),
8 | INDEX `uploads_session_group_index` (`session_id`, `group`, `created`)
9 | ) ROW_FORMAT=DYNAMIC ENGINE=INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
10 |
--------------------------------------------------------------------------------
/SQL/postgres/2008060900.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.2-alpha
2 |
3 | CREATE INDEX messages_created_idx ON messages (created);
4 |
--------------------------------------------------------------------------------
/SQL/postgres/2008092100.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.2-beta
2 |
3 | ALTER TABLE cache DROP session_id;
4 |
5 | CREATE INDEX session_changed_idx ON session (changed);
6 | CREATE INDEX cache_created_idx ON "cache" (created);
7 |
8 | ALTER TABLE users ALTER "language" DROP NOT NULL;
9 | ALTER TABLE users ALTER "language" DROP DEFAULT;
10 |
11 | ALTER TABLE identities ALTER del TYPE smallint;
12 | ALTER TABLE identities ALTER standard TYPE smallint;
13 | ALTER TABLE contacts ALTER del TYPE smallint;
14 | ALTER TABLE messages ALTER del TYPE smallint;
15 |
--------------------------------------------------------------------------------
/SQL/postgres/2009090400.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.3-stable
2 |
3 | TRUNCATE messages;
4 | CREATE INDEX messages_index_idx ON messages (user_id, cache_key, idx);
5 | DROP INDEX contacts_user_id_idx;
6 | CREATE INDEX contacts_user_id_idx ON contacts (user_id, email);
7 |
--------------------------------------------------------------------------------
/SQL/postgres/2010042300.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.4-beta
2 |
3 | ALTER TABLE users ALTER last_login DROP NOT NULL;
4 | ALTER TABLE users ALTER last_login SET DEFAULT NULL;
5 |
--------------------------------------------------------------------------------
/SQL/postgres/2010100600.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.4.2
2 |
3 | DROP INDEX users_username_id_idx;
4 | ALTER TABLE users ADD CONSTRAINT users_username_key UNIQUE (username, mail_host);
5 | ALTER TABLE contacts ALTER email TYPE varchar(255);
6 |
7 | TRUNCATE messages;
8 |
--------------------------------------------------------------------------------
/SQL/postgres/2011011200.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.5.x
2 |
3 | ALTER TABLE contacts ADD words TEXT NULL;
4 | CREATE INDEX contactgroupmembers_contact_id_idx ON contactgroupmembers (contact_id);
5 |
6 | TRUNCATE messages;
7 | TRUNCATE cache;
8 |
--------------------------------------------------------------------------------
/SQL/postgres/2011111600.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.7-beta
2 |
3 | ALTER TABLE "session" ALTER sess_id TYPE varchar(128);
4 |
--------------------------------------------------------------------------------
/SQL/postgres/2011121400.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.7
2 |
3 | DROP INDEX contacts_user_id_idx;
4 | CREATE INDEX contacts_user_id_idx ON contacts USING btree (user_id, del);
5 | ALTER TABLE contacts ALTER email TYPE text;
6 |
--------------------------------------------------------------------------------
/SQL/postgres/2012080700.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.8
2 |
3 | ALTER TABLE cache DROP COLUMN cache_id;
4 | DROP SEQUENCE cache_ids;
5 |
6 | ALTER TABLE users DROP COLUMN alias;
7 | CREATE INDEX identities_email_idx ON identities (email, del);
8 |
--------------------------------------------------------------------------------
/SQL/postgres/2013011000.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE "system" (
2 | name varchar(64) NOT NULL PRIMARY KEY,
3 | value text
4 | );
5 |
--------------------------------------------------------------------------------
/SQL/postgres/2013042700.sql:
--------------------------------------------------------------------------------
1 | ALTER SEQUENCE user_ids RENAME TO users_seq;
2 | ALTER TABLE users ALTER COLUMN user_id SET DEFAULT nextval('users_seq'::text);
3 |
4 | ALTER SEQUENCE identity_ids RENAME TO identities_seq;
5 | ALTER TABLE identities ALTER COLUMN identity_id SET DEFAULT nextval('identities_seq'::text);
6 |
7 | ALTER SEQUENCE contact_ids RENAME TO contacts_seq;
8 | ALTER TABLE contacts ALTER COLUMN contact_id SET DEFAULT nextval('contacts_seq'::text);
9 |
10 | ALTER SEQUENCE contactgroups_ids RENAME TO contactgroups_seq;
11 | ALTER TABLE contactgroups ALTER COLUMN contactgroup_id SET DEFAULT nextval('contactgroups_seq'::text);
12 |
13 | ALTER SEQUENCE search_ids RENAME TO searches_seq;
14 | ALTER TABLE searches ALTER COLUMN search_id SET DEFAULT nextval('searches_seq'::text);
15 |
--------------------------------------------------------------------------------
/SQL/postgres/2013052500.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE "cache_shared" (
2 | cache_key varchar(255) NOT NULL,
3 | created timestamp with time zone DEFAULT now() NOT NULL,
4 | data text NOT NULL
5 | );
6 |
7 | CREATE INDEX cache_shared_cache_key_idx ON "cache_shared" (cache_key);
8 | CREATE INDEX cache_shared_created_idx ON "cache_shared" (created);
9 |
--------------------------------------------------------------------------------
/SQL/postgres/2014042900.sql:
--------------------------------------------------------------------------------
1 | -- empty
--------------------------------------------------------------------------------
/SQL/postgres/2015030800.sql:
--------------------------------------------------------------------------------
1 | -- empty
--------------------------------------------------------------------------------
/SQL/postgres/2015111100.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE "users" ADD failed_login timestamp with time zone DEFAULT NULL;
2 | ALTER TABLE "users" ADD failed_login_counter integer DEFAULT NULL;
3 |
--------------------------------------------------------------------------------
/SQL/postgres/2016081200.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE "session" DROP COLUMN created;
2 |
--------------------------------------------------------------------------------
/SQL/postgres/2016100900.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE session ALTER COLUMN ip TYPE character varying(41);
2 |
--------------------------------------------------------------------------------
/SQL/postgres/2016112200.sql:
--------------------------------------------------------------------------------
1 | DROP TABLE "cache";
2 | DROP TABLE "cache_shared";
3 |
4 | CREATE TABLE "cache" (
5 | user_id integer NOT NULL
6 | REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
7 | cache_key varchar(128) DEFAULT '' NOT NULL,
8 | expires timestamp with time zone DEFAULT NULL,
9 | data text NOT NULL,
10 | PRIMARY KEY (user_id, cache_key)
11 | );
12 |
13 | CREATE INDEX cache_expires_idx ON "cache" (expires);
14 |
15 | CREATE TABLE "cache_shared" (
16 | cache_key varchar(255) NOT NULL PRIMARY KEY,
17 | expires timestamp with time zone DEFAULT NULL,
18 | data text NOT NULL
19 | );
20 |
21 | CREATE INDEX cache_shared_expires_idx ON "cache_shared" (expires);
22 |
--------------------------------------------------------------------------------
/SQL/postgres/2018021600.sql:
--------------------------------------------------------------------------------
1 | CREATE SEQUENCE "filestore_seq"
2 | INCREMENT BY 1
3 | NO MAXVALUE
4 | NO MINVALUE
5 | CACHE 1;
6 |
7 | CREATE TABLE "filestore" (
8 | file_id integer DEFAULT nextval('filestore_seq'::text) PRIMARY KEY,
9 | user_id integer NOT NULL
10 | REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
11 | filename varchar(128) NOT NULL,
12 | mtime integer NOT NULL,
13 | data text NOT NULL,
14 | CONSTRAINT filestore_user_id_filename UNIQUE (user_id, filename)
15 | );
16 |
--------------------------------------------------------------------------------
/SQL/postgres/2018122300.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE "filestore" ADD COLUMN context varchar(32);
2 | UPDATE "filestore" SET context = 'enigma';
3 | ALTER TABLE "filestore" ALTER COLUMN context SET NOT NULL;
4 | ALTER TABLE "filestore" DROP CONSTRAINT "filestore_user_id_filename";
5 | ALTER TABLE "filestore" ADD CONSTRAINT "filestore_user_id_context_filename" UNIQUE (user_id, context, filename);
6 |
--------------------------------------------------------------------------------
/SQL/postgres/2019092900.sql:
--------------------------------------------------------------------------------
1 | -- empty
--------------------------------------------------------------------------------
/SQL/postgres/2020020100.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE "dictionary" ALTER COLUMN "language" TYPE varchar(16);
2 | ALTER TABLE "users" ALTER COLUMN "language" TYPE varchar(16);
3 |
--------------------------------------------------------------------------------
/SQL/postgres/2020020101.sql:
--------------------------------------------------------------------------------
1 | -- empty
--------------------------------------------------------------------------------
/SQL/postgres/2020091000.sql:
--------------------------------------------------------------------------------
1 |
2 | CREATE SEQUENCE collected_addresses_seq
3 | START WITH 1
4 | INCREMENT BY 1
5 | NO MAXVALUE
6 | NO MINVALUE
7 | CACHE 1;
8 |
9 | CREATE TABLE collected_addresses (
10 | address_id integer DEFAULT nextval('collected_addresses_seq'::text) PRIMARY KEY,
11 | user_id integer NOT NULL
12 | REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
13 | changed timestamp with time zone DEFAULT now() NOT NULL,
14 | name varchar(255) DEFAULT '' NOT NULL,
15 | email varchar(255) NOT NULL,
16 | "type" integer NOT NULL
17 | );
18 |
19 | CREATE UNIQUE INDEX collected_addresses_user_id_idx ON collected_addresses (user_id, "type", email);
20 |
--------------------------------------------------------------------------------
/SQL/postgres/2020122900.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE "users" ALTER COLUMN "preferences" DROP NOT NULL;
2 | ALTER TABLE "users" ALTER COLUMN "preferences" SET DEFAULT NULL;
3 |
--------------------------------------------------------------------------------
/SQL/postgres/2021081000.sql:
--------------------------------------------------------------------------------
1 | CREATE SEQUENCE responses_seq
2 | START WITH 1
3 | INCREMENT BY 1
4 | NO MAXVALUE
5 | NO MINVALUE
6 | CACHE 1;
7 |
8 | CREATE TABLE responses (
9 | response_id integer DEFAULT nextval('responses_seq'::text) PRIMARY KEY,
10 | user_id integer NOT NULL
11 | REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
12 | changed timestamp with time zone DEFAULT now() NOT NULL,
13 | del smallint DEFAULT 0 NOT NULL,
14 | name varchar(255) NOT NULL,
15 | data text NOT NULL,
16 | is_html smallint DEFAULT 0 NOT NULL
17 | );
18 |
19 | CREATE UNIQUE INDEX responses_user_id_idx ON responses (user_id, del);
20 |
21 | ALTER TABLE identities ALTER html_signature TYPE smallint;
22 |
--------------------------------------------------------------------------------
/SQL/postgres/2021100300.sql:
--------------------------------------------------------------------------------
1 | -- SQLite only
--------------------------------------------------------------------------------
/SQL/postgres/2022081200.sql:
--------------------------------------------------------------------------------
1 | DROP INDEX responses_user_id_idx;
2 | CREATE INDEX responses_user_id_idx ON responses (user_id, del);
3 |
--------------------------------------------------------------------------------
/SQL/postgres/2022100100.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE "uploads" (
2 | upload_id varchar(64) PRIMARY KEY,
3 | session_id varchar(128) NOT NULL,
4 | "group" varchar(128) NOT NULL,
5 | metadata text NOT NULL,
6 | created timestamp with time zone DEFAULT now() NOT NULL
7 | );
8 |
9 | CREATE INDEX uploads_session_id_idx ON uploads (session_id, "group", created);
10 |
--------------------------------------------------------------------------------
/SQL/sqlite/2008060900.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.2-alpha
2 |
3 | CREATE INDEX ix_messages_created ON messages (created);
4 |
--------------------------------------------------------------------------------
/SQL/sqlite/2008092100.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.2-beta
2 |
3 | CREATE INDEX ix_session_changed ON session (changed);
4 | CREATE INDEX ix_cache_created ON cache (created);
5 |
--------------------------------------------------------------------------------
/SQL/sqlite/2009090400.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.3-stable
2 |
3 | DELETE FROM messages;
4 | DROP INDEX ix_messages_user_cache_uid;
5 | CREATE UNIQUE INDEX ix_messages_user_cache_uid ON messages (user_id,cache_key,uid);
6 | CREATE INDEX ix_messages_index ON messages (user_id,cache_key,idx);
7 | DROP INDEX ix_contacts_user_id;
8 | CREATE INDEX ix_contacts_user_id ON contacts(user_id, email);
9 |
--------------------------------------------------------------------------------
/SQL/sqlite/2011111600.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.7-beta
2 |
3 | DROP TABLE session;
4 | CREATE TABLE session (
5 | sess_id varchar(128) NOT NULL PRIMARY KEY,
6 | created datetime NOT NULL default '0000-00-00 00:00:00',
7 | changed datetime NOT NULL default '0000-00-00 00:00:00',
8 | ip varchar(40) NOT NULL default '',
9 | vars text NOT NULL
10 | );
11 | CREATE INDEX ix_session_changed ON session (changed);
12 |
--------------------------------------------------------------------------------
/SQL/sqlite/2013011000.sql:
--------------------------------------------------------------------------------
1 | -- Updates from version 0.9-beta
2 |
3 | CREATE TABLE IF NOT EXISTS system (
4 | name varchar(64) NOT NULL PRIMARY KEY,
5 | value text NOT NULL
6 | );
7 |
--------------------------------------------------------------------------------
/SQL/sqlite/2013011700.sql:
--------------------------------------------------------------------------------
1 | -- drop temp table created in 2012080700.sql
2 | DROP TABLE IF EXISTS tmp_users;
3 |
--------------------------------------------------------------------------------
/SQL/sqlite/2013042700.sql:
--------------------------------------------------------------------------------
1 | -- empty
--------------------------------------------------------------------------------
/SQL/sqlite/2013052500.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE cache_shared (
2 | cache_key varchar(255) NOT NULL,
3 | created datetime NOT NULL default '0000-00-00 00:00:00',
4 | data text NOT NULL
5 | );
6 |
7 | CREATE INDEX ix_cache_shared_cache_key ON cache_shared(cache_key);
8 | CREATE INDEX ix_cache_shared_created ON cache_shared(created);
9 |
--------------------------------------------------------------------------------
/SQL/sqlite/2014042900.sql:
--------------------------------------------------------------------------------
1 | -- empty
--------------------------------------------------------------------------------
/SQL/sqlite/2015030800.sql:
--------------------------------------------------------------------------------
1 | -- empty
--------------------------------------------------------------------------------
/SQL/sqlite/2016081200.sql:
--------------------------------------------------------------------------------
1 | DROP TABLE session;
2 | CREATE TABLE session (
3 | sess_id varchar(128) NOT NULL PRIMARY KEY,
4 | changed datetime NOT NULL default '0000-00-00 00:00:00',
5 | ip varchar(40) NOT NULL default '',
6 | vars text NOT NULL
7 | );
8 |
9 | CREATE INDEX ix_session_changed ON session (changed);
10 |
--------------------------------------------------------------------------------
/SQL/sqlite/2016100900.sql:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/roundcube/roundcubemail/6a0cec468ebf98eb1a96208d0f9cb76b72648dc9/SQL/sqlite/2016100900.sql
--------------------------------------------------------------------------------
/SQL/sqlite/2016112200.sql:
--------------------------------------------------------------------------------
1 | DROP TABLE cache;
2 | DROP TABLE cache_shared;
3 |
4 | CREATE TABLE cache (
5 | user_id integer NOT NULL default 0,
6 | cache_key varchar(128) NOT NULL default '',
7 | expires datetime DEFAULT NULL,
8 | data text NOT NULL,
9 | PRIMARY KEY (user_id, cache_key)
10 | );
11 |
12 | CREATE INDEX ix_cache_expires ON cache(expires);
13 |
14 | CREATE TABLE cache_shared (
15 | cache_key varchar(255) NOT NULL,
16 | expires datetime DEFAULT NULL,
17 | data text NOT NULL,
18 | PRIMARY KEY (cache_key)
19 | );
20 |
21 | CREATE INDEX ix_cache_shared_expires ON cache_shared(expires);
22 |
--------------------------------------------------------------------------------
/SQL/sqlite/2018021600.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE filestore (
2 | file_id integer PRIMARY KEY,
3 | user_id integer NOT NULL,
4 | filename varchar(128) NOT NULL,
5 | mtime integer NOT NULL,
6 | data text NOT NULL
7 | );
8 |
9 | CREATE UNIQUE INDEX ix_filestore_user_id ON filestore(user_id, filename);
10 |
--------------------------------------------------------------------------------
/SQL/sqlite/2019092900.sql:
--------------------------------------------------------------------------------
1 | -- empty
--------------------------------------------------------------------------------
/SQL/sqlite/2020020101.sql:
--------------------------------------------------------------------------------
1 | -- empty
--------------------------------------------------------------------------------
/SQL/sqlite/2020091000.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE collected_addresses (
2 | address_id integer NOT NULL PRIMARY KEY,
3 | user_id integer NOT NULL,
4 | changed datetime NOT NULL default '0000-00-00 00:00:00',
5 | name varchar(255) NOT NULL default '',
6 | email varchar(255) NOT NULL,
7 | "type" integer NOT NULL
8 | );
9 |
10 | CREATE UNIQUE INDEX ix_collected_addresses_user_id ON collected_addresses(user_id, "type", email);
11 |
--------------------------------------------------------------------------------
/SQL/sqlite/2021081000.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE responses (
2 | response_id integer NOT NULL PRIMARY KEY,
3 | user_id integer NOT NULL default '0',
4 | changed datetime NOT NULL default '0000-00-00 00:00:00',
5 | del tinyint NOT NULL default '0',
6 | name varchar(255) NOT NULL,
7 | data text NOT NULL,
8 | is_html tinyint NOT NULL default '0'
9 | );
10 |
11 | CREATE UNIQUE INDEX ix_responses_user_id ON responses(user_id, del);
12 |
--------------------------------------------------------------------------------
/SQL/sqlite/2022081200.sql:
--------------------------------------------------------------------------------
1 | DROP INDEX ix_responses_user_id;
2 | CREATE INDEX ix_responses_user_id ON responses(user_id, del);
3 |
--------------------------------------------------------------------------------
/SQL/sqlite/2022100100.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE uploads (
2 | upload_id varchar(64) NOT NULL PRIMARY KEY,
3 | session_id varchar(128) NOT NULL,
4 | "group" varchar(128) NOT NULL,
5 | metadata text NOT NULL,
6 | created datetime NOT NULL default '0000-00-00 00:00:00'
7 | );
8 |
9 | CREATE INDEX ix_uploads_session_id ON uploads(session_id, "group", created);
10 |
--------------------------------------------------------------------------------
/bin/makedoc.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | set -x
4 |
5 | BIN_PHPDOC=`/usr/bin/which phpdoc`
6 |
7 | if [ ! -x "$BIN_PHPDOC" ]
8 | then
9 | echo "phpdoc not found"
10 | exit 1
11 | fi
12 |
13 | INSTALL_PATH="`dirname $0`/.."
14 | PATH_PROJECT=$INSTALL_PATH/program/include
15 | PATH_FRAMEWORK=$INSTALL_PATH/program/lib/Roundcube
16 | PATH_DOCS=$INSTALL_PATH/doc/phpdoc
17 | TITLE="Roundcube Webmail"
18 | PACKAGES="Webmail"
19 | OUTPUTFORMAT=HTML
20 | TEMPLATE=responsive-twig
21 |
22 | # make documentation
23 | $BIN_PHPDOC -d $PATH_PROJECT,$PATH_FRAMEWORK -t $PATH_DOCS --title "$TITLE" \
24 | --defaultpackagename $PACKAGES --template=$TEMPLATE
25 |
--------------------------------------------------------------------------------
/config/.htaccess:
--------------------------------------------------------------------------------
1 | # deny webserver access to this directory
2 |
An internal error has occurred. Your request cannot be processed at this time.
25 |For administrators: Please check the application and/or server error logs for more information.
26 |