Avatar billede mora Nybegynder
28. juni 2001 - 02:41 Der er 9 kommentarer og
1 løsning

SMTP

Jeg vil gerne sende en mail via min egen mailserver.

Men får incorrect command sequence ved NMSMTP fra fastnet.

Er der en fejl i denne kode?

Eller er det muligt at køre SMTP \"rent\", så jeg bare send skriver de kommandoer den skal bruge?

I loggen til mailserveren, kan jeg se at den ikke sender en modtageradresse, men kun fra, og så data = Forkert rækkefølge...



form1.NMSMTP1.Host:=\'localhost\';
form1.NMSMTP1.port:=25;
form1.NMSMTP1.UserID:=\'root\';
form1.NMSMTP1.connect;

form1.NMSMTP1.PostMessage.Body.add(body);
form1.NMSMTP1.PostMessage.FromAddress:=\'www@localhost\';
form1.NMSMTP1.PostMessage.ToAddress.add(fra);
form1.NMSMTP1.PostMessage.Subject:=kommando;

form1.NMSMTP1.SendMail;


fra, body og kommando er String
Avatar billede delphi Nybegynder
28. juni 2001 - 08:56 #1
Her er noget code, jeg benytter i et program jeg har skrevet.  Coden virker, så måske kan den gi\' inspiration?

Det skal lige siges, at der i coden kaldes en rutine kaldet GetEmailUserInfo.  Det er en rutine jeg har skrevet, der går ind i registrerings databasen og der finder oplysninger om POP3UserID, SMTPServer adresse, Email adresse mv.  Dette er kun nødvendigt, fordi min application kommer ud til mange forskellige folk med forskellige mail systemer (Outlook, Notes etc.).  Hvis info ikke kan findes i RegDB\'en (fx. fordi brugeren benytter et for mig ukendt email system, således at jeg ikke ved hvorledes jeg finder informationerne, så spørges brugeren og indtastede data gemes til en anden god gangs skyld.
Hvis denne info er kendt, som den ser ud til at være i dit eksempel, så er det jo inderligt overflødigt.


