1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-19 10:37:01 +00:00

Basic HTML email rendering

Messages with a MIME text/html MIME part will now be displayed with an
`HTML` button above them that will open another window and render the
HTML when clicked.

There is no sanitization performed, and inline attachment display is
not support.

This closes #2
This commit is contained in:
James Hillyerd
2012-10-17 21:47:48 -07:00
parent 0efb28ef38
commit 24dcd62951
5 changed files with 46 additions and 1 deletions

View File

@@ -3,6 +3,7 @@ package controllers
import (
"github.com/jhillyerd/inbucket/app/inbucket"
"github.com/robfig/revel"
"html/template"
)
type Mailbox struct {
@@ -69,9 +70,10 @@ func (c Mailbox) Show(name string, id string) rev.Result {
return c.RenderError(err)
}
body := mime.Text
htmlAvailable := mime.Html != ""
c.Response.Out.Header().Set("Expires", "-1")
return c.Render(name, message, body)
return c.Render(name, message, body, htmlAvailable)
}
func (c Mailbox) Delete(name string, id string) rev.Result {
@@ -97,9 +99,41 @@ func (c Mailbox) Delete(name string, id string) rev.Result {
if err != nil {
return c.RenderError(err)
}
c.Response.Out.Header().Set("Expires", "-1")
return c.RenderText("OK")
}
func (c Mailbox) Html(name string, id string) rev.Result {
c.Validation.Required(name).Message("Account name is required")
c.Validation.Required(id).Message("Message ID is required")
if c.Validation.HasErrors() {
c.Validation.Keep()
c.FlashParams()
return c.Redirect(Application.Index)
}
ds := inbucket.NewDataStore()
mb, err := ds.MailboxFor(name)
if err != nil {
return c.RenderError(err)
}
message, err := mb.GetMessage(id)
if err != nil {
return c.RenderError(err)
}
_, mime, err := message.ReadBody()
if err != nil {
return c.RenderError(err)
}
// Mark as safe to render HTML
// TODO: It is not really safe to render, need to sanitize.
body := template.HTML(mime.Html)
c.Response.Out.Header().Set("Expires", "-1")
return c.Render(name, message, body)
}
func (c Mailbox) Source(name string, id string) rev.Result {
c.Validation.Required(name).Message("Account name is required")
c.Validation.Required(id).Message("Message ID is required")