Underscape
2009-06-14 07:30:33 UTC
Coucou,
J'essaie de me faire un petit client de messagerie mail et pour tout
dire ca va a peu pres :(
disons que pour le recuperation des messages pas de probleme avec le
sujet, date etc...
La ou je bloque c'est sur la lecture des mails.
Pour etre plus precise, sur les messages n'ayant aucune parties ou une
pas de soucis cela est relativement simple.
Par contre des qu'il s'agit d'un message MULTIPART avec piece jointe ou
juste un transfert de mails alors la bonjour la galère!
Par exemple je recois un mail MULTIPART en 2 parties
a l'aide de
$struct = imap_fetchstructure($stream, $NumMessage);
je recupere la structure de ce mail et je l'affiche :
print_r($struct);
cela donne :
stdClass Object
(
[type] => 1
[encoding] => 0
[ifsubtype] => 1
[subtype] => SIGNED
[ifdescription] => 0
[ifid] => 0
[bytes] => 50409
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => PROTOCOL
[value] => application/x-pkcs7-signature
)
[1] => stdClass Object
(
[attribute] => MICALG
[value] => sha1
)
[2] => stdClass Object
(
[attribute] => BOUNDARY
[value] => ------------ms050100070502000904020808
)
)
[parts] => Array
(
[0] => stdClass Object
(
[type] => 1
[encoding] => 0
[ifsubtype] => 1
[subtype] => MIXED
[ifdescription] => 0
[ifid] => 0
[bytes] => 42317
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => BOUNDARY
[value] => ------------040300000509010000050902
)
)
[parts] => Array
(
[0] => stdClass Object
(
[type] => 0
[encoding] => 4
[ifsubtype] => 1
[subtype] => PLAIN
[ifdescription] => 0
[ifid] => 0
[lines] => 12
[bytes] => 225
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => CHARSET
[value] => ISO-8859-1
)
[1] => stdClass Object
(
[attribute] => FORMAT
[value] => flowed
)
)
)
[1] => stdClass Object
(
[type] => 5
[encoding] => 3
[ifsubtype] => 1
[subtype] => JPEG
[ifdescription] => 0
[ifid] => 0
[bytes] => 39712
[ifdisposition] => 1
[disposition] => INLINE
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => FILENAME
[value] => 125.jpg
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => NAME
[value] => 125.jpg
)
)
)
[2] => stdClass Object
(
[type] => 0
[encoding] => 3
[ifsubtype] => 1
[subtype] => PLAIN
[ifdescription] => 0
[ifid] => 0
[lines] => 24
[bytes] => 1784
[ifdisposition] => 1
[disposition] => INLINE
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => FILENAME
[value] => a vendre.txt
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => NAME
[value] => a vendre.txt
)
)
)
)
)
[1] => stdClass Object
(
[type] => 3
[encoding] => 3
[ifsubtype] => 1
[subtype] => X-PKCS7-SIGNATURE
[ifdescription] => 1
[description] => S/MIME Cryptographic Signature
[ifid] => 0
[bytes] => 7604
[ifdisposition] => 1
[disposition] => ATTACHMENT
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => FILENAME
[value] => smime.p7s
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => NAME
[value] => smime.p7s
) ) ) ) )
Je vois donc que ce mail est en MULTIPART "([type] => 1)", qu'il est
encodé en texte "[encoding] => 0", qu'il est signé numeriquement
"[subtype] => SIGNED" et qu'il est en 2 parties.
Bon jusque la ca va, c'est maintenant que cela ce gatte.
En effet vu la structure du mail ci-dessus, comment trouvé le numéro de
la partie contenant le texte?
Car pour l'afficher "imap_fetchbody()" a besoin du numéro de partie.
J'ai regarder sur le net et franchement c'est super reduit.
Merci de votre aide
J'essaie de me faire un petit client de messagerie mail et pour tout
dire ca va a peu pres :(
disons que pour le recuperation des messages pas de probleme avec le
sujet, date etc...
La ou je bloque c'est sur la lecture des mails.
Pour etre plus precise, sur les messages n'ayant aucune parties ou une
pas de soucis cela est relativement simple.
Par contre des qu'il s'agit d'un message MULTIPART avec piece jointe ou
juste un transfert de mails alors la bonjour la galère!
Par exemple je recois un mail MULTIPART en 2 parties
a l'aide de
$struct = imap_fetchstructure($stream, $NumMessage);
je recupere la structure de ce mail et je l'affiche :
print_r($struct);
cela donne :
stdClass Object
(
[type] => 1
[encoding] => 0
[ifsubtype] => 1
[subtype] => SIGNED
[ifdescription] => 0
[ifid] => 0
[bytes] => 50409
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => PROTOCOL
[value] => application/x-pkcs7-signature
)
[1] => stdClass Object
(
[attribute] => MICALG
[value] => sha1
)
[2] => stdClass Object
(
[attribute] => BOUNDARY
[value] => ------------ms050100070502000904020808
)
)
[parts] => Array
(
[0] => stdClass Object
(
[type] => 1
[encoding] => 0
[ifsubtype] => 1
[subtype] => MIXED
[ifdescription] => 0
[ifid] => 0
[bytes] => 42317
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => BOUNDARY
[value] => ------------040300000509010000050902
)
)
[parts] => Array
(
[0] => stdClass Object
(
[type] => 0
[encoding] => 4
[ifsubtype] => 1
[subtype] => PLAIN
[ifdescription] => 0
[ifid] => 0
[lines] => 12
[bytes] => 225
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => CHARSET
[value] => ISO-8859-1
)
[1] => stdClass Object
(
[attribute] => FORMAT
[value] => flowed
)
)
)
[1] => stdClass Object
(
[type] => 5
[encoding] => 3
[ifsubtype] => 1
[subtype] => JPEG
[ifdescription] => 0
[ifid] => 0
[bytes] => 39712
[ifdisposition] => 1
[disposition] => INLINE
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => FILENAME
[value] => 125.jpg
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => NAME
[value] => 125.jpg
)
)
)
[2] => stdClass Object
(
[type] => 0
[encoding] => 3
[ifsubtype] => 1
[subtype] => PLAIN
[ifdescription] => 0
[ifid] => 0
[lines] => 24
[bytes] => 1784
[ifdisposition] => 1
[disposition] => INLINE
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => FILENAME
[value] => a vendre.txt
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => NAME
[value] => a vendre.txt
)
)
)
)
)
[1] => stdClass Object
(
[type] => 3
[encoding] => 3
[ifsubtype] => 1
[subtype] => X-PKCS7-SIGNATURE
[ifdescription] => 1
[description] => S/MIME Cryptographic Signature
[ifid] => 0
[bytes] => 7604
[ifdisposition] => 1
[disposition] => ATTACHMENT
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => FILENAME
[value] => smime.p7s
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => NAME
[value] => smime.p7s
) ) ) ) )
Je vois donc que ce mail est en MULTIPART "([type] => 1)", qu'il est
encodé en texte "[encoding] => 0", qu'il est signé numeriquement
"[subtype] => SIGNED" et qu'il est en 2 parties.
Bon jusque la ca va, c'est maintenant que cela ce gatte.
En effet vu la structure du mail ci-dessus, comment trouvé le numéro de
la partie contenant le texte?
Car pour l'afficher "imap_fetchbody()" a besoin du numéro de partie.
J'ai regarder sur le net et franchement c'est super reduit.
Merci de votre aide