Index: app_voicemail.c =================================================================== --- app_voicemail.c (revision 50028) +++ app_voicemail.c (working copy) @@ -1886,6 +1886,25 @@ return p; } +static char *quote(const char *from, char *to, size_t len) +{ + char *ptr = to; + *ptr++ = '"'; + for (; ptr < (to + len - 1); from++) { + if (*from == '"') + *ptr++ = '\\'; + if (*from == '\0') + break; + *ptr++ = *from; + } + if (ptr < (to + len - 1)) + *ptr++ = '"'; + + *ptr=0; + + return to; +} + static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, int msgnum, char *context, char *mailbox, char *cidnum, char *cidname, char *attach, char *format, int duration, int attach_user_voicemail, struct ast_channel *chan, const char *category, int imap) { char date[256]; @@ -1896,6 +1915,8 @@ char dur[256]; char tmpcmd[256]; struct tm tm; + int len_passdata; + char *passdata2; gethostname(host, sizeof(host)-1); if (strchr(srcemail, '@')) @@ -1919,7 +1940,9 @@ memset(passdata, 0, vmlen); prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, cidnum, cidname, dur, date, passdata, vmlen, category); pbx_substitute_variables_helper(ast, fromstring, passdata, vmlen); - fprintf(p, "From: %s <%s>\r\n",passdata,who); + len_passdata = strlen(passdata) * 2 + 1; + passdata2 = alloca(len_passdata); + fprintf(p, "From: %s <%s>\n", quote(passdata, passdata2, len_passdata), who); } else ast_log(LOG_WARNING, "Cannot allocate workspace for variable substitution\n"); ast_channel_free(ast); @@ -1927,7 +1950,11 @@ ast_log(LOG_WARNING, "Cannot allocate the channel for variables substitution\n"); } else fprintf(p, "From: Asterisk PBX <%s>\r\n", who); - fprintf(p, "To: %s <%s>\r\n", vmu->fullname, vmu->email); + + len_passdata = strlen(vmu->fullname) * 2 + 1; + passdata2 = alloca(len_passdata); + fprintf(p, "To: %s <%s>\n", quote(vmu->fullname, passdata2, len_passdata), vmu->email); + if (emailsubject) { struct ast_channel *ast; if ((ast = ast_channel_alloc(0, AST_STATE_DOWN, 0, 0, 0))) { @@ -2043,6 +2070,7 @@ unlink(newtmp); } } + static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *context, char *mailbox, char *cidnum, char *cidname, char *attach, char *format, int duration, int attach_user_voicemail, struct ast_channel *chan, const char *category) { FILE *p=NULL;