Bonjour,

je vous expose mon probleme : j'envoie un fichier pdf en piece jointe avec une fonction mail() standard.

Quand les mails sont dirigés vers des comptes gérés par notre ami microsoft, la piece jointe est mal transmise, affichant une taille abérante (style 250 O alors que le fichier en fait 40 Ko normallement).

Je pense que c'est dut au passage à la ligne qui est traité différemment par les serveurs Microsoft et j'ai donc rajouté ce code avant la construction du mail :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $to)) // On filtre les serveurs qui présentent des bogues.
{
	$passage_ligne = "\r\n";
}
else
{
	$passage_ligne = "\n";
}
Avec ce code cela fonctionne parfaitement donc pour les adresses hotmail/live ou msn.

Hélas ca a vite sa limite dès que l'on veut envoyer vers des noms de domaines propres à une société et qui sont gérés par microsoft (notre société étant partenaire microsoft, on est sur office 365 et toute la clique.. merci mes tests internes sont donc FAIL. -_-)

Impossible de filtrer ou de savoir... et les pieces jointes sont illisibles.

Je vous met le reste de mon code pour que vous puissiez avoir le tout.

J'espere qu'il existe une solution alternative, ou un moyen de pouvoir envoyer tout ceci sans controle, et que ca soit lisible.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// To
$to = $id_compte; //Déclaration de l'adresse de destination.
 
// Subject
$subject = 'Confirmation de paiement';
 
// clé aléatoire de limite
$boundary = md5(uniqid(microtime(), TRUE));
 
 
// Filtrage serveur
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $to)) // On filtre les serveurs qui présentent des bogues.
{
	$passage_ligne = "\r\n";
}
else
{
	$passage_ligne = "\n";
}
 
// Headers
$headers = "From: \"informations@mondomaine.com\"<informations@mondomaine.com>".$passage_ligne;
$headers .= "Reply-to: \"informations@mondomaine.com\" <informations@mondomaine.com>".$passage_ligne;
$headers .= 'Mime-Version: 1.0'.$passage_ligne;
$headers .= 'Content-Type: multipart/mixed;boundary='.$boundary.$passage_ligne;
$headers .= $passage_ligne;
 
// Message (texte affiché pour les clients ne supportant pas le type MIME)
$msg = ''.$passage_ligne.$passage_ligne;
 
// Message HTML
$msg .= '--'.$boundary.$passage_ligne;
$msg .= "Content-Type: text/html; charset=utf-8".$passage_ligne;
$msg .= "<html><head></head>
<body>
 
MON TEXTE DU MAIL ICI
 
</body></html>".$passage_ligne;
 
// Pièce jointe 1
$file_name = "../facture/".$no_fact_gen.".pdf";
if (file_exists($file_name))
{
	$file_type = filetype($file_name);
	$file_size = filesize($file_name);
 
	$handle = fopen($file_name, 'r') or die('File '.$file_name.'can t be open');
	$content = fread($handle, $file_size);
	$content = chunk_split(base64_encode($content));
	$f = fclose($handle);
 
	$msg .= '--'.$boundary.$passage_ligne;
	$msg .= 'Content-type: '.$file_type.';name='.str_replace('../facture/', 'Facture-', $file_name).$passage_ligne;
	$msg .= 'Content-transfer-encoding: base64'.$passage_ligne.$passage_ligne;
	$msg .= $content.$passage_ligne;
}
// Fin
$msg .= '--'.$boundary.$passage_ligne;
 
// Function mail()
mail($to, $subject, $msg, $headers);