On Mon, Jan 7, 2013 at 12:12 AM, Vincent Massol <[email protected]> wrote: > > On Jan 6, 2013, at 10:54 PM, Thomas Delafosse <[email protected]> > wrote: > >> The advantage of jSoup is that it handles the problems I could have if the >> html part is not well written, > > Actually this is exactly what the XWiki HTML parser does too :) > > I really think you should use our parser.
Plus de HTML parser is very important so the more we test it the better. > > Thanks > -Vincent > >> so I was thinking it was more secure to use >> it than just parsing the "<>" in the html part . But I must admit that I >> haven't had a close look on the xwiki renderers, and if there are some that >> do it well, I should probably rather use them... I will give it a closer >> look tomorrow. > >> >> Cheers, >> >> Thomas >> >> On Sun, Jan 6, 2013 at 8:53 AM, Jeremie BOUSQUET <[email protected] >>> wrote: >> >>> Le 2 janv. 2013 18:44, "Thomas Delafosse" <[email protected]> a >>> écrit : >>>> >>>> On Fri, Dec 28, 2012 at 9:01 PM, Sergiu Dumitriu <[email protected]> >>> wrote: >>>> >>>>> On 12/26/2012 10:18 AM, Vincent Massol wrote: >>>>>> >>>>>> On Dec 26, 2012, at 4:01 PM, Thomas Delafosse < >>>>> [email protected]> wrote: >>>>>> >>>>>>> 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. >>>>>> >>>>>> I think I prefer addContent instead of addToContent. >>>>>> >>>>>> So just to be sure, doing the following will work: >>>>>> >>>>>> addContent("content1", "text") >>>>>> addContent("content2", "text") >>>>>> addContent("content3", "html") >>>>>> >>>>>> right? >>>>>> >>>>>> It's going to create a multipart email? >>>>>> >>>>>> I think a single addContent method is good enough, passing an enum as >>>>> the second parameter (the mimetype). Enums are magically constructed >>> from >>>>> velocity with our custom uberspector. >>>>> >>>>> -1 for enums. That limits the possible content types we can add. >>>>> >>>> >>>> I agree on that point : there are simpler methods such as >>>> $services.mailSender.sendHtmlMail(from, to, subject, html, alternative) >>> for >>>> people who don't know much about mimeTypes, so it would be a shame to >>> limit >>>> this method. >>>> >>>>> >>>>> I prefer: >>>>> >>>>> addMimePart(String content, string mimeType) >>>>> >>>>> >>>> So far it's exactly the way my addContent method works. But I can change >>>> its name to addMimePart if you prefer. >>>> >>>> >>>>> There's also a MimePart in the standard javax.mail library, and we >>> could >>>>> actually use this one, since it's more standard, and more flexible: >>>>> >>>>> >>> http://javamail.kenai.com/nonav/javadocs/javax/mail/internet/MimePart.html >>>>> >>>>> >>>>> >>> >>> http://javamail.kenai.com/nonav/javadocs/javax/mail/internet/MimeBodyPart.html >>>>> >>>>> But this might be a bit too verbose and complex to use. >>>>> >>>>> I hope that the implementation will be smart enough to send a plain >>>>> message when only one body part (of type text or html) is present. >>>>> >>>>> >>>> If there is only a text or html part to the mail, I add an alternative >>>> text/plain part to the mail, using jSoup to convert the html content into >>>> text, if it's what you mean. >>> >>> On mail reader side, I used xwiki parsers/renderers to convert html to >>> plain text. What is added value of jsoup ? >>> >>>> >>>>>>> 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. >>>>>> >>>>>> ok. So I think in the future we could add some calendar helper that >>> will >>>>> create the calendar string information. >>>>> >>>>> -1 for a specific addCalendar method. Why not addVCard, addImage, >>>>> addPDF, addDoc and so on? This makes a stuffed API, where anything that >>>>> doesn't have a dedicated API method will feel like a second-class >>>>> citizen. >>>> >>>> >>>>>> For now this is good enough IMO: >>>>>> addContent("calendar info content as per RFC 2445", "calendar") >>>>>> >>>>>> And then later on something like: >>>>>> >>>>>> addContent($mailsender.createCalendarMimeTypeData(param1, param2, >>> ….), >>>>> "calendar") >>>>>> >>>>>>>> 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) ; >>>>>> >>>>>> I don't like this too much. Why not use a constructor on the Mail >>> object? >>>>> >>>>> Constructors are bad, in a component-based world. I'd rather have the >>>>> Mail object an interface, with an internal implementation used by the >>>>> MailSender implementation. >>>>> >>>>>> (The other option is a perlookup component is you really need to have >>>>> some other components injected in the Mail object; in that case you'll >>> need >>>>> setters to from/to/subject since we currently don't support constructor >>>>> injection). >>>>>> >>>>>>> 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) ; >>>>>> >>>>>> why sendMail and not send? We're in a MailSender component so we know >>>>> we're sending mail already ;) >>>>> >>>>> +1 for send. >>>>> >>>>> By the way, I've put a first version of my component on github : >>>> https://github.com/tdelafosse/mailSender. Feel free to have a look and >>> to >>>> tell me if there's things to change / add / enhance. >>>> >>>> Cheers, >>>> >>>> Thomas > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs -- Thomas Mortagne _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

