Voicemail-to-Email: Backup email to database if sending fails, better detection of ContentType.
This commit is contained in:
@@ -74,6 +74,53 @@
|
|||||||
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
|
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
|
||||||
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
|
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
|
||||||
|
|
||||||
|
//schema details
|
||||||
|
$y = 1; //table array index
|
||||||
|
$z = 0; //field array index
|
||||||
|
$apps[$x]['db'][$y]['table'] = "v_emails";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['name'] = "email_uuid";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = "primary";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
|
||||||
|
$z++;
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_uuid";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = "foreign";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = "v_xml_cdr";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = "uuid";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
|
||||||
|
$z++;
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['name'] = "domain_uuid";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = "foreign";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = "v_domains";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = "domain_uuid";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
|
||||||
|
$z++;
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['name'] = "sent_date";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "timestamp";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "date";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "timestamp";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
|
||||||
|
$z++;
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['name'] = "type";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
|
||||||
|
$z++;
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['name'] = "status";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
|
||||||
|
$z++;
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['name'] = "email";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
|
||||||
|
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
$y = 0; //table array index
|
$y = 0; //table array index
|
||||||
$z = 0; //field array index
|
$z = 0; //field array index
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
|
<html>
|
||||||
<font face="arial">
|
<font face="arial">
|
||||||
<b>Message From "${caller_id_name}" <a href="tel:${caller_id_number}">${caller_id_number}</a></b><br/>
|
<b>Message From "${caller_id_name}" <a href="tel:${caller_id_number}">${caller_id_number}</a></b><br/>
|
||||||
<hr noshade="noshade" size="1"/>
|
<hr noshade="noshade" size="1"/>
|
||||||
Created: ${message_date}<br/>
|
Created: ${message_date}<br/>
|
||||||
Duration: ${message_duration}<br/>
|
Duration: ${message_duration}<br/>
|
||||||
Account: ${account}@${domain_name}<br/>
|
Account: ${account}@${domain_name}<br/>
|
||||||
</font>
|
</font>
|
||||||
|
</html>
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
|
<html>
|
||||||
<font face="arial">
|
<font face="arial">
|
||||||
<b>Message From "${caller_id_name}" <a href="tel:${caller_id_number}">${caller_id_number}</a></b><br/>
|
<b>Message From "${caller_id_name}" <a href="tel:${caller_id_number}">${caller_id_number}</a></b><br/>
|
||||||
<hr noshade="noshade" size="1"/>
|
<hr noshade="noshade" size="1"/>
|
||||||
Created: ${message_date}<br/>
|
Created: ${message_date}<br/>
|
||||||
Duration: ${message_duration}<br/>
|
Duration: ${message_duration}<br/>
|
||||||
Account: ${account}@${domain_name}<br/>
|
Account: ${account}@${domain_name}<br/>
|
||||||
</font>
|
</font>
|
||||||
|
</html>
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
--convert_ext (optional) to replace the file's extension
|
--convert_ext (optional) to replace the file's extension
|
||||||
|
|
||||||
--Example
|
--Example
|
||||||
--luarun email.lua to@domain.com from@domain.com 'subject' 'body'
|
--luarun email.lua to@domain.com from@domain.com 'headers' 'subject' 'body'
|
||||||
|
|
||||||
--get the argv values
|
--get the argv values
|
||||||
script_name = argv[0];
|
script_name = argv[0];
|
||||||
|
|||||||
+77
-17
@@ -95,21 +95,18 @@
|
|||||||
|
|
||||||
//get the body
|
//get the body
|
||||||
$body = '';
|
$body = '';
|
||||||
foreach($decoded[0]["Parts"] as $row) {
|
$content_type = $decoded[0]['Headers']['content-type:'];
|
||||||
$content_type = $row['Headers']['content-type:'];
|
if (substr($content_type, 0, 15) == "multipart/mixed" || substr($content_type, 0, 21) == "multipart/alternative") {
|
||||||
if (substr($content_type, 0, 21) == "multipart/alternative") {
|
foreach($decoded[0]["Parts"] as $row) {
|
||||||
$content_type = $row["Parts"][0]["Headers"]["content-type:"];
|
$body_content_type = $row["Headers"]["content-type:"];
|
||||||
if (substr($content_type, 0, 9) == "text/html") { $body = $row["Parts"][0]["Body"]; }
|
if (substr($body_content_type, 0, 9) == "text/html") { $body = $row["Body"]; }
|
||||||
if (substr($content_type, 0, 10) == "text/plain") { $body_plain = $row["Parts"][0]["Body"]; }
|
if (substr($body_content_type, 0, 10) == "text/plain") { $body_plain = $row["Body"]; }
|
||||||
$content_type = $row["Parts"][1]["Headers"]["content-type:"];
|
|
||||||
if (substr($content_type, 0, 9) == "text/html") { $body = $row["Parts"][1]["Body"]; }
|
|
||||||
if (substr($content_type, 0, 10) == "text/plain") { $body_plain = $row["Parts"][1]["Body"]; }
|
|
||||||
}
|
}
|
||||||
else {
|
}
|
||||||
$content_type_array = explode(";", $content_type);
|
else {
|
||||||
if ($content_type_array[0] == "text/plain") {
|
$content_type_array = explode(";", $content_type);
|
||||||
$body = $row["Body"];
|
if ($content_type_array[0] == "text/html" || $content_type_array[0] == "text/plain") {
|
||||||
}
|
$body = $row["Body"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -256,12 +253,44 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
//add the body to the email
|
//add the body to the email
|
||||||
$mail->AltBody = $body_plain; // optional, comment out and test
|
if (substr($body, 0, 5) == "<html") {
|
||||||
$mail->MsgHTML($body);
|
$mail->ContentType = "text/html";
|
||||||
|
$mail->Body = $body;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$mail->Body = ($body != '') ? $body : $body_plain;
|
||||||
|
$mail->AltBody = $body_plain;
|
||||||
|
}
|
||||||
|
|
||||||
//send the email
|
//send the email
|
||||||
if(!$mail->Send()) {
|
if(!$mail->Send()) {
|
||||||
echo "Mailer Error: " . $mail->ErrorInfo;
|
$mailer_error = $mail->ErrorInfo;
|
||||||
|
echo "Mailer Error: ".$mailer_error."\n\n";
|
||||||
|
|
||||||
|
// log/store message in database for review
|
||||||
|
$email_uuid = uuid();
|
||||||
|
$sql = "insert into v_emails ( ";
|
||||||
|
$sql .= "email_uuid, ";
|
||||||
|
$sql .= "call_uuid, ";
|
||||||
|
$sql .= "domain_uuid, ";
|
||||||
|
$sql .= "sent_date, ";
|
||||||
|
$sql .= "type, ";
|
||||||
|
$sql .= "status, ";
|
||||||
|
$sql .= "email ";
|
||||||
|
$sql .= ") values ( ";
|
||||||
|
$sql .= "'".$email_uuid."', ";
|
||||||
|
$sql .= "'".$headers["X-FusionPBX-Call-UUID"]."', ";
|
||||||
|
$sql .= "'".$headers["X-FusionPBX-Domain-UUID"]."', ";
|
||||||
|
$sql .= "now(),";
|
||||||
|
$sql .= "'".$headers["X-FusionPBX-Email-Type"]."', ";
|
||||||
|
$sql .= "'failed', ";
|
||||||
|
$sql .= "'".str_replace("'", "''", $msg)."' ";
|
||||||
|
$sql .= ") ";
|
||||||
|
$db->exec(check_sql($sql));
|
||||||
|
unset($sql);
|
||||||
|
|
||||||
|
echo "Retained in v_emails as email_uuid = ".$email_uuid."\n";
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
echo "Message sent!";
|
echo "Message sent!";
|
||||||
@@ -276,4 +305,35 @@
|
|||||||
fwrite($fp, $content);
|
fwrite($fp, $content);
|
||||||
fclose($fp);
|
fclose($fp);
|
||||||
|
|
||||||
|
|
||||||
|
/********************************************************************************************
|
||||||
|
|
||||||
|
// save in /tmp as eml file
|
||||||
|
|
||||||
|
$fp = fopen(sys_get_temp_dir()."/email.eml", "w");
|
||||||
|
|
||||||
|
ob_end_clean();
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
$sql = "select email from v_emails where email_uuid = '".$email_uuid."'";
|
||||||
|
$prep_statement = $db->prepare($sql);
|
||||||
|
if ($prep_statement) {
|
||||||
|
$prep_statement->execute();
|
||||||
|
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
|
||||||
|
foreach ($result as &$row) {
|
||||||
|
echo $row["email"];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unset($sql, $prep_statement, $result);
|
||||||
|
|
||||||
|
$content = ob_get_contents(); //get the output from the buffer
|
||||||
|
$content = str_replace("<br />", "", $content);
|
||||||
|
|
||||||
|
ob_end_clean(); //clean the buffer
|
||||||
|
|
||||||
|
fwrite($fp, $content);
|
||||||
|
fclose($fp);
|
||||||
|
|
||||||
|
*/
|
||||||
?>
|
?>
|
||||||
Reference in New Issue
Block a user