system.net.mail - Mailversand ohne gültige Absenderadresse möglich?

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

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von PrinzMegahertz.

    system.net.mail - Mailversand ohne gültige Absenderadresse möglich?

    Hallo liebe Community,

    ich stehe hier vor einem obskuren Problem:
    In unserer Firma wurde bisher Delphi 5 verwendet. Bei den Delphi 5 Programmen konnte man Mails mit einer Komponente TNMSMTP verschicken, die keine echten Emailadresse als Absender hatten.

    Das wurde dazu genutzt, um bei internen Infomails von verschiedenen Automatikjobs gleich sehen zu können, woher die Email kommt. So hat der Job "Wareneingangsprüfung" auf den Server SV102 dann als fiktive Mailadresse den Absender Wareneingangsprüfung@SV102. Geantwortet werden soll auf diese Mails nicht, hier geht es eher um Infomails an die Admins, falls irgendwas schief läuft.

    Jetzt stehe ich vor dem Problem, das system.net.mail hier scheinbar anders vorgeht - wenn ich hier versuche, eine Mail mit diesem Absender zu verschicken, bekomme ich eine exception mit Inhalt:

    "Postfach nicht verfügbar. Die Serverantwort war: 5.7.1 Client does not have permissions to send as this sender"

    Zwei Fragen:
    a) warum geht das unter Delphi 5?
    b) Kann ich das in VB.net irgendwie umgehen?

    Und bevor ich jetzt geohrfeigt werde, dass das schlechter Stil ist und man sowas nicht macht - ich habe mir das nicht ausgesucht und bin auch nicht in der Position, hier ein Veto einzulegen :D

    Besten DanK!
    Das ist unser Delphi Code

    Quellcode

    1. procedure TForm1.FormCreate(Sender: TObject);
    2. var mySendFlag: boolean;
    3. begin
    4. //Standardmäßig gehen wir davon aus, dass es keine fehlenden Versandmeldungen gibt,
    5. //daher ist die sendFlag, die den Versand der Mail triggert, erstmal false.
    6. mySendFlag:=false;
    7. //Grafische Oberfläche ausblenden
    8. form1.Visible := false;
    9. //Mailserver konfigurieren
    10. NMSMTP.FROMNAME := 'RFID_Versandcheck';
    11. NMSMTP.FromAddress := 'RFID_Versandcheck@SV102'
    12. NMSMTP.HOST := 'smtp.mycomp.local'
    13. //Mailserver verbinden
    14. NMSMTP.Connect;
    15. //Aktuelles Datum in die Betreffzeile und als Versanddatum der evtl. zu verschickenden Mail einfügen
    16. NMSMTP.PostMessage.Subject := 'Ausstehende Versandmeldungen Stand: ' + DateToStr(Date);
    17. NMSMTP.PostMessage.Date := DatetoStr(Date());
    18. NMSMTP.PostMessage.body.add('ID / Letztes Anforderungsdatum');
    19. //Wir versuchen
    20. try
    21. //Die Datenbankanbindung zu aktivieren
    22. ora.LogOn;
    23. //Und das SQL-Skript auszuführen
    24. oraq.Execute;
    25. //Wenn es Treffer gibt
    26. if oraq.EOF = false then
    27. //merke, dass die Mail verschickt werden muss
    28. mySendFlag := true;
    29. //Solange noch Results vorhanden sind
    30. while oraq.Eof = false do
    31. begin
    32. //Schreibe Zeile
    33. NMSMTP.PostMessage.Body.Add(oraq.Field('ID_CB')+' / '+oraq.Field('lastdate'));
    34. //Nächstes Resultat holen
    35. oraq.Next;
    36. end;
    37. //Grußzeile anfügen
    38. NMSMTP.PostMessage.Body.Add('Mit freundlichen Grüßen');
    39. NMSMTP.PostMessage.Body.Add('Ihr Versandcheck');
    40. //Wenn alle Results in den Textkörper der Mail eingefügt wurden, beenden wir die Datenbankverbindung
    41. ora.LogOff;
    42. //Falls etwas nicht geklappt hat
    43. except
    44. on E: exception do
    45. begin
    46. //Merke, dass die Mail verschickt werden soll
    47. mySendFlag := true;
    48. //Lösche den Textkörper der Mail
    49. NMSMTP.PostMessage.Body.Clear;
    50. //Und schreibe Fehlermeldung rein
    51. NMSMTP.PostMessage.Body.Add('Bei der Ausführung des Programms ist ein Fehler aufgetreten. Bitte prüfen Sie die Datenbankanbindung!');
    52. end;
    53. end;
    54. //Gab es einen Grund, eine Mail zu verschicken?
    55. if mySendFlag = true then
    56. begin
    57. //Mail verschicken
    58. NMSMTP.SendMail;
    59. end;
    60. //Verbindung zum Mailserver trennen
    61. NMSMTP.Disconnect;
    62. //Programm beenden
    63. application.Terminate;
    64. end;


    EDIT: Das wirklich faszinierende an dieser Komponente ist, dass ich auch überhaupt keine Möglichkeit habe, ein Passwort für den Benutzer einzugeben. Ich sage einfach Connect und der zieht das komplett schmerzfrei durch :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „PrinzMegahertz“ ()

    Das einzige, was ich sehe, ist, dass Delphi FromName und FromAddress angibt.
    Das müsstest du dann in etwa so codieren MailMessage.From = New MailAddress("RFID_Versandcheck@SV102","RFID_Versandcheck")

    Möglicherweise versucht er die Adresse als Mailadresse zu parsen.
    Hast du mal versucht RFID_Versandcheck@SV102.local zu spezifizieren?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Momentan sieht das so aus:

    Quellcode

    1. Imports System.Net.Mail
    2. Imports System.Net
    3. Public Class MailVersand
    4. Dim mySmtpsvr As New SmtpClient()
    5. Public Sub sendMail(pSBZs As List(Of String), pDB As String)
    6. Dim hostname = Dns.GetHostName()
    7. mySmtpsvr.Host = "smtp.mycomp.local"
    8. mySmtpsvr.Port = 25
    9. mySmtpsvr.UseDefaultCredentials = true
    10. mySmtpsvr.EnableSsl = False
    11. Try
    12. Dim body As String = "Blablabla"
    13. Dim mailTo As String = "m.mustermann@mycomp.com"
    14. Dim msg As New MailMessage(String.Format("RFID_Versandcheck@{0}.mycomp.local", hostname), mailTo, "Testmail", body)
    15. msg.IsBodyHtml = False
    16. mySmtpsvr.Send(Msg)
    17. Catch ex As Exception
    18. Debug.WriteLine(Err.Number & ex.Message & ex.StackTrace.ToString)
    19. End Try
    20. End Sub
    21. End Class


    Hier kommt leider auch die gleiche Fehlermeldung.
    Ich fürchte fast, dass .net das nicht kann.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „PrinzMegahertz“ ()

    Hallo nochmal,

    besten Dank für euer Feedback, habe die Ursache des Problems ausserhalb des Quellcodes entdeckt - das Recht, solche Mails zu verschicken, ist bei uns nicht an bestimmte Benutzer, sondern an den Server gebunden, auf dem das Programm ausgeführt wird. Das war bei unserem VB-Entwicklungsserver noch nicht der Fall.

    Nochmals vielen Dank!