Jump to content

Mail::Send avec piece jointe fichier Excel


Recommended Posts

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 by dib258 (see edit history)
Link to comment
Share on other sites

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...