2010-09-14 19 views
5

J'ai regardé le code et la documentation du plugin Grails Mail (version 0.9) et je n'ai pas le support que je recherche. Vous ne pouvez définir qu'un seul corps, puis fournir une pièce jointe mime qui pointe vers un fichier statique. Je dois passer un modèle dans un GSP et le rendre à la fois le HTML et les versions en texte brut et les avoir tous les deux disponibles dans le message. Cela permettra aux clients de messagerie non HTML d'afficher la partie texte/brut et les clients prenant en charge HTML pour afficher la partie texte/html.Comment puis-je envoyer un e-mail en plusieurs parties avec des parties texte/texte et texte/html avec Grails?

Est-ce que quelqu'un a fait cela avec Grails? Y at-il un moyen facile de le faire, ou dois-je modifier le plugin mail ou simplement aller à la bibliothèque Java Mail directement?

Répondre

5

Depuis la version 1.0 du plug-in de messagerie supporte nativement un contenu alternatif multipart comme décrit dans http://jira.grails.org/browse/GPMAIL-37

mailService.sendMail { 
    multipart true 
    to <recipient> 
    subject <subject string> 
    text 'my plain text' 
    html '<html><body>my html text</body></html>' 
} 
+0

Je ne travaille pas avec Grails en ce moment, donc je n'ai pas le temps de le tester, mais je Prends ta parole pour ça. ;-) –

0

Nous utilisons l'email multipart avec le plugin email standard. L'extrait de code suivant est situé dans une classe de service, c'est la raison pour laquelle nous utilisons templating groovy standard au lieu du moteur gsp:

 Template template = groovyPagesTemplateEngine.createTemplate(<templatename>) 
     Writable emailBody = template.make(<data model as map>) 
     StringWriter bodyWriter = new StringWriter() 
     emailBody.writeTo(bodyWriter) 

     String xml = <some xml> 

     mailService.sendMail { 
      multipart true 
      to <recipient> 
      subject <subject string> 
      body bodyWriter 
      attachBytes "filename.xml", "text/xml", xml.getBytes('UTF-8') 
     } 

L'essentiel est que « multipart vrai » apparaît au début de la fermeture. Si vous ajoutez

html '<b>Hello</b> World' 

à la fermeture ci-dessus, je suppose que vous obtiendrez un texte et e-mail html avec une pièce jointe.

0

Cela semble être le contenu potentiel de la version 1.0 du plugin Mail, voir this et this. En regardant le patch de la première question, je pense un html et le texte du message multipart pourrait simplement être créé comme ceci:

mailService.sendMail { 
    multipart true 
    to <recipient> 
    subject <subject> 
    dualBody(template:<template>, model:<model>) 
} 

serait assez cool! Aucune idée si/quand cela sera publié si.