Transfert d'un e-mail

Petit nouveau ! | 8 Messages

08 juin 2011, 11:43

Bonjour,

J'ai un service web qui m'envoie des e-mails. Je les récupère en POP, les loggue en BDD et les supprime de la BAL. Mais dans le cas où parmi ces e-mails il y en a qui ne proviennent pas du service web, je veux pouvoir les renvoyer à Mme Dugenou (non, aucun lien de parenté :D ).

Du coup, comme j'ai le "mail brut", il n'y a pas un moyen simple de le renvoyer, juste en changeant l'adresse du destinataire ? Ca parle à quelqu'un ? J'ai fait une recherche Google mais je ne trouve rien d'intéressant...

Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 juin 2011, 13:57

salut,

a priori non pas de fonction de ce type dans l'extension imap je dirais simplement qu'il "suffit" de lire le contenu du mail, l’entête et de renvoyer un nouveau mail ;)


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 8 Messages

08 juin 2011, 15:41

Pour la partie "renvoyer un nouveau mail" justement, tu penses faire comment ? A faire avec imap_mail_compose ? Et si j'ai des pièces jointes ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 juin 2011, 19:53

oui ou simplement avec imap_mail

après je connais trop l'extension imap, j'ai trouvé des chose sur le net tel que http://www.phpcs.com/codes/EXTRAIRE-PIE ... 36798.aspx

d'ailleur y a un sujet ce le forum php4 php-deprecated/encodage-des-pieces-jointes-t28537.html

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 8 Messages

09 juin 2011, 15:46

J'ai finalement décomposé le mail en plusieurs parties : texte, html et les pièces jointes pour pouvoir reconstituer un nouveau mail et l'envoyer. Je trouvais ça fastidieux, mais je crois que c'est la seule méthode. Je pensais pouvoir juste changer le header du mail et le renvoyer... mais non.

Merci pour ton aide moogli :wink:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 juin 2011, 16:46

de rien :)
Il en faut peu pour être heureux ......

Petit nouveau ! | 3 Messages

20 mars 2013, 12:52

it work !
$header=imap_fetchheader($rcm,$nummail);
$body = imap_body($rcm, $nummail, FT_INTERNAL | FT_PEEK);

$body=ereg_replace("\r","",$body);
$header=ereg_replace("\r","",$header);

$ret = mail("[email protected]","mail transfert",$body,$header); 
echo "ret mail=$ret\n";
Note: (http://www.php.net/manual/fr/function.mail.php)

Si le message n'est pas reçu, essayez d'utiliser uniquement un caractère LF (\n). Quelques agents de transfert de mail Unix (par exemple » qmail) remplacent le caractère LF par le caractère CRLF automatiquement (ce qui revient à doubler le caractère CR si le caractère CRLF est utilisé). Ceci doit être un dernier recours car cela ne correspond pas à la » RFC 2822.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 mars 2013, 17:43

Même pas deux ans de retard .... :mrgreen:
Il en faut peu pour être heureux ......

Petit nouveau ! | 3 Messages

20 mars 2013, 17:54

Oui, j'avais bien vu, mais au moins, ca aide les suivants qui auront le même problème...
C'est le but du site je crois non ?


Et j’en profite : J'ai un autre problème.
Une fois le mail lu, il ne se supprime pas de la mailbox, du coup, il est relu à chaque fois.


J’ai bien sûr essayé imap_setflag_full dans tous les sens, mais rien n’y fait en POP3…

Si quelqu’un a une solution, (peut-être moogli ?), je suis preneur…

Merci.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

20 mars 2013, 18:06

Modération :
Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton vert "Mettre le sujet en tant que Résolu" situé en haut de la page à côté du titre du sujet.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Petit nouveau ! | 3 Messages

21 mars 2013, 13:12

je me repond pour le problème de suppression du mail.

Apparement par imap_xxx on peut pas.
Voici une solution par socket en POP3

// delete mail via connexion POP3 par socket
function deleteMail ($MailNum = 1) 
{
	global $popServer, $srcFaxMail, $srcFaxPass;
	$lenBuf = 512;  // max (RFC 1939) the returned line a POP3 server can send is 512 bytes.
	
	$sRet = 'ERR: ?';
	while (true) {
		
		// connexion
		set_time_limit(90); 
		$fp = fsockopen($popServer, 110, $errno, $errstr);
		if (!$fp) {$sRet = "fsockopen [$errno], [$errstr]"; break;}
		
		// verif connexion
		stream_set_blocking($fp,true); 
		$reply = fgets($fp, $lenBuf);
		if (strpos($reply, "+OK")===false) {$sRet = "connection [$reply]"; break;}
		
		// login
		fwrite($fp, "USER $srcFaxMail\r\n"); 
		$reply = fgets($fp,$lenBuf);
		if (!strpos($reply, "+OK")===false) {$sRet = "login(user) [$reply]"; break;}
		fwrite($fp, "PASS $srcFaxPass\r\n"); 
		$reply = fgets($fp,$lenBuf);
		if (strpos($reply, "+OK")===false) {$sRet = "login(pass) [$reply]"; break;}
		
		// check message
		fwrite($fp, "STAT\r\n"); 
		$reply = fgets($fp,$lenBuf);
		if (strpos($reply, "+OK")===false) {$sRet = "check message [$reply]"; break;}
		$Vars = explode(" ",$reply); 
		$count = $Vars[1]; 
		settype($count,"integer");
		if(!$count || $count < $MailNum) {$sRet = "check message count=$count"; break;}
		
		// delete mail
		fwrite($fp,"DELE $MailNum\r\n"); 
		$reply = fgets($fp,$lenBuf); $reply = str_replace("\r","",$reply); $reply = str_replace("\n","",$reply); 
		if (strpos($reply, "+OK")===false) {$sRet = "delete mail [$reply]"; break;}
		
		$sRet = 'OK';
		break;
	}
	
	// close
	fwrite($fp,"QUIT\r\n"); 
	$reply = fgets($fp,$lenBuf);
	fclose($fp); 
	return $sRet;
}