aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/app_voicemail.c17
-rw-r--r--configs/voicemail.conf.sample5
2 files changed, 19 insertions, 3 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index b9b662bee..8b57b6b43 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -124,6 +124,7 @@ static char imapserver[48];
static char imapport[8];
static char imapflags[128];
static char imapfolder[64];
+static char imapparentfolder[64] = "\0";
static char greetingfolder[64];
static char authuser[32];
static char authpassword[42];
@@ -5100,8 +5101,13 @@ static void imap_mailbox_name(char *spec, size_t len, struct vm_state *vms, int
snprintf(spec, len, "%s%s", tmp, use_folder? imapfolder: "INBOX");
else if (box == GREETINGS_FOLDER)
snprintf(spec, len, "%s%s", tmp, greetingfolder);
- else
- snprintf(spec, len, "%s%s%c%s", tmp, imapfolder, delimiter, mbox(box));
+ else /* Other folders such as Friends, Family, etc... */
+ if (!ast_strlen_zero(imapparentfolder)) {
+ /* imapparentfolder would typically be set to INBOX */
+ snprintf(spec, len, "%s%s%c%s", tmp, imapparentfolder, delimiter, mbox(box));
+ } else {
+ snprintf(spec, len, "%s%s", tmp, mbox(box));
+ }
}
static int init_mailstream(struct vm_state *vms, int box)
@@ -8300,7 +8306,9 @@ static int load_config(int reload)
ast_clear_flag(&config_flags, CONFIG_FLAG_FILEUNCHANGED);
ucfg = ast_config_load("users.conf", config_flags);
}
-
+#ifdef IMAP_STORAGE
+ ast_copy_string(imapparentfolder, "\0", sizeof(imapparentfolder));
+#endif
/* set audio control prompts */
strcpy(listen_control_forward_key, DEFAULT_LISTEN_CONTROL_FORWARD_KEY);
strcpy(listen_control_reverse_key, DEFAULT_LISTEN_CONTROL_REVERSE_KEY);
@@ -8448,6 +8456,9 @@ static int load_config(int reload)
} else {
ast_copy_string(imapfolder, "INBOX", sizeof(imapfolder));
}
+ if ((val = ast_variable_retrieve(cfg, "general", "imapparentfolder"))) {
+ ast_copy_string(imapparentfolder, val, sizeof(imapparentfolder));
+ }
if ((val = ast_variable_retrieve(cfg, "general", "imapgreetings"))) {
imapgreetings = ast_true(val);
} else {
diff --git a/configs/voicemail.conf.sample b/configs/voicemail.conf.sample
index a1625d50b..51565c706 100644
--- a/configs/voicemail.conf.sample
+++ b/configs/voicemail.conf.sample
@@ -149,6 +149,11 @@ emaildateformat=%A, %B %d, %Y at %r
; If imapgreetings=yes, then specify which folder to store your greetings in. If
; you do not specify a folder, then INBOX will be used
;greetingsfolder=INBOX
+; Some IMAP server implementations store folders under INBOX instead of
+; using a top level folder (ex. INBOX/Friends). In this case, user
+; imapparentfolder to set the parent folder. For example, Cyrus IMAP does
+; NOT use INBOX as the parent. Default is to have no parent folder set.
+;imapparentfolder=INBOX
;
; Users may be located in different timezones, or may have different
; message announcements for their introductory message when they enter