Forum Clubic

Mail java

Bonsoir,

Je suis en train de réaliser un projet pour mon école. le sujet est de créer un Client mail qui permet de récupérer ses mail mais aussi d’en envoyer.

J’arrive à récupérer les emails qui sont sur le serveur mais c’est plutôt ensuite que la tache se complique.

Je reçoit les emails dans un seul bloc et je n’arrive pas a délimiter le corps de l’email. Et je n’arrive pas décoder certaine partie.
J’aimerais vraiment avoir votre aide car je n’y arrive vraiment pas du tout

Merci.

Pourtant avec l’API java.mail tu as tout ce qu’il faut pour faire le client, même l’envoi. Te reste plus qu’à faire l’IHM?

Enfaite , comme c’est un projet universitaire , je n’ai pas le droit d’utiliser JAVA MAIL.

Je doit tout recorder.

K.

C’est quoi qui te pose problème actuellement?

(exactement, car tu restes vague, pour moi là, ça peut être de tout ou rien :))

j’ai un projet universitaire qui consiste à réaliser un client MAIL.

Ma partie est la réception des mails. J’arrive a me connecter au serveur et a récupérer mes mails mais ils sont en un seul bloc. Ainsi je n’arrive pas détecter le corps de l’email.

Exemple de mail

Le corps de l’email qui est [quote=""]
Bonjour l’ami comment vas tu ?
[/quote]
n’est délimiter par rien.

Donc mon problème est comment faire pour récupérer le corps de l’email.
Edité le 17/11/2008 à 21:21

Faudrait voir à lire complétement le standard MIME dis donc ! :wink:

www.lesnikowski.com…

En gros, la délimitation standard c’est un saut de ligne après la dernière entête.

Oki je te remercie je vais lire le manuel.

A toute

j’ai un souci , le Corps du mail commence par un saut de ligne mais il se finit par quoi ?

En principe, tu as une entête Content-Length qui te dis combien lire d’octets.

Ba ui , normalement il doit y être , mais dans aucun message je n’arrive à le récupérer.

