dcsimg
If you got problem with decoding ...
0 posts in topic
Flat View  Flat View
TOPIC ACTIONS:
 

Posted By:   Laurent_Michot
Posted On:   Tuesday, June 5, 2001 02:20 AM

Due to Javamail bug 4201203, API can't decode correctly mails sent with few e-mailers.(some versions of IMP, dtmail ...)It's because of a too strict interpretation of RFC 2047. I've written a little method that avoid the problem. For example to get the subject of a message use getHeader("subject") instead of getSubject and use the correctDecoding method. It's not optimised at all but it works in most of cases ... If you have any pb or comment mail to private String correctDecoding (String str) { // Le décodage n'est effectué que si la chaîne d'entrée // a été mal décodée ... if (str.indexOf("=?")!=-1 && str.indexOf("?=")!=-1) { StringTokenizer strTok   More>>

Due to Javamail bug 4201203, API can't decode correctly mails sent with few e-mailers.(some versions of IMP, dtmail ...)It's because of a too strict interpretation of RFC 2047. I've written a little method that avoid the problem. For example to get the subject of a message use getHeader("subject") instead of getSubject and use the correctDecoding method. It's not optimised at all but it works in most of cases ... If you have any pb or comment mail to

			
private String correctDecoding (String str)
{

// Le décodage n'est effectué que si la chaîne d'entrée
// a été mal décodée ...

if (str.indexOf("=?")!=-1 && str.indexOf("?=")!=-1)
{
StringTokenizer strTok = new StringTokenizer(str," ");
String token = null;
StringBuffer strBuf = new StringBuffer("");

while (strTok.hasMoreTokens())
{
while (strTok.hasMoreTokens() && ((token=strTok.nextToken()).indexOf("=?")==-1 || token.indexOf("?=")==-1))
strBuf.append(token+" ");

if (token.indexOf("=?")!=-1 && token.indexOf("?=")!=-1)
{
String tokenSauv=null;

while(token.indexOf("=?")!=-1 && token.indexOf("?=")!=-1)
{
// Recherche du début de la chaîne codée
// Ajout de la chaîne non codée si elle existe

int indexDeb = token.indexOf("=?");
strBuf.append(token.substring(0,indexDeb));
token = token.substring(indexDeb);

// Recherche de la fin de la chaîne codée
// Attention, il ne faut pas confondre la fin
// du mot codé avec le début d'un caractère
// qui suit le '?' de fermeture du type de codage
// (P ou Q)

// Permet d'éviter de rencontrer un '?='
// qui ne signifie pas la fin du mot codé

int codeIndex;

if ((codeIndex=token.indexOf("?Q?"))==-1)
codeIndex=token.indexOf("?P?");

int indexFin=token.indexOf("?=",codeIndex+3);

String codedStr=token.substring(0,indexFin+2);
token=token.substring(indexFin+2);

try
{
strBuf.append(MimeUtility.decodeText(codedStr));
}
// Si la chaîne est mal codée, on la renvoie brute
catch(java.io.UnsupportedEncodingException uEE)
{
strBuf.append(codedStr);
}
}
if (!token.equals(""))
strBuf.append(token);
}
}
return strBuf.toString();
}
else
return str;

}


laurent.michot@alinto.com    <<Less
About | Sitemap | Contact