@@ -32,6 +32,7 @@ import grails.util.GrailsWebUtil
3232import groovy.text.Template
3333import org.codehaus.groovy.grails.commons.GrailsApplication
3434import org.codehaus.groovy.grails.plugins.GrailsPluginManager
35+ import org.codehaus.groovy.grails.web.mapping.LinkGenerator
3536import org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine
3637import org.codehaus.groovy.grails.web.pages.GroovyPagesUriService
3738import org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest
@@ -121,6 +122,7 @@ class MailMessageContentRenderer {
121122 final Writer out
122123 final Locale locale
123124 final ApplicationContext applicationContext
125+ final LinkGenerator grailsLinkGenerator
124126
125127 private originalRequestAttributes
126128 private renderRequestAttributes
@@ -129,6 +131,7 @@ class MailMessageContentRenderer {
129131 this . out = out
130132 this . locale = locale
131133 this . applicationContext = applicationContext
134+ this . grailsLinkGenerator = applicationContext. getBean(' grailsLinkGenerator' , LinkGenerator . class)
132135 }
133136
134137 private void init () {
@@ -141,7 +144,7 @@ class MailMessageContentRenderer {
141144 renderLocale = RequestContextUtils . getLocale(originalRequestAttributes. request)
142145 }
143146
144- renderRequestAttributes = new GrailsWebRequest (PageRenderRequestCreator . createInstance(" /mail/render" , renderLocale),
147+ renderRequestAttributes = new GrailsWebRequest (PageRenderRequestCreator . createInstance(grailsLinkGenerator . serverBaseURL, " /mail/render" , renderLocale),
145148 PageRenderResponseCreator . createInstance(out instanceof PrintWriter ? out : new PrintWriter (out), renderLocale), null , applicationContext)
146149
147150 if (originalRequestAttributes) {
@@ -191,7 +194,8 @@ class MailMessageContentRenderer {
191194 */
192195 static class PageRenderRequestCreator {
193196
194- static HttpServletRequest createInstance (final String requestURI , Locale localeToUse = Locale . getDefault()) {
197+ static HttpServletRequest createInstance (final String serverBaseURL , final String requestURI , Locale localeToUse = Locale . getDefault()) {
198+ final URI serverBaseURI = new URI (serverBaseURL)
195199
196200 def params = new ConcurrentHashMap ()
197201 def attributes = new ConcurrentHashMap ()
@@ -274,13 +278,24 @@ class MailMessageContentRenderer {
274278 throw new UnsupportedOperationException (" You cannot read the protocol in non-request rendering operations" )
275279 }
276280 if (methodName == ' getScheme' ) {
277- return new URI (requestURI) . scheme
281+ return serverBaseURI . scheme
278282 }
279283 if (methodName == ' getServerName' ) {
280- return new URI (requestURI) . host
284+ return serverBaseURI . host
281285 }
282286 if (methodName == ' getServerPort' ) {
283- return new URI (requestURI). host
287+ int port = serverBaseURI. port
288+ if (port == -1 ){
289+ switch (serverBaseURI. scheme?. toLowerCase()){
290+ case ' http' :
291+ port = 80
292+ break
293+ case ' https' :
294+ port = 443
295+ break
296+ }
297+ }
298+ return port
284299 }
285300 if (methodName == ' getReader' ) {
286301 throw new UnsupportedOperationException (" You cannot read input in non-request rendering operations" )
0 commit comments