I like the idea of materializing a mail in specific objects. This is indeed
easier for the user to use something like $mail.addHtml and
$mail.addContent than having a complicated API as I proposed. All the same
I'm ok for sharing these objects between the sender and reader components.
Let me think a bit more about all this, and I'll let you know as soon as I
have a more precise idea of what exactly I'm going to do and how I'm going
to do it.

Cheers,

Thomas

On Thu, Dec 20, 2012 at 3:17 PM, Jeremie BOUSQUET <
[email protected]> wrote:

> 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
>
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to