dib258 Posted March 2, 2015 Share Posted March 2, 2015 (edited) Bonjour, Dans le cadre du developement d'un module pour un client, je dois generer un fichier excel avec l'id des produits et la quantite. J'ai donc genere ce fichier et je dois l'envoyer par mail au client avec le fichier en piece jointe. Voici le code que j'ai pour l'instant en ayant regarder a gauche et a droite comment utiliser la fonction Mail::send de prestashop qui n'est pas tres bien documentee. // Verification if the file really exist if (file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$this->_path.'/files/export-order-'.$id_order.'.xlsx')) { // Read the file content $file = $_SERVER['DOCUMENT_ROOT'].'/'.$this->_path.'/files/export-order-'.$id_order.'.xlsx'; $file_size = filesize($file); $handle = fopen($file, "r"); $content = fread($handle, $file_size); fclose($handle); //$content = chunk_split(base64_encode($content)); $attach = array(); $attach['content'] = $content; $attach['name'] = $file; $attach['mime'] = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; // Sending the email to owner if(!Mail::Send( (int) Configuration::get('PS_LANG_DEFAULT'), 'new_order', "Nouvelle commande (".$id_order.") Sotoys de ".$firstname." ".$lastname, array( '{firstname}' => $firstname, '{lastname}' => $lastname, '{email}' => $email, '{message}' => 'Un fichier excel a ete rajoute en piece-jointe' ), '[email protected]', 'Johny Doe', '[email protected]', 'Admin mysite.be', $attach, NULL, _PS_MAIL_DIR_, false )) { Logger::addLog('[ClickNShip] Error sending the email', 3); } } else { Logger::addLog('[ClickNShip] Error file doesnt exist', 3); } Ce code est dans un hook qui est apres que la commande ai ete cloturee (hookActionOrderStatusPostUpdate). Lorsque je simule une commande sur mon serveur test (pas en local), je ne recois pas de mail et quand je vais regarder les log dans la base de donnee j'ai le message suivant : "[ClickNShip] Error sending the email". Donc la methode statique Mail::send a renvoye false. Voyez vous une erreur quelconque ou un parametrage de celle-ci qui n'est pas correct ? Y-a-t-il un endroit a aller consulter pour voir les log de Mail::send ? Merci d'avance. Edited March 2, 2015 by dib258 (see edit history) Link to comment Share on other sites More sharing options...
fred-vinapresta Posted March 2, 2015 Share Posted March 2, 2015 Bonjour, pas sur mais est ce qu'il ne faut pas mettre les emails de reception dans un array? Link to comment Share on other sites More sharing options...
dib258 Posted March 2, 2015 Author Share Posted March 2, 2015 En me basant sur plusieurs post de ce forum resolu, je ne vois pas l'utilisation d'un array pour les adresse mail $to, $from. https://www.prestashop.com/forums/topic/266318-send-email-with-attachment/ https://www.prestashop.com/forums/topic/334226-solved-how-to-send-custom-email-with-attachment/?do=findComment&comment=1690826 Et dans la methode send de la classe Mail, je vois qu'on peut utiliser un array dans le cas ou il faut envoyer a plusieurs destinaires. Je sais pas si du coup, c'est cela qui cree une erreur. Link to comment Share on other sites More sharing options...
fred-vinapresta Posted March 2, 2015 Share Posted March 2, 2015 essayez voir déja avec un array pour les mails, mais bon ca me semble plus logique que de mettre les mails dans une chaine Link to comment Share on other sites More sharing options...
dib258 Posted March 2, 2015 Author Share Posted March 2, 2015 Et tu le ferais comment ? '[email protected]', 'Johny Doe', '[email protected]', 'Admin mysite.be', en array('[email protected]'), array('Johny Doe'), array('[email protected]'), array('Admin mysite.be'), Link to comment Share on other sites More sharing options...
dib258 Posted March 3, 2015 Author Share Posted March 3, 2015 En lisant le code de la classe Mail, je me suis rendu compte que mon bloc conditionnel contenant l'appel a la methode send, retourne une erreur a cause car cette methode retourne false si il y a une erreur mais ne retourne rien tout se passe comme prevu. J'ai donc modifie un peu mon code pour arriver a ceci : // Verification if the file really exist if (file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$this->_path.'/files/export-order-'.$id_order.'.xlsx')) { // Read the file content $file = $_SERVER['DOCUMENT_ROOT'].'/'.$this->_path.'/files/export-order-'.$id_order.'.xlsx'; $file_size = filesize($file); $handle = fopen($file, "r"); $content = fread($handle, $file_size); fclose($handle); //$content = chunk_split(base64_encode($content)); $attach = array(); $attach['content'] = $content; $attach['name'] = $file; $attach['mime'] = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; // Sending the email to owner $mail = Mail::Send( (int) Configuration::get('PS_LANG_DEFAULT'), 'new_order', "Nouvelle commande (".$id_order.") Sotoys de ".$firstname." ".$lastname, array( '{firstname}' => $firstname, '{lastname}' => $lastname, '{email}' => $email, '{message}' => 'Un fichier excel a ete rajoute en piece-jointe' ), '[email protected]', 'John Doe', '[email protected]', 'Admin mysite.be', $attach, NULL, _PS_MAIL_DIR_, false ); if($mail == false) { Logger::addLog('[ClickNShip] Error sending the email : '.$mail, 3); } } else { Logger::addLog('[ClickNShip] Error file doesnt exist', 3); } J'ai aussi essaye de mettre les email de $to, $from et les nom de $to_name et $from_name dans un array et rien ne change. Je ne recois plus de de message d'erreur via le Logger, mon fichier a attacher est bien present et je ne recois toujours pas de mail. Par contre, je recois bien les mails de confirmation de la commande. Donc cela ne provient pas d'un probleme d'envoi de mail je supposes. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now