Problème de pièce jointe, problème de type mime ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème de pièce jointe, problème de type mime ?

par Nico128 » 27 mars 2009, 11:57

Alors il y a eu un miracle entre temps.

Aujourd'hui je ressaye, je reprend exactement ce que j'ai fait, je reçois le mail et je tente d'ouvrir la pièce jointe, et ça marche !!

par Nico128 » 25 mars 2009, 11:21

Voilà la methode qui gpre l'envoie d'email :
    /**
    * Sends the mail.
    *
    * @param  array  $recipients
    * @param  string $type OPTIONAL
    * @return mixed
    */
    function send($recipients, $type = 'mail')
    {
        if (!defined('CRLF')) {
            $this->setCrlf($type == 'mail' ? "\n" : "\r\n");
        }

        if (!$this->is_built) {
            $this->buildMessage();
        }

        switch ($type) {
            case 'mail':
                $subject = '';
                if (!empty($this->headers['Subject'])) {
                    $subject = $this->_encodeHeader($this->headers['Subject'], $this->build_params['head_charset']);
                    unset($this->headers['Subject']);
                }

                // Get flat representation of headers
                foreach ($this->headers as $name => $value) {
                    $headers[] = $name . ': ' . $this->_encodeHeader($value, $this->build_params['head_charset']);
                }

                $to = $this->_encodeHeader(implode(', ', $recipients), $this->build_params['head_charset']);

                if (!empty($this->return_path)) {
                    $result = mail($to, $subject, $this->output, implode(CRLF, $headers), '-f' . $this->return_path);
                } else {
                    $result = mail($to, $subject, $this->output, implode(CRLF, $headers));
                }
                
                // Reset the subject in case mail is resent
                if ($subject !== '') {
                    $this->headers['Subject'] = $subject;
                }
                
                // Return
                return $result;
                break;

            case 'smtp':
                require_once(dirname(__FILE__) . '/smtp.php');
                require_once(dirname(__FILE__) . '/RFC822.php');
                $smtp = &smtp::connect($this->smtp_params);
                
                // Parse recipients argument for internet addresses
                foreach ($recipients as $recipient) {
                    $addresses = Mail_RFC822::parseAddressList($recipient, $this->smtp_params['helo'], null, false);
                    foreach ($addresses as $address) {
                        $smtp_recipients[] = sprintf('%s@%s', $address->mailbox, $address->host);
                    }
                }
                unset($addresses); // These are reused
                unset($address);   // These are reused

                // Get flat representation of headers, parsing
                // Cc and Bcc as we go
                foreach ($this->headers as $name => $value) {
                    if ($name == 'Cc' OR $name == 'Bcc') {
                        $addresses = Mail_RFC822::parseAddressList($value, $this->smtp_params['helo'], null, false);
                        foreach ($addresses as $address) {
                            $smtp_recipients[] = sprintf('%s@%s', $address->mailbox, $address->host);
                        }
                    }
                    if ($name == 'Bcc') {
                        continue;
                    }
                    $headers[] = $name . ': ' . $this->_encodeHeader($value, $this->build_params['head_charset']);
                }
                // Add To header based on $recipients argument
                $headers[] = 'To: ' . $this->_encodeHeader(implode(', ', $recipients), $this->build_params['head_charset']);
                
                // Add headers to send_params
                $send_params['headers']    = $headers;
                $send_params['recipients'] = array_values(array_unique($smtp_recipients));
                $send_params['body']       = $this->output;

                // Setup return path
                if (isset($this->return_path)) {
                    $send_params['from'] = $this->return_path;
                } elseif (!empty($this->headers['From'])) {
                    $from = Mail_RFC822::parseAddressList($this->headers['From']);
                    $send_params['from'] = sprintf('%s@%s', $from[0]->mailbox, $from[0]->host);
                } else {
                    $send_params['from'] = 'postmaster@' . $this->smtp_params['helo'];
                }

                // Send it
                if (!$smtp->send($send_params)) {
                    $this->errors = $smtp->errors;
                    return false;
                }
                return true;
                break;
        }
    }
Pour voir d'autres fichiers :
mimePart.php
smtp.php
htmlMimeMail.php
des exemples

par julian » 20 mars 2009, 18:26

Peux-tu coller tout le code qui gère l'envoi d'e-mail ?

par Nico128 » 20 mars 2009, 15:20

Phpmailer et htmlMimeMail se ressemble énormément...J'ai regardé un peu et les noms des methodes sont les mêmes, c'est plus ou moins la même chose. Aussi j'ai utiliser un code déjà tout prêt tiré d'un topic de ce forum je crois.

Et le fichier est bien dans le même répertoire car ma pièce jointe pèse le même poids, et avec Gmail lorsque j'affiche mon PDF il y a qu'une moitier qui s'affiche. Avec Acrobat, il ne peut pas être lu.

Les images posent aussi problème, mais pas les fichiers textes...

par julian » 20 mars 2009, 09:35

De mon côté je n'ai pas de problème avec phpMailer, que j'utilise assez souvent.
Je ne connais pas du tout htmlMimeMail, mais a priori c'est similaire.

Juste un truc à s'assurer. Quand tu fais
$attachment = $mail->getFile('Absence.pdf');
le fichier 'Absence.pdf' est bien dans le même répertoire que la page qui l'appelle ?

Problème de pièce jointe, problème de type mime ?

par Nico128 » 19 mars 2009, 12:36

Hello!

J'utilise la class htmlMimeMail pour envoyer des mails. Je reçois bien un mail, j'ai pas de problème de ce côté là.

Je désire envoyer une pièce jointe. Il y a une méthode de prévu et la pièce jointe est bien attaché au mail, mais impossible de l'ouvrir.

Le fichier fait plus ou moins la bonne taille, ce qui veux dire qu'il a été trouvé (genre il aurait 1ko ça aurait été une erreur de chemin). J'ai ouvert le fichier original et celui en pièces jointe avec un éditeur hexadécimal et je vois que c'est pas la même chose.

J'aimerais envoyer un PDF... Et il arrive partiellement à être lu. Avec une image, impossible à la lire. Voici mon code pour attacher la pièce jointe :
	// Fichier attaché
	$attachment = $mail->getFile('Absence.pdf');
	$mail->addAttachment($attachment, 'Absence.pdf', 'application/pdf', 'base64');
Et la méthode est celle-ci :
	// Fichier attaché
	$attachment = $mail->getFile('Absence.pdf');
	$mail->addAttachment($attachment, 'Absence.pdf', 'application/pdf', 'base64');
En fait le fichier en pièce jointe est encodé... Ou je ne sais quoi, vu que c'est plus le même. Est-ce que c'est un problème de type mime ? Comment résoudre mon problème ?

[EDIT] J'ai essayé avec Phpmailer. J'ai simplement repris la page d'exemple, remplacer les paramètrs SMTP, et le png qui est envoyé n'arrive pas à être lu sur Gmail. Chez infomaniak non plus, et il y a un gros bordel dans l'email.

Ca peut venir du serveur smtp ?

Merci d'avance