Salut,
Il faut regarder la rfc1939 plutôt que la rfc2822, j’avais fait un petit client mail en .NET, je te montre la partie du code qui s’occupe de la récupération brut des données du mail : (je débutais dans ce langage)


    Private Sub ParseTOP()
        Dim unMessage As CPOP3Message
        Dim sizeMessage As Integer
        Dim header As String = ""
        Dim body As String = ""
        Dim id As String = ""
        Dim subject As String = ""
        Dim sender As String = ""
        Dim receiver As String = ""
        Dim first_space_pos As Integer
        Dim second_space_pos As Integer
        Dim third_space_pos As Integer

        Try
            If ParseResponse() = False Then
                Return
            End If

            ' récupération de la taille
            first_space_pos = response.IndexOf(" ")
            second_space_pos = response.IndexOf(" ", first_space_pos + 1)
            sizeMessage = Int(response.Substring(first_space_pos + 1, second_space_pos - first_space_pos - 1))

            ' +OK 1652 octets<vbcrlf>
            '                ^
            ' ---------------|
            first_space_pos = response.IndexOf(vbCrLf)
            If first_space_pos > 0 Then
                ' debut du header
                second_space_pos = response.IndexOf(vbCrLf, first_space_pos + 1)
                'second_space_pos = first_space_pos + 1
                ' fin du header
                third_space_pos = response.IndexOf(vbCrLf & vbCrLf, second_space_pos + 1)
                ' on récupere le header
                header = response.Substring(second_space_pos + 1, third_space_pos - second_space_pos + 2)

                ' récupération de l'ID
                first_space_pos = header.IndexOf(vbCrLf & "Message-ID:")
                second_space_pos = header.IndexOf(vbCrLf, first_space_pos + 1)
                id = header.Substring(first_space_pos + 12 + 1, second_space_pos - first_space_pos - 12 - 1)

                ' récupération du titre
                first_space_pos = header.IndexOf(vbCrLf & "Subject:")
                second_space_pos = header.IndexOf(vbCrLf, first_space_pos + 1)
                subject = header.Substring(first_space_pos + 9 + 1, second_space_pos - first_space_pos - 9 - 1)

                ' récupération de l'expediteur
                first_space_pos = header.IndexOf(vbCrLf & "From:")
                second_space_pos = header.IndexOf(vbCrLf, first_space_pos + 1)
                sender = header.Substring(first_space_pos + 6 + 1, second_space_pos - first_space_pos - 6 - 1)

                ' récupération du destinataire
                first_space_pos = header.IndexOf(vbCrLf & "To:")
                second_space_pos = header.IndexOf(vbCrLf, first_space_pos + 1)
                receiver = header.Substring(first_space_pos + 4 + 1, second_space_pos - first_space_pos - 4 - 1)

                ' debut du body ... 
                second_space_pos = response.IndexOf(vbCrLf & vbCrLf, third_space_pos)
                ' s'il y en a un !!
                If second_space_pos > 0 Then
                    ' fin du body ...
                    third_space_pos = response.IndexOf(vbCrLf & vbCrLf & "." & vbCrLf, second_space_pos + 1)
                    ' s'il y en a un !! (déjà tombé sur ce cas)
                    If third_space_pos > 0 Then
                        body = response.Substring(second_space_pos + 2, third_space_pos - second_space_pos - 1)
                    End If
                End If
            End If

            ' un parsing plus complet est nécéssaire pour un vrai client mail, je ne fait que vérifier que le body déclare bien la page html
            If body.StartsWith("<HTML>") = False Then
                body = body.Insert(0, "<HTML> <HEAD><meta http-equiv=""content-language"" content=""fr"" /> <meta http-equiv=""content-Type"" content=""text/html;CHARSET=8859-1"" /></HEAD> ")
            End If
            If body.EndsWith("</HTML>") = False Then
                body = body.Insert(body.Length, "</HTML>")
            End If
            body = body.Replace(vbCrLf & vbCrLf, "<br />")

            unMessage = New CPOP3Message()
            unMessage.sizeMessage = sizeMessage
            unMessage.header = header
            unMessage.message = body
            unMessage.id = id
            unMessage.subject = subject
            unMessage.sender = sender
            unMessage.receiver = receiver
            Me._CPOP3Messages.Add(unMessage)


        Catch ex As Exception
            Debug.Print("ParseTOP:: response ==> " & response.Substring(0, 2000) & " ex ==> " & ex.Message)
            Throw New Exception("ParseTOP:: response ==> " & response.Substring(0, 1000) & " ex ==> " & ex.Message)
        End Try


    End Sub

Tu prends tout entre le premier saut de ligne et le point final . c’est bien ça ?

Oui, c’est ce que j’ai fait, apres, un vrai client mail parse réellement le contenu, perso, ça marchait ainsi pour les mails, même un peu complexe :

http://sbougribate.free.fr/Files/Images/client_pop3.jpg

Comment as tu fais pour gerer HTML dans ton projet.

Si tu dois le faire, saches que le html est déjà géré en Swing, et tu dois le faire si le mime type est type/html.

Maintenant si on vous demande de refaire ça aussi, ben have fun :slight_smile:

Pour afficher l’html, j’ai utilisé le composant WebBrowser des winforms, en Java, tu as un projet équivalent, le DJ Project. (aucun support natif via swing)

Okay merci bien pour toutes ces informations. Il m’en reste une mais c’est juste avoir une piste et pas la réponse car j’aime bien quand même chercher.

Certain sujets sont crypte en ISO 8859-1 .

Je ne comprends pas comment faire pour le decrypter . J’avais utilisé Charset mais cela ne marchait pas.

J’aimerai savoir si Charset est une bonne solution ou il faut en chercher une autre .Merci

Par défaut, c’est toujours du US-ASCII. Si c’est de l’iso, ou autre, tu devrais avoir un encodage spécial (genre %7F).

Le mieux est de ne pas se poser de question sur le format et de convertir le format source vers l’utf8 (ou l’Unicode)

Yep. Mais sans le format d’entrée, pour le corps du mail, tu risques d’avoir des problèmes :slight_smile: et pour le sujet notamment, c’est US-ASCII + Encodage, donc faut savoir le gérer ou pas.