On Wed, Dec 26, 2012 at 3:23 PM, Vincent Massol <[email protected]> wrote:

>
> On Dec 26, 2012, at 3:15 PM, Thomas Delafosse <[email protected]>
> wrote:
>
> > Ok, so I would rather have a component API like
> >
> > - Mail prepareMail(from, to, cc, bcc, subject)
>
> createMail is better than prepareMail IMO.
>
> I'd make the cc and bcc not part of the constructor and instead move them
> as setters since they're optional.
>
> > - int sendMail(Mail mail)
>
> Either that or add a send() method in Mail.
>
> > while the methods addToContent, addHtml, addAttachment, etc... would be
> > directly used from the Mail class.
>
> I don't understand what addToContent is and what different it has to
> addHtml.
>

addToContent (String mimeType, String partToAdd) is more generic : you
specify the Mime Type of the part you want to add. So addHtml(String s) is
just the same as addToContent("text/html", s). But as most of the time you
add only Html or text, I was thinking it was better to have a specific
method to add an Html part in the scripting API. I can do the same with a
addTextContent method.

>
> Can I call addContent several times?
>

Yes, so for example if you want to have an email with an html part and a
calendar part, you call addToContent("text/html", html Text) and then
addToContent("text/calendar", calendar Code).


>
> > So a use-case would rather be :
> > {{velocity}}
> > $mail = $services.mailSender.prepareMail(from, to,...)
> > $mail.addHtml('<p>Blabla</p>')
>
> addHTMLContent would be nicer. So you need also a addTextContent?
> why not have an addContent(String, boolean isHTML)
> or a more generic addContent(String, String mimeType)
> or both
>
> > $mail.addCalendar()
>
> What is a calendar?
>

It is either a vCalendar or an iCalendar (it is used by Gmail to send
invitations). It corresponds to the Mime Type "text/calendar". Here again
addCalendar(String calendar) is just the same as
addToContent("text/calendar", calendar). It's just to make it easier to
use.

>
> You should also show an example when using the Java API.
>

On Java it would give something like :

@Inject
private MailSender mailSender

Mail mail = this.mailSender.newMail(from,to,subject) ;
String htmlCode = "<p>Blabla</p>" ;
String calendar = "BEGIN VCALENDAR... END VCALENDAR" ;
mail.addToContent("text/html", htmlCode) ;
mail.addToContent("text/calendar", calendar) ;
this.mailSender.sendMail(mail) ;


>
> Thanks
> -Vincent
>
> > $services.mailSender.sendMail($mail)
> > {{/velocity}}
> >
> > Thanks,
> >
> > Thomas
> >
> > On Wed, Dec 26, 2012 at 3:04 PM, Vincent Massol <[email protected]>
> wrote:
> >
> >> Hi Thomas,
> >>
> >> On Dec 26, 2012, at 2:58 PM, Thomas Delafosse <
> [email protected]>
> >> wrote:
> >>
> >>> I've been thinking a bit more on the mailSender component, and here's
> the
> >>> APIs I have in mind :
> >>>
> >>> The component API would have the following methods :
> >>> - void prepareMail(String from, String to, String cc, String bcc,
> String
> >>> subject)
> >>> - void addToContent(String contentType, String content)   //To add a
> >> part
> >>> to the mail, contentType being the Mime Type of this part
> >>> - void addAttachment(Attachment file)
> >>> - int sendMail()   //Returns 1 on success and 0 otherwise
> >>>
> >>> And the scripting API would have the following :
> >>> - void prepareMail(String from, String to, String cc, String bcc,
> String
> >>> subject)
> >>> - void addToContent(String contentType, String content)
> >>> - void addHtml(String content)
> >>> - void addCalendar(String vCalendar)
> >>> - int sendMail()
> >>> - int sendHtmlMail(String from, String to, String subject, String html,
> >>> String alternativeText)  //Simple method for non-experienced users
> >> sending
> >>> a simple html mail
> >>>   {
> >>>       this.mailSender.prepareMail(from, to, null, null, subject) ;
> >>>       this.mailSender.addToContent("text/html", html) ;
> >>>       this.mailSender.addToContent("text/plain", alternativeText);
> >>>       return this.mailSender.sendMail() ;
> >>>   }
> >>>
> >>> So, a simple use-case would look something like :
> >>> {{velocity}}
> >>> $services.mailSender.prepareMail("[email protected]", "[email protected]", "", "",
> >>> "Subject")
> >>> $services.mailSender.addHtml("<strong>This is an email with a
> >>> calendar</strong>")
> >>> $services.mailSender.addCalendar($calendar)
> >>> $services.mailSender.sendMail()
> >>> {{/velocity}}
> >>
> >> This is not very good because you're making the service stateful and
> >> services mist absolutely be stateless. They need to be able to be used
> by
> >> several threads and not hold any state. Your API calls must return some
> >> object if you want to have several calls.
> >>
> >> Thanks
> >> -Vincent
> >>
> >>>
> >>> What do you think ? Is there anything you think is missing ? In
> >> peticular,
> >>> I'm wondering whether it would be useful to recreate methods similar to
> >> the
> >>> parseRawMessage() and sendMailFromTemplate() methods that were
> >> implemented
> >>> in the former mailSender ?
> >>>
> >>> Cheers,
> >>>
> >>> Thomas
> >>>
> >>>
> >>> On Thu, Dec 20, 2012 at 7:00 PM, Sergiu Dumitriu <[email protected]>
> >> wrote:
> >>>
> >>>> On 12/20/2012 06:55 AM, Thomas Delafosse 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)
> >>>>
> >>>> Methods with too many arguments are not recommended. It even breaks
> our
> >>>> checkstyle, which allows at most 7 parameters (which I think is too
> >>>> much, anyway). Listing possible mail tokens is bad, since in most
> cases
> >>>> not all of them are needed, and in some cases others will be needed
> with
> >>>> no way of specifying them, other than writing the whole message
> >>>> including headers by hand.
> >>>>
> >>>> Either use a typed object, or a generic map.
> >>>>
> >>>>> 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] .
> >>>>
> >>>> This is an untyped convention. You're hoping that all users will read
> >>>> the documentation and know that they're supposed to provide pairs of
> >>>> values, MIME + content. That's not a nice thing to do. A list of typed
> >>>> objects would be better, since it doesn't allow mistakes.
> >>>>
> >>>>> 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.
> >>>>
> >>>> I don't like this either, it's even more error prone.
> >>>>
> >>>> Java is an OOP language, use good OOP design as much as possible.
> >>>>
> >>>>> WDYT ? And of course, if there is anything else you would like to
> >> change
> >>>> in
> >>>>> the mailSender, let me know !
> >>>>>
> >>>>> Thomas
> _______________________________________________
> 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