Webmaster Hub: Pas de pièces jointes dans Outlook - Webmaster Hub

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Pas de pièces jointes dans Outlook Noter : -----

#1 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Voir le blog
  • Groupe : Admin
  • Messages : 6 722
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 22 juin 2011 - 16:12

[Edit]Le code fonctionnel est téléchargeable dans le second message de la discussion

Je suis en train de développer une fonction d'envoi d'e-mails qui gère les pièces jointes.
Mes tests sur gmail et hotmail sont concluants, mais sur Outlook 2010, je ne reçois pas de pièce jointe.

Pourriez-vous tester la fonction et m'aider à trouver ce qui ne va pas ?
 	function envoi_mail($nom_from, $mail_from, $to, $subject, $data = null,  $template_html = null, $template_txt = null, $pj = array()) {
		/*
			2011-06-22,	Marc Brillault
			String	$nom_from
				$nom_from est le nom de l'expéditeur
			String	$mail_from
				$mail_from est l'adresse e-mail de l'expéditeur
			Mixed $to
				$to est une chaîne ou un tableau contenant les emails des destinataires
				Si $to est une chaîne, elle sera convertie en tableau
			String	$subject
				$subjet est l'objet du mail
			Mixed	$data
 				Si $data est une chaîne de caractères, le mail sera envoyé  avec ce contenu, en version texte ou HTML en fonction du contenu de  $data. Les fichiers templates seront ignorés.
				Si  $data est un tableau, il doit comprendre les codes de remplacement, sous  la forme 'code' => 'valeur de remplacement', utilisés dans les  fichiers de template.
				Les templates comprennent les codes rédigés de la manière suivante : '#CODE#'
				#CODE# sera donc remplacé par $data['code']
			String	$template_html
				$template_html est le chemin vers le fichier de template pour les envois en HTML
 				Le fichier contient des chaînes du type #CODE#, qui seront  remplacées par les valeurs correspondantes du tableau $data
			String	$template_txt
				$template_txt est le chemin vers le fichier de template pour les envois en format texte brut
 				Le fichier contient des chaînes du type #CODE#, qui seront  remplacées par les valeurs correspondantes du tableau $data
			Array	$pj
				$pj est un tableau contenant les informations des pièces jointes, sous la forme suivante :
				array(
					'name'	=>	'nom_du_fichier',
					'path'	=>	'chemin/vers/le/fichier'
				)
		*/		
		$boundary	=	'_'.md5(uniqid(rand()));
		
		//	Protections contre les injections dans les en-têtes
		$nom_from	=	protege_mail($nom_from);
		$mail_from	=	protege_mail($mail_from);
		$to			=	protege_mail($to);
		$subject	=	protege_mail($subject);
		
		//	CRÉATION DES EN-TÊTES
		$headers	=	"From: $nom_from <$mail_from>\r\n";
		$headers	.=	"MIME-Version: 1.0\r\n";
		$headers	.=	"Content-Type: multipart/alternative; boundary=\"$boundary\"\r\n";
		
		//	CRÉATION DU BODY
		// $body		=	"--$boundary\nContent-Type: text/plain; charset=UTF-8\r\n\n";
		$body		=	"This is a multi-part message in MIME format.\r\n"; 
		$body		.=	"Ceci est un message est au format MIME.\r\n"; 
		
		//	CRÉATION DE LA VERSION TEXTE DU MAIL
		$texte	=	null;
		if(is_string($data) && strlen($data) == strlen(strip_tags($data)))
			$texte	=	$data;
		elseif(is_array($data) && is_file($template_txt)) {
			$texte	=	file_get_contents($template_txt);
			foreach($data as $key => $value)
				$texte	=	str_replace('#'.strtoupper($key).'#', $value, $texte);
		}
		if($texte) {
			$body	.=	"--$boundary\n";
			$body	.=	"Content-Type: text/plain; charset=\"UTF-8\"\r\n";
			$body	.=	"Content-Transfer-Encoding: 8bit\r\n";
			$body	.=	$texte;
			$body	.=	"\r\n";
		}
		
		//	CRÉATION DE LA VERSION HTML DU MAIL
		$html	=	null;
		if(is_string($data) && strlen($data) != strlen(strip_tags($data)))
			$html	=	$data;
		elseif(is_array($data) && is_file($template_html)) {
			$html	=	file_get_contents($template_html);
			foreach($data as $key => $value)
				$html	=	str_replace('#'.strtoupper($key).'#', $value, $html);
		}
		if($html) {
			$body	.=	"--$boundary\n";
			$body	.=	"Content-Type: text/html; charset=\"UTF-8\"\r\n";
			$body	.=	"Content-Transfer-Encoding: 8bit\r\n";
			$body	.=	$html;
			$body	.=	"\r\n";
		}
		
		//	GESTION DES PIÈCES JOINTES
		foreach($pj as $file) {
			if(is_file($file['path'])) {
				$body	.=	"--$boundary\r\n";
				$body	.=	"Content-Type: application; name=\"".$file['name']."\"\r\n";
				$body	.=	"Content-Transfer-Encoding: base64\r\n";
				$body	.=	"Content-Disposition: attachment; filename=\"".$file['name']."\"\r\n"
;
				$body	.=	chunk_split(base64_encode(file_get_contents($file['path']))); 
			}
		}
		
		$body	.=	"--$boundary--";
		
		if(!is_array($to))
			$to	=	array($to);
		foreach($to as $dest)
			mail($dest, $subject, $body, $headers);
	}
	
	function protege_mail($string) {
		//	http://phpsense.com/php/php-mail.html
		$injections	=	array(
			'/(\n+)/i',
			'/(\r+)/i',
			'/(\t+)/i',
			'/(%0A+)/i',
			'/(%0D+)/i',
			'/(%08+)/i',
			'/(%09+)/i'
		);
		return preg_replace($injections,'',$string);
	}


Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#2 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Voir le blog
  • Groupe : Admin
  • Messages : 6 722
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 24 juin 2011 - 12:50

