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.

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

Reply via email to