The advantage of jSoup is that it handles the problems I could have if the html part is not well written, 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 > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs > _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

