Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Mail nach dem Senden speichern

Begonnen von gromax, Dezember 31, 2015, 13:38:07

⏪ vorheriges - nächstes ⏩

gromax

Liebe Access-Profis,

nun habe ich doch im alten Jahr noch ein Problem - die Hilfestellung kann aber gerne bis zum nächsten Jahr warten:

Mit folgendem Code generiere ich eine Mail mit vorgefertigtem Text; diese Mail wird in einem Windows-Ordner als .msg-Datei abgespeichert:


(...)
    Set myOutlApp = New Outlook.Application
    Set myMail = myOutlApp.CreateItem(olMailItem)

    With myMail
        .To = DLookup("[EIN_Mail]", "tbl_EINRICHTUNGEN", "EIN_PS =" & Forms!frm_SCHUELER03!EIN_FS)
        .Subject = "Gutachten zu " & DLookup("[SuS_Name]", "tbl_SCHUELER", "SuS_PS =" & Forms!frm_SCHUELER03!frm_Schueler_ufoBearbeitung03.Form!SuS_FS)
        .Body = [i]Vorgefertigter Text[/i]
'        .Send
        .Display
        .SaveAs (strSoSPfad) & "\" & SuS_Name & " " & Format(CStr(DZ + 2), "00") & " Information Stammschule " & ".msg"

    End With

(...)


Die Option .send habe ich auskommentiert, damit die Anwender den Text final begutachten können und diesen dann - ggf. verändert - bewusst manuell versenden müssen.
Sollte der Text letztlich geändert werden, ist diese Veränderung nicht in der .msg-Datei abgelegt.
Gibt es eine Möglichkeit - vielleicht mit If .send = true then - diese .msg-Datei erst nach dem Versand im obigen Pfad abzulegen?

Vielen Dank für Hilfen, Tipps und Anregungen
und einen guten Rutsch nach 2016!!
gromax

Hondo

Hallo,
imo nein.
Aber ich würde einfach das Ansehen/Bearbeiten direkt innerhalb Access machen. Falls dies später stattfinden sollte einfach in eine spezielle Tabelle tblEmal (ID, From, To, Subject, Body, Headers, isSend) die Daten wegspeichern. Dann kann man später die Daten abrufen und einfach absenden.

Gruß Andreas

gromax

Hallo Andreas,

vielen Dank für Deine Anregung; diese Option ist mir auch schon in entsprechenden Nachschlagewerken begegnet, ich habe mir dieser Vorgehensweise aber noch nicht so richtig angenähert, zumal ich auch gelesen habe, dass man von Access aus Outlook sehr genau "steuern" könnte.
Vielleicht weiß ja jemand anderer, ob es auf diesem von mir angedeuteten Weg klappt; noch bleibt die Hoffnung!

Trotzdem vielen Dank
und alles Gute!
gromax

p.s.: Vielleicht kannst Du mir ja bei meinem nächsten Problem helfen? Wäre schön!

DF6GL

Hallo,

Zitatzumal ich auch gelesen habe, dass man von Access aus Outlook sehr genau "steuern" könnte.

Das ist schon annähernd richtig, nur gibt es Grenzen...

.Display hat den optionalen Parameter "Modal", der den (Access-) Code solange anhält, bis das Mail-Fenster (Inspector-Object) geschlossen oder die Mail versendet wird. Aber trotzdem ist das Mail-Objekt in diesem Fall nicht mehr gültig, wenn SaveAs zur Ausführung gelangt.

Die einfachste Methode ist tatsächlich, den kompletten EMail-Inhalt mit Access-Mitteln (Tabellen, Formulare) vollständig vorzubereiten (Erstellen, Ändern) und mit .Send direkt ohne weitere User-Interaktion mit Outlook zu versenden.


Als weitere (ungetestete) Methode könnte ich mir vorstellen, aus dem Ordner "gesendete Objekte",  die gerade versendete Mail (sofern sie schon aus dem "Postausgang" verschoben wurde) auszulesen und nun erst deren Inhalt weiter zu verarbeiten..


Vielleicht (spekulativ) gibt es noch eine zusätzliche Methode, die darin besteht, das Ereignis "Senden" des Inspector-Objektes auszuwerten. Das erfordert aber sicherlich komplexere API-Aufrufe, wenn dieses Ereignis nicht als "Public" definiert sein sollte.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

gromax

Hallo Franz,

auch Dir vielen Dank für die prompte Antwort und Deine Anmerkungen.
Die Vorbereitung in Access und der nachmalige Versand mit Outlook ist sicherlich der richtige Weg, den auch Andreas schon vermittelt hat. Ich werde da wohl nicht herumkommen, die DB zu erweitern und damit zu verbessern, wiewohl der bisher eingeschlagene Weg in der Mehrzahl der angewendeten Fälle gute Dienste verrichtet hat. Ich werde mit den Kollegen/innen nochmals hinsichtlich der Umstellung reden.

Inwiefern lohnt es sich, den von Dir zum Schluss aufgerufenen Weg über die Public-Definition weiter zu verfolgen; wäre der Weg denn weniger aufwendig, wenn dieses Ereignis als "Public" definiert wäre? Hier fehlt mir sicherlich die Sensibilität und der Durchblick; ist die "Public-Definition" denn sehr problematisch?

Viele Grüße
gromax

DF6GL

Hallo,

Public oder Private ist von den Outlook-Programmieren (da ein internes Ereignis von Outlook)  festgelegt worden und wir haben auf eine Änderung keinen Zugriff. Insofern ist, wie angedeutet, diese Methode spekulativ (soll heißen, ich weiß es einfach nicht, ob das Ereignis "von außen her" abgegriffen werden kann).


Ansonsten ist der Weg, eine vorbereitete Email in Outlook direkt vor dem Senden noch irgendwie ändern zu können, nicht sehr "datensicher".
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

markusxy

#6
Ich würd es so machen, wie es in der Überschrift steht.
Nach dem Senden speichern.

Du musst einfach nur ein entsprechendes Event verwenden.
z.B. mailitem.send -> der Code wird dann in Access ausgelöst, sobald das Mail versendet wird und du musst es nur noch abspeichern.

Im Grunde sehr simpel, wenn man mit Events umgehen kann.
LG Markus

DF6GL

Hallo,

ZitatIm Grunde sehr simpel, wenn man mit Events umgehen kann.


Naja, dann  zeig halt mal ein konkretes Beispiel...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

markusxy

ZitatNaja, dann  zeig halt mal ein konkretes Beispiel...

Wozu, es steht genau da was zu tun ist.
Habs grade getestet. Es funktioniert einwandfrei.
In der Access Anwendung den Event Listener initialisieren, das Event deklarieren und mit Save reagieren.
Wenn diese drei Zeilen für gromax ein Problem darstellen, kann ich gern helfen.
Zuerst darf er aber selbst probieren, wo bleibt da sonst der Spaß am programmieren?
LG Markus


DF6GL

Hallo,



also, ich wäre schon an Deinem Code interessiert...  und ich möchte nicht dumm sterben.. 

Mit 3 Zeilen Code komm ich auch nicht aus. 

mailitem.send  bringt immer Syntaxfehler "unbekannte Funktion"  .

Feststellen, ob die geänderte Mail gesendet werden soll, kann ich auch nicht..     :(

"entsprechendes Event"    Welches soll ich da nehmen? 


Ich komm nicht weiter ....  :'(
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

markusxy

Zitatmailitem.send  bringt immer Syntaxfehler "unbekannte Funktion"

du hast wohl meinen Kommentar nicht gelesen
ZitatIn der Access Anwendung den Event Listener initialisieren, das Event deklarieren

Send ist ein Event der Klasse MailItem, einfach nachsehen, da gibt es auch noch andere wichtige Events in diesem Zusammenhang.
So ich hoffe, jetzt sind alle Unklarheiten beseitigt.
Falls du es nicht schaffst so poste bitte den Code. Bin morgen Abend wieder am Rechner.
LG Markus

DF6GL

Hallo,

doch, doch, den Kommentar hab ich schon gelesen..
Zitat

In der Access Anwendung den Event Listener initialisieren, das Event deklarieren
das bekomm ich irgendwie nicht gebacken...

ZitatSend ist ein Event der Klasse MailItem, einfach nachsehen,

Wo soll ich denn nachsehen? und eine Klasse MailItem find ich auch nicht  ...  <verzweifel>

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

markusxy

https://msdn.microsoft.com/en-us/library/office/ff865379.aspx

Outlook Hilfe,  www usw.
Aber damit du dich nicht anstrengen musst,  anbei link mit Beispiel.
LG MARKUS

DF6GL

#13
Hallo,

naja, anstrengen muss ich mich nur dabei, nicht zu viel zu grinsen.... ;D ;D

Hast Du wirklich geglaubt, ich verzweifel daran, auf ein Outlook-Event in Access zu reagieren?

ZitatIm Grunde sehr simpel, wenn man mit Events umgehen kann
hat mich ein bisschen "berührt" und wollte nur wissen, ob Du selber damit umgehen kannst.     ;)

Nichtsdestotrotz löst das Send-Event nicht das Ausgangs-Problem, eine Mail erst nach evtl. manuellen Änderungen beim Versenden und mit den Änderungen zu speichern.



Das ItemSend-Event dagegen schon.

Annähernd angepasst an den Code von gromax:

Option Compare Database
Option Explicit
Public WithEvents myOutlApp As Outlook.Application
Dim myMail, strSoSPfad As String, SuS_Name As String, DZ As Long

Private Sub btnSendMail_Click()
.
.
.
.
.
.

    Set myOutlApp = New Outlook.Application
   
    Set myMail = myOutlApp.CreateItem(olMailItem)
    SuS_Name = DLookup("[SuS_Name]", "tbl_SCHUELER", "SuS_PS =" & Forms!frm_SCHUELER03!frm_Schueler_ufoBearbeitung03.Form!SuS_FS)
    With myMail
        .To = DLookup("[EIN_Mail]", "tbl_EINRICHTUNGEN", "EIN_PS =" & Forms!frm_SCHUELER03!EIN_FS)
        .Subject = "Gutachten zu " & SuS_Name
        .Body = "Vorgefertigter Text"
        .Display
    End With

End Sub


Private Sub myOutlApp_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim strMsgFile As String

    If MsgBox("Soll die Mail gespeichert werden? " & Item.Subject & vbCrLf & vbCrLf & Item.Body & "?", vbYesNo + vbQuestion, "Access") = vbYes Then
       strMsgFile = strSoSPfad & "\" & SuS_Name & " " & Format(CStr(DZ + 2), "00") & " Information Stammschule " & ".msg"
       
       myMail.SaveAs strMsgFile
       
       CurrentDb.Execute " Insert into tblSentMails (MS_MsgFile,MS_SendDate) Values ('" & strMsgFile & "',Now())"
    End If
       
End Sub

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

gromax

Hallo Franz, hallo Markus,

vielen Dank für Eure Unterstützung; ich bin zur Zeit an einer "Erweiterung" für meine DB. Sollte ich dabei fertig sein, greife ich diese hier diskutierte Hilfestellung nochmals auf.

Ich melde mich dann auf alle Fälle zurück!!

Vielen Dank!
gromax