E-Mail-Versand aus Access nach Outlook

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.

Keine Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert