Entwickler-Ecke
Internet / Netzwerk - Indy SMTP - Mail an externe Adresse verschicken ?
mambo - Mo 02.08.04 16:27
Titel: Indy SMTP - Mail an externe Adresse verschicken ?
Hallo !
Ich möchte, dass mein Programm sich an unseren firmeninternen SMTP-Server anmelden und darüber Mails an die Angestellten verschicken kann. Dies habe ich mit der Indy-Komponente (IdSMTP) realisiert. Verschicke ich ein Mail an eine firmeninterne Adresse, läuft das soweit auch alles gut, nur sobald ich eine "externe" Adresse angebe, dann kommt immer der bekannte "relay" Fehler! Das ist mir natürlich auch klar, wenn ich der Komponente nur "host" und "port" als Parameter übergebe, dann läßt mich der Server nur intern- aber nicht "rausmailen" !
Wenn ich jedoch probiere, UserId und Password zu übergeben und dann mit IdSMTP.Authenticate versuche, mich zu authentifizieren, dann kommt immer die Fehlermeldung: "Unrecognized Authentication Type" !
Delphi-Quelltext
1: 2: 3: 4: 5:
| IdSMTP.Connect; IdSMTP.AuthenticationType := atLogin; IdSMTP.UserID := 'Mein_Benutzername'; IdSMTP.Password := 'MeinPasswort'; IdSMTP.Authenticate; |
Auf dem Server läuft auch unser MS Exchange, hängt das vielleicht damit zusammen, daß man sich grundsätzlich mit der Indy-Komponente nicht bei Exchange-SMTP-Servern anmelden kann ???
Weil ich denke doch, daß, wenn ich mich am Server korrekt anmelde, ich auch an externe Adressen Mails verschicken kann, oder ? Über Outlook kann ich das ja auch ... oder ist das ganz was anderes ?
Danke für die Hilfe
Moderiert von
matze: Code- durch Delphi-Tags ersetzt
Manina - Mi 07.03.07 19:53
Ich habe genau das selbe Problem...
Wirklich niemand mit ner Idee ?
matze - Mi 07.03.07 23:41
also erstmal ist es unnötig die Methode Authenticate aufzurufen. Jedenfalls meiner Erfahrung nach.
Mach einfach einen connect();
Wenn es dann immer noch nicht geht würde ich mal schauen, ob der Exchange Server auch wirklich SMTP unterstützt. Du könntest dich mit einem Packetsniffer ja mal reinhängen und schauen, was Outlook bei der Kommunikation mit dem Server anders macht als die Indy Komponente.
Was es auch noch gibt: Das kenne ich aber nur von Freehostern ist eine Praxis, die sich "SMTP after POP" nennt. Das heisst, dass man sich erst per POP3 am Server einmal angemeldet haben muss, bevor man Mails senden kann. Kann sein, dass das bei deinem Server so eingestellt ist. Ist aber unwahrscheinlich.
Ich würde dir mal zu dem Packetsniffer raten.
//Edit: Ich hab mir grad nochmal deinen Code angeschaut und den Fehler gefunden.
Dreh mal die Reihenfolge um, sodass du erst die Daten setzt und dann das connect machst. Den Authenticate lass aber raus!
Manina - Do 08.03.07 17:28
Das Problem ist doch gewesen, Post an
Externe Adressen zu schicken, an interne funzt ja alles.
Ich hab inzwischen eine brauchbare Lösung gefunden :lol:
Delphi-Quelltext
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: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:
| Msg := TIdMessage.Create(SMTP); Msg.AttachmentEncoding := 'MIME'; Msg.ContentType := 'text/plain'; Msg.Encoding := meMIME; Msg.NoEncode := False; Msg.NoDecode := False; Msg.IsEncoded := True; Msg.Subject := MainWin.Caption; with Msg.Recipients.Add do begin Address := Edit1.Text; Name := Copy(Edit1.Text, 1, Pos('@',Edit1.Text) - 1); end; if Edit7.Text <> '' then with Msg.CCList.Add do begin Address := Edit7.Text; Name := Copy(Edit7.Text, 1, Pos('@',Edit7.Text) - 1); end; Msg.From.Address := Edit2.Text; Msg.From.Name := Copy(Edit2.Text, 1, Pos('@',Edit2.Text) - 1); Msg.Body.Text := Memo.Text; TIdAttachment.Create(Msg.MessageParts, MyFileName); SMTP.Host := Edit3.Text; if Edit4.Text <> '' then begin SMTP.AuthenticationType := atLogin; SMTP.Username := Edit4.Text; SMTP.Password := Edit5.Text; end else begin SMTP.AuthenticationType := atNone; SMTP.Username := ''; SMTP.Password := ''; end; try SMTP.Connect; try if SMTP.Username <> '' then SMTP.Authenticate; try SMTP.Send(Msg); except ShowMessage('Error sending result to ' + Edit1.Text); rep := SMTP.LastCmdResult; for i := 0 to rep.Text.Count - 1 do ShowMessage(rep.Text[i]); end; except ShowMessage('Error Authenticating on ' + SMTP.Host); end; except ShowMessage('Error Connecting to ' + SMTP.Host); end; SMTP.Disconnect; Msg.Free; |
Der erwähnte Fehler lautet im Klartext (siehe Codezeile 48 ) etwa
Relay to this recipient not allowed
Der Rest des Problems hat also weder was mit Indy noch mit SMTP zu tun, sondern ist eine Einstellungsfrage auf dem Exchangeserver selber ! Ich hab mir geholfen, indem ich dort ein Relay für meinen eigenen Rechner (also der, auf dem mein Programm läuft) nach draußen erlaubt habe (siehe angehängtes Bild).
//Edit Ups, hatte das zweite Bild vergessen :oops:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!