leon123
Goto Top

Exchange 2013 - SMTP Konnektor mit Authentifizierung

Hallo zusammen,

ich schreibe gerade für unsere Firma ein kleines Testprogram, das E-Mails nach außen bei Problemen versenden kann.
Der Exchange meldet aber immer "Postfach nicht verfügbar. Die Serverantwort war: 5.7.1 Unable to relay"

Der Code dazu ist klar und einfach:
	    string fromEmail = "ich@firma.de";//sending email from...  
            string ToEmail = "ich@privat.de";//destination email               
            string body = @"test";  
            string subject = "Test";  

            try
            {
                SmtpClient sMail = new SmtpClient("192.168.12.101", 25);//  exchange or smtp server goes here.  
                
                var SmtpUser = new System.Net.NetworkCredential("firma.local\\ich", "meinPW");  
                sMail.DeliveryMethod = SmtpDeliveryMethod.Network;


                sMail.Credentials = SmtpUser; 
                sMail.Send(fromEmail, ToEmail, subject, body);
            }
            catch (Exception ex)
            {
                // some error stuff
            }

Ich habe mir jetzt schon die Finger wund gegooglet. Ich möchte keinen Konnektor ohne Authentifizerung, bzw. von bestimmten IP-Adressen. Wenn diese Maschine von einem Virus befallen ist, dann ist unser Exchange eine Spambot. Das ist mir viel zu gefährlich. Das größte Problem ist und bleibt der User...

Egal zurück zum Thema,
wie kann ich einen SMTP Konnektor erstellen, der die E-Mails auch nach extern Relayed, solange ich authentifiziert bin. Quasi so oder so ähnlich wie es Outlook auch tut.

Vielen Dank!

Content-Key: 356119

Url: https://administrator.de/contentid/356119

Printed on: April 26, 2024 at 13:04 o'clock

Mitglied: 134464
134464 Nov 25, 2017 updated at 14:08:12 (UTC)
Goto Top
Erstens solltest du einen internen dafür vorgesehenen Empfangs-Connector verwenden (nicht den externen Port 25). Z.B. dafür per Default vorgesehen ist auf Port 587. Dann solltest du zusätzlich SSL im SmtpClient verwenden, außer du willst das jeder im Netz deine Zugangsdaten mitschnüffeln kann. Wenn dann im Empfangsconnector "Standardauthentifizierung" und unter Berechtigungsgruppen Exchange-Benutzer aktiviert ist, der User Mails nach extern senden darf, dann klappt das Relay nach extern auch wie gewünscht, außer du hast einen Fehler beim der Kommunikation des EX und einem Smarthost, das kommt z.B. vor wenn der Smarthost bestimmte Absender-Domains in der Mail erwartet!
Noch besser wäre gleich Windows-Authentifizierung zu verwenden und die Default-Credentials des angemeldeten User zu verwenden, dann startet man den Prozess jeweils im gewünschten Kontext und setzt im SMTP-Client die Eigenschaft UseDefaultCredentials auf true.
Member: leon123
leon123 Nov 26, 2017 updated at 10:08:25 (UTC)
Goto Top
Danke für deine Antwort, macht alles durchaus Sinn, ich habe es so ähnlich auch auf MSDN nachgelesen aber irgendwie doch nicht so richtig verstanden. Ohne SSL funktioniert es mit Port 587 auch tadellos.

Jetzt muss ich nur noch mit dem Kollegen wegen SSL reden, da wenn ich SSL benutze ich vom Server erhalte: "Das Remotezertifikat ist laut Validierungsverfahren ungültig."

Auf den Client Computer installieren wir nämlich unser Zertifikat über die Domäne.


BTW:
ServicePointManager.ServerCertificateValidationCallback=delegate { return true; }; // möchte ich nicht benutzen

Ich teste auf einem Client wo kein Zertifikat installiert ist, das werde ich demnächst aber auch versuchen.
Mitglied: 134464
134464 Nov 26, 2017 updated at 10:20:56 (UTC)
Goto Top
Das Remotezertifikat ist laut Validierungsverfahren ungültig."
Wenn du als Verbindungs-Adresse die IP her nimmst ist klar das die Validierung fehl schlägt, die IP ist ja nunmal nicht der Common Name des Zertifikats.
Achte zusätzlich darauf daß das richtige Zertifikat auf den SMTP Dienst gebunden ist, und Vertrauen zur CA ist natürlich Pflicht. Die CRL der CA muss für den Client ebenfalls erreichbar sein.