Jump to content
Sign in to follow this  
arnoweb2

Problème PHP: envoyer email avec pièce jointe PDF

Rate this topic

Recommended Posts

Bonjour,

J'ai mis en place un script PHP me permettant d'envoyer automatiquement les emails stockés dans ma base de données.

Tout marche bien au niveau du script sauf un petit problème d'affichage des entête de l'email.

- Avec les messageries Yahoo, Gmail et Msn, l'email est bien présenté sauf l'instruction "Content-Transfer-Encoding:8bit" qui s'affiche au dessus du texte de l'email

- Avec Mozilla Thunderbird, j'ai cela qui s'affiche "Content-Type: text/plain;charset=ISO-8859-1 Content-Transfer-Encoding:8bit"

et la pièce jointe est corrompu et affiche un grand nombre de lignes du type "JVBERi0xLjQKJcfsj6IKNSAwIG9i"

Pour que cela soit plus concret, voici mon code ci-dessous.

Manque t-il des instructions ? y a t-il une erreur ? Problème d'encodage ?

----------------------------------------------------------------------------------------------------------


// Indiquer ici le fichier contenant les accès à la base de données
include("mainfile.php");

// Indiquer ici les informations du candidat (nom, email, ville, ...)
define('_NOM_COMPLET','XXXXXXXX');
define('_EMAIL','XXXXXXXX');
define('_PORTABLE','XXXXXXXXXXX');
define('_FIXE','XXXXXXXXXXX');
define('_ADRESSE','XXXXXXXXXXX');

// Requête SQL permettant d'accéder à tous les emails avec leurs correspondances
$sql = "SELECT * FROM samy_emailing";
$query = mysql_query($sql);

// On démarre la boucle, c'est à dire que le système va envoyer 1 par 1 les emails gràce à l'instruction WHILE
while($send = mysql_fetch_assoc($query)) {

// Initialisation des données pour l'email
$email = $send['email'];
$societe = $send['societe'];
$titre = $send['titre'];
$nom = $send['nom'];

$destinataire = $email;
$subject = 'XXXXXXXXXXX';
$headers = "";
$headers .= "From: "._EMAIL."\r\n";
$headers .= "Reply-To: "._EMAIL."\r\n";
$headers .= "Return-Path: "._EMAIL."\r\n";
$headers .= "Content-Type: multipart/mixed;";
$headers .= "boundary=\"aaaaaaaaaa\"\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$message = "";
$message .= "--aaaaaaaaaa\r\n";
$message .= "Content-Type: text/plain;";
$message .= "charset=ISO-8859-1\r\n\n";
$message .= "Content-Transfer-Encoding:8bit\r\n";
$message .= "\r\n";
$message .= $titre." ".$nom.", \r\n\nJe me rapproche de vous pour vous témoigner mon désir de rejoindre ".$societe.". En effet, fort dune mission réussie en agence de conseil en communication chez Community (références à disposition) dans le cadre de mon Master à Euromed Management (spécialisation média et événementiel), je suis à la recherche dun poste chez un annonceur, dans la communication ou le marketing en région parisienne.\n\n\n";
$message .= "Je vous invite à découvrir mon profil et ma présentation personnelle au fil des pièces-jointes, qui sauront, je lespère, vous convaincre de maccorder un entretien en illustrant mes compétences et valeurs mobilisables chez ".$societe.".\n\n\n";
$message .= "Chez Community, j'ai pu tester avec succès mes capacités de conseil en communication auprès de grands groupes. Je suis intervenu sur divers aspects de leurs communications : événementiel, relations publiques, mise en uvre dun partenariat à l'international, création de supports de communication, recommandations stratégiques ou encore suivi budgétaire. Mon client et ma hiérarchie ont su apprécier ma quête de qualité du service et de liens de confiance grâce à mes habiletés relationnelles et rédactionnelles, ma rigueur et ma pro activité.\n\n\n";
$message .= "Par ailleurs, j'ai effectué dans le cadre de mon Master, un stage de veille marketing chez FieldTurf Tarkett, durant lequel j'ai eu la chance de répondre directement au directeur marketing. Ce fut, pour moi, loccasion daiguiser mon anglais, mes capacités danalyse et de synthèse des diverses composantes des marchés (volumes, valeurs, segments).\n\n\n";
$message .= "Convaincu de ladéquation de nos valeurs, je saurai mintégrer à vos projets et équipes pour fournir de la plus value à vos produits ou services en contribuant à la résolution de vos problématiques de communication ou marketing.\n\n\n";
$message .= "Je vous propose de venir vous rencontrer à la date de votre choix afin de préciser mon profil et vos besoins existants. Si vous nêtes pas en période active de recrutement et que mon profil vous intéresse, je pense que nous rencontrer nous fera gagner du temps le jour où votre besoin émergera.\n\n\n";
$message .= "Je reste à votre disposition dans cette perspective ou pour tout complément d'information et vous prie de croire, Madame ou Monsieur, en l'assurance de mes plus sincères salutations.\n\n\n";
$message .= _NOM_COMPLET."\n"._PORTABLE."\n"._FIXE."\n"._ADRESSE."\n"._EMAIL."\r\n";
$message .= "\r\n";
$message .= "--aaaaaaaaaa\r\n";
$message .= "Content-Type: application/octet-stream;";
$message .= "name=\"2009_CV_S.pdf\"\r\n";
$message .= "Content-Transfer-Encoding:base64\r\n";
$message .= "Content-Disposition:attachment;";
$message .= "filename=\"2009_CV_S.pdf\"\r\n";
$message .= "\r\n";
$fichier = fopen("2009_CV_S.pdf","rb");
$donnees = fread($fichier,filesize("2009_CV_S.pdf"));
fclose($fichier);
$donnees = chunk_split(base64_encode($donnees));
$message .= "$donnees\r\n";
$message .= "\r\n";
$message .= "--aaaaaaaaaa--\r\n";


$email = mail($destinataire,$subject,$message,$headers);

echo 'Envoyé OK pour '.$destinataire.'<br>';

}

Merci pour votre aide :-)

Edited by arnoweb2
Merci d'utiliser la balise CODEBOX pour les codes longs (captain_torche)

Share this post


Link to post
Share on other sites

Au minimum tu as déjà un "\r\n\n" à la fin de ton Content-Type text/plain qui est évidemment incorrect. Ca devrait au moins résoudre le premier problème, probablement le deuxième aussi.

Jacques.

Share this post


Link to post
Share on other sites

J'ai mis:

$message .= "Content-Type: text/plain\r\n";

à la place de :

$message .= "Content-Type: text/plain;";

mais ça ne règle pas le problème :-(

Share this post


Link to post
Share on other sites

Euh, non, c'est pas ça, c'est à la ligne suivante il y a un \r\n\n et il faut un \r\n.

Jacques.

Share this post


Link to post
Share on other sites

Merci pour ton aide :-)

J'ai testé et ça a peut-être permis de supprimer une ligne de l'entête.

- Sur la messagerie Yahoo et Gmail c'est nickel.

- Sur Hotmail, j'ai le début du corps du mail supprimé ("bonjour...") et la pièce jointe est à 0Ko

- Sur Mozilla Thunderbird, j'ai :

"Content-Type: text/plain;charset=ISO-8859-1

Content-Transfer-Encoding:8bit"

avant le texte et la pièce jointe est interprété comme un fichier texte nommé Partie1.2

Bizarre.

Share this post


Link to post
Share on other sites

Quelques trucs à essayer:

- virer le \r\n à la fin des headers (du dernier header) qui est superflu, me semble-t-il

- il me semble que le \r\n à la fin du fichier est de trop aussi, pas sûr, flemme d'aller vérifier la spec.

Ceci dit, il serait probablement plus simple d'utiliser un module qui fait ça tout seul, non? La doc php conseille PEAR::Mail_Mime http://pear.php.net/package/Mail_Mime

Jacques.

Share this post


Link to post
Share on other sites

J'ai virer \r\n comme tu m'as dit à la fin du header.

J'ai fait des tests pour virer \r\n après le fichier mais rien de concluant.

Ca marche sur Yahoo et Gmail mais toujours pas

- sur hotmail (début du texte coupé + pièce jointe à 0ko)

- sur Mozilla Thunderbird (en tête visible et pièce jointe transformé en fichier txt)

Merci en tout cas !

Share this post


Link to post
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
Sign in to follow this  

×
×
  • Create New...