Page 1 sur 1

Problème avec les email reçus

Posté : 05 juin 2007, 18:22
par Cobra52
Bonjour à tous,

J'utilise Thunderbird 1.5.0.12 et j'ai un problème de messages reçus illisibles.

J'utilise un script "tout fait".
Lors de l'utilisation du formulaire de contact (entre autre), les mails que je reçois par ce form sont illisibles sous thunderbird et impeccables sous yahoo (je n'ai pas outlook).

Ce que je recois comme email sous TB (source et message) :
------------------------------------------------------------
From - Sat Jun 02 16:57:06 2007
X-Account-Key: account3
X-UIDL: UID72-1178815587
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Return-Path: <[email protected]>
Delivered-To: [email protected]
X-Spam-Checker-Version: SpamAssassin 3.1.8 (2007-02-13) on xxxxxxx.haisoft.net
X-Spam-Level:
X-Spam-Status: No, score=0.5 required=4.0 tests=BAYES_00,HEADER_COUNT_CTYPE,
HTML_MIME_NO_HTML_TAG,MIME_BASE64_NO_NAME,MIME_HTML_ONLY,NO_RELAYS
autolearn=no version=3.1.8
Received: (qmail 13975 invoked by uid 48); 2 Jun 2007 16:56:34 +0200
To: [email protected]
Subject: Confirmation d'inscription sur xxxxxxxx.com
X-PHP-Script: www.xxxxxx.com/register.php for xxxx.xxxx.xxxxxx.xxxxxx
Date: Sat, 2 Jun 2007 16:56:34 +0200
From: [email protected] <[email protected]>
Reply-to: [email protected]
Message-ID: <[email protected]>
X-Priority: 3
X-Mailer: xxxxxxx
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/html; charset="iso-8859-1"
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: BASE64
X-Antivirus: avast! (VPS 000746-2, 01/06/2007), Inbound message
X-Antivirus-Status: Clean

PCEtLQpCb25qb3VyIGRmZGZkZmQgZGZkZiwJCQkJCQkJCQkJCQpNZXJjaSBkZSB2b3VzIMOqdHJl

IGVucmVnaXN0csOpIHN1ciBBZGp1ZGlYLgkJCQoJCQkJCQkJCQkJCQkJCQkJCQkKVm9zIGluZm9y

bWF0aW9ucyBkJ2VucmVnaXN0cmVtZW50IDoJCQkJCQkJCQkKCQkJCQkJCQkJCQkJCQkJCQkJCk5v

bSBkJ3V0aWxpc2F0ZXVyIDogZGZkZmRmCQkJCQkJCQkKTW90IGRlIHBhc3NlIDogPCBMZSBtb3Qg

ZGUgcGFzc2UgcXVlIHZvdXMgYXZleiBjaG9pc2kgPgkJCQkJCQkJCQkKCQkJCQkJCQkJCQkJCQkJ

CQkJClZldWlsbGV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBhZmluIGRlIGNvbmZp

cm1lciB2b3RyZSBpbnNjcmlwdGlvbiBldCAJCmFj

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

