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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

Tags:

Comments are closed