File über e-mail versenden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    File über e-mail versenden

    Hi,

    ich möchte gern von meinem VB Programm aus einen File per e-mail versenden.

    Das habe ich wie folgt gelöst:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    2. lblMessage.Text = ""
    3. End Sub
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. 'Update message
    6. lblMessage.Text = "Sending e-mail ..."
    7. lblMessage.Update()
    8. 'Send file
    9. Dim smtpUrl As String = "mail.gmx.net"
    10. Dim smtpPort As Integer = 587
    11. Using MyMailMessage As New MailMessage
    12. Try
    13. 'Address mail
    14. MyMailMessage.From = New MailAddress(strEmailUser)
    15. MyMailMessage.To.Add(strEmailUser)
    16. MyMailMessage.Subject = strSelectedFile
    17. 'Provide message body
    18. MyMailMessage.Body = strSelectedObject
    19. 'Add attachment
    20. MyMailMessage.Attachments.Add(New Net.Mail.Attachment(strSelectedObject))
    21. 'Get password
    22. strEmailPwrd = InputBox("Enter Password for " & strEmailUser & " , please", "Get password", "")
    23. 'Invoke SMTPserver
    24. Dim SMTPServer As New SmtpClient(smtpUrl)
    25. SMTPServer.Port = smtpPort
    26. SMTPServer.Credentials = New System.Net.NetworkCredential(strEmailUser, strEmailPwrd)
    27. SMTPServer.EnableSsl = True
    28. SMTPServer.Send(MyMailMessage)
    29. Catch ex As Exception
    30. MessageBox.Show(ex.Message)
    31. lblMessage.Text = "*** Message was not sent due to Error."
    32. Exit Sub
    33. End Try
    34. End Using
    35. lblMessage.Text = "OK, File has been sent."
    36. End Sub


    Das funktioniert soweit auch ganz prima. Aber ...

    ... unschön an der Lösung ist, dass man offensichtlich einen Logon zu dem e-Mail Server durchführt und deshalb das PASSWORD angeben muss.

    Wenn ich e-mail abrufe ist klar, dass dies nicht anders funktionieren kann. Aber wenn ich nur SENDE, dann ist doch das Password eigentlich nicht erforderlich.

    Gibt es denn eine Technik einen File zu versenden, OHNE dass man dazu das Password dazu benötigt?

    LG
    Peter

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Peter329 schrieb:

    Aber wenn ich nur SENDE, dann ist doch das Password eigentlich nicht erforderlich.
    Aber klar doch.
    Sonst könnte doch jeder, der Deine EMail-Adresse kennt, unter Deinem Namen EMails und Anhänge verschicken.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    jau ... da hast du schon recht .. wenn ich mich an meinen Account anmelde, dann brauche ich dafür schon ein Passwort.

    Wie komme ich auf meine Anfrage ... Ich habe vor Kurzem auf der Homepage eines Anwalts den link "Kontakt" angeklickt ... da muss man dann noch einen e-Mail Provider auswählen (etwa Thunderbird) und dann kann man einen File übertragen ... ganz OHNE Passwort !

    Also möglich ist das offensichtlich schon. Nur hab ich halt keine Ahnung wie die das hinbekommen haben !

    LG
    Peter

    Peter329 schrieb:

    und dann kann man einen File übertragen
    Jou, das kenne ich. Die holen sich die Anmeldeinformation aus Deinem Provider, was ich nicht für seriös halte.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    okay ... dann verstehe ich das ... Ne, unseriöse Sachen will ich nicht kodieren .... Dann hake ich die Sache mal als erledigt ab.

    Danke, dass du dich mit meinem Anliegen befasst hast!

    LG
    Peter

    RodFromGermany schrieb:

    (...)Die holen sich die Anmeldeinformation aus Deinem Provider(...)


    Sicher? Mann muss Thunderbird und Co. vor der Ersten Verwendung erst mal konfigurieren. Dabei müssen auch E-Mail und Passwort angegeben werden. Würden die sich das Passwort "holen" könnte das ja wiederum grundsätzlich jeder, oder irre ich mich da?

    @Peter329 Wo ist das Problem. Gib halt das Passwort an/ein und der Kecks ist gegessen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Gib halt das Passwort an/ein und der Kecks ist gegessen.


    Das ist schon richtig. Allerdings verwende ich "sichere Passwörter" (die sind wesentlich länger und weniger flüssig als etwa "Susi") und dieses Passwort muss ich dann jedesmal neu eingeben, wenn ich einen File per e-Mail verschicken will ... das ist dann manchmal schon recht lästig.

    In meinem Code Beispiel mache ich wohl einen Login zu meinem e-Mail account und nutze dessen Dienste dann, um meine e-Mail zu verschicken. Und klar: für diesen Login braucht es das Passwort. Das steht außer Frage!

    Aber gibt es denn keine Möglichkeit eine e-Mail mit Anhang OHNE eigenen e-Mail Account zu versenden? Dann wäre doch kein Passwort notwendig.

    Na, ich hoffe, ich habe mich verständlich ausdrücken können. Habt Nachsicht mit einem Landei auf diesem Gebiet ! Ich verstehe halt zuwenig davon, wie das Geschäft mit den e-Mails funktioniert.

    LG
    Peter

    Peter329 schrieb:


    Aber gibt es denn keine Möglichkeit eine e-Mail mit Anhang OHNE eigenen e-Mail Account zu versenden?

    Doch, aber es wird von allen als Spam erkannt(weil du dann einen eigenen Smtp-Client(oder is des nen Server?) brauchst)

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Passwort verschlüsselt speichern und bei bedarf auszulesen ist keine Option?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Passwort verschlüsselt speichern und bei bedarf auszulesen ist keine Option?

    Lohnt sich eig nur, wenn man mehere Pws speichern will, weil fürs verschlüsseln brauch man immer einen Schlüssel/eine Masterpw. Das Einzige was mir grad noch einfällt: von Winows wurde mal was entworfen, was pws speichert(ich glaub die werden mit dem Pw vom Benutzer verschlüsselt und mit höhern Rechnten gespeichert. (Muss kurz nachschauen wie des nochmal heißt)
    Edit: Beste möglichkeit um Passwörter lokal abzuspeichern.

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Jetzt mal ohne spaß. Ich versteh gar nicht wi das Problem ist. Zum Versand braucht er halt ein Passwort. Die Zeit und Energie die in diesem Thread aufgewendet wird, hätte locker gereicht um das Passwort lokal (verschlüsselt) zu speichern und wieder auszulesen. Wenn der TE sein Programm nur selbst nutzt, könnte er (steinigt mich) das Passwort auch einfach in den Code schreiben...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Passwort verschlüsselt speichern und bei bedarf auszulesen ist keine Option?


    Na um ein verschlüsseltes Passwort auszulesen, dazu braucht man ja wieder ein Passwort. Das sollte dann auch verschlüsselt sein und dazu braucht man ... ein Passwort. usw usw. ... also da beißt sich dann die Katze in den Schwanz. :) Also ich speichere meine Passwörter weder mittelbar noch unmittelbar ...

    Doch, aber es wird von allen als Spam erkannt(weil du dann einen eigenen Smtp-Client(oder is des nen Server?) brauchst)


    Na, das mit dem Spam würde mich kalt lassen. Über den Betreff kann ich dann schon feststellen, ob die Mail Spam ist oder nicht.

    Wie würde man denn so etwas machen ?

    LG
    Peter
    Mit Spam mein ich, du hast Glück, wenn es in deinem Mailacc landet... ich kenn mich aber leider net gut genug aus um dir da ne Anleitung zu schreiben. Zu der Sache mit dem Pw: lies dir bitte den Link aus meinen Edit durch (vor allem der vorletzte Beitrag)

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Peter329 schrieb:


    Na um ein verschlüsseltes Passwort auszulesen, dazu braucht man ja wieder ein Passwort. Das sollte dann auch verschlüsselt sein und dazu braucht man ... ein Passwort. usw usw. ... also da beißt sich dann die Katze in den Schwanz. :) Also ich speichere meine Passwörter weder mittelbar noch unmittelbar ...


    Achso, ja stimmt. Dann kann man ja generell gar keine Passwörter beim Programmieren verwenden. Das ist ja doof...

    Spaß bei Seite :)
    Um E-Mails (zuverlässig) zu versenden brauchst du ein Passwort. Schreib dir einen Algorithmus der dir das Password zum entschlüsseln generiert. Oder, wenns einfacher sein soll, schreibst du das Passwort zum entschlüsseln direkt in den Code.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Mit Spam mein ich, du hast Glück, wenn es in deinem Mailacc landet...

    Ich würde mal vermuten das daß stark vom Anbieter abhängig ist. Bei GMail funktioniert das bedingt. Das heisst wenn ich eine Email von gmail zu gmail versende kommt die Mail zwar an aber wie du schon geschrieben hast, landet diese im Spam Ordner.

    @Peter329
    Dafür musst du die Eigenschaft DeliveryMethode auf Network stellen und als SmtpServer musst du den DNS MX Record deines Email Anbieters angeben. Der zu verwendende Port wäre 25.
    Man kann einen SMTP Server zum senden von Mails offen und gesichert betreiben.
    Das Problem: Wenn du einen Offenen SMTP Server im netz hast wird dieser früher oder später von einem Port Scanner gefunden und dann wird spam über den FTP Server versendet.
    Damit das nicht passiert werden die Server dann durch Username und Passwort gesichert. Dann kann dich dein Provider sperren wenn er merkt du versendest spam. Würdest du dich nicht mit Username und Passwort anmelden müssen hätte der Provider keine chance spam zu unterbinden.

    Daher solltest du umbedingt SMTP authentifizierung verwenden. Alles andere wäre nicht seriös.

    Wenn du dann ein Mail über einen SMTP Server verschickst kannst du trotzdem einen anderen Absender angeben (Sofern der Spamfilter des servers das nicht schon unterbindet). Du kannst bei MyMailMessage.To.Add(strEmailUser) einen anderen User angeben als bei der SMTP authentifizierung. Dadurch kannst du dann auch mails von bill.gates@microsoft.com senden

    lg
    Also vielen Dank erst mal für eure Antworten.

    Ich verstehe jetzt schon besser, wie das mit dem Versenden der e-mails funktioniert. Man braucht einen SMTP Server ... und am einfachsten nimmt man dazu den Account seines e-Mail Providers. Und da muss man sich mit Userid und Passwort anmelden.

    Wenn man das "freihändig" machen will, begibt man sich in "offenes Fahrwasser" und das birgt halt jede Menge Risiken und Gefahren.

    Ich hab das jetzt für mich so gelöst, dass ich einen "unkritischen" e-Mail Account verwende, (der für keine anderen Aufgaben verwendet wird) und merke mir das Passwort nach der ersten Eingabe in einer Variablen des Programms. Damit muss ich das Password pro Start der Anwendung nur einmal eingeben und damit kann ich leben.

    Nochmals vielen Dank, dass ihr euch so eingehend mit meinem Problem befasst habt ... Ich hab eine Menge von euch gelernt!

    LG
    Peter