Voici la source du script d'email :
$htmlfont = "<font face=\"Verdana, Arial, Helvetica\" size=\"2\">";
function htmlmail($to, $subject, $msg, $sender, $hmsg = "", $sendMail=TRUE) {
	global $siteurl, $setts, $htmlfont, $currentVersion;

	## set date
	$tz = date("Z");
    $tzs = ($tz < 0) ? "-" : "+";
    $tz = abs($tz);
    $tz = ($tz/3600)*100 + ($tz%3600)/60;
    $sendDate = sprintf("%s %s%04d", date("D, j M Y H:i:s"), $tzs, $tz);
	
	$uniq_id = md5(uniqid(time()));

	## create the message body
	if ($hmsg == "") $hmsg = $msg;
	$htmlmsg .= "<!--\n$msg\n-->\n";
	$htmlmsg .= "<html><body><img src=\"" . $setts['siteurl'] . "images/logo.gif\"><p>$htmlfont" . $hmsg . "</body></html>";

#####  Cette partie n'est pas concernée

	if ($setts['mailer']=="sendmail"&&$sendMail) {
		## send through the UNIX Sendmail function
		$Sendmail = $setts['sendmail_path'];
	
		## create header
		$header = "";
		$header .= "Date: ".$sendDate."\n";
		$header .= "Return-Path: ".$sender."\n";
		$header .= "To: ".$to."\n"; 
		$header .= "From: ".$sender." <".$sender.">\n"; 

		## admin BCC
		if ($setts['bcc']=="Y") $header .= "Bcc: ".$setts['adminemail']."\n";

		$header .= "Reply-to: ".$sender."\n";
		$header .= "Subject: ".$subject."\n";
		$header .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $_SERVER['SERVER_NAME'], "\n");
		$header .= "X-Priority: 3\n";
		$header .= "X-Mailer: AdjudiX \n";
		$header .= "MIME-Version: 1.0\n";
		$header .= "Content-Transfer-Encoding: 7bit\n";
		$header .= sprintf("Content-Type: %s; charset=\"%s\"","text/html","iso-8859-1");
		$header .= "\n\n";

		if ($sender != "")
			$sendmail = sprintf("%s -oi -f %s -t", $Sendmail, $sender);
		else
			$sendmail = sprintf("%s -oi -t", $Sendmail);

		if(!@$mail = popen($sendmail, "w")) {
			echo "Could not execute: " . $Sendmail;
		}
		
		fputs($mail, $header);
		fputs($mail, $htmlmsg);
        
		$result = pclose($mail) >> 8 & 0xFF;
		if($result != 0) {
			echo "Could not execute: " . $Sendmail;
		}
######  Partie concernée
	} else if ($setts['mailer']=="mail"&&$sendMail) {
		## send through the PHP mail() function
		## create header
		$boundary[1] = "b1_" . $uniq_id;
		$boundary[2] = "b2_" . $uniq_id;
	
		$header = "";
		$header .= "Date: ".$sendDate."\n";
		$header .= "Return-Path: ".$sender."\n";
		$header .= "From: ".$sender." <".$sender.">\n";

		## admin BCC
		if ($setts['bcc']=="Y") $header .= "Bcc: ".$setts['adminemail']."\n";

		$header .= "Reply-to: ".$sender."\n";
		$header .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $_SERVER['SERVER_NAME'], "\n");
		$header .= "X-Priority: 3\n";
		$header .= "X-Mailer: AdjudiX \n";
		$header .= "MIME-Version: 1.0\n";
		$header .= "Content-Transfer-Encoding: 7bit\n";
		$header .= sprintf("Content-Type: %s; charset=\"%s\"","text/html","iso-8859-1");
	
		$params = sprintf("-oi -f %s",$sender);
		if (strlen(ini_get("safe_mode"))<1) {
			$old_from = ini_get("sendmail_from");
			ini_set("sendmail_from",$sender);
			$result = @mail($to, $subject, $htmlmsg, $header, $params);
		} else {
			$result = @mail($to, $subject, $htmlmsg, $header);
		}
		if (isset($old_from)) ini_set("sendmail_from",$old_from);
		if (!$result) echo "Mail Sending Failed..";
	}
}


Je n'arrive pas a trouver le problème.

Merci pour votre aide.

Edit :
Je pense avoir trouver la source du problème.
Mon hébergeur doit rajouter ces 3 lignes :
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: BASE64

Car elles ne sont pas créées par le script.
De plus, en vérifiant sur des emails reçus il y a 15 jours, ces 3 lignes là n'existaient pas et les mails étaient bien lisibles.
J'espère qu'il pourra revenir à la config d'origine.

Posté : 06 juin 2007, 06:28
par jpaul
Bonjour,

Sauf erreur de ma part, le message contient une pièce jointe. Si c'est bien le cas, le problème doit venir du fait qu'il manque les 'boundary' voir : http://www.commentcamarche.net/faq/suje ... ece-jointe

Bonne continuation,

Posté : 06 juin 2007, 11:39
par Cobra52
Bonjour,

Non, le message ne contient pas de pièce jointe.
Il n'y a aucune mention de cela dans le script d'envoi.

Merci. :wink:

Re: Problème avec les email reçus

Posté : 06 juin 2007, 11:58
par jpaul
D'accord mais dans ce cas comment expliquer la présence de ceci :
PCEtLQpCb25qb3VyIGRmZGZkZmQgZGZkZiwJCQkJCQkJCQkJCQpNZXJjaSBkZSB2b3VzIMOqdHJl

