Um E-Mails aus Access heraus über Outlook zu versenden, reicht grundsätzlich dieser Beispielcode:
Sub SendEmail()
Dim objOutlook As Object
Dim objMail As Object
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
' Empfänger hinzufügen
objMail.To = "Empfaenger@mail.com"
' CC hinzufügen (optional)
objMail.CC = "Kopie@mail.com"
' Betreff und Text des E-Mails
objMail.Subject = "Betreff der E-Mail"
objMail.Body = "Text des E-Mails"
' Anhänge hinzufügen (optional)
objMail.Attachments.Add "C:\Pfad\zum\Anhang.txt"
' E-Mail senden
objMail.Send
' Objekte freigeben
Set objMail = Nothing
Set objOutlook = Nothing
End Sub
In diesem Beispiel wird eine neue E-Mail erstellt und an einen Empfänger gesendet. Sie können den Code anpassen, um den Betreff, den Text, die Empfänger, die Kopieempfänger und die Anhänge zu ändern oder hinzuzufügen.
Beachten Sie, dass die Sicherheitseinstellungen in Outlook den Versand von E-Mails aus VBA-Code blockieren können. In diesem Fall müssen Sie die Sicherheitseinstellungen in Outlook anpassen oder eine andere Methode zum Senden von E-Mails aus Access heraus verwenden.
Erlösung
Die Bibliothek „redemption“ ist eine COM-basierte Bibliothek für Outlook und kann helfen, die Sicherheitseinstellungen in Outlook beim Versand von E-Mails zu umgehen. „redemption“ verwendet das Extended MAPI-API, das es ermöglicht, die Outlook-Sicherheitseinstellungen für Makros und Add-Ins zu umgehen.
Um die Bibliothek zu verwenden, müssen Sie sie zuerst installieren und dann in Ihrem VBA-Code einbinden. Hier ist ein Beispielcode für den Versand einer E-Mail mit „redemption“:
Sub SendEmailWithRedemption()
Dim objSession As Object
Dim objMessage As Object
Dim strRecipient As String
' Erstellen einer Redemption-Session
Set objSession = CreateObject("Redemption.RDOSession")
' Anmelden bei Outlook
objSession.Logon
' Erstellen einer neuen E-Mail
Set objMessage = objSession.GetDefaultFolder(olFolderDrafts).Items.Add("IPM.Note")
' Empfänger hinzufügen
strRecipient = "Empfaenger@mail.com"
objMessage.Recipients.Add strRecipient
' Betreff und Text des E-Mails
objMessage.Subject = "Betreff der E-Mail"
objMessage.Body = "Text des E-Mails"
' Anhänge hinzufügen (optional)
objMessage.Attachments.Add "C:\Pfad\zum\Anhang.txt"
' E-Mail senden
objMessage.Send
' Objekte freigeben
Set objMessage = Nothing
Set objSession = Nothing
End Sub
In diesem Beispiel wird eine neue E-Mail erstellt und an einen Empfänger gesendet. Der Code verwendet die Redemption-Bibliothek, um die Outlook-Sicherheitseinstellungen für den Versand von E-Mails zu umgehen.
Beachten Sie, dass Sie möglicherweise Administratorrechte benötigen, um „redemption“ zu installieren und zu verwenden. Außerdem sollten Sie sicherstellen, dass Sie die Lizenzbedingungen von „redemption“ erfüllen, bevor Sie es verwenden.
Versand aus Access über einen SQL-Server
Es ist einfach möglich, aus Access E-Mails zu versenden, wenn ein SQL Server eingebunden ist. Dazu können Sie eine Tabelle auf dem SQL Server erstellen, die neue E-Mails enthält, und einen Insert-Trigger auf dieser Tabelle erstellen, der eine gespeicherte Prozedur aufruft, um die E-Mail zu versenden.
Hier sind die Schritte, um dies zu erreichen:
- Erstellen Sie eine neue Tabelle auf dem SQL Server, die die Informationen für die E-Mail enthält. Die Tabelle kann beispielsweise folgende Spalten enthalten: Empfänger, Betreff, Text und Anhang.
- Erstellen Sie eine gespeicherte Prozedur auf dem SQL Server, die die E-Mail sendet. Die Prozedur kann die Informationen aus der Tabelle abrufen und eine E-Mail mit Hilfe von sp_send_dbmail senden.
- Erstellen Sie einen Insert-Trigger auf der Tabelle, der die gespeicherte Prozedur aufruft, um die E-Mail zu versenden. Der Trigger sollte aufgerufen werden, wenn ein neuer Datensatz in die Tabelle eingefügt wird.
- Binden Sie die Tabelle in Access ein und fügen Sie einen neuen Datensatz hinzu, um eine neue E-Mail zu erstellen. Füllen Sie die Spalten mit den entsprechenden Informationen.
- Wenn der Datensatz in die Tabelle eingefügt wird, löst der Insert-Trigger die gespeicherte Prozedur aus, die die E-Mail sendet.
Hier ist ein Beispielcode für die gespeicherte Prozedur:
CREATE PROCEDURE [dbo].[sp_SendEmail]
@To nvarchar(max),
@Subject nvarchar(max),
@Body nvarchar(max),
@AttachmentPath nvarchar(max) = null
AS
BEGIN
SET NOCOUNT ON;
DECLARE @MailBody nvarchar(max);
SET @MailBody = N'<html><body>' + @Body + N'</body></html>';
EXEC msdb.dbo.sp_send_dbmail
@recipients = @To,
@subject = @Subject,
@body = @MailBody,
@body_format = 'HTML',
@file_attachments = @AttachmentPath;
END
Hier ist ein Beispielcode für den Insert-Trigger:
CREATE TRIGGER [dbo].[tr_InsertEmail]
ON [dbo].[Emails]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @To nvarchar(max), @Subject nvarchar(max), @Body nvarchar(max), @AttachmentPath nvarchar(max);
SELECT @To = [Empfänger], @Subject = [Betreff], @Body = [Text], @AttachmentPath = [Anhang]
FROM inserted;
EXEC [dbo].[sp_SendEmail] @To, @Subject, @Body, @AttachmentPath;
END
Sie können die Tabelle in Access mit einer ODBC-Verbindung einbinden und dann einen neuen Datensatz hinzufügen, um eine neue E-Mail zu erstellen. Beachten Sie, dass Sie in Access möglicherweise eine Formularvorlage erstellen müssen, um die Eingabe der E-Mail-Informationen zu erleichtern.
Wenn Sie mehrere E-Mails gleichzeitig senden möchten, müssen Sie den Trigger anpassen, um eine Schleife hinzuzufügen, die jede E-Mail separat behandelt.
Hier ist ein Beispielcode für den angepassten Trigger:
CREATE TRIGGER [dbo].[tr_InsertEmail]
ON [dbo].[Emails]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @To nvarchar(max), @Subject nvarchar(max), @Body nvarchar(max), @AttachmentPath nvarchar(max);
DECLARE EmailCursor CURSOR FOR
SELECT [Empfänger], [Betreff], [Text], [Anhang]
FROM inserted;
OPEN EmailCursor;
FETCH NEXT FROM EmailCursor INTO @To, @Subject, @Body, @AttachmentPath;
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC [dbo].[sp_SendEmail] @To, @Subject, @Body, @AttachmentPath;
FETCH NEXT FROM EmailCursor INTO @To, @Subject, @Body, @AttachmentPath;
END
CLOSE EmailCursor;
DEALLOCATE EmailCursor;
END
Dieser Trigger verwendet einen Cursor, um durch jeden neu eingefügten Datensatz in der Tabelle zu iterieren und die E-Mail-Informationen an die sp_SendEmail
-Prozedur zu übergeben, um jede E-Mail separat zu senden. Beachten Sie, dass Cursor in der Regel weniger effizient sind als Set-basierte Operationen, daher ist es wichtig, die Anzahl der E-Mails zu berücksichtigen, die gleichzeitig verarbeitet werden müssen, um sicherzustellen, dass die Leistung akzeptabel bleibt.
Comments are closed