E-Mail-Versand mit Button

Ein E-Mail aus Lightswitch heraus zu versenden, ist mit einer Helper-Klasse, die man überall im Internet findet, relativ leicht. Hier gibt es 2 Ansätze, die beide ihre Vor- und Nachteile haben:

  • Versand am Client: Beim Versand wir ein Outlook-Fenster angezeigt, in dem das E-Mail noch geändert werden kann. Die funktioniert leider nur, wenn die Lightswitch-App nicht im Browser läuft.
  • Versand am Server: Der Code zum Mailversand läuft komplett am Server. Hier ist der größte Nachteil, dass Buttons in Lightswitch auf der Client-Seite laufen und daher keinen Server-Code auslösen können (wenn ich das richtig verstanden habe).

 

Ich möchte hier kurz die Lösung zum zweiten Punkt präsentieren:

Da beim Hinzufügen von Daten ein Server-Code getriggert werden kann, erstellt man einfach eine Hilfs-Tabelle, die die E-Mail gleich auch mitprotokolliert. Hier hinterlegt man einen Server-Code, der immer nach dem „Insert“ eines Datensatzes ausgeführt wird.

 

1. Zunächst im Projekt-Explorer die Ansicht von „Logical View“ zu „File View“ umstellen:

Ls email 01a.png

2. Rechtsklick auf Server > Properties > Settings findet sich eine zentrale Stelle für Konfigurationsparameter. Hier trägt man die Postausgangs-Daten ein:

Ls email 02.png

3. Nun erstellt man im Projekt-Explorer im Verzeichnis „Server\UserCode eine neue, leere Klassendatei und befüllt diese mit folgendem Code:

Imports System.Net
Imports System.Net.Mail
 
Namespace LightSwitchApplication
 
    Public Class MailHelper
        Private Property SMTPServer As String = My.Settings.SMTPServer
        Private Property SMTPUserId As String = My.Settings.SMTPUserID
        Private Property SMTPPassword As String = My.Settings.SMTPPassword
        Private Property SMTPPort As Integer = My.Settings.SMTPPort
        Private Property MailFrom As String
        Private Property MailFromName As String
        Private Property MailTo As String
        Private Property MailToName As String
        Private Property MailSubject As String
        Private Property MailBody As String
 
        Sub New(ByVal SendFrom As String, ByVal SendFromName As String, ByVal SendTo As String, ByVal SendToName As String, ByVal Subject As String, ByVal Body As String)
            _MailFrom = SendFrom
            _MailFromName = SendFromName
            _MailTo = SendTo
            _MailToName = SendToName
            _MailSubject = Subject
            _MailBody = Body
        End Sub
 
        Public Sub SendMail()
            Dim SMTPUserAddress = New MailAddress(_SMTPUserId)
            Dim mail As New MailMessage
            Dim mailFrom As New Mail.MailAddress(_MailFrom, _MailFromName)
            Dim mailTo As New Mail.MailAddress(_MailTo, _MailToName)
            With mail
                .From = mailFrom
                .To.Add(mailTo)
                .Subject = _MailSubject
                .Body = _MailBody
            End With
            Dim smtp As New SmtpClient(_SMTPServer, _SMTPPort)
            smtp.EnableSsl = True
            smtp.Credentials = New NetworkCredential(SMTPUserAddress.Address, _SMTPPassword)
            smtp.Send(mail)
        End Sub
 
    End Class
End Namespace

4. Wie oben bereits erwähnt, benötigt man zum Triggern des Codes eine Tabelle. Ich habe daher folgende erstellt (dies kann in Lightswitch oder am SQL-Server erfolgen; bei mir ist es in SQL Azure umgesetzt):

Ls mail 03.png

5. Die Tabelle öffnen und unter „Write Code“ > „…Inserted“ folgenden Quellcode eingeben:

Ls mail 04.png

        Private Sub EmailsVersand_Inserted(entity As EmailVersand)
            Dim mailHelper As New MailHelper("absender@absender.com", "Absender", entity.Empfänger, entity.Empfänger, entity.Betreff, entity.Inhalt)
            mailHelper.SendMail()
        End Sub
    End Class

6. Nun fügen wir einem beliebigen Screen noch einen Button hinzu und hinterlegen diesen mit folgendem Code (Rechtsklick > Edit Execute Code):

            Dim newEmail = New EmailVersand()
            With newEmail
                .Empfänger = "Empfänger"
                .Betreff = "Hallo Welt!"
                .Inhalt = "Blafasel"
            End With
 
            Me.DataWorkspace.Datasourcename.SaveChanges()

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne

Loading…
Avatar von manuel

AUTOR

manuel