Re: Opening E-Mails via IMP
Sebastian Birnbach <[email protected]> Fri, 20 Sep 2019 08:32:22 +0200
| Newsgroups | gmane.comp.horde.devel |
|---|---|
| Message-ID | <CACTNBFMUPGb7nb29_USp73HDTwdQrj++fzR98PXvgZLf_zM2uQ@mail.gmail.com> |
Thanks Michael, that was pretty much what I was searching for. I am a little disappointed that I will probably have to re-implement a lot of what imp already does but there seems no easier way about it. My idea was to mesh up my own application with the Horde email system on a per-message basis. Imagine you have a dossier and it is linked to the email messages related to it. I figured the biggest problem would be to create the links but it appears this is not half the story. Am Di., 17. Sept. 2019 um 04:59 Uhr schrieb Michael J Rubinsky < [email protected]>: > > Quoting Sebastian Birnbach <[email protected]>: > > > Thanks Michael, that looks promising. > > > > Pardon my ignorance but where do I go from there? The API gives me a > > Horde_Imap_Client_Base object which I probably use to get a > > Horde_Imap_Client_Mailbox, OK. But I cannot see how to access a message > > from there. What am I missing? > > > Thomas replied with some good general overview of how to work with the > client; I'll add some more information specific to what I think you > are doing. This code assumes you are within the context of a Horde > application, and that authentication is also valid for IMP. I'm also > assuming you have the UID of the specific message you want and that > you plan on displaying some part of it. For this example, I'll assume > it's one of the main body parts and not an attachment. > > // imap object > $imap = $GLOBALS['registry']->mail->imapOb(); > > // Use the INBOX > $mbox = Horde_Imap_Client_Mailbox::get('INBOX'); > > // Build a query for the imap server > $query = new Horde_Imap_Client_Fetch_Query(); > > // Indicate we want the mime structure of the message. > $query->structure(); > > // If you want flag data... > $query->flags(); > > // You probably want/need the envelope data > $query->envelope(); > > // If you want/need the header text, but just peek so we don't set the > /seen flag. > $query->headerText(array('peek' => true)); > > // Array of UIDS that you want to fetch. > $uids = array(100, 101); > > // Get the results from the server. > $fetch_results = imap->fetch($mbox, $query, array('ids' => new > Horde_Imap_Client_Ids($uids), 'exists' => true)); > > // You can access the results like so: > $data = $fetch_results[$uuid]; > > // Get message headers (returns a Horde_Mime_Headers object) > $data->getHeaderText(0, Horde_Imap_Client_Data_Fetch::HEADER_PARSE); > > > // This is the base Horde_Mime object, describing the message structure. > $base_part = $data->getStructure(); > > // This is the mime_id of a plain text body part (if any). > $text_id = $basePart->findBody('plain'); > $text_mime_part = $basePart->getPart($text_id); > $text_contents = $data->getBodyPart($text_id); > > // Ensure its properly decoded if needed. > if (!$data->getBodyPartDecode($text_id)) > $text_mime_part->setContents($text_contents); > $text_contents = $text_mime->getContents(); > } > > That should get you most of the way there. Obviously there is a LOT > involved in properly fetching and decoding message data. If you go > this route, you'll want to be familiar with Horde_Mime and > Horde_Imap_Client. See https://dev.horde.org/ for autogenerated phpdoc. > > You can also look at the code in IMP or Horde_ActiveSync_Imap_Adapter, > Horde_ActiveSync_Imap_Message, and Horde_ActiveSync_MessageBodyData > for some more usage... > > > > Am Do., 5. Sept. 2019 um 15:28 Uhr schrieb Michael J Rubinsky < > > [email protected]>: > > > >> > >> Quoting Sebastian Birnbach <[email protected]>: > >> > >> > In my own Horde file management application I whish to link entries > >> > ("dossiers") to E-Mail messages. The idea is to keep a message's UID > as a > >> > reference in the dossier and open the message for closer inspection > upon > >> if > >> > the user so whishes. I imagine opening a new IMP window with the > message, > >> > enabling the user to answer, download, forward etc. > >> > > >> > Is there a way to open an E-Mail message of known UID and mailbox from > >> > another Horde application *in IMP* ? I had a look at IMP_Api and find > >> > nothing helpful. > >> > >> Off the top of my head, because of the way IMP caches message > >> information, I don't think it's currently possible to open an IMP > >> message view window referencing only an IMAP UID via code from another > >> application. > >> > >> Your statement about using IMAP directly needing extra authentication > >> isn't exactly correct. You can use IMP_Api::imapOb() to get a > >> reference to the Horde_Imap_Client object, already authenticated > >> (assuming IMP uses "hordeauth" or the user is already otherwise > >> authenticated to IMP). You can then use the Horde_Imap_Client object > >> to fetch what you need to display. > >> > >> > >> > Note: just displaying the message should be feasible using PHP:IMAP > but > >> > that would require an extra authentication step and is not exactly an > >> > integration of applications. > >> > -- > >> > dev mailing list > >> > Frequently Asked Questions: http://wiki.horde.org/FAQ > >> > To unsubscribe, mail: [email protected] > >> > >> > >> > >> -- > >> mike > >> The Horde Project > >> http://www.horde.org > >> https://www.facebook.com/hordeproject > >> https://www.twitter.com/hordeproject > >> -- > >> dev mailing list > >> Frequently Asked Questions: http://wiki.horde.org/FAQ > >> To unsubscribe, mail: [email protected] > >> > > > > -- > mike > The Horde Project > http://www.horde.org > https://www.facebook.com/hordeproject > https://www.twitter.com/hordeproject > -- dev mailing list Frequently Asked Questions: http://wiki.horde.org/FAQ To unsubscribe, mail: [email protected]