Mails avec indy10 : que faire lorsque le contenu au format mim n' est pas visualisé correctement

Contenu du snippet

Bonjour à tous,

suite à l' installation de mon programme "Mail Server" (qui gère la réception de mails de plusieurs adresses courrier) sur notre serveur avec Windows Server 2008 et avec Avira Antivirus Server, j' ai constaté que certains mails (assez rare quand même) au format MIM n' étaient pas visualisés correctement par les utilisateurs de mon appli "Client Mail".
Ce qui se passait est que les différentes parties du mail (plain text, html et attachments) se retrouvait en texte simple et n' étaient pas reconnues comme leur véritable nature.

Les mails en question étaient visualisés comme l' exemple si-dessous:

--_005_98580F087991A94E8688412C81BEC3D724101F0582turms1Betalft_
Content-Type: multipart/alternative;
boundary=_000_98580F087991A94E8688412C81BEC3D724101F0582turms1Betalft_
Content-Transfer-Encoding: 7bit

--_000_98580F087991A94E8688412C81BEC3D724101F0582turms1Betalft_
Content-Type: text/plain;
charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

Ol=E1 Sr Paulo

Note pf abaixo distribui=E7=E3o por tamanho para as repeti=E7=F5es. O clien=
te adicionou 100pcs para o modelo PH406 para mesma data.

Cumptos27nf+2n4FsD1lb6ce77MlsDyGiiB222itoKHe27j27VSi25ay2un67rLu7axOwbwZnH/5iEUu2+r
C2Tym7YbK00GB3ADF7yMOy9jaqu61XDiG735a730u76Xx7wMdrUc96/PS6j6CnJDcqZIca1Tq6iA
OqqsurwOC8Wzuq6fKq4A26bl+qf3iqkPi6qSeqtWnKhfvMWkKsXQSsZXAK5gbMVK/JBUq8Pwq79R
nHVjvHVh3MbS67RmrMdyTMR5hayAHMiCPMiEXMiG/AERAAA7

--_005_98580F087991A94E8688412C81BEC3D724101F0582turms1Betalft_--

.

Après une 2 jours de recherche, j' ai trouvé la solution et pourquoi le programme serveur marchait très bien jusqu' ici sur mon poste sous Windows Vista Ultimate.

La raison est que sur mon poste j' ai AVG Antivirus qui scannais et certifiais les mails reçut et donc, modifiait légèrement le "Body" des mails et cela contournait l' erreur présente dans les compos Indy10. Si je désactive la certification de mails de AVG, je constate que l' erreur survient comme sous Windows Server 2008 ...

Source / Exemple :


Je passe à la solution qui est très très compliquée pour une fois : 

Dans l' unité IdMessage.pas, il existe la fonction suivante : 
TIdMIMEBoundary.FindBoundary(AContentType: string): string;

Il suffit de rajouter le code entre les lignes // RHR BEGIN et // RHR END : 

class function TIdMIMEBoundary.FindBoundary(AContentType: string): string;
var
  s: string;
begin
  // Store in s and not Result because of Fetch semantics
  s := UpperCase(AContentType);
  {CC: Used to Fetch 'BOUNDARY=', but this failed for those with 'BOUNDARY ='}
  Fetch(s, 'BOUNDARY'); {do not localize}
  if Length(s) > 0 then begin
    s := Trim(s);
    if (Length(s) > 0) and (s[1] = '=') then begin       {do not localize}
      s := Copy(s, 2, MAXINT);
    end;
    {CC: Fix suggested by Juergen Haible - some clients add a space after the boundary,
    remove it by calling Trim(s)...}
    s := Trim(s);
    if (Length(s) > 0) and (s[1] = '"') then begin {do not localize}
      Delete(s, 1, 1);
      Result := Fetch(s, '"'); {do not localize}
    // Should never occur, and if so bigger problems but just in case we'll try
    end else begin
      Result := s;
    end;
  end else begin
    Result := s;
  end;

  // RHR BEGIN  30 October 2008
  // Sometimes Result have more than the Boundary information like the type information ...
  // For example: Result can be : '__005_98580F0879914554A845644C5544_'  + ' TYPE=MULTIPART/ALTERNATIVE'
  if pos(';', Result) > 0
  then Result := Copy(Result, 1, pos(';', Result)-1);
  // RHR END
end;

Comme vous pouvez le voir, le boundary qui permet de détecter les différentes parties (plain text, html et attachments) d' un mail ne possèdait pas dans certains cas la valeur correcte. 

A+

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.