envoi de mail avec pièce jointe

envoi de mail avec pièce jointe - Delphi/Pascal - Programmation

Marsh Posté le 27-07-2009 à 10:38:14    

Bonjour,
 
Je dois migrer une vieille appli en Delphi 2009, donc l'envoi de mail se fait via les composants Indy.
Mon mail part bien, et la pièce jointe aussi, mais il me reste 2 problèmes :
- le texte n'utilise pas le charset que je précise
- la pièce jointe n'utilise pas le filename que je précise
du coup je me retrouve avec un mail sans accents et une pièce jointe 'fdsbhjsk.dat' au lieu du nom de l'image.
 
voici le code :

Code :
  1. procedure TF_MAIL_TO.btnEnvoyerClick(Sender: TObject);
  2. var
  3.   i: Integer;
  4.   myMessage: TIdMessage;
  5.   myText: TIdText;
  6.   myAttachment: TIdAttachment;
  7. begin
  8.   {Paramètres serveur SMTP}
  9.   mySMTP.ConnectTimeout := 2000;
  10.   mySMTP.Host := 'A320';
  11.   mySMTP.Username := 'XXXXXX';
  12.   mySMTP.Port := 25;
  13.   {Préparation du message}
  14.   myMessage := TIdMessage.Create(nil);
  15.   try
  16.     myMessage.Encoding := meMIME;
  17.     myMessage.ContentType := 'multipart/mixed';
  18.     myMessage.From.Address := FormInit.CurrentUser.EMail;
  19.     myMessage.From.Text := 'OTC';
  20.     myMessage.ReplyTo.EMailAddresses := FormInit.CurrentUser.EMail;
  21.     myMessage.Recipients.Add.Address := edtA.Text;
  22.     myMessage.CCList.Clear;
  23.     myMessage.CCList.Add.Address := edtcc.Text;
  24.     myMessage.BCCList.Clear;
  25.     myMessage.Subject := edtObjet.Text;
  26.     myMessage.UseNowForDate := true;
  27.     {Ajout du texte}
  28.     myText := TIdText.Create(myMessage.MessageParts);
  29.     myText.Body.Assign(FTexteMail);
  30.     myText.ContentType := 'text/plain';
  31.     myText.CharSet := 'ISO-8859-1';
  32.     myText.ContentTransfer := '8bit';
  33.     {Ajout de la pièce jointe}
  34.     for i := 0 to FListImage.Count-1 do
  35.       if (FileExists(FListImage.Strings[i])) then
  36.       begin
  37.         myAttachment := TIdAttachmentFile.Create(myMessage.MessageParts,FListImage.Strings[i]);
  38.         myAttachment.ContentType := 'image/jpeg';
  39.         myAttachment.ContentDisposition := 'attachment';
  40.         myAttachment.FileName := ExtractFileName(FListImage.Strings[i]);
  41.       end;
  42.     {Envoi du mail}
  43.     try
  44.       mySMTP.Connect;
  45.     except
  46.       MessageDlg('Impossible de se connecter au serveur mail. E-mail non envoyé à ' + edtA.Text + ' !', mtError, [mbOK], 0);
  47.       ModalResult := mrCancel;
  48.     end;
  49.     mySMTP.Send(myMessage);
  50.     mySMTP.Disconnect;
  51.   finally
  52.     myMessage.Free;
  53.     Close;
  54.   end;
  55. end;


 
Si quelqu'un a une idée pour résoudre mon problème ça serait bien cool [:benjiman]

Reply

Marsh Posté le 27-07-2009 à 10:38:14   

Reply

Marsh Posté le 28-07-2009 à 12:02:56    

bon, pour le problème du charset, je n'ai toujours pas trouvé ce qui clochait, j'ai donc adopté une solution alternative.
j'envoie les mails au format html, et je remplace tous les caractères accentués par leur code html avant l'envoi (é etc...)
ça fonctionne, mais bon c'est pas cool pour les clients qui ne peuvent pas lire les mails en html :/
 
en revanche, toujours pas de soluce pour le nom de la pièce jointe :/

Reply

Marsh Posté le 28-07-2009 à 14:08:50    

# for i := 0 to FListImage.Count-1 do
#       if (FileExists(FListImage.Strings[i])) then
#       begin
#         myAttachment := TIdAttachmentFile.Create(myMessage.MessageParts,FListImage.Strings[i]);
#         myAttachment.ContentType := 'image/jpeg';
#         myAttachment.ContentDisposition := 'attachment';
#         myAttachment.FileName := ExtractFileName(FListImage.Strings[i]);
#       end;
 
y'a pas un prob de compteur là si la liste est vide ?

Reply

Marsh Posté le 28-07-2009 à 14:41:40    

non, si la liste est vide on n'entre pas dans la boucle.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed