Bonjour,
Je suis en train de travailler sur une application recevant des mails, et les traitant ensuite (mon application cherche un numero precis dans un mail).
Pour ce faire j'essaie de récupérer le texte , et lorsqu'il y a un probleme de codage de le décoder pour le mettre au meme format iso.

Voici la classe qui s'occupe de l'analyse des Bodypart du message multipart :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
 
public class MessageAnalyzer {
	private BodyPart[] tableau;
	private int index;
	private String texte="";
 
	public static MessageAnalyzer analyze(Message msg){
		MessageAnalyzer retour = new MessageAnalyzer();
		try {
			StringTokenizer tempo = new StringTokenizer(msg.getContentType(),"/");
			String contenu=tempo.nextToken();
			if ("text".equals(contenu))// si le contenu du mail est du texte simple
			{
				retour.texte = (String)msg.getContent();
				retour.index=0;
			}
			else if ("multipart".equals(contenu))//si message multipart
			{
				Multipart messageMultipart = (Multipart)msg.getContent();
				retour.tableau = new BodyPart[messageMultipart.getCount()];
				for(int j=0;j<messageMultipart.getCount();j++)
				{
					retour.tableau[j] = messageMultipart.getBodyPart(j);
					System.out.println("valeur du contenu du BodyPart : "+retour.tableau[j].getContentType());
					System.out.println("valeur de la classe de msg :"+msg.getContentType());
					System.out.println("texte : valeur de contenu : "+contenu);
					System.out.println("multipart : valeur du contenu du BodyPart : "+retour.tableau[j].getContentType());
					if("text/plain".equals(retour.tableau[j].getContentType()))// si c'est un text
					{
						retour.index = j;
					}
					else if("text/hmtl".equals(retour.tableau[j].getContentType()))// si c'est un text
					{
						retour.index = j;
					}
					else retour.index=-1;//sinon je met l'index a -1
 
				}		
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (Exception e){
			System.out.println("erreur inconnue : ");
			e.printStackTrace();
		}
		return retour;
	}
 
	private MessageAnalyzer(){
	}
 
	public int getIndex() {
		return index;
	}
 
	public void setIndex(int index) {
		this.index = index;
	}
 
	public BodyPart[] getTableau() {
		return this.tableau;
	}
	private static String decodeText(final String text) throws UnsupportedEncodingException {
 
        return null == text ? text : new String(text.getBytes("iso-8859-1"));
    }
 
	public String getTextAt(int i){ //utilisé pour recuperer le texte à situé a index
		String back = null;
		if(!"".equals(this.texte)&&i==0) return texte;//si le String texte n'est pas vide et si l'index est a 0
		try 
		{
			back = (String) this.tableau[i].getContent();
			return back;//je recupere le contenu du texte
		}catch(UnsupportedEncodingException e)//en cas d'exception
		{
			try
			{
				back= MessageAnalyzer.decodeText((String) this.tableau[i].getContent());//j'essaie de decoder le texte
			} catch (UnsupportedEncodingException e1) {//et je retombe sur cette erreur pour les autres types de charset
				System.out.println("défaut de codage du texte");
				e1.printStackTrace();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (MessagingException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
 
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch(Exception e){
			System.out.println("impossible de récuperer le texte @ : "+i);
			e.printStackTrace();
		}
		return "impossible de récuperer le texte @ : "+i;
	}
et voici l'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
1/03/2007 18:33:55.375 : INFO  : MessageAnalyzer.class : FIN de l'analyse du message
défaut de codage du texte
java.io.UnsupportedEncodingException: iso-9724-9 //j'ai pas mal d'autres types d'ISO
	at sun.io.Converters.getConverterClass(Unknown Source)
	at sun.io.Converters.newConverter(Unknown Source)
	at sun.io.ByteToCharConverter.getConverter(Unknown Source)
	at sun.nio.cs.StreamDecoder$ConverterSD.<init>(Unknown Source)
	at sun.nio.cs.StreamDecoder$ConverterSD.<init>(Unknown Source)
	at sun.nio.cs.StreamDecoder.forInputStreamReader(Unknown Source)
	at java.io.InputStreamReader.<init>(Unknown Source)
	at com.sun.mail.handlers.text_plain.getContent(text_plain.java:82)
	at javax.activation.DataSourceDataContentHandler.getContent(DataHandler.java:789)
	at javax.activation.DataHandler.getContent(DataHandler.java:536)
	at javax.mail.internet.MimeBodyPart.getContent(MimeBodyPart.java:629)
	at com.orange.sce.appli.impl.MessageAnalyzer.getTextAt(MessageAnalyzer.java:95)
	at com.orange.sce.appli.impl.MailMessage.<init>(MailMessage.java:112)
	at com.orange.sce.appli.impl.MailReceiver.getMessages(MailReceiver.java:109)
	at com.orange.sce.presentation.Reception.<init>(Reception.java:78)
	at com.orange.sce.presentation.Interface$2.actionPerformed(Interface.java:501)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
Si quelqu'un a une idée je suis preneur parce que la je sais plus faire..