[Asterisk-cvs] asterisk/apps app_voicemail.c,1.85,1.86

markster at lists.digium.com markster at lists.digium.com
Sat May 1 19:21:04 CDT 2004


Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv31820/apps

Modified Files:
	app_voicemail.c 
Log Message:
Add ability to specify custom e-mail subject line (bug #1291)


Index: app_voicemail.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_voicemail.c,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -d -r1.85 -r1.86
--- app_voicemail.c	1 May 2004 22:29:54 -0000	1.85
+++ app_voicemail.c	1 May 2004 23:28:33 -0000	1.86
@@ -235,6 +235,7 @@
 
 static char *emailbody = NULL;
 static int pbxskip = 0;
+static char *emailsubject = NULL;
 static char fromstring[100];
 static char emailtitle[100];
 
@@ -754,6 +755,18 @@
 	return 1;
 }
 
+static void prep_email_sub_vars(struct ast_channel *ast, struct ast_vm_user *vmu, int msgnum, char *mailbox, char *callerid, char *dur, char *date, char *passdata)
+{
+	/* Prepare variables for substition in email body and subject */
+	pbx_builtin_setvar_helper(ast, "VM_NAME", vmu->fullname);
+	pbx_builtin_setvar_helper(ast, "VM_DUR", dur);
+	sprintf(passdata,"%d",msgnum);
+	pbx_builtin_setvar_helper(ast, "VM_MSGNUM", passdata);
+	pbx_builtin_setvar_helper(ast, "VM_MAILBOX", mailbox);
+	pbx_builtin_setvar_helper(ast, "VM_CALLERID", (callerid ? callerid : "an unknown caller"));
+	pbx_builtin_setvar_helper(ast, "VM_DATE", date);
+}
+
 static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *mailbox, char *callerid, char *attach, char *format, int duration, int attach_user_voicemail)
 {
 	FILE *p=NULL;
@@ -820,6 +833,20 @@
 			fprintf(p, "From: Asterisk PBX <%s>\n", who);
 		fprintf(p, "To: %s <%s>\n", vmu->fullname, vmu->email);
 
+		if (emailsubject) {
+			struct ast_channel *ast = ast_channel_alloc(0);
+			if (ast) {
+				char *passdata;
+				int vmlen = strlen(emailsubject)*3 + 200;
+				if ((passdata = alloca(vmlen))) {
+					memset(passdata, 0, vmlen);
+					prep_email_sub_vars(ast,vmu,msgnum + 1,mailbox,callerid,dur,date,passdata);
+					pbx_substitute_variables_helper(ast,emailsubject,passdata,vmlen);
+					fprintf(p, "Subject: %s\n",passdata);
+				} else ast_log(LOG_WARNING, "Cannot allocate workspace for variable substitution\n");
+				ast_channel_free(ast);
+			} else ast_log(LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
+		} else
 		if( *emailtitle)
 		{
 			fprintf(p, emailtitle, msgnum + 1, mailbox) ;
@@ -849,13 +876,7 @@
 				int vmlen = strlen(emailbody)*3 + 200;
 				if ((passdata = alloca(vmlen))) {
 					memset(passdata, 0, vmlen);
-					pbx_builtin_setvar_helper(ast, "VM_NAME", vmu->fullname);
-					pbx_builtin_setvar_helper(ast, "VM_DUR", dur);
-					sprintf(passdata,"%d",msgnum);
-					pbx_builtin_setvar_helper(ast, "VM_MSGNUM", passdata);
-					pbx_builtin_setvar_helper(ast, "VM_MAILBOX", mailbox);
-					pbx_builtin_setvar_helper(ast, "VM_CALLERID", (callerid ? callerid : "an unknown caller"));
-					pbx_builtin_setvar_helper(ast, "VM_DATE", date);
+					prep_email_sub_vars(ast,vmu,msgnum + 1,mailbox,callerid,dur,date,passdata);
 					pbx_substitute_variables_helper(ast,emailbody,passdata,vmlen);
 					fprintf(p, "%s\n",passdata);
 				} else ast_log(LOG_WARNING, "Cannot allocate workspace for variable substitution\n");
@@ -3811,12 +3832,18 @@
 			free(emailbody);
 			emailbody = NULL;
 		}
+		if (emailsubject) {
+			free(emailsubject);
+			emailsubject = NULL;
+		}
 		if ((s=ast_variable_retrieve(cfg, "general", "pbxskip")))
 			pbxskip = ast_true(s);
 		if ((s=ast_variable_retrieve(cfg, "general", "fromstring")))
 			strncpy(fromstring,s,sizeof(fromstring)-1);
 		if ((s=ast_variable_retrieve(cfg, "general", "emailtitle")))
 			strncpy(emailtitle,s,sizeof(emailtitle)-1);
+		if ((s=ast_variable_retrieve(cfg, "general", "emailsubject")))
+			emailsubject = strdup(s);
 		if ((s=ast_variable_retrieve(cfg, "general", "emailbody"))) {
 			char *tmpread, *tmpwrite;
 			emailbody = strdup(s);




More information about the svn-commits mailing list