IGVucmVnaXN0csOpIHN1ciBBZGp1ZGlYLgkJCQoJCQkJCQkJCQkJCQkJCQkJCQkKVm9zIGluZm9y

bWF0aW9ucyBkJ2VucmVnaXN0cmVtZW50IDoJCQkJCQkJCQkKCQkJCQkJCQkJCQkJCQkJCQkJCk5v

bSBkJ3V0aWxpc2F0ZXVyIDogZGZkZmRmCQkJCQkJCQkKTW90IGRlIHBhc3NlIDogPCBMZSBtb3Qg

ZGUgcGFzc2UgcXVlIHZvdXMgYXZleiBjaG9pc2kgPgkJCQkJCQkJCQkKCQkJCQkJCQkJCQkJCQkJ

CQkJClZldWlsbGV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBhZmluIGRlIGNvbmZp

cm1lciB2b3RyZSBpbnNjcmlwdGlvbiBldCAJCmFj


qui en faisant un copier coller pour obtenir ce code :
$str = 'PCEtLQpCb25qb3VyIGRmZGZkZmQgZGZkZiwJCQkJCQkJCQkJCQpNZXJjaSBkZSB2b3VzIMOqdHJl

IGVucmVnaXN0csOpIHN1ciBBZGp1ZGlYLgkJCQoJCQkJCQkJCQkJCQkJCQkJCQkKVm9zIGluZm9y

bWF0aW9ucyBkJ2VucmVnaXN0cmVtZW50IDoJCQkJCQkJCQkKCQkJCQkJCQkJCQkJCQkJCQkJCk5v

bSBkJ3V0aWxpc2F0ZXVyIDogZGZkZmRmCQkJCQkJCQkKTW90IGRlIHBhc3NlIDogPCBMZSBtb3Qg

ZGUgcGFzc2UgcXVlIHZvdXMgYXZleiBjaG9pc2kgPgkJCQkJCQkJCQkKCQkJCQkJCQkJCQkJCQkJ

CQkJClZldWlsbGV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBhZmluIGRlIGNvbmZp

cm1lciB2b3RyZSBpbnNjcmlwdGlvbiBldCAJCmFj';
echo base64_decode($str);
donne à l'exécution :
Veuillez cliquer sur le lien ci-dessous afin de confirmer votre inscription et ac
Pour pouvoir en dire plus, il faudrait savoir comment sont fabriqués les paramètres $msg et $hmsg de la fonction htmlmail.

Re: Problème avec les email reçus

Posté : 06 juin 2007, 12:18
par Cobra52
D'accord mais dans ce cas comment expliquer la présence de ceci :
PCEtLQpCb25qb3VyIGRmZGZkZmQgZGZkZiwJCQkJCQkJCQkJCQpNZXJjaSBkZSB2b3VzIMOqdHJl

IGVucmVnaXN0csOpIHN1ciBBZGp1ZGlYLgkJCQoJCQkJCQkJCQkJCQkJCQkJCQkKVm9zIGluZm9y

bWF0aW9ucyBkJ2VucmVnaXN0cmVtZW50IDoJCQkJCQkJCQkKCQkJCQkJCQkJCQkJCQkJCQkJCk5v

bSBkJ3V0aWxpc2F0ZXVyIDogZGZkZmRmCQkJCQkJCQkKTW90IGRlIHBhc3NlIDogPCBMZSBtb3Qg

ZGUgcGFzc2UgcXVlIHZvdXMgYXZleiBjaG9pc2kgPgkJCQkJCQkJCQkKCQkJCQkJCQkJCQkJCQkJ

CQkJClZldWlsbGV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBhZmluIGRlIGNvbmZp

cm1lciB2b3RyZSBpbnNjcmlwdGlvbiBldCAJCmFj
Justement, c'est bien là qu'est le problème !

qui en faisant un copier coller pour obtenir ce code :
$str = 'PCEtLQpCb25qb3VyIGRmZGZkZmQgZGZkZiwJCQkJCQkJCQkJCQpNZXJjaSBkZSB2b3VzIMOqdHJl

IGVucmVnaXN0csOpIHN1ciBBZGp1ZGlYLgkJCQoJCQkJCQkJCQkJCQkJCQkJCQkKVm9zIGluZm9y

