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:
2. Rechtsklick auf Server > Properties > Settings findet sich eine zentrale Stelle für Konfigurationsparameter. Hier trägt man die Postausgangs-Daten ein:
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):
5. Die Tabelle öffnen und unter „Write Code“ > „…Inserted“ folgenden Quellcode eingeben:
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()