drentsch
Goto Top

Email versenden mit vb.net

Hallo,

ich habe eine vb.net Konsolenanwendung geschrieben welche ein email via meinen gmail-account verschickt.
Auf meiner Entwicklungsumgebung ( windows 10 ) klappt das einwandfrei.

Führe ich die Applikation auf einem Windows Server 2012 Rechner aus wird das email nicht verschickt.
Es ensteht dabei keine Fehlermeldung. Ich nehme an auf meinen Windows Server 2012 fehlt irgend eine Rolle oder so,
hat jemand eine Ahnung was das sein könnte.

Danke für Eure Hilfe

Der Code sieht so aus:

Imports System.IO
Imports System.Net.Mail
Imports System.Net
Module Module2

Sub Main()
Try

'zip as email verschicken
Dim lsSMTPServer As String = "smtp.gmail.com"
Dim loMessage As MailMessage = Nothing
Dim loClient As SmtpClient = Nothing

loClient = New SmtpClient()
loClient.Timeout = 50000
loClient.Host = lsSMTPServer
loClient.Port = 587
loClient.EnableSsl = True
loClient.Credentials = New System.Net.NetworkCredential("user@gmail.com", "password")

loMessage = New MailMessage()
loMessage.IsBodyHtml = True
loMessage.From = New MailAddress("adresse@gmail.com")
loMessage.To.Add(New MailAddress("aaaaa@aa.com"))
loMessage.Subject = "Subject"
loMessage.Body = "Bodyn..."
loMessage.Attachments.Add(New Attachment("Date"))
loClient.Send(loMessage)

Catch ex As Exception
Dim file As System.IO.StreamWriter
file = My.Computer.FileSystem.OpenTextFileWriter("c:\tmp\err.txt", True)
file.WriteLine(ex.ToString)
file.Close()

End Try

End Sub

End Module

Content-ID: 303868

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

Ausgedruckt am: 18.11.2024 um 19:11 Uhr

129148
Lösung 129148 06.05.2016 aktualisiert um 16:09:17 Uhr
Goto Top
Hallo,
New Attachment("Date")
das kommt mir etwas spanisch vor, ein Attachment ohne Pfad? Das wird vermutlich eine Exception auslösen weil der Pfad oder Datei nicht gefunden wird...
c:\tmp\err.txt
bist du sicher das du einen Ordner tmp auf dem Zielsytem hast ? Denn dann schlägt selbst das Schreiben einer Logdatei fehl.

Eventuell fängt auch eine vorgeschaltete Firewall Zugriffe auf SMTP-Server silent ab, mal mit Wireshark den Verkehr mitschneiden.
drentsch
drentsch 06.05.2016 um 16:40:57 Uhr
Goto Top
Hallo,

sorry das war ein Schreibfehler, ich habe meine Funktion so angepasst dass user/passwort etc nicht ersichtlich sind, dabei habe ich beim attachment statt "Datei" "Date" geschrieben.
Bitte dies ignorieren, auf meiner Entwicklungsumgebung wird es wie gesagt inkl. attachment verschickt.
Das mit der Firewall war auch mein erster Gedanke und ich diee zum Test mal ausgeschaltet, ohne Erfolg.
129148
129148 06.05.2016 aktualisiert um 16:49:47 Uhr
Goto Top
Zitat von @drentsch:
Das mit der Firewall war auch mein erster Gedanke und ich diee zum Test mal ausgeschaltet, ohne Erfolg.
Ich dachte da eher an eine Firewall in einem Router oder UTM nicht die des Servers.
Was sagt Wireshark?
Und meine anderen Hinweise?

p.s. Wo lag jetzt das Problem wenn du es schon als gelöst markiert hast?
drentsch
drentsch 07.05.2016 um 09:01:29 Uhr
Goto Top
Das Problem ist nicht gelöst, ich wollte die Frage nicht als gelöst markieren.
Ich werde mall versuchen was Wireshark sagt
129148
Lösung 129148 09.05.2016 aktualisiert um 17:29:49 Uhr
Goto Top
Zitat von @drentsch:
Ich werde mall versuchen was Wireshark sagt
Und was sagt es?

Gegen welche .NET Framework Version hast du deine Anwendung kompiliert? Und hast du sichergestellt das dieses auf dem Zielsystem verfügbar ist? Die alten 2012er sind ja etwas hinterher was das .NET angeht.

Ein nslookup auf dem Zielsystem und mal ein manuelles Verbinden via telnet solltest du ebenfalls dort testen.

Das ganze kannst du auch mal per Powershell umschreiben um zu sehen was die an Fehler wirft. Powershell kann ja alles was mit .NET zu tun hat, auch.
drentsch
drentsch 10.05.2016 um 08:25:48 Uhr
Goto Top
Als erstes muss ich mich in diesem Forum entschuldigen, jetzt habe ich schon wieder auf den falschen Schalter geklickt, finde es allerdings auch nicht sehr logisch dass "Zur Lösung beitragen" das Problem als gelöst markiert.

Ich benutzte das Framework 4.5.2 und dies ist auf dem Zielsystem installiert.
Ich habe den Code für Powershell geschrieben und exact die gleichen Parameter gesetzt und siehe da, das funktioniert!
Das sagt mir dass es mit dem Server nichts zu tun haben sollte, warum es von VB.NET nicht geht ist mir immer noch ein Rätsel.
129148
129148 10.05.2016 aktualisiert um 09:36:38 Uhr
Goto Top
Guck mal in die FAQ da steht wie du den Status der Frage selber zurücksetzen kannst
Wie kann ich einen Beitrag als gelöst markieren?

Denke das wurde deswegen gemacht, damit die Leute nicht vergessen Ihre Frage als gelöst zu markieren.

Nimm mal das ganze try...catch Konstrukt aus deinem Programm raus und kompiliere es nochmal.

Wenn es nun zu einem Fehler kommt sollte sich der JIT Debugger beim Ausführen melden und du kommst dem ganzen vielleicht ein Stück näher.

Außerdem wäre es eventuell interessant mit welchem Useraccount das ganze ausgeführt wird und wo (PS-Konsole/CMD /mit oder ohne Adminrechte, etc.)
drentsch
drentsch 10.05.2016 um 10:25:49 Uhr
Goto Top
Ich hab das ganze ohne try/catch laufen lassen, aber es kommt zu keinem Fehler, trotzdem wird die email nicht verschickt.
Ich bin als Administrator angemeldet und lasse immer alles als "Administrator ausführen" laufen.
Immerhin sehe ich dank Deines Tips einen Workarround: ich könnte aus dem VB.BET die powershell aufrufen, schöner wäre allerdings schon wenn's im .NET ginge.
129148
Lösung 129148 10.05.2016 aktualisiert um 11:29:47 Uhr
Goto Top
Dann stimmt definitiv etwas mit dem Server nicht, habe dein Skript hier mal testweise kompiliert und auf einer Server 2012 VM mit aktuellstem .NET Framework laufen lassen, ebenfalls mit GMAIL Account, ging problemlos.
drentsch
drentsch 10.05.2016 um 17:24:01 Uhr
Goto Top
Ich kann an meinem Server momentan nicht zu viel rum basteln da er viel genutzt wird.
Als Workaround habe ich jetzt Teil "Mail verschicken" aus dem VB entfernt und in eine Power Shell gepackt welches ich von VB aufrufe.
Das funktioniert soweit gut, ausser dass es ein Hack ist. Bei Gelegenheit werde ich einen Server neu aufsetzten und es nochmals probieren.
Danke für Eure Hilfe