bWF0aW9ucyBkJ2VucmVnaXN0cmVtZW50IDoJCQkJCQkJCQkKCQkJCQkJCQkJCQkJCQkJCQkJCk5v

bSBkJ3V0aWxpc2F0ZXVyIDogZGZkZmRmCQkJCQkJCQkKTW90IGRlIHBhc3NlIDogPCBMZSBtb3Qg

ZGUgcGFzc2UgcXVlIHZvdXMgYXZleiBjaG9pc2kgPgkJCQkJCQkJCQkKCQkJCQkJCQkJCQkJCQkJ

CQkJClZldWlsbGV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBhZmluIGRlIGNvbmZp

cm1lciB2b3RyZSBpbnNjcmlwdGlvbiBldCAJCmFj';
echo base64_decode($str);
donne à l'exécution :
Veuillez cliquer sur le lien ci-dessous afin de confirmer votre inscription et ac
Pour pouvoir en dire plus, il faudrait savoir comment sont fabriqués les paramètres $msg et $hmsg de la fonction htmlmail.
Oui, c'est le texte de $htmlmsg (qui est un script lui aussi, mais qui ne comporte aucune pièce jointe)

Re: Problème avec les email reçus

Posté : 06 juin 2007, 13:22
par jpaul
Oui, c'est le texte de $htmlmsg (qui est un script lui aussi, mais qui ne comporte aucune pièce jointe)
Vi mais ce script doit contenir un base64_encode() ou alors quelque chose modifie le message envoyé.

A moins que de nouveaux standards (par rapport à ce que je connais) permettent d'envoyer du base64 sans l'insérer dans des boundary, le message est constitué d'une pièce jointe incomplète : chaîne en base64 (encodage permettant d'envoyer du binaire par la messagerie sendmail qui elle ne traite que de l'ascii) sans délimitation (la pièce jointe étant une chaîne de caractères encodés avec délimitation). En effet, pour que le client de messagerie qui lit le message sache qu'il faut décoder, il faut une délimitation. A moins que je ne me trompe, si le message est lisible avec Yahoo il s'agit d'une possibilité non standard de yahoo.

Si je devais résoudre ce problème, je chercherais à trouver l'endroit où se trouve l'encodage en base64 de la chaîne de caractères et j'ajouterais des boundary pour faire comme si j'avais envoyé un fichier en pièce jointe. Ou bien encore, je retirerais l'encodage en base64.

S'il n'y a aucun base64_encode() dans les scripts, ça se complique...