Function TfmSendEmail.SendMail : Boolean;
Const
  ExcepTxt = \'Send Mail action aborted by user.\';

  Procedure ParseAddressToStrings(Addr : String; Strings : TStrings);
  Begin
    // Remove all space chars.
    While Pos(\' \', Addr) > 0 Do
      Delete(Addr, Pos(\' \', Addr), 1);

    // Change all \',\'s to \';\'s.
    While Pos(\',\', Addr) > 0 Do
      Addr[Pos(\',\', Addr)] := \';\';

    While Length(Addr)>0 Do
      If Pos(\';\', Addr)=0 Then
        Begin  // Only one address is contained (or left) in string.  Add it.
          Strings.Add(Addr);
          Addr := \'\';
        End
      Else
        Begin  // There are more than one address in string. Add the first.
          Strings.Add(Copy(Addr, 1, Pos(\';\', Addr)-1));
          // Delete address separator (\';\')
          Delete(Addr, 1, Pos(\';\', Addr));
        End;
  End;

begin
  Result := False;
  If Not NMSMTP1.Connected Then
    Begin
      If Not GetEmailUserInfo Then
        Begin
          { DONE : Ask user for email info }
          Try
            If Not InputQuery(\'Input mail account information\',
                              \'User ID, eg. mbx2345\', FPOP3UserID) Then
              Raise Exception.Create(ExcepTxt);

            If Not InputQuery(\'Input mail account information\',
                              \'SMTP Server, eg. mailbox.tele.dk\', FSMTPServer) Then
              Raise Exception.Create(ExcepTxt);

            If Not InputQuery(\'Input mail account information\',
                              \'User Name, eg. John Doe\', FSMTPDispName) Then
              Raise Exception.Create(ExcepTxt);

            If Not InputQuery(\'Input mail account information\',
                              \'Reply email address, eg. John@doe.com\', FSMTPEmailAdd) Then
              Raise Exception.Create(ExcepTxt);

            { DONE : Store entered info to next time }
            SaveEmailUserInfoInRegDB;

          Except
            Result := False;
            Exit;
          End;
        End;

      NMSMTP1.UserID := FPOP3UserID;  // eg. \'xxx12345\';
      NMSMTP1.Host  := FSMTPServer;  // eg. \'pasmtp.tele.dk\';
      NMSMTP1.Port  := FSMTPPort;

      NMSMTP1.Connect;
    End;

  NMSMTP1.ClearParams := True;
  NMSMTP1.SubType    := mtPlain;
  NMSMTP1.EncodeType  := uuMime;

  With NMSMTP1.PostMessage Do
    Begin
      FromName    := FSMTPDispName;
      FromAddress  := FSMTPEmailAdd;
      ReplyTo      := FSMTPEmailAdd;

      ParseAddressToStrings(edTo.Text, ToAddress);
      ParseAddressToStrings(edCC.Text, ToCarbonCopy);
      Subject      := edSubject.Text;
      Body.Text    := meText.Text;
      Date        := DateToStr(Now);
      LocalProgram := \'TAGARNO POLLUX\';

      Attachments.Assign(lbAttachedFiles.Items);
    End;

  Screen.Cursor := crHourGlass;
  Try
    NMSMTP1.SendMail;

    Result := True;
  Finally
    Screen.Cursor := crdefault;
  End;
end;


Umiddelbart ser det ud til at du mangler følgende linier i forhold til min kode:

  NMSMTP1.ClearParams := True;
  NMSMTP1.SubType    := mtPlain;
  NMSMTP1.EncodeType  := uuMime;

Jeg sættter også nogle enkelte andre properties, fx. FromName, Date og LocalProgram, men det burde være ligegyldigt.

Desuden er det ulogisk at din modtager adresse hedder \"fra\" (men hvad ved jeg...) ;)


Peter
Avatar billede mora Nybegynder
28. juni 2001 - 14:31 #2
modtageren hedder fra, fordi programmet checker mails og sender et svar, afhængingt at indholdet af mailens linje 1.


Det overstående virkede ikke, den fatteede ikke de her 2 linjer, og fik exception \"incomplete header\".

Jeg prøver med en anden komponent.


  form1.NMSMTP1.SubType    := mtPlain;
  form1.NMSMTP1.EncodeType  := uuMime;
Avatar billede delphi Nybegynder
28. juni 2001 - 15:30 #3
Nå.  Det virker fint hos mig.
Bruger du Delphi 5?
Avatar billede mora Nybegynder
28. juni 2001 - 16:44 #4
ja
Avatar billede delphi Nybegynder
28. juni 2001 - 17:14 #5
Hvad men er du med at ovenstående ikke virker.  Har du kørt mit program, dvs. fjernet alt det unødvendige og set hvad der sker?

Dvs. noget i retning af:

procedure TForm1.Button1Click(Sender: TObject);
begin
  NMSMTP1.UserID := \'xxx12345\';        // Brug dine egne data her
  NMSMTP1.Host  := \'pasmtp.tele.dk\';  // Brug dine egne data her
  NMSMTP1.Port  := 25;                // Brug dine egne data her

  NMSMTP1.Connect;

  NMSMTP1.ClearParams := True;
  NMSMTP1.SubType    := mtPlain;
  NMSMTP1.EncodeType  := uuMime;

  NMSMTP1.PostMessage.FromName    := \'Niels Peter Gibe\';
  NMSMTP1.PostMessage.FromAddress  := \'np@tagarno.dk\';
  NMSMTP1.PostMessage.ReplyTo      := \'np@tagarno.dk\';
  NMSMTP1.PostMessage.Subject      := \'Hest\';

  NMSMTP1.PostMessage.ToAddress.Add(\'mora@ready.dk\');
  NMSMTP1.PostMessage.ToCarbonCopy.Add(\'Rytter@Hest.com\');
  NMSMTP1.PostMessage.Body.Add(\'Hest.\'+#13+#10+
                              \'Denne mail er sendt fra Delphi med en NMSMTP\');

  NMSMTP1.SendMail;
end;

Det bør sgu. virke.  Det gør det altså hos mig.  Jeg har lige prøvet det, så du skulle altså genre ha modtaget en test mail (i fald du staig bruger adressen \'mora@ready.dk).

Peter

Avatar billede mora Nybegynder
28. juni 2001 - 21:48 #6
Dammit ...

Jeg var led nok til at skrive til deres support :)
De svarede at min fra variabel, højst sandsynlig var invalid.
Korrekt...

Jeg tror den indeholder et \"space\" tilsidst :(


___
Most probably the address given in fra was either invalid, had the wrong format, was among those the server didn\'t relay to or the server didn\'t have authentication to relay to.

regards ken
Avatar billede delphi Nybegynder
29. juni 2001 - 09:40 #7
Hvilken support?

Jeg har selv et spørgsmål, som ingen har givet et ordentligt svar på endnu (Hvorfor kan jeg ikke loade et TJPEGImage fra en Stream) - måske kan denne support?

30 point til den der først giver mig nummeret/adressen.

Peter
Avatar billede mora Nybegynder
29. juni 2001 - 14:40 #8
tech@netmastersllc.com
det er jo KUN til fastnet komponenterne :)

Ved mig fik jeg svar få timer efter jeg skrev til dem :)
Avatar billede delphi Nybegynder
29. juni 2001 - 14:58 #9
Arghh... troede lige at det var et Borland support nummer....

Jeg henviste i øvrigt til spørgsmål http://www.eksperten.dk/spm/85010, som jeg nu har fået (et nedslående) svar på via en Borland nyheds gruppe og derfor lukker.

Peter
Avatar billede mora Nybegynder
29. juni 2001 - 15:00 #10
Oki doki :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester