Compare commits

...

2 Commits

Author SHA1 Message Date
David Maciejak fc7fb2b7c6
Merge 22f881e7ea into 8e79294413 2023-10-19 00:03:30 +08:00
David Maciejak 22f881e7ea Import email templates from file 2019-09-07 12:34:13 +08:00
4 changed files with 74 additions and 2 deletions

View File

@ -49,6 +49,44 @@ func (as *Server) ImportGroup(w http.ResponseWriter, r *http.Request) {
JSONResponse(w, ts, http.StatusOK)
}
// ImportEmailFile allows for the importing of email.
// Returns a Message object
func (as *Server) ImportEmailFile(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
JSONResponse(w, models.Response{Success: false, Message: "Method not allowed"}, http.StatusBadRequest)
return
}
mr, nil := r.MultipartReader()
part, nil := mr.NextPart()
e, err := email.NewEmailFromReader(part)
if err != nil {
log.Error(err)
}
d, err := goquery.NewDocumentFromReader(bytes.NewReader(e.HTML))
if err != nil {
JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusBadRequest)
return
}
d.Find("a").Each(func(i int, a *goquery.Selection) {
a.SetAttr("href", "{{.URL}}")
})
h, err := d.Html()
if err != nil {
JSONResponse(w, models.Response{Success: false, Message: err.Error()}, http.StatusInternalServerError)
return
}
e.HTML = []byte(h)
er := emailResponse{
Subject: e.Subject,
Text: string(e.Text),
HTML: string(e.HTML),
}
JSONResponse(w, er, http.StatusOK)
return
}
// ImportEmail allows for the importing of email.
// Returns a Message object
func (as *Server) ImportEmail(w http.ResponseWriter, r *http.Request) {

View File

@ -82,6 +82,7 @@ func (as *Server) registerRoutes() {
router.HandleFunc("/util/send_test_email", as.SendTestEmail)
router.HandleFunc("/import/group", as.ImportGroup)
router.HandleFunc("/import/email", as.ImportEmail)
router.HandleFunc("/import/emailfile", as.ImportEmailFile)
router.HandleFunc("/import/site", as.ImportSite)
router.HandleFunc("/webhooks/", mid.Use(as.Webhooks, mid.RequirePermission(models.PermissionModifySystem)))
router.HandleFunc("/webhooks/{id:[0-9]+}/validate", mid.Use(as.ValidateWebhook, mid.RequirePermission(models.PermissionModifySystem)))

View File

@ -222,6 +222,36 @@ function edit(idx) {
.remove()
.draw();
})
// Handle file uploads
$("#emlupload").fileupload({
url: "/api/import/emailfile",
dataType: "json",
beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization', 'Bearer ' + user.api_key);
},
add: function (e, data) {
$("#modal\\.flashes").empty()
var acceptFileTypes = /(eml)$/i;
var filename = data.originalFiles[0]['name']
if (filename && !acceptFileTypes.test(filename.split(".").pop())) {
modalError("Unsupported file extension (use .eml)")
return false;
}
data.submit();
},
success: function (data) {
$("#text_editor").val(data.text)
$("#html_editor").val(data.html)
$("#subject").val(data.subject)
// If the HTML is provided, let's open that view in the editor
if (data.html) {
CKEDITOR.instances["html_editor"].setMode('wysiwyg')
$('.nav-tabs a[href="#html"]').click()
}
$("#importEmailModal").modal("hide")
}
})
}
function copy(idx) {

View File

@ -52,8 +52,11 @@
</div>
<div class="form-group">
<button class="btn btn-danger" data-toggle="modal" data-backdrop="static" data-target="#importEmailModal"><i
class="fa fa-envelope"></i>
Import Email</button>
class="fa fa-paste"></i>
Paste Raw Email</button>
<button class="btn btn-danger btn-file" data-toggle="tooltip" data-placement="right" title="Supports EML files" id="fileUpload"><i
class="fa fa-file"></i>
Import Email File<input type="file" id="emlupload"></button>
</div>
<label class="control-label" for="envelope-sender">Envelope Sender: <i class="fa fa-question-circle" data-toggle="tooltip" data-placement="right" title="This sender is shown to the user by most email clients. Defaults to the SMTP From as defined in the Sending Profile."></i></label>
<div class="form-group">