C'est bon, j'ai réussi à trouver ce qui posait un souci :
- Lors d'un envoi mixte avec des pièces jointes, il y a deux "boundaries" : une première dans les en-têtes, qui va séparer le message de chaque pièce jointe, la seconde est déclarée dans le corps du message et sépare la version texte de la version HTML
- Ces deux versions (texte et HTML) doivent être entourées d'une ligne vide
- Chaque pièce jointe doit être séparée de sa déclaration par une ligne vide également.
Pour ceux qui seraient intéressés, voici le code de la fonction :
Fichier joint  envoi_mail.php (4,81 Ko)
Nombre de téléchargements : 4
Je serai ravi d'avoir vos retours.
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#3 L'utilisateur est hors-ligne   Patrick 

  • Le débordeur !
  • Groupe : Fondateur
  • Messages : 2 149
  • Inscrit(e) : 14-décembre 04
  • Genre:Homme
  • Localisation:Longchamp (21)
  • Société:Adifco

Posté 25 juin 2011 - 14:28

J'ai téléchargé ta fonction.
Je la testerai et je te ferai un retour au besoin.

++

Patrick
Devis référencement pour votre site.
Référencement avec paiement aux résultats, la première page de Google sinon rien !
Référencement pour TPE, PME/PMI et grands comptes.
Adifco est un organisme de formation agréé: HTML, CSS, PHP, MySQL, SEO, SEA, etc.
0

#4 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Voir le blog
  • Groupe : Admin
  • Messages : 6 722
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 25 juin 2011 - 22:06

Merci !
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#5 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Voir le blog
  • Groupe : Admin
  • Messages : 6 722
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 27 juin 2011 - 12:24

Je viens de mettre la fonction à jour : les accents étaient mal encodés dans les en-têtes.
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#6 L'utilisateur est hors-ligne   Patrick 

  • Le débordeur !
  • Groupe : Fondateur
  • Messages : 2 149
  • Inscrit(e) : 14-décembre 04
  • Genre:Homme
  • Localisation:Longchamp (21)
  • Société:Adifco

Posté 02 juillet 2011 - 10:27

Allez hop je prends !

Merci

++

Patrick

PS: je pense à te faire un retour dès que j'aurai un peu de temps.
Devis référencement pour votre site.
Référencement avec paiement aux résultats, la première page de Google sinon rien !
Référencement pour TPE, PME/PMI et grands comptes.
Adifco est un organisme de formation agréé: HTML, CSS, PHP, MySQL, SEO, SEA, etc.
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)