From c924aba93d9fa778ddfba68e477a73926f29550b Mon Sep 17 00:00:00 2001 From: usmannasir Date: Tue, 1 Jul 2025 14:49:24 +0500 Subject: [PATCH] bug fix: https://community.cyberpanel.net/t/email-accounts-not-created-after-upgrade/58847 --- plogical/mailUtilities.py | 54 +++++++++++++++++++++++++++++---------- plogical/upgrade.py | 27 ++++++++++++++++++++ 2 files changed, 67 insertions(+), 14 deletions(-) diff --git a/plogical/mailUtilities.py b/plogical/mailUtilities.py index 055c1119c..5e247f606 100644 --- a/plogical/mailUtilities.py +++ b/plogical/mailUtilities.py @@ -325,21 +325,47 @@ class mailUtilities: emailLimits = EmailLimits(email=emailAcct) emailLimits.save() - ### Create email folders manually if they dont exist + ### Create maildir structure if it doesn't exist + + # Create base maildir path + maildir_base = f"/home/vmail/{domain}/{userName}" + maildir_path = f"{maildir_base}/Maildir" + + # Create the main maildir structure + if not os.path.exists(maildir_path): + command = f"mkdir -p '{maildir_path}/cur' '{maildir_path}/new' '{maildir_path}/tmp'" + ProcessUtilities.executioner(command, 'vmail') + + # Set proper permissions + command = f"chmod -R 700 '{maildir_base}'" + ProcessUtilities.executioner(command, 'vmail') + + # Ensure ownership is correct + command = f"chown -R vmail:vmail '{maildir_base}'" + ProcessUtilities.executioner(command, 'root') - # command = f"mkdir '/home/vmail/{domain}/{userName}/Maildir/.Archive' " \ - # f"'/home/vmail/{domain}/{userName}/Maildir/.Deleted Items' " \ - # f"'/home/vmail/{domain}/{userName}/Maildir/.Drafts' " \ - # f"'/home/vmail/{domain}/{userName}/Maildir/.Sent' " \ - # f"'/home/vmail/{domain}/{userName}/Maildir/.Junk E-mail'" - # ProcessUtilities.executioner(command, 'vmail') - # - # command = f"chmod 700 '/home/vmail/{domain}/{userName}/Maildir/.Archive' " \ - # f"'/home/vmail/{domain}/{userName}/Maildir/.Deleted Items' " \ - # f"'/home/vmail/{domain}/{userName}/Maildir/.Drafts' " \ - # f"'/home/vmail/{domain}/{userName}/Maildir/.Sent' " \ - # f"'/home/vmail/{domain}/{userName}/Maildir/.Junk E-mail'" - # ProcessUtilities.executioner(command, 'vmail') + # Create standard IMAP folders + standard_folders = [ + ".Archive", + ".Deleted Items", + ".Drafts", + ".Sent", + ".Junk E-mail" + ] + + for folder in standard_folders: + folder_path = f"{maildir_path}/{folder}" + if not os.path.exists(folder_path): + command = f"mkdir -p '{folder_path}/cur' '{folder_path}/new' '{folder_path}/tmp'" + ProcessUtilities.executioner(command, 'vmail') + + # Set permissions for all folders + command = f"chmod -R 700 '{maildir_path}'" + ProcessUtilities.executioner(command, 'vmail') + + # Ensure final ownership + command = f"chown -R vmail:vmail '{maildir_base}'" + ProcessUtilities.executioner(command, 'root') #if not os.path.exists('/usr/local/lscp/cyberpanel/rainloop/data/_data_/_default_/plugins/mailbox-detect'): # mailUtilities.InstallMailBoxFoldersPlugin() diff --git a/plogical/upgrade.py b/plogical/upgrade.py index c3beb0523..5caf7e194 100644 --- a/plogical/upgrade.py +++ b/plogical/upgrade.py @@ -2948,6 +2948,33 @@ echo $oConfig->Save() ? 'Done' : 'Error'; writeToFile.write(content) writeToFile.close() + # Fix mailbox auto-creation issue + if dovecotContent.find('lda_mailbox_autocreate') == -1: + Upgrade.stdOut("Enabling mailbox auto-creation in dovecot...") + + # Add mailbox auto-creation settings to protocol lda section + dovecotContent = open(dovecotConf, 'r').read() + + if dovecotContent.find('protocol lda') > -1: + # Update existing protocol lda section + import re + pattern = r'(protocol lda\s*{[^}]*)' + replacement = r'\1\n lda_mailbox_autocreate = yes\n lda_mailbox_autosubscribe = yes' + dovecotContent = re.sub(pattern, replacement, dovecotContent) + + writeToFile = open(dovecotConf, 'w') + writeToFile.write(dovecotContent) + writeToFile.close() + else: + # Add new protocol lda section + writeToFile = open(dovecotConf, 'a') + content = """\nprotocol lda { + lda_mailbox_autocreate = yes + lda_mailbox_autosubscribe = yes +}\n""" + writeToFile.write(content) + writeToFile.close() + command = 'systemctl restart dovecot' Upgrade.executioner(command, command, 0)