diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-02-23 21:02:18 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-02-23 21:02:18 +0000 |
commit | 4a6a51a9a130a73f0553c798497cb2872401a7da (patch) | |
tree | 54b4a6d0234465ead377aa04d3dcb838658bb893 /apps/app_voicemail.c | |
parent | a7bf5a08b7ce4c77ca1c79827dc39d66773e3e3b (diff) |
Permit emailsubject and emailbody to be set per mailbox.
(closes issue #14372)
Reported by: fhackenberger
Patches:
voicemail_individual_subject_and_body_1.6.1 uploaded by fhackenberger (license 592)
with additional fixes by Corydon76 (license 14)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@178107 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_voicemail.c')
-rw-r--r-- | apps/app_voicemail.c | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 33232e239..2d7b1442e 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -562,6 +562,8 @@ struct ast_vm_user { char password[80]; /*!< Secret pin code, numbers only */ char fullname[80]; /*!< Full name, for directory app */ char email[80]; /*!< E-mail address */ + char *emailsubject; /*!< E-mail subject */ + char *emailbody; /*!< E-mail body */ char pager[80]; /*!< E-mail address to pager (no attachment) */ char serveremail[80]; /*!< From: Mail address */ char mailcmd[160]; /*!< Configurable mail command */ @@ -861,6 +863,8 @@ static void populate_defaults(struct ast_vm_user *vmu) if (maxdeletedmsg) vmu->maxdeletedmsg = maxdeletedmsg; vmu->volgain = volgain; + vmu->emailsubject = NULL; + vmu->emailbody = NULL; } /*! @@ -1118,6 +1122,10 @@ static void apply_options_full(struct ast_vm_user *retval, struct ast_variable * ast_copy_string(retval->fullname, var->value, sizeof(retval->fullname)); } else if (!strcasecmp(var->name, "context")) { ast_copy_string(retval->context, var->value, sizeof(retval->context)); + } else if (!strcasecmp(var->name, "emailsubject")) { + retval->emailsubject = ast_strdup(var->value); + } else if (!strcasecmp(var->name, "emailbody")) { + retval->emailbody = ast_strdup(var->value); #ifdef IMAP_STORAGE } else if (!strcasecmp(var->name, "imapuser")) { ast_copy_string(retval->imapuser, var->value, sizeof(retval->imapuser)); @@ -1437,8 +1445,17 @@ static const char *mbox(int id) static void free_user(struct ast_vm_user *vmu) { - if (ast_test_flag(vmu, VM_ALLOCED)) + if (ast_test_flag(vmu, VM_ALLOCED)) { + if (vmu->emailbody != NULL) { + ast_free(vmu->emailbody); + vmu->emailbody = NULL; + } + if (vmu->emailsubject != NULL) { + ast_free(vmu->emailsubject); + vmu->emailsubject = NULL; + } ast_free(vmu); + } } /* All IMAP-specific functions should go in this block. This @@ -4086,10 +4103,11 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in } else { fprintf(p, "To: %s <%s>" ENDL, quote(vmu->fullname, passdata2, len_passdata2), vmu->email); } - if (!ast_strlen_zero(emailsubject)) { + if (!ast_strlen_zero(emailsubject) || !ast_strlen_zero(vmu->emailsubject)) { + char *e_subj = !ast_strlen_zero(vmu->emailsubject) ? vmu->emailsubject : emailsubject; struct ast_channel *ast; if ((ast = ast_channel_alloc(0, AST_STATE_DOWN, 0, 0, "", "", "", 0, "Substitution/voicemail"))) { - int vmlen = strlen(emailsubject) * 3 + 200; + int vmlen = strlen(e_subj) * 3 + 200; /* Only allocate more space if the previous was not large enough */ if (vmlen > len_passdata) { passdata = alloca(vmlen); @@ -4098,7 +4116,7 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in memset(passdata, 0, len_passdata); prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, cidnum, cidname, dur, date, passdata, len_passdata, category, flag); - pbx_substitute_variables_helper(ast, emailsubject, passdata, len_passdata); + pbx_substitute_variables_helper(ast, e_subj, passdata, len_passdata); if (check_mime(passdata)) { int first_line = 1; char *ptr; @@ -4175,15 +4193,16 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in fprintf(p, "--%s" ENDL, bound); } fprintf(p, "Content-Type: text/plain; charset=%s" ENDL "Content-Transfer-Encoding: 8bit" ENDL ENDL, charset); - if (emailbody) { + if (emailbody || vmu->emailbody) { + char* e_body = vmu->emailbody ? vmu->emailbody : emailbody; struct ast_channel *ast; if ((ast = ast_channel_alloc(0, AST_STATE_DOWN, 0, 0, "", "", "", 0, "Substitution/voicemail"))) { char *passdata; - int vmlen = strlen(emailbody)*3 + 200; + int vmlen = strlen(e_body) * 3 + 200; passdata = alloca(vmlen); memset(passdata, 0, vmlen); prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, cidnum, cidname, dur, date, passdata, vmlen, category, flag); - pbx_substitute_variables_helper(ast, emailbody, passdata, vmlen); + pbx_substitute_variables_helper(ast, e_body, passdata, vmlen); fprintf(p, "%s" ENDL, passdata); ast_channel_free(ast); } else |