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.
Keine Antworten