forked from Wavyzz/dolibarr
Fix: Pb with file attachment if mail is HTML
This commit is contained in:
@@ -60,7 +60,7 @@ if (isset($_POST["action"]) && $_POST["action"] == 'update')
|
||||
/*
|
||||
* Add file
|
||||
*/
|
||||
if ($_POST['addfile'])
|
||||
if ($_POST['addfile'] || $_POST['addfilehtml'])
|
||||
{
|
||||
// Set tmp user directory
|
||||
$conf->users->dir_tmp=DOL_DATA_ROOT."/users/".$user->id;
|
||||
@@ -74,7 +74,7 @@ if ($_POST['addfile'])
|
||||
{
|
||||
if (dol_move_uploaded_file($_FILES['addedfile']['tmp_name'], $upload_dir . "/" . $_FILES['addedfile']['name'],0) > 0)
|
||||
{
|
||||
$mesg = '<div class="ok">'.$langs->trans("FileTransferComplete").'</div>';
|
||||
$message = '<div class="ok">'.$langs->trans("FileTransferComplete").'</div>';
|
||||
//print_r($_FILES);
|
||||
|
||||
include_once(DOL_DOCUMENT_ROOT.'/html.formmail.class.php');
|
||||
@@ -84,18 +84,20 @@ if ($_POST['addfile'])
|
||||
else
|
||||
{
|
||||
// Echec transfert (fichier d<>passant la limite ?)
|
||||
$mesg = '<div class="error">'.$langs->trans("ErrorFileNotUploaded").'</div>';
|
||||
$message = '<div class="error">'.$langs->trans("ErrorFileNotUploaded").'</div>';
|
||||
// print_r($_FILES);
|
||||
}
|
||||
}
|
||||
}
|
||||
$_GET["action"]='test';
|
||||
if ($_POST['addfile']) $_GET["action"]='test';
|
||||
if ($_POST['addfilehtml']) $_GET["action"]='testhtml';
|
||||
}
|
||||
|
||||
/*
|
||||
* Send mail
|
||||
*/
|
||||
if ($_POST['action'] == 'send' && ! $_POST['addfile'] && ! $_POST['cancel'])
|
||||
if (($_POST['action'] == 'send' || $_POST['action'] == 'sendhtml')
|
||||
&& ! $_POST['addfile'] && ! $_POST['addfilehtml'] && ! $_POST['cancel'])
|
||||
{
|
||||
$error=0;
|
||||
|
||||
@@ -108,19 +110,14 @@ if ($_POST['action'] == 'send' && ! $_POST['addfile'] && ! $_POST['cancel'])
|
||||
$subject = $_POST['subject'];
|
||||
$body = $_POST['message'];
|
||||
|
||||
// Get list of attached files
|
||||
$listofpaths=array();
|
||||
$listofnames=array();
|
||||
$listofmimes=array();
|
||||
if (! empty($_SESSION["listofpaths"])) $listofpaths=split(';',$_SESSION["listofpaths"]);
|
||||
if (! empty($_SESSION["listofnames"])) $listofnames=split(';',$_SESSION["listofnames"]);
|
||||
if (! empty($_SESSION["listofmimes"])) $listofmimes=split(';',$_SESSION["listofmimes"]);
|
||||
if (! empty($_FILES['addedfile']['tmp_name']))
|
||||
{
|
||||
$listofpaths[] = $_FILES['addedfile']['tmp_name'];
|
||||
$listofnames[] = $_FILES['addedfile']['name'];
|
||||
$listofmimes[] = $_FILES['addedfile']['type'];
|
||||
}
|
||||
// Create form object
|
||||
include_once('../html.formmail.class.php');
|
||||
$formmail = new FormMail($db);
|
||||
|
||||
$attachedfiles=$formmail->get_attached_files();
|
||||
$filepath = $attachedfiles['paths'];
|
||||
$filename = $attachedfiles['names'];
|
||||
$mimetype = $attachedfiles['mimes'];
|
||||
|
||||
if (empty($_POST["frommail"]))
|
||||
{
|
||||
@@ -137,8 +134,8 @@ if ($_POST['action'] == 'send' && ! $_POST['addfile'] && ! $_POST['cancel'])
|
||||
if (! $error)
|
||||
{
|
||||
// Le message est-il en html
|
||||
$msgishtml=-1; // Unknown by default
|
||||
if (eregi('[ \t]*<html>',$message)) $msgishtml=1;
|
||||
$msgishtml=0; // Message is not HTML
|
||||
if ($_POST['action'] == 'sendhtml') $msgishtml=1; // Force message to HTML
|
||||
|
||||
// Pratique les substitutions sur le sujet et message
|
||||
$subject=make_substitutions($subject,$substitutionarrayfortest);
|
||||
@@ -146,7 +143,7 @@ if ($_POST['action'] == 'send' && ! $_POST['addfile'] && ! $_POST['cancel'])
|
||||
|
||||
require_once(DOL_DOCUMENT_ROOT."/lib/CMailFile.class.php");
|
||||
$mailfile = new CMailFile($subject,$sendto,$email_from,$body,
|
||||
$listofpaths,$listofmimes,$listofnames,
|
||||
$filepath,$mimetype,$filename,
|
||||
'', '', 0, $msgishtml,$errors_to);
|
||||
|
||||
$result=$mailfile->sendfile();
|
||||
@@ -253,6 +250,10 @@ else
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=testconnect">'.$langs->trans("DoTestServerAvailability").'</a>';
|
||||
}
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=test&mode=init">'.$langs->trans("DoTestSend").'</a>';
|
||||
if ($conf->fckeditor->enabled)
|
||||
{
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=testhtml&mode=init">'.$langs->trans("DoTestSendHTML").'</a>';
|
||||
}
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit">'.$langs->trans("Modify").'</a>';
|
||||
print '</div>';
|
||||
|
||||
@@ -277,7 +278,7 @@ else
|
||||
print '<br>';
|
||||
}
|
||||
|
||||
// Affichage formulaire de TEST
|
||||
// Affichage formulaire de TEST simple
|
||||
if ($_GET["action"] == 'test')
|
||||
{
|
||||
print '<br>';
|
||||
@@ -315,11 +316,54 @@ else
|
||||
$formmail->clear_attached_files();
|
||||
}
|
||||
|
||||
$formmail->show_form();
|
||||
$formmail->show_form('addfile');
|
||||
|
||||
print '<br>';
|
||||
}
|
||||
|
||||
// Affichage formulaire de TEST HTML
|
||||
if ($_GET["action"] == 'testhtml')
|
||||
{
|
||||
print '<br>';
|
||||
print_titre($langs->trans("DoTestSendHTML"));
|
||||
|
||||
// Cree l'objet formulaire mail
|
||||
include_once(DOL_DOCUMENT_ROOT."/html.formmail.class.php");
|
||||
$formmail = new FormMail($db);
|
||||
$formmail->fromname = $conf->global->MAIN_MAIL_EMAIL_FROM;
|
||||
$formmail->frommail = $conf->global->MAIN_MAIL_EMAIL_FROM;
|
||||
$formmail->withfromreadonly=0;
|
||||
$formmail->withsubstit=0;
|
||||
$formmail->withfrom=1;
|
||||
$formmail->witherrorsto=1;
|
||||
$formmail->withto=$user->email?$user->email:1;
|
||||
$formmail->withtocc=1;
|
||||
$formmail->withtopic=$langs->trans("Test");
|
||||
$formmail->withtopicreadonly=0;
|
||||
$formmail->withfile=2;
|
||||
$formmail->withbody=$langs->trans("Test");
|
||||
$formmail->withbodyreadonly=0;
|
||||
$formmail->withcancel=1;
|
||||
$formmail->withdeliveryreceipt=1;
|
||||
$formmail->withfckeditor=1;
|
||||
// Tableau des substitutions
|
||||
$formmail->substit=$substitutionarrayfortest;
|
||||
// Tableau des parametres complementaires du post
|
||||
$formmail->param["action"]="sendhtml";
|
||||
$formmail->param["models"]="body";
|
||||
$formmail->param["mailid"]=$mil->id;
|
||||
$formmail->param["returnurl"]=DOL_URL_ROOT."/admin/mails.php";
|
||||
|
||||
// Init list of files
|
||||
if (! empty($_REQUEST["mode"]) && $_REQUEST["mode"]=='init')
|
||||
{
|
||||
$formmail->clear_attached_files();
|
||||
}
|
||||
|
||||
$formmail->show_form('addfilehtml');
|
||||
|
||||
print '<br>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -154,9 +154,10 @@ class FormMail
|
||||
|
||||
/**
|
||||
* \brief Affiche la partie de formulaire pour saisie d'un mail en fonction des propri<72>t<EFBFBD>s
|
||||
* \param addfileaction Name of action when posting file attachments
|
||||
* \remarks this->withfile: 0=No attaches files, 1=Show attached files, 2=Can add new attached files
|
||||
*/
|
||||
function show_form()
|
||||
function show_form($addfileaction='addfile')
|
||||
{
|
||||
global $conf, $langs, $user;
|
||||
|
||||
@@ -391,7 +392,7 @@ class FormMail
|
||||
//print '<td><td align="right">';
|
||||
print "<input type=\"file\" class=\"flat\" name=\"addedfile\" value=\"".$langs->trans("Upload")."\"/>";
|
||||
print ' ';
|
||||
print '<input type="submit" class="button" name="addfile" value="'.$langs->trans("MailingAddFile").'">';
|
||||
print '<input type="submit" class="button" name="'.$addfileaction.'" value="'.$langs->trans("MailingAddFile").'">';
|
||||
//print '</td></tr></table>';
|
||||
}
|
||||
print "</td></tr>\n";
|
||||
@@ -420,11 +421,22 @@ class FormMail
|
||||
print '<input type="hidden" name="message" value="'.$defaultmessage.'">';
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($this->withfckeditor)
|
||||
{
|
||||
// Editeur wysiwyg
|
||||
require_once(DOL_DOCUMENT_ROOT."/lib/doleditor.class.php");
|
||||
$doleditor=new DolEditor('message',$defaultmessage,280,'dolibarr_notes','In',true);
|
||||
$doleditor->Create();
|
||||
}
|
||||
else
|
||||
{
|
||||
print '<textarea cols="72" rows="8" name="message">';
|
||||
print $defaultmessage;
|
||||
print '</textarea>';
|
||||
}
|
||||
|
||||
}
|
||||
print "</td></tr>\n";
|
||||
}
|
||||
|
||||
|
||||
@@ -198,6 +198,7 @@ ServerAvailableOnIPOrPort=Server is available at address <b>%s</b> on port <b>%s
|
||||
ServerNotAvailableOnIPOrPort=Server is not available at address <b>%s</b> on port <b>%s</b>
|
||||
DoTestServerAvailability=Test server connectivity
|
||||
DoTestSend=Test sending
|
||||
DoTestSendHTML=Test sending HTML
|
||||
ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Error, can't user option @ if sequence {yy}{mm} or {yyyy}{mm} is not in mask.
|
||||
|
||||
# Modules
|
||||
|
||||
@@ -197,6 +197,7 @@ ServerAvailableOnIPOrPort=Serveur disponible a l'adresse <b>%s</b> sur le port <
|
||||
ServerNotAvailableOnIPOrPort=Serveur non disponible <20> l'adresse <b>%s</b> sur le port <b>%s</b>
|
||||
DoTestServerAvailability=Tester disponibilit<69> serveur
|
||||
DoTestSend=Tester envoi
|
||||
DoTestSendHTML=Tester envoi HTML
|
||||
ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Erreur, ne peut utiliser l'option @ si la s<>quence {yy}{mm} ou {yyyy}{mm} n'est pas dans le masque.
|
||||
|
||||
# Modules
|
||||
|
||||
@@ -73,6 +73,8 @@ class CMailFile
|
||||
{
|
||||
dolibarr_syslog("CMailFile::CMailfile: from=$from, to=$to, addr_cc=$addr_cc, addr_bcc=$addr_bcc, errors_to=$errors_to");
|
||||
dolibarr_syslog("CMailFile::CMailfile: subject=$subject, deliveryreceipt=$deliveryreceipt, msgishtml=$msgishtml");
|
||||
|
||||
// Define if there is at least one file
|
||||
foreach ($filename_list as $i => $val)
|
||||
{
|
||||
if ($filename_list[$i])
|
||||
@@ -90,7 +92,7 @@ class CMailFile
|
||||
if (eregi('^win',PHP_OS)) $this->eol="\r\n";
|
||||
if (eregi('^mac',PHP_OS)) $this->eol="\r";
|
||||
|
||||
// Detect if message is HTML
|
||||
// Detect if message is HTML (use fast method)
|
||||
if ($msgishtml == -1)
|
||||
{
|
||||
$this->msgishtml = 0;
|
||||
@@ -132,11 +134,10 @@ class CMailFile
|
||||
}
|
||||
|
||||
// On defini $this->headers et $this->message
|
||||
//$this->headers = $smtp_headers . $mime_headers . $this->eol;
|
||||
//$this->message = $text_body . $text_encoded . $this->eol;
|
||||
$this->headers = $smtp_headers . $mime_headers;
|
||||
$this->message = $text_body . $text_encoded;
|
||||
// On nettoie le header pour qu'il ne se termine pas un retour chariot.
|
||||
|
||||
// On nettoie le header pour qu'il ne se termine pas par un retour chariot.
|
||||
// Ceci evite aussi les lignes vides en fin qui peuvent etre interpretees
|
||||
// comme des injections mail par les serveurs de messagerie.
|
||||
$this->headers = eregi_replace("[\r\n]+$","",$this->headers);
|
||||
@@ -177,7 +178,7 @@ class CMailFile
|
||||
dolibarr_syslog("CMailFile::sendfile addr_to=".$this->addr_to.", subject=".$this->subject);
|
||||
dolibarr_syslog("CMailFile::sendfile header=\n".$this->headers);
|
||||
//dolibarr_syslog("CMailFile::sendfile message=\n".$message);
|
||||
//$this->dump_mail();
|
||||
$this->dump_mail();
|
||||
|
||||
$errorlevel=error_reporting();
|
||||
error_reporting($errorlevel ^ E_WARNING); // Desactive warnings
|
||||
@@ -245,10 +246,13 @@ class CMailFile
|
||||
*/
|
||||
function dump_mail()
|
||||
{
|
||||
if (@is_writeable("/tmp")) // Avoid fatal error on fopen with open_basedir
|
||||
global $dolibarr_main_data_root;
|
||||
|
||||
if (@is_writeable($dolibarr_main_data_root)) // Avoid fatal error on fopen with open_basedir
|
||||
{
|
||||
$fp = fopen("/tmp/dolibarr_mail","w");
|
||||
$fp = fopen($dolibarr_main_data_root."/dolibarr_mail","w");
|
||||
fputs($fp, $this->headers);
|
||||
fputs($fp, $this->eol); // This eol is added by the mail function, so we add it in log
|
||||
fputs($fp, $this->message);
|
||||
fclose($fp);
|
||||
}
|
||||
@@ -282,12 +286,13 @@ class CMailFile
|
||||
|
||||
if ($this->msgishtml)
|
||||
{
|
||||
$out.= "Content-Type: text/html; charset=".$conf->character_set_client.$this->eol;
|
||||
if (! $this->atleastonefile) $out.= "Content-Type: text/html; charset=".$conf->character_set_client.$this->eol;
|
||||
$out.= "Content-Transfer-Encoding: 8bit".$this->eol;
|
||||
}
|
||||
else
|
||||
{
|
||||
$out.= "Content-Transfer-Encoding: 7bit".$this->eol;
|
||||
if (! $this->atleastonefile) $out.= "Content-Type: text/plain; charset=".$conf->character_set_client.$this->eol;
|
||||
$out.= "Content-Transfer-Encoding: 8bit".$this->eol;
|
||||
}
|
||||
|
||||
dolibarr_syslog("CMailFile::write_smtpheaders smtp_header=\n".$out);
|
||||
@@ -338,11 +343,11 @@ class CMailFile
|
||||
$out.= "--" . $this->mime_boundary . $this->eol;
|
||||
if ($this->msgishtml)
|
||||
{
|
||||
$out.= "Content-Type: text/html; charset=".$conf->charset_output.$this->eol;
|
||||
$out.= "Content-Type: text/html; charset=".$conf->character_set_client.$this->eol;
|
||||
}
|
||||
else
|
||||
{
|
||||
$out.= "Content-Type: text/plain; charset=".$conf->charset_output.$this->eol;
|
||||
$out.= "Content-Type: text/plain; charset=".$conf->character_set_client.$this->eol;
|
||||
}
|
||||
$out.= $this->eol;
|
||||
}
|
||||
|
||||
@@ -1217,7 +1217,7 @@ function img_mime($file)
|
||||
if (eregi('\.(png|bmp|jpg|jpeg|gif)',$file)) $mime='image';
|
||||
if (eregi('\.(mp3|ogg|au)',$file)) $mime='audio';
|
||||
if (eregi('\.(avi|mvw|divx|xvid)',$file)) $mime='video';
|
||||
if (eregi('\.(zip|rar|divx|xvid)',$file)) $mime='archive';
|
||||
if (eregi('\.(zip|rar|gz|tgz|z|cab)',$file)) $mime='archive';
|
||||
$alt='Mime type: '.$mime;
|
||||
|
||||
$mime.='.png';
|
||||
|
||||
Reference in New Issue
Block a user