Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: zoulhh am September 23, 2016, 14:52:42

Titel: Mail versenden mit Docmd.SendObject
Beitrag von: zoulhh am September 23, 2016, 14:52:42
Hallo zusammen,

ich möchte aus einem Formular heraus Mails versenden. Auf dem betreffenden Rechner ist Office 2013 (64-Bit) installiert, nicht aber Access. Access steht nur als Runtime zur Verfügung. Das soll auch so sein.

Wenn ich die Mail nun absende, öffnet sich eine Outlook - Mail und alles ist super. Ich kann dann auf "Senden" klicken und die Mail geht raus.

Das funktioniert aber nur solange, wie Outlook auf dem betreffenden Rechner nicht gestartet ist. Wenn Outlook läuft gibt es die Fehlermeldung:

Auf die Datei C:\users\blablabla\username@domaene.ost kann nicht zugegriffen werden. Sie wird von einem anderen Prozess verwendet.

Ich kann die Office Version nicht ändern. Tipps diesbezüglich helfen mir also leider nicht.

Ich freue mich über Lösungsvorschläge und sage vielen Dank im voraus.


Titel: Re: Mail versenden mit Docmd.SendObject
Beitrag von: datekk am September 23, 2016, 15:10:31
Also ich arbeite ganz toll mit dieser Funktion. Kopiere folgenden Code in ein neues Modul.


Public Function CreateEmailWithOutlook(strMessageTo As String, strSubject As String, strMessageBody As String)

    ' Define app variable and get Outlook using the "New" keyword
    Dim olApp As New Outlook.Application
    Dim olMail As Outlook.MailItem  ' An Outlook Mail item

    ' Create a new email object
    Set olMail = olApp.CreateItem(olMailItem)

    ' Add the To/Subject/Body to the message and display the message
    With olMail
        .To = strMessageTo
        .Subject = strSubject
        .HTMLBody = strMessageBody
        .Display    ' To show the email message to the user
    End With

    ' Release all object variables
    Set olMail = Nothing
    Set olApp = Nothing


End Function




Also dann z.B. beim Klick - Ereignis einer Schaltfläche diesen Code nutzen:


CreateEmailWithOutlook "mail@mail.de", "Betreff", "Nachrichtentext"


Im VBA Editor Verweis auf die "Microsoft Outlook 1x Object Library" setzen.

Funktioniert bei mir super. Viel Erfolg.
Titel: Re: Mail versenden mit Docmd.SendObject
Beitrag von: zoulhh am September 23, 2016, 15:29:14
Hi,

ich bin jetzt nicht so der VBA Profi und bekomme den Fehler:

Dim olApp As New Outlook.Application

Benutzerdefinierter Typ nicht definiert.

Titel: Re: Mail versenden mit Docmd.SendObject
Beitrag von: datekk am September 23, 2016, 15:36:35
Hast Du den Verweis auf die Library gesetzt? Im VBA Editor oben im Menü auf Extras / Verweise.. Dort den genannten Verweis anklicken. Er müsste "Microsoft Outlook 15.0 Object Library" heißen.

Titel: Re: Mail versenden mit Docmd.SendObject
Beitrag von: zoulhh am September 23, 2016, 15:43:54
Jap. Hab ich. Hilft aber nicht.
Titel: Re: Mail versenden mit Docmd.SendObject
Beitrag von: zoulhh am September 23, 2016, 15:45:26
Moment. Hab ich doch nicht. Ich teste noch mal... Sorry.
Titel: Re: Mail versenden mit Docmd.SendObject
Beitrag von: zoulhh am September 23, 2016, 15:52:35
Zitat von: datekk am September 23, 2016, 15:36:35
Hast Du den Verweis auf die Library gesetzt? Im VBA Editor oben im Menü auf Extras / Verweise.. Dort den genannten Verweis anklicken. Er müsste "Microsoft Outlook 15.0 Object Library" heißen.

Ok, das läuft hier. Ich kann es aber an den problematischen Rechner erst morgen testen. Vielen Dank erst einmal!

Geht damit auch CC und BCC?

Danke.
Titel: Re: Mail versenden mit Docmd.SendObject
Beitrag von: datekk am September 23, 2016, 18:07:46
Hi. Also das geht natürlich auch an CC und BCC Empfänger. Dazu musst Du "nur" im With Block der Funktion die Positionen .BCC und .CC mit einer Variablen versehen.


    With olMail
        .To = strMessageTo
        .CC = strMessageCC
        .CC = strMessageBCC
        .Subject = strSubject
        .HTMLBody = strMessageBody
        .Display    ' To show the email message to the user
    End With


Diese Variable musst Du dann im Funktionskopf festlegen und deklarieren.

Public Function CreateEmailWithOutlook(strMessageTo As String, strMessageCC as String, strMessageBCC as String, strSubject As String, strMessageBody As String)


Dann müssen natürlich beim Aufruf der Funktion auch die entsprechenden Parameter an die Funktion übermittelt werden...


CreateEmailWithOutlook "anmail@mail.de", "ccmail@mail.de", bccmail@mail.de", "Betreff", "Nachrichtentext"



Du hattest mich ja auch noch angefragt, ob man das tatsächliche senden der Mail im Access nachvollziehen kann. Das weiß ich leider nicht. Aber man könnte es so einrichten, dass die Mail gar nicht angezeigt wird sondern gleich gesendet...

Das ginge indem Du oben im Code das .Display durch .send tauschst.

Ist der Inhalt immer gleich? Ggf. kann man hier ja was automatisieren...
Titel: Re: Mail versenden mit Docmd.SendObject
Beitrag von: zoulhh am September 23, 2016, 19:04:42
Zitat von: datekk am September 23, 2016, 18:07:46

Du hattest mich ja auch noch angefragt, ob man das tatsächliche senden der Mail im Access nachvollziehen kann. Das weiß ich leider nicht. Aber man könnte es so einrichten, dass die Mail gar nicht angezeigt wird sondern gleich gesendet...

Das ginge indem Du oben im Code das .Display durch .send tauschst.

Ist der Inhalt immer gleich? Ggf. kann man hier ja was automatisieren...

Hi danke nochmals. Das mit BCC und CC klappt auch super. Nein. Den Inhalt generiere ich. Das mit dem Send ist vielleicht eine gute Idee. Dann bastel ich mir mein eigenes Display und zeige es bevor gesendet werden kann. Im Grunde super.

Ich hoffe, dass diese Art und Weise des Mailversand auch das blöde .ost Problem löst. Das kann ich aber erst später prüfen.

Danke!
Titel: Re: Mail versenden mit Docmd.SendObject
Beitrag von: datekk am September 23, 2016, 19:07:58
Genau... Bastel ein eigenes Formular welches ein großes Textfeld beinhaltet. Hier kann der Text eingegeben werden - und baue einen Senden Button. Das ist doch ne tolle Lösung. :)
Titel: Re: Mail versenden mit Docmd.SendObject
Beitrag von: zoulhh am September 23, 2016, 21:06:13
Hmm. Nee. Wenn ich .send statt .display benutze meckert Outlook, dass die Anwendung heimlich Mail versenden will und der Benutzer muss jedesmal zustimmen (wenn er den Button im Hintergrund überhaupt sieht). Auch nicht das Wahre...