Bonjour,

Un de mes scripts php envoit un mail directement sur mon serveur smtp via fsockopen(). Le mail contient du texte et un pdf +/-10Ko en pièce jointe.

Voici le code concerné :

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
$fp = fsockopen ('192.168.254.2', 25, $errno, $errstr, 30);
 
		if (!$fp) {
			echo "Erreur création socket";
 
		} 
 
		else {
			// Lecture du fichier pdf
			$ff = fopen("https://domaine/fichier.pdf", "r");
			$fileHeaders = get_headers("https://https://domaine/fichier.pdf", 1);
			$fsize = $fileHeaders["Content-Length"];
			$attachment = fread($ff, $fsize);
			fclose($ff);
			$attachment = chunk_split(base64_encode($attachment));
			// Fin lecture fichier pdf
 
			fputs ($fp, "MAIL FROM:<xyz@mondomaine.com>\n");
			fputs ($fp, "RCPT TO:<$mail>\n");
			fputs ($fp, "DATA\n");
 
			$boundary = "=" . md5(uniqid(rand()));
 
			fputs ($fp, "Subject: TEST\nFrom: blablabla<xyz@blablabla.com>\nTo: $contact <$mail>\nContent-Type: multipart/mixed; boundary=\"$boundary\"\nMIME-Version: 1.0\n\n");
 
			fputs($fp, "--$boundary\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\nMessage test\n\n");
 
			fputs ($fp, "--$boundary\nContent-Disposition: attachment; filename=fichier.pdf\nContent-Type: application/pdf; name=fichier.pdf\nContent-Transfer-Encoding: base64\n\n$attachment\n\n");
 
			fputs ($fp, "--$boundary--\n.\n");
		}
		fclose ($fp);
Lorsque j'utilise le code tel qu'il est là, je ne reçois aucune erreur de php mais le message n'arrive jamais... ou n'est-il du moins jamais parti.

Si je rajoute la ligne suivante avant de clore $fp
Je reçois les infos de mon SMTP mais la transaction n'a pas lieu jusqu'au bout, j'ai juste un 250 OK jusqu'à RCPT TO alors que j'attends un "Message queud as". Mais dans ce cas le message part bien et est reçu même si le pdf est corrompu.

J'ai essayé pas mal de choses pour 100% de réussite sans le fread (pas propre sur une page à présenter) mais sans succès!

Si quelqu'un a une idée!

Merci!!