2010-12-08 39 views
1

Est-il possible de concevoir un email en utilisant JSP pour être envoyé via le mécanisme JavaMailSender de Spring 3.0? JavaMailSender a probablement peu de choses à voir avec cette question, mais l'idée est de tirer parti du mécanisme d'internationalisation de JSP, de son code JSTL variable/en boucle et de permettre aux concepteurs de me remettre facilement les emails html complétés.Envoyer des emails avec JSP et Spring 3.0

En outre, je pourrais faire une page Web qui importe cette JSP afin que je puisse facilement fournir un lien dans chaque email pour pouvoir voir cet email sur le web au cas où leur client ne voit pas le html correctement.

MISE À JOUR: Les 2 réponses ci-dessous suggèrent l'utilisation Velocity pour le courrier électronique au lieu de JSP, donc il semble que c'est le choix intelligent. Cependant, juste un peu de balayage rapide de stackoverflow suggère FreeMarker pourrait être mieux adapté à mes besoins. En particulier, je veux être en mesure d'avoir une page JSP qui reflète ce qui est envoyé par e-mail. Je vais devoir traduire le code de JSP vers Velocity ou FreeMarker, mais l'avantage de FreeMarker est que je peux réutiliser beaucoup de code JSP, en particulier taglibs. Est-ce que ça a du sens?

Répondre

3

JSP n'est pas une technologie de modélisation. Pour cela, par exemple Velocity est un meilleur choix.

Si vous insistez vraiment sur l'utilisation de JSP, vous devez l'exécuter localement par java.net.URL.

InputStream input = new URL("http://localhost:8080/context/mailtemplate.jsp").openStream(); 
+0

semble si inefficace d'appeler l'URL, il n'y a aucun moyen de le faire dans le code et pas par http? –

+1

Oui, utilisez une technologie de modélisation. JSP ne l'est pas. C'est une technologie de visualisation orientée web/HTTP. – BalusC

+0

Mise à jour de ma question, est-il sensé d'utiliser FreeMarker pour que je puisse réutiliser beaucoup de code JSP même si je ne peux pas faire une importation complète? –

0

Il existe quelques Spring documentation sur l'utilisation de Velocity qui fera ce que vous voulez. Je l'utilise pour gérer les emails au printemps et ça marche très bien.

Ce que je fais généralement est d'avoir un EmailService que j'appelle d'un contrôleur dont le travail consiste à prendre soin d'envoyer des emails. Les méthodes qui acceptent un objet Command, accessible dans le modèle de vélocité et rendu sous la forme d'une chaîne (le corps du message). Vous pouvez ensuite utiliser MailSender etc pour envoyer le courrier.

+0

Mise à jour de ma question, est-il sensé d'utiliser FreeMarker pour que je puisse réutiliser une grande partie du code JSP même si je ne peux pas faire une importation complète? –

0

Bien que je suis d'accord que la vitesse ou Freemarker peut être un meilleur choix, si vous avez vraiment besoin de rendre une page JSP et capturer la sortie en tant que chaîne (que vous pouvez passer à un JavaMailer), consultez mon tutoriel sur Capturing JSP Output

Il utilise Spring 3 et permet également d'utiliser fmt: message, fmt: formatNumber et spring: message. L'idée consiste essentiellement à utiliser la méthode RequestDispatcher.include pour convertir la page en MockHttpServletRequest.

+0

Très sympa, j'ai fini par aller avec Velocity. –