Le message est-il lisible sur autre boite (autre FAI) ?
Est-ce que je peux lancer ce script pour voir ce que je reçois (afin de vérifier si le problème viens de l'émission ou de la réception) ?

Re: Problème avec les email reçus

Posté : 06 juin 2007, 15:52
par Cobra52
Oui, c'est le texte de $htmlmsg (qui est un script lui aussi, mais qui ne comporte aucune pièce jointe)
Vi mais ce script doit contenir un base64_encode() ou alors quelque chose modifie le message envoyé.

A moins que de nouveaux standards (par rapport à ce que je connais) permettent d'envoyer du base64 sans l'insérer dans des boundary, le message est constitué d'une pièce jointe incomplète : chaîne en base64 (encodage permettant d'envoyer du binaire par la messagerie sendmail qui elle ne traite que de l'ascii) sans délimitation (la pièce jointe étant une chaîne de caractères encodés avec délimitation). En effet, pour que le client de messagerie qui lit le message sache qu'il faut décoder, il faut une délimitation. A moins que je ne me trompe, si le message est lisible avec Yahoo il s'agit d'une possibilité non standard de yahoo.

Si je devais résoudre ce problème, je chercherais à trouver l'endroit où se trouve l'encodage en base64 de la chaîne de caractères et j'ajouterais des boundary pour faire comme si j'avais envoyé un fichier en pièce jointe. Ou bien encore, je retirerais l'encodage en base64.

S'il n'y a aucun base64_encode() dans les scripts, ça se complique...

Le message est-il lisible sur autre boite (autre FAI) ?
Est-ce que je peux lancer ce script pour voir ce que je reçois (afin de vérifier si le problème viens de l'émission ou de la réception) ?
"Vi mais ce script doit contenir un base64_encode() ou alors quelque chose modifie le message envoyé."
Voila, c'est ce que je dis depuis le début :-)
Le serveur modifie les $header en y ajoutant ces 3 lignes :
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: BASE64

-----------------------------------------------------------------------------------------------------------------
Voici la réponse de mon hébergeur :
Lorsque les headers ne sont pas complet ou mal formé, le serveur complete la fonction mail.
Il est donc possible qu'il manque des infos dans vos headers.

Essayez des les specifier directement et completement comme dans les exemples ici :
http://fr2.php.net/manual/fr/r...
-----------------------------------------------------------------------------------------------------------------

Le problème est que cette portion de script fonctionnait très bien le 15 mai, car j'ai effectué des tests, et n'a plus fonctionné à compté du 01 juin, sans que j'ai modifié la portion de script.
Donc je suis convaincu que l'hébergeur à modifié quelque chose sur le serveur, mais quoi ?

Quant à cette réponse :
"Essayez des les specifier directement et completement comme dans les exemples ici : ..."
Ne serait-il pas plus simple de me donner la config du serveur concernant la fonction mail() ????

Posté : 06 juin 2007, 18:05
par Cobra52
Bon, j'ai renvoyé un mail à l'hébergeur pour connaître la config de la fonction mail().

Posté : 06 juin 2007, 20:11
par jpaul
Oui mais ce que je crains c'est que cet ajout soit fait par le serveur parce que le message contient du base64.
Peut être que l'hébergeur a fait une modif qui fait que quelque chose qui n'était pas protocolaire et qui marchait avant par un grand hazard ne marche plus après correction d'un autre problème...
Et si c'est le cas, vous risquez de perdre du temps pour mettre ça évidence.

Y a-t-il un forum ou un groupe de news pour cete hébergeur où le problème pourrait être soulevé (si c'est une erreur de l'hébergeur, il y a de fortes chances pour que tu ne soie pas le seul à en pâtir) ?
Au fait c'est qui cet hébergeur ?
As-tu vérifié ce que contiennent $msg et $hmsg au moment de l'envoi ?

Posté : 06 juin 2007, 20:38
par Cobra52
oui, les 3 lignes sont ajoutées par le serveur. Et je suis certain que l'hébergeur a fait une modif.
Et j'aimerais bien la connaître, ce qui me permettrait d'apporter les corrections nécessaires.

Parce que là, je navigue à vue !!

Non pas de forum ni newsgroup. Quant au nom, pour le moment, je m'abstiens ;-)
$htmlmsg .= "<!--\n$msg\n-->\n";
$msg contient le message sous la forme texte
et
$htmlmsg .= "<html><body><img src=\"" . $setts['siteurl'] . "images/logo.gif\"><p>$htmlfont" . $hmsg . "</body></html>";
$hmsg contient le message en html

J'ai retiré tous les $header et j'ai reçu le mail en texte et en html (l'un en dessous de l'autre)
et
sous cette forme pour le format texte :
Si vous possédez un site internet, vous pouvez insérer l'url de votre ...
la phrase d'origine :
Si vous possédez un site internet, vous pouvez insérer l'url de votre ....

Les é correspondent au charset=UTF-8 ?

Merci pour l'aide :wink:

Posté : 07 juin 2007, 12:45
par Cobra52
Je m'adresse à ceux qui possèdent un dédié et qui connaissent la config de la fonction mail() du php.ini

Si vous utilisiez cette partie de code php, auriez-vous un quelconque soucis de lecture du message en html, svp ? merci
$header = "Date: ".$sendDate."\n";
$header .= "Return-Path: ".$sender."\n";
$header .= "From: ".$sender." <".$sender.">\n";
$header .= "Reply-to: ".$sender."\n";
$header .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $_SERVER['SERVER_NAME'], "\n");
$header .= "X-Priority: 3\n";
$header .= "X-Mailer: xxxx\n";
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Transfer-Encoding: 8bit\n";
$header .= "Content-Type: text/html; charset=iso-8859-1\n\n";
	
$result = @mail($to, $subject, $htmlmsg, $header);
d'après mon hébergeur c'est de la faute à une erreur dans mes $header ? bien entendu sans me dire laquelle.

Merci à vous.