DBZ_DnDEmail

19. Januar 2015

DBZ_DnDEmail

for english readers

PreView_TestDB PreView_Component

Download DBZ_DnDEmail-Component
Download DBZ_DnDEmail-Testdatenbank Stand 14 Jan '15

Drag&Drop Mails in 4D V14 (Beispiel D&D in Listbox) und Mac OS X.10 Yosemite

  • aus Apple Mail
  • aus Microsoft Outlook for Mac 2011

Vorweg

Dies ist eine 4D V14-Komponente für Mac OS X. Entwickelt und getested in Mac OS X.10 (Yosemite), Apple Mail (Version 8.x) und Microsoft Outlook for Mac 2011 (MS Office 2011, Version 14.x). Die Komponente erkennt Drag&Drop aus Apple Mail und versucht Drag&Drop aus Outlook for Mac zu indentifizieren. Ist Drag&Drop aus einem der Mail-Programme erkannt, liefert die Komponente die Pfade zu den *.emlx und *.eml-Dokumenten.

In der dazugehörenden Testdatenbank werden die Funktionen der Komponente eingesetzt und in einfacher Form die Darstellung der eMail-Nachricht realisiert. eMail ist zu sehr gewachsen, sind zu viele Köche dran beteiligt, als daß die Mail-Darstellung ein einfaches Unterfangen würde. Darum in der Test-Datenbank nur eine einfache Kontrolle der rübergezogenen Mails.

Display_Emails

Die Mailstruktur sollte ab Mac OS X.7 (Lion) identisch zu den in Yosemite sein. Ältere OS-Versionen, außer vielleicht Mac OS XP (Snow Leopard), sind anders organisiert.

Brauchen Sie die Komponente für 4D V12 oder V13 oder Mac OS X vor Yosemite oder für andere MS Office-Vesionen, sollten Sie den Sourecode kaufen. Die Komponente verwendet keine V14-Features. Die 4D-WebArea ist in V14 leistungsfähiger als in älteren 4D Versionen.

Um Emails darzustellen in DBZ_DnDEmail-Testdatabase, werden 4D Internet Commands verwendet, um die Header-Informationen und die Nachricht selbst auszulesen. Die Komponente braucht die 4D Internet Commands nicht.

Wie verwenden

Diese Beschreibung gilt für die Komponente und die Test-Anwendung. Beide verwenden je eine Projekt-Methode.

  • DBZ_EmailDnD_Tester
  • Verwaltet die Test-Anwendung und die Oberfläche. Sie ist gedacht, die Optionen der Komponente zu demonstrieren. Folgen Sie dem Listbox-Script und den Button-Scripts, um die weitere Verwendung der Mails zu verstehen.

    DBZ_EmailDnD_Tester braucht DBZ_DnDEmail_Comp.

  • DBZ_DnDEmail_Comp
  • Haben Sie den Sourcecode gekauft, brauchen Sie nur diese Methode in Ihre DB zu kopieren. In dieser Methode führen Sie Anpassungen an andere OS-Versionen und andere Email-Clients aus. Diese Methode ist eigenständig, ruft keine andere Methode auf, braucht keine Komponente, kein Plugin.

    DBZ_DnDEmail_Comp braucht die Dokumente applemail.dbz and outlook.dbz im Resource-Ordner.

Using DBZ_DnDEmail_Comp

OnDnD_Script

Auf Drag&Drop im UI-Objekt reagieren

Die Test-Anwendung benutzt eine Listbox, um Drag&Drop zu empfangen und um die eMail-Betreffs der rübergezogenen eMails aufzulisten. Hängen Sie diesen 4D-code an die Listbox.

Case of
: ((Form event=On Drag Over) | (Form event=On Drop))
  DBZ_DnDEmail_Comp ("Drag&Drop";->$result_L)
  $0:=$result_L
  If (Form event=On Drop)
    // in der DBZ_DnDEmail-Testanwendung, verfahren Sie synonym in Ihrer DB
    DBZ_EmailDnD_Tester ("ReceiveMail_Fill")
  End if
Else
  // andere Listbox-Events werden an DBZ_EmailDnD_Tester ("ReceiveMail_Action") übergeben
End case

Den Drop 4D code abhandeln

