19. marts 2003 - 16:50Der er
20 kommentarer og 2 løsninger
SMTP ting
Nogen som har erfaring med hvordan man laver en SMTP ting, altså den del som sender en email til en e-mail adresse?? og som måske vil dele lidt af sin viden?
Jeg har kigget lidt på det, kan det passe at, hvis jeg vil sende til min egen e-mail, som er dennis.ssh@pc.dk , så skal man kontakte pc.dk eller hvad? og hvad for en port og hvad skal man sige til den?
jatak :), jeg har læst nogle af de der rfc dokumenter og har lært en del om hvad de skal sende til hinanden, men mangler stadig en del info for at kunne komme igang, eks. det spg som jeg skrev aller først
Når du sender til f.eks. bob@bygge.dk skal din SMTP server først finde IP adressen på mailserveren hos bygge.dk. Dette gøres ved at lave et DNS opslag efter MX recorden hos den DNS server, der er ansvarlig for bygge.dk domænet. Derefter kan den lave en TCP/IP connection og sende SMTP kommandoer.
Jeg mener du kan finde eksempler på, hvordan du laver et MX query i Indy komponenterne.
{ TMXResolver ---------------------------------------------------------------- } procedure TMXResolver.AddDomainToCache; var s: string; i: integer; begin s:=''; for i:=0 to MXList.Count-1 do begin s:=s+MXList[i]+','; end;
// remove the trailing comma if length(s)>0 then begin setlength(s, length(s)-1); end;
// Check if the mail domain is in the cache already for i:=0 to MXCache.count-1 do begin s:=MXCache[i];
if pos(MailDomain+':', s)=1 then begin // we have the domain in the cache, so extract the mx's and add to the MXList // Delete up to the ":" delete(s, 1, pos(':', s)); s:=trim(s);
// what we have left is a comma separated list, so just assign to dest ADest.CommaText:=s;
Break; { from for loop } end; end; end;
constructor TMXResolver.create(const AMailDomain, ADNSHost: string); begin inherited create(nil);
destructor TMXResolver.Destroy; begin FreeAndNil(FMXList); FreeAndNil(FMXCache); inherited; end;
// -mw- Resolve the MX lookups for the already given domain procedure TMXResolver.MXResolve(ATimeOut: integer); var i: integer; p: integer; slServers: TStringList; begin QueryResult.Clear; Host:=FDNSHost;
if not assigned(FMXList) then FMXList:=TStringList.Create; if not assigned(FMXCache) then FMXCache:=TStringList.Create;
// Check for domain in the cache. CheckDomainCache(FMXList);
if FMXList.Count>0 then begin // we have found the domain in the cache, so we can get outta here // -- FMXList.Add('Debug: domain in cache'); Exit; end;
try Resolve(MailDomain); except on e: exception do begin raise exception.create('RES: '+e.message+' >> '+MailDomain); end; end;
if (QueryResult.Count>0) then begin slServers:=TStringList.create; try // used to sort Exchange server by Preference for all MX records slServers.Sorted:=true; slServers.Duplicates:=dupAccept;
// DNS MX query can return results other than MX... // - check the resource record type, // - cast the item as TMXRecord, then // - add the item to the stringlist hcih will order by preference for i:=0 to QueryResult.Count-1 do begin if (QueryResult.Items[i] is TMXRecord) then with TMXRecord(QueryResult.Items[i]) do slServers.Append(Format('%2.2d=%-s', [Preference, ExchangeServer])); end;
// Having got an ordered list of MX servers, copy the // server part of the string to the MXList for i := 0 to slServers.Count-1 do begin p:=Pos('=', slServers.Strings[i]); if p>0 then begin FMXList.Append(Copy(slServers.Strings[i], p+1, Length(slServers.Strings[i]))); end; end;
// Add the data to the cache string list AddDomainToCache;
FMXList.Add('Debug: domain not in cache');
finally FreeAndNil(slServers); end; end else begin // no MX results end; end;
// Resolve with a default timeout. procedure TMXResolver.MXResolve; begin // call the other resolve with a default timeoue of 6s MXResolve(6000); end;
procedure TMXResolver.SetDNSHost(const Value: string); begin FDNSHost := Value; end;
procedure TMXResolver.SetMailDomain(const Value: string); var p: integer; begin FMailDomain := trim(Value);
// If Value has more than just the domain ie it is a full e-mail address, trim to the @ p:=pos('@', FMailDomain); if (p>0) then begin delete(FMailDomain, 1, p); end; end;
procedure TMXResolver.SetMXList(const Value: TStringList); begin FMXList := Value; end;
procedure TForm1.Button1Click(Sender: TObject); var mx : TMXResolver; i : integer; begin mx := TMXResolver.Create(Edit1.Text,'62.61.130.1'); mx.MXResolve; for i := 0 to mx.MXList.Count - 1 do begin Memo1.Lines.Add(mx.MXList[i]); end; mx.Free; end;
Grunden til du normalt får mere en 1 mail server er, at man normalt angive mindst 2 MX records. En der peger direkte på ens mailserver og en backup, der peger på en som kan tage over, hvis nr. 1 er nede.
hmm... ved det ikk helt, prøvede at installere 9! men den vil ikke!, den siger det ikke er en design-etellerandet, jeg går ud fra den mener at det ikke er et komponent! selvom jeg bruger den der hedder Indyd6.bpl eller sådan noget!
Synes godt om
Ny brugerNybegynder
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.