|
|
|
|
@ -1818,6 +1818,22 @@ static void prep_email_sub_vars(struct ast_channel *ast, struct ast_vm_user *vmu
|
|
|
|
|
pbx_builtin_setvar_helper(ast, "VM_CATEGORY", category ? ast_strdupa(category) : "no category");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static char *quote(const char *from, char *to, size_t len)
|
|
|
|
|
{
|
|
|
|
|
char *ptr = to;
|
|
|
|
|
*ptr++ = '"';
|
|
|
|
|
for (; ptr < to + len - 1; from++) {
|
|
|
|
|
if (*from == '"')
|
|
|
|
|
*ptr++ = '\\';
|
|
|
|
|
else if (*from == '\0')
|
|
|
|
|
break;
|
|
|
|
|
*ptr++ = *from;
|
|
|
|
|
}
|
|
|
|
|
if (ptr < to + len - 1)
|
|
|
|
|
*ptr++ = '"';
|
|
|
|
|
*ptr = '\0';
|
|
|
|
|
return to;
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
* fill in *tm for current time according to the proper timezone, if any.
|
|
|
|
|
* Return tm so it can be used as a function argument.
|
|
|
|
|
@ -1866,6 +1882,8 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
|
|
|
|
|
char dur[256];
|
|
|
|
|
char tmpcmd[256];
|
|
|
|
|
struct tm tm;
|
|
|
|
|
char *passdata2;
|
|
|
|
|
size_t len_passdata;
|
|
|
|
|
|
|
|
|
|
gethostname(host, sizeof(host) - 1);
|
|
|
|
|
if (strchr(srcemail, '@'))
|
|
|
|
|
@ -1889,7 +1907,9 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
|
|
|
|
|
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>\r\n", quote(passdata, passdata2, len_passdata), who);
|
|
|
|
|
} else
|
|
|
|
|
ast_log(LOG_WARNING, "Cannot allocate workspace for variable substitution\n");
|
|
|
|
|
ast_channel_free(ast);
|
|
|
|
|
@ -1897,7 +1917,9 @@ static void make_email_file(FILE *p, char *srcemail, struct ast_vm_user *vmu, in
|
|
|
|
|
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>\r\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))) {
|
|
|
|
|
|