J'ai des courriels envoyés via un encodage base64 et un encodage 8bit. Je me demandais comment je pouvais vérifier l'encodage du message en utilisant imap_fetchstructure (je fais cela depuis environ deux heures, donc perdu) et ensuite le décoder correctement.
Gmail et Mailbox (application sur iOS) l'envoient en 8bit tandis que l'application Mail de Windows 8 l'envoie en base64. Dans tous les cas, j'ai besoin de décoder s'il s'agit de 8 bits ou de base64 en détectant le type d'encodage utilisé.
Utilisation de PHP 5.1.6 (oui, je devrais mettre à jour, j'ai été occupé).
Je n'ai pas vraiment de code à montrer. C'est tout ce que j'ai :
<?php
$hostname = '{********:993/imap/ssl}INBOX';
$username = '*********';
$password = '******';
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to server: ' . imap_last_error());
$emails = imap_search($inbox,'ALL');
if($emails) {
$output = '';
rsort($emails);
foreach($emails as $email_number) {
$overview = imap_fetch_overview($inbox,$email_number,0);
$message = imap_fetchbody($inbox,$email_number,2);
$struct = imap_fetchstructure($inbox, $email_number);
$output.= '<div class="toggle'.($overview[0]->seen ? 'read' : 'unread').'">';
$output.= '<span class="subject">'.$overview[0]->subject.'</span> ';
$output.= '<span class="from">'.$overview[0]->from.'</span>';
$output.= '<span class="date">on '.$overview[0]->date.'</span>';
$output.= '</div>';
/* output the email body */
$output.= '<div class="body">'.$message.'</div>';
}
echo $output;
}
imap_close($inbox);
?>