![]() |
SMTP Server weiterleitung
Hallo leute ^^,
ich habe einen SMTP server gebaut, die wenn er E-Mails bekommt soll diese weiter reichen, dazu habe ich noch einen Smtp Client integriert. Jetzt müssen SMTP Server untereinander die Mails zustellen. Wenn mein Server jetzt eine Email an Web.de weiter reichen soll geht das nicht .... muss ich da nochwas beachten ? |
Re: SMTP Server weiterleitung
Wie wäre es mit einer Fehlermeldung?
Wie leitest du weiter? Mit dem Protokoll das E-Mail-Server untereinander fahren? Bedenke dabei das hier aufgrund von Virenattacken die entsprechenden Ports bei Wähl/DSL-Verbindungen des öfteren gesperrt sind. |
Re: SMTP Server weiterleitung
Zitat:
Zitat:
|
Re: SMTP Server weiterleitung
Der Transport funktioniert natürlich per SMTP (Simple Mail Transfer Protocol)
Was für ein Fehler kommt? Wird Helo ehlo verwendet? Viele Mailserver lehnen auch Verbindungen zu Einwahladressen ab oder machen nen Reverslookup. wird SMTP-Auth verwendet? Oder TLS? |
Re: SMTP Server weiterleitung
Es würd die Standart einstellung von der Indy Komponente benutzt (IdSMTPClient). Der Fehler ist das der Server einfach wieder Trennt. Erkläre mir mal Reverslookup genau.
|
Re: SMTP Server weiterleitung
Der Server macht eine DNS-Abfrage auf die Domäne des Absenders und vergleicht und vergleichst sie mit der Adresse des Clients.
|
Re: SMTP Server weiterleitung
Das bedeutet jetzt wenn ich was an Web.de weiter geben will fragt er erstmal per DNS ab und vergleicht die IP, sollte die IPs nicht gleich sein muss ich entweder per SMTP-Auth anmelden oder er Disconnecten ? Wenn ja, könnte das es erklären warum es nicht geht :)
|
Re: SMTP Server weiterleitung
wenn du mit versuchst eine Nachricht von Bill.gates@microsoft.com an BigBoss@web.de zu schicken, überprüft der Server u.U. ob deine Client-IP mit der des MS-Mailservers übereinstimmt, was wohl nicht der Fall sein wird.
Das mit SMTP-Auth ist eine weitere Möglichkeit, welche zusätzlich oder alternativ eigesetzt wird. |
Re: SMTP Server weiterleitung
Da ich so ein verfahren auch gut gebrauchen kann ... schau mal ob das so ok ist bei meinen Programm bleibt er in der Funktion sthen :gruebel: vieleicht ist die WaitTime zugroß (irgentwo habe ich mal gelesen das man da 3 Sec macht).
Delphi-Quellcode:
function TForm1.CheckOfMailServer(DNSServer, Adresse,
MailIPAdress: String): Boolean; var idDNSResolver: TIdDNSResolver; i: Integer; a: TARecord; begin Result := False; idDNSResolver := TIdDNSResolver.Create(self); try idDNSResolver.QueryResult.Clear; idDNSResolver.Host := DNSServer; idDNSResolver.QueryType := [qtA]; try idDNSResolver.Resolve(Adresse); except idDNSResolver.QueryResult.Clear; end; if idDNSResolver.QueryResult.Count <> 0 then begin for i := 0 to Pred(idDNSResolver.QueryResult.Count) do begin if idDNSResolver.QueryResult.Items[i] is TARecord then begin a := (idDNSResolver.QueryResult.Items[i] as TARecord); if a.IPAddress = MailIPAdress then begin Result := True; idDNSResolver.Free; Exit; end; end; end; end; finally idDNSResolver.Free; end; end; |
Re: SMTP Server weiterleitung
Looks like you're resolving an A-Record, idSMTP can do this for you automatically.
You do need to resolve the MX (Mail eXchanger) record. |
Re: SMTP Server weiterleitung
Ähh das kann die Komponente selber ? Wie ?
Ansonsten würde ich es so versuchen wie es in der IdSMTPRelay.pas gemacht würd :
Delphi-Quellcode:
procedure TIdSMTPRelay.ResolveMXServers(AAddress: String);
var IdDNSResolver1: TIdDNSResolver; DnsResource: TResultRecord; LMx: TMxRecord; LDomain: String; i: Integer; iPref: Word; begin { Get the list of MX Servers for a given domain into FMXServerList } if Pos('@', AAddress) > 0 then begin LDomain := Copy(AAddress, IndyPos('@', AAddress) + 1, Length(AAddress) - Pos('@', AAddress)) end else begin raise EIdDirectSMTPCannotResolveMX.Create(Sys.Format(RSDirSMTPInvalidEMailAddress, [AAddress])); end; IdDNSResolver1:=TIdDNSResolver.Create(Self); FMXServerList.Clear; try try IdDNSResolver1.AllowRecursiveQueries:=True; if Assigned(IOHandler) and (IOHandler.ReadTimeOut <> 0) then begin // thirty seconds - maximum amount of time allowed for DNS query IdDNSResolver1.WaitingTime := IOHandler.ReadTimeout; // 30000; end else begin IdDNSResolver1.WaitingTime := 30000; end; IdDNSResolver1.QueryType := [qtMX]; IdDNSResolver1.Host := DNSServer; IdDNSResolver1.Resolve(LDomain); if IdDNSResolver1.QueryResult.Count > 0 then begin iPref := High(Word); for i := 0 to IdDNSResolver1.QueryResult.Count - 1 do begin DnsResource := IdDNSResolver1.QueryResult[i]; if (DnsResource is TMXRecord) then begin LMx := TMXRecord(DnsResource); // lower preference values at top of the list // could use AddObject and CustomSort, or TIdBubbleSortStringList // currently inserts lower values at top if LMx.Preference < iPref then begin iPref := LMx.Preference; FMXServerList.Insert(0, LMx.ExchangeServer); end else begin FMXServerList.Add(LMx.ExchangeServer); end; end; end; end; if FMXServerList.Count = 0 then begin raise EIdDirectSMTPCannotResolveMX.Create(Sys.Format(RSDirSMTPNoMXRecordsForDomain, [LDomain])); end; finally IdDNSResolver1.Free; end; except raise; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz