Be careful to not mix the Java API with the scripting API. Both API need to be different and the best adapted for the language.
Thanks -Vincent On Dec 20, 2012, at 4:01 PM, Thomas Delafosse <[email protected]> wrote: > I agree. I would try to recreate something like the current > mailsender.sendHtmlMessage(...) and sendTextMessage(...) from the > components we would develop. > > Thomas > > On Thu, Dec 20, 2012 at 3:48 PM, Ludovic Dubost <[email protected]> wrote: > >> Hi, >> >> While it's great to have a object oriented API to compose a complex email, >> I believe for velocity and a set of simple use cases it's also good to >> have at least in the scripting API some simple direct APIs like we have in >> the current mailsender. It reduces the number of lines written for simple >> text or html email >> >> Ludovic >> >> >> 2012/12/20 Jeremie BOUSQUET <[email protected]> >> >>> I even think there could be 3 modules for this :) And a unique script >>> service for "pure" mails manipulation... >>> Depends on what level of API is wanted. >>> >>> Considering what I started and what I would find nice as a target, >> possible >>> use-case would look like the following: >>> >>> {{velocity}} >>> >>> ## Sending a mail >>> >>> #set($mail = $services.mail.newMail("sender", "from", "to", "cc", >>> "subject")) >>> $mail.addText("bla bla bla") >>> $mail.addHtml("<html/>") >>> $mail.addCalendar($services.mail.newCalendar("begin date", "end date", >>> "subject", ...)) >>> $mail.addContent("content type", "content") >>> >>> $mail.send() >>> ## or >>> $mail.send(host, port, protocol, ...) >>> ## or >>> $services.mail.send($mail, host, port, protocol...) >>> >>> ## Reading a mail >>> >>> #set($mails = $services.mail.fetch(host, port, protocol, ...)) >>> #set($mail = $mails[0]) >>> $mail.from, $mail.to, $mail.cc, $mail.text, $mail.html ... >>> >>> ## Resending / Replying >>> >>> #set($mails = $services.mail.fetch(host, port, protocol, ...)) >>> #set($mail = $mails[0]) >>> #set($newMail = $services.mail.newReply($mail)) ## from --> to, etc. >>> >>> $newMail.send() >>> ## or >>> $newMail.send(host, port, protocol, ...) >>> ## or >>> $services.mail.send($newMail, host, port, protocol, ...) >>> >>> {{/velocity}} >>> >>> In that case there would be as components something like : >>> mail-commons-api, mail-sender-api, mail-reader-api. >>> If script services are distinct, the above would be replaced by: >>> $services.mail.newMail(...) >>> $services.mail.newReply(...) >>> $services.mailSender.send(...) >>> $services.mailReader.fetch(...) (or read() of course) >>> ... but I'm not sure it really adds value to differentiate. >>> The inner javamail "Message" would never be publicly exposed, while >>> authorizing easy manipulations. >>> >>> For now what I wrote is a mixed-bag of what is above, and only for >> reading. >>> But I really believe that: >>> - there's an added value to "materialize" a mail in specific object(s) >>> (MailItem.java and MailContent.java in my work in progress components, >> with >>> "internal" headers stripped) instead of creating/extending a flat API >> with >>> numerous parameters >>> - those objects should be shared between the sender and the reader >>> components >>> >>> For now my current API is more: >>> Message fetch(host, port, protocol, ...) >>> MailItem parseHeaders(Message message) >>> MailContent parseContent(Message message) >>> ... because it's usually a good thing to lazily load message body parts. >>> >>> WDYT ? >>> >>> BR, >>> Jeremie >>> >>> >>> >>> 2012/12/20 Vincent Massol <[email protected]> >>> >>>> >>>> On Dec 20, 2012, at 1:35 PM, Thomas Mortagne < >> [email protected]> >>>> wrote: >>>> >>>>> On Thu, Dec 20, 2012 at 12:55 PM, Thomas Delafosse < >>>>> [email protected]> wrote: >>>>> >>>>>> Hi all, >>>>>> >>>>>> I would be happy to work on the mailSender plugin. >>>>>> I propose to make it a component and add it a few functionalities. >>>> Namely, >>>>>> I was thinking about adding an API like: >>>>>> public int sendMultiContentMessage (String from, String to, String >>> cc, >>>>>> String bcc, String subject, String[] contents, List<Attachment> >>>>>> attachments) (1) >>>>>> where contents would be a string array containing all the contents >> to >>> be >>>>>> embed in the mail (text, html but also a vCalendar for example) >> along >>>> with >>>>>> their MIME type. >>>>>> So for example, if you want to send a mail containing some html part >>>> and a >>>>>> vCalendar, "contents" would look something like : >>>>>> contents = ['text/html', Your Html code, 'text/calendar', Your >>>> vCalendar] . >>>>>> >>>>>> Another way to achieve this would be to use a single String "body" >>>> instead >>>>>> of "contents", with a specific syntax indicating each part MIME >> type, >>>> thus >>>>>> allowing us to parse it. For example we could imagine having >> something >>>> like >>>>>> : >>>>>> public int sendMultiContentMessage (String from, String to, String >>> cc, >>>>>> String bcc, String subject, String body, List<Attachment> >> attachments) >>>> with >>>>>> body = "{{html}}HTML code{{/html}} {{calendar}}Calendar >>>> code{{/calendar}}" >>>>>> (2) or even >>>>>> body = "{{mailPart type='text/html'}}HTML code{{/mailPart}} >> {{mailPart >>>>>> type="text/calendar"}}Calendar code{{/mailPart}}" (3). >>>>>> This would be easier to use ((2) most of all), but probably >> trickier, >>>>>> slower and for (2), less flexible. >>>>>> >>>>>> WDYT ? And of course, if there is anything else you would like to >>>> change in >>>>>> the mailSender, let me know ! >>>>>> >>>>> >>>>> Would be nice to start from what Jeremie already started on >>>>> >>>> >>> >> https://github.com/xwiki-contrib/xwiki-application-mailarchive/tree/master/xwiki-contrib-mailsince >>>>> it's the same goal, a generic mail component API. >>>> >>>> I think it's different: one is for mail sending, the other for mail >>>> reading. I agree with Ludovic that we should have 2 modules for this. >>>> >>>> Thanks >>>> -Vincent >>>> >>>>>> Thomas >>>>>> >>>>>> On Wed, Nov 28, 2012 at 3:01 PM, Ludovic Dubost <[email protected]> >>>> wrote: >>>>>> >>>>>>> Hi Jeremie and all, >>>>>>> >>>>>>> Note that currently mailsender is used quite a lot by standard >> XWiki >>>>>>> Enterprise features like "send page by email", "invitation", >>>>>>> "registration". >>>>>>> I agree that the mailsender code could be merged with your own >>>> component >>>>>>> that currently handles reading emails. >>>>>>> >>>>>>> Any other opinion on the mail I sent before. I'd like to publish >> the >>>> code >>>>>>> that generates vcalendar invitations because it could be used in >> many >>>>>> areas >>>>>>> but without the mailsender modifications it cannot work and >>> rewriting a >>>>>>> mail code that handles vcalendar is tough: >>>>>>> >>>>>>> So what would be the approach to add a vcalendar part in emails >> sent >>> by >>>>>> the >>>>>>> current mailsender ? Can I propose my patches that add the >> following >>>> API: >>>>>>> >>>>>>> public int sendHtmlMessage(String from, String to, String cc, >> String >>>> bcc, >>>>>>> String subject, String body, >>>>>>> String alternative, String calendar, List<Attachment> >>>>>> attachments) >>>>>>> >>>>>>> which is derived from >>>>>>> >>>>>>> public int sendHtmlMessage(String from, String to, String cc, >> String >>>> bcc, >>>>>>> String subject, String body, >>>>>>> String alternative, List<Attachment> attachments) >>>>>>> >>>>>>> Note that this API should actually be: >>>>>>> >>>>>>> public int sendHtmlMessage(String from, String to, String cc, >> String >>>> bcc, >>>>>>> String subject, String html, >>>>>>> String alternativeText, List<Attachment> attachments) >>>>>>> >>>>>>> As this is the way the fields are used since there is no way to >>> change >>>>>> the >>>>>>> content type of the emails from these APIs >>>>>>> >>>>>>> Ludovic >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> 2012/11/23 Jeremie BOUSQUET <[email protected]> >>>>>>> >>>>>>>> Hi Ludovic, >>>>>>>> >>>>>>>> If I may invite myself in the discussion, I have the same >> questions >>>>>>>> concerning the mail archive app I'm writing, in which I plan to >> add >>> a >>>>>>>> "reply" feature on one side, and on the other side add management >> of >>>>>>>> vcalendar parts in incoming emails. Naturally, it would then be >> nice >>>> to >>>>>>> be >>>>>>>> able to send vcalendar as an email part (or any type of part). >>>>>>>> >>>>>>>> For now there's no "reply" feature so of course I do not use the >>>>>>> mailsender >>>>>>>> plugin. But there's the beginning of a "mail" component, for now >>>>>>> dedicated >>>>>>>> to the mail archive app, and obviously aiming at hiding javamail >> api >>>>>>>> behind, and providing facilities to parse emails headers and >> parts, >>>> and >>>>>>> why >>>>>>>> not send emails. For now it "knows" how to read and compute most >>>> emails >>>>>>>> content (text, html, headers, attachments, attached emails), >> though >>>> has >>>>>>>> same limitation (including vcalendar). >>>>>>>> >>>>>>>> Currently the api is like that, but is quite draft and unstable >>>> (mostly >>>>>>> the >>>>>>>> update/create*Page that are not even implemented, and IMO should >> be >>>>>>>> removed): >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>> >>> >> https://github.com/xwiki-contrib/xwiki-application-mailarchive/blob/master/xwiki-contrib-mail/src/main/java/org/xwiki/contrib/mail/IMailComponent.java >>>>>>>> What's available from parsed mail body is: >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>> >>> >> https://github.com/xwiki-contrib/xwiki-application-mailarchive/blob/master/xwiki-contrib-mail/src/main/java/org/xwiki/contrib/mail/MailContent.java >>>>>>>> >>>>>>>> Obviously, when all that reaches a final state, it would be nice >>> for a >>>>>>>> "mail" and/or "mailsender" component to be shared for xwiki and >> the >>>>>> mail >>>>>>>> archive app (and whoever wants to bother with mails) needs, >>>>>>>> >>>>>>>> That was for your information, >>>>>>>> >>>>>>>> BR, >>>>>>>> Jeremie >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> 2012/11/23 Ludovic Dubost <[email protected]> >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I wanted to discuss about the future of the mailsender plugin ? >>>>>>>>> >>>>>>>>> I've been working on a small tool to be able to send a Calendar >>>>>>>> Invitation >>>>>>>>> by email from a Meeting Notes AppWithinMinutes application and I >>>>>> found >>>>>>>> some >>>>>>>>> limitation in the mailsender plugin, namely you cannot add >>> multipart >>>>>>>>> alternative email parts in addition to the text and html parts >>>>>> already >>>>>>>>> supported by the plugin. >>>>>>>>> >>>>>>>>> I was able to hack the mailsender plugin to add a vcalendar part >>> but >>>>>> it >>>>>>>>> does not really sound right to do that since we should support >> any >>>>>> part >>>>>>>> of >>>>>>>>> any content type, but this is a bigger refactoring. >>>>>>>>> >>>>>>>>> I was wondering what the future is for the mailsender plugin. Do >> we >>>>>>> plan >>>>>>>> to >>>>>>>>> make it a component and keep the same functionality ? Is there a >>> plan >>>>>>> for >>>>>>>>> an alternative component ? >>>>>>>>> >>>>>>>>> And what would be the approach to add a vcalendar part in emails >>> sent >>>>>>> by >>>>>>>>> the current mailsender ? This would be needed to support the >>> feature >>>>>> of >>>>>>>>> sending invitation emails which would be very powerfull. >>>>>>>>> >>>>>>>>> Ludovic >>>>>>>>> >>>>>>>>> -- >>>> _______________________________________________ >>>> devs mailing list >>>> [email protected] >>>> http://lists.xwiki.org/mailman/listinfo/devs >>>> >>> _______________________________________________ >>> devs mailing list >>> [email protected] >>> http://lists.xwiki.org/mailman/listinfo/devs >>> >> >> >> >> -- >> Ludovic Dubost >> Founder and CEO >> Blog: http://blog.ludovic.org/ >> XWiki: http://www.xwiki.com >> Skype: ldubost GTalk: ldubost >> _______________________________________________ >> devs mailing list >> [email protected] >> http://lists.xwiki.org/mailman/listinfo/devs >> > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

