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