Ziel der Komponente ist den Pfad auf die *.eml und *.emlx-files einer Mail-Nachricht zu ermitteln. Seit Mac OS X Lion wird jede Mail-Nachricht als emlx-file abgelegt. Das ist gut!

Outlook get anders vor. Deshalb fordert die Komponente Outlook auf, eine Kopie der Mail-Nachricht als *.eml-file im Ordner Resources/outlook_eml anzulegen. Die Komponente räumt auf. Sie können das Aufräumen forcieren und DBZ_DnDEmail_Comp ("Startup") und DBZ_DnDEmail_Comp("Exit") in Ihrer Anwendung ausfrufen. Das räumt die temporären Dateien auf.

StartupExit

Test-Oberfläche: sind die Listbox-Arrays initialisiert, holt DBZ_EmailDnD_Tester ("ReceiveMail_Fill") die Message-IDs und die Pfade zu den eml-Files mit Aufrufen an DBZ_DnDEmail_Comp wie im Screenshot zu sehen und hier beschrieben. HowToCallComponent

  • DBZ_DnDEmail_Comp ("Messages_IDsGet";->$t_MessagesID_L)
  • fordert die Komponente auf, das übergebene Longint Array mit den Message-IDs zu füllen.
    Für jede Mail-Nachricht liefert
  • DBZ_DnDEmail_Comp ("Messages_Path";->$receivePath;->$mailID_L)
  • also die Komponente den Pfad ($2) zur übergebenen Message-ID ($3).
    Als nächstes bereits ein UI-Feature
  • DBZ_EmailDnD_Tester ("MsgInfo_Get_Subject";->$pathAndSubject)
  • liest den Betreff der Mail-Nachricht via 4D Internet Commands für den übergebenen Pfad aus und liefert in $pathAndSubject den Betreff zurück.
Das war es.

Zusätzlich

Die Test-Anwendung lädt über die 4D Internet Commands die Message-Header als Key-Value-Listbox und versucht den Inhalt einer Mail-Nachricht in der WebArea darzustellen. Email sind chaotisch.

Liefert 4D Internet Commands einen leeren Message-body und ist Content-Transfer-Encoding "base64", "7bit", oder "HTML", kann die Komponente um Decodierung der mit $error_L:=MSG_GetMessage ($msgPath;$offSet_L;$msgLength;$msg_Body) gelesenen Nachricht angefragt werden

  • DBZ_DnDEmail_Comp ("Messages_Decode";->$msg_Body)
  • DBZ_DnDEmail_Comp ("Messages_7Bit";->$msg_Body)
  • DBZ_DnDEmail_Comp ("Messages_HTML";->$msg_Body)
wie zu sehen in der Methode DBZ_EmailDnD_Tester der Testanwendung.

Erfahrungen

Ich ziehe mehrere eMails in einem Rutsch rüber. Einige 100 habe ich noch nicht probiert. So viele wird länger dauern. Die meiste Zeit nach dem On Drag Over wird verbraten wenn ich ruhende Festplatten direkt am Mac habe, die geweckt werden wollen.

Lizenz und Sourcecode

Die Komponente kostet nichts. Den Sourcecode, also die Ideen und den 4D-Code, verkaufe ich.

Via Paypal Sourcecode kaufen


lieber auf deutsch

PreView_TestDB PreView_Component

Download DBZ_DnDEmail-Component
Download DBZ_DnDEmail-Testdatabase as of 14 Jan '15

Drag&Drop Mails onto 4D V14 (example = via Listbox) and Mac OS X.10 Yosemite

  • from Apple Mail
  • from Microsoft Outlook for Mac 2011

Before you start

This is a 4D V14-component for Mac OS X. Developed and tested in Mac OS X.10 (Yosemite), Apple Mail (Version 8.x) and Microsoft Outlook for Mac 2011 (MS Office 2011, Version 14.x). The Component recognises Drag&Drop from Apple Mail and tries to identify Drag&Drop from Outlook for Mac. Is a Drag&Drop from one of the eMail-clients detected, the component delivers paths to *.emlx and *.eml-files.

The accompanying test-database uses the functions of the component and tries to display the email-message. Mail is the playground for too many players. Hence the test-database is just a simple way to display and test drag&dropped messages. Getting involved into email is no job for the faint-hearted.

Display_Emails

Concerning Mac OS X, this should work starting with Mac OS X.7 (Lion). It probably will not work with prior versions, may be Mac OS XP (Snow Leopard) might.

To use the component in 4D V12 or V13 or OS-versions prior to Mac OS X.10 or other MS Office versions, you should buy the sourcecode. There is no 4D V14-specific feature in use by the component. The UI of DBZ_DnDEmail-Testdatabase for older versions of 4D might be more difficult concerning WebArea.

To display the eMail in DBZ_DnDEmail-Testdatabase, the testdatabase uses 4D Internet Commands to extract message-info and the message itself. The component itself does not need 4D Internet Commands.

How to use

This is the description for both the component and the test-database. Both contain just one project-method.

  • DBZ_EmailDnD_Tester
  • Handles the DBZ_DnDEmail-Testdatabase and all UI. It shows how the options of the component are used. Follow the flow of the Listbox-script and the scripts of the buttons in the footer-area to learn more.

    DBZ_EmailDnD_Tester uses DBZ_DnDEmail_Comp.

  • DBZ_DnDEmail_Comp
  • If you bought the source-code, this is the method you'll copy to your DB. Here you enhance and update to newer OSses and Mail-Clients. This method is selfcontained, does not need any other method or component to work. 4D Internet commands need not be available.

    DBZ_DnDEmail_Comp does need the Resource-folder files applemail.dbz and outlook.dbz.

Using DBZ_DnDEmail_Comp

OnDnD_Script

Handling drag&drop in UI-object

The Test-Database uses a listbox to receive drag&drop and to display the dropped email-subjects. Attach this 4D-code to the listbox.

Case of
: ((Form event=On Drag Over) | (Form event=On Drop))
  DBZ_DnDEmail_Comp ("Drag&Drop";->$result_L)
  $0:=$result_L
  If (Form event=On Drop)
    // for the DBZ_DnDEmail-Testdatabase, handle yourself in your environment
    DBZ_EmailDnD_Tester ("ReceiveMail_Fill")
  End if
Else
  // handling other listbox-events of DBZ_EmailDnD_Tester ("ReceiveMail_Action")
End case

Handling drop in 4D code

Aim of the component is to get the paths to the *.eml and *.emlx-files. Since Mac OS X.7 Lion, every mail-message gets saved as emlx-file. Good!

Outlook is a different beast, so the component forces Outlook to save a copy of the mail als *.eml-files into folder Resources/outlook_eml temporarily. If run as component, you might want to install DBZ_DnDEmail_Comp ("Startup") and DBZ_DnDEmail_Comp("Exit") in your database. This forces clean-up of temporarily stored data.

StartupExit

UI-tester: after initialising the listbox-arrays, DBZ_EmailDnD_Tester ("ReceiveMail_Fill") gets the message-ids and fills eml-file paths with calls to DBZ_DnDEmail_Comp as shown in the screenshot and described here. HowToCallComponent

  • DBZ_DnDEmail_Comp ("Messages_IDsGet";->$t_MessagesID_L)
  • asks the component to fill the Longint Array passed as $2 with message-IDs.
    For every message
  • DBZ_DnDEmail_Comp ("Messages_Path";->$receivePath;->$mailID_L)
  • asks the component to get the path ($2) for the message with message-ID ($3)
    Next a UI-feature
  • DBZ_EmailDnD_Tester ("MsgInfo_Get_Subject";->$pathAndSubject)
  • reads the message-subject via 4D Internet Commands from the message-path given and delivers the subject in $pathAndSubject.
That's it.

Additional

The test-database displays the message-header as key-value-listbox and tries to set the body of the mail-message as content of a webarea.

If Message-body is empty and Content-Transfer-Encoding is "base64", "7bit", or "HTML", you can ask the component to decode the message read by $error_L:=MSG_GetMessage ($msgPath;$offSet_L;$msgLength;$msg_Body)

  • DBZ_DnDEmail_Comp ("Messages_Decode";->$msg_Body)
  • DBZ_DnDEmail_Comp ("Messages_7Bit";->$msg_Body)
  • DBZ_DnDEmail_Comp ("Messages_HTML";->$msg_Body)
as shown in DBZ_EmailDnD_Tester of DBZ_DnDEmail-Testdatabase.

Buy sourcecode via PayPal