[Delphi] Indy SMTP vreet geen 71-tekens-tellende regels?!

Pagina: 1
Acties:

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
Hoi,

Ik ben bezig met een programmaatje om html-mails mee te versturen voor nieuwsbrieven e.d. Klinkt op zich best eenvoudig en dat was het ook totdat indy (tenminste dat neem ik aan) begint te miepen. Ik maak normaal eerst een bestand aan met een zelfgebouwde (en een beetje hulp van wptools) editor, die sla ik op als html en vervolgens laad ik dat bestand weer met idmessage.body.loadfromfile.
Met het opslaan van dit bestand gaat alles nog goed. Het vage komt als ik hem ga versturen. Om een of andere reden vreet hij regels met 71 tekens niet?! |:(
Hij vervangt dat de eerste teken(s) van de volgende regel door een '=' teken waardoor de layout verneukt wordt.
Ik heb een testprogrammaatje geschreven wat nix anders doet dan een bestand inladen in de body van een mailmessage en hierbij hetzelfde probleem.
Hieronder de code vant testprogramme (let op: ik splits een mail in een text en een html gedeelte, het text-gedeelte is nog niet geimplementeerd!)

code:
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
  if OpenDialog1.Execute then
  begin
    IdSMTP.Host := eOutgoing.Text;
    IdSMTP.Port := StrToInt(ePort.Text);
    
    IdMessage.Clear;
    IdMessage.From.Address := 'testing@test.nl';
    IdMessage.Recipients.EMailAddresses := eRecepient.Text;

    IdMessage.AttachmentEncoding := 'MIME';

    IdMessage.Subject := 'test';
    IdMessage.ContentType := 'Multipart/Alternative';

    // plain text toevoegen
    idtTextPart := TIdText.Create(IdMessage.MessageParts,nil);
    idtTextPart.ContentType:='text/plain';
    idtTextPart.Body.Add('This is the plain part of the message.');

    // html-toevoegen
    idtTextPart:= TIdText.Create(IdMessage.MessageParts,nil);
    idtTextPart.ContentType := 'text/html';
    idtTextPart.Body.LoadFromFile(OpenDialog1.FileName);

    try
      try
        IdSMTP.Connect(1000);
        IdSMTP.Send(IdMessage);
      except
        on E:Exception do
          MessageDlg('ERROR: ' + E.Message, mtError, [mbOk], 0);
      end;
    finally
      if IdSMTP.Connected then
        IdSMTP.Disconnect;
    end;
  end


Dan hier het bericht zoals het eruit ziet voor ik het verzend:
<html>
<head></head>
<body>
<div>line_1</div>
<div>line_2</div>
<div>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</div>
<div>line_3</div>
<div>line_4</div>
</body>
</html>

En zo komt het vervolgens aan:
<html>
<head></head>
<body>
<div>line_1</div>
<div>line_2</div>
<div>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</div>
=iv>line_3</div>
<div>line_4</div>
</body>
</html>

Iemand enig idee? Bij andere regellengtes (en ik heb er best een aantal geprobeerd) ben ik dit probleem nog niet tegengekomen..

  • El_kingo
  • Registratie: Mei 2002
  • Laatst online: 17-03-2025
Ik heb geen idee waarom hij dit gedrag verstoond, maar ik weet wel dat je een bericht (of je die nu vanuit een stream of vanuit een file load) altijd moet laten eindigen met <CR><LF>.<CR><LF>

Of in delphi:
Delphi:
1
Chr(13)+Chr(10)+'.'+Chr(13)+Chr(10)

Misschien dat dat helpt?
Let ook goed op hoe je regeleinden in je textfile zijn, uit mijn hoofd moeten regeleinden bestaan uit </r></n>

[ Voor 9% gewijzigd door El_kingo op 09-11-2005 14:22 ]


  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
Ik heb Chr(13)+Chr(10)+'.'+Chr(13)+Chr(10) erachteraan geplakt in de body maar dit levert weinig op.

De newline tekens staan wel okee, ik heb ook gewoon met textpad bestandjes gemaakt om mee te testen, hier had ik het probleem eigenlijk ook verwacht.

Ik heb nu een versie waar ik zolang maar achter iedere 70 (was het trouwens) -tekens tellende regel een spatie plak. Hij bugt niet meer nu maar de oplossing slaat natuurlijk helemaal nergens op!

Voor zolang laat k het er maar ff bij aangezien er nog andere prioriteiten liggen..