Commit 092d14bc authored by Pasan Mallawaarachchi's avatar Pasan Mallawaarachchi 💻

attachment commit

parent b10741dd
...@@ -12,9 +12,12 @@ import ( ...@@ -12,9 +12,12 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io"
"io/ioutil" "io/ioutil"
"log" "log"
"net/http" "net/http"
"os"
"path"
"strings" "strings"
"sync" "sync"
"time" "time"
...@@ -84,13 +87,15 @@ type Couchdb struct { ...@@ -84,13 +87,15 @@ type Couchdb struct {
* email document structure * email document structure
*/ */
type MailBody struct { type MailBody struct {
ID string `json:"_id"` ID string `json:"_id"`
Rev string `json:"_rev"` Rev string `json:"_rev"`
From string `json:"from"` From string `json:"from"`
To string `json:"to"` To string `json:"to"`
Cc string `json:"cc"` Cc string `json:"cc"`
Subject string `json:"subject"` Bcc string `json:"bcc"`
Body string `json:"body"` Subject string `json:"subject"`
Body string `json:"body"`
Attachment string `json:"attachment"`
} }
/** /**
...@@ -101,6 +106,7 @@ var waitGroup sync.WaitGroup ...@@ -101,6 +106,7 @@ var waitGroup sync.WaitGroup
var mailData chan string var mailData chan string
var outboxReadTime chan string var outboxReadTime chan string
var outboxDeleteTime chan string var outboxDeleteTime chan string
var fileName = ""
func main() { func main() {
// get configurations // get configurations
...@@ -312,16 +318,30 @@ func worker(i int) { ...@@ -312,16 +318,30 @@ func worker(i int) {
body := mail.Body body := mail.Body
recipient := mail.To recipient := mail.To
cc := mail.Cc cc := mail.Cc
bcc := mail.Bcc
attachment := mail.Attachment
// sending mail via Mailgun // sending mail via Mailgun
mg := mailgun.NewMailgun(config.Mailgun.Domain, config.Mailgun.Apikey) mg := mailgun.NewMailgun(config.Mailgun.Domain, config.Mailgun.Apikey)
message := mg.NewMessage(sender, subject, body, recipient) message := mg.NewMessage(sender, subject, body, recipient)
/** /**
* Add CC if cc recipiants are available * Add CC, BCC & ATTACHMENTS if available
*/ */
if len(cc) > 0 { if len(cc) > 0 {
message.AddCC(cc) message.AddCC(cc)
} }
if len(bcc) > 0 {
message.AddBCC(bcc)
}
if len(attachment) > 0 {
//url := "http://www.orimi.com/pdf-test.pdf"
r, _ := http.NewRequest("GET", attachment, nil)
fileName = path.Base(r.URL.Path)
getFile(fileName, attachment)
message.AddHeader("Content-Type", "multipart/form-data")
message.AddAttachment(fileName)
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
defer cancel() defer cancel()
MailgunResp, id, err := mg.Send(ctx, message) MailgunResp, id, err := mg.Send(ctx, message)
...@@ -329,17 +349,19 @@ func worker(i int) { ...@@ -329,17 +349,19 @@ func worker(i int) {
log.Fatal(err) log.Fatal(err)
//alertAdmin(" MAilgun Error \n" + err.Error()) //alertAdmin(" MAilgun Error \n" + err.Error())
} }
if len(attachment) > 0 {
os.Remove(fileName)
}
//fmt.Println(resp) //fmt.Println(resp)
if config.AppMod.Production == "0" { if config.AppMod.Production == "0" {
fmt.Printf("Email sent ID: %s Resp: %s\n", id, MailgunResp) fmt.Printf("Email sent ID: %s Resp: %s\n", id, MailgunResp)
} }
//sendMessage(mg, sender, subject, body, recipient, cc) //sendMessage(mg, sender, subject, body, recipient, cc)
mailSentTimeMailgun := time.Now().String() mailSentTimeMailgun := time.Now().String()
/** /**
* add the email as new document in "SENT ITEMS" DB * add the email as new document in "SENT ITEMS" DB
*/ */
mailBody := strings.NewReader(`{"from":"` + sender + `","to":"` + recipient + `","subject":"` + subject + `","body":"` + body + `"}`) mailBody := strings.NewReader(`{"from":"` + sender + `","to":"` + recipient + `","subject":"` + subject + `","body":"` + body + `","cc":"` + cc + `","bcc":"` + bcc + `","attachment":"` + attachment + `"}`)
req, mailBodyerr := http.NewRequest(config.Requests.Put, config.Curl.AddSentMail+mail.ID, mailBody) req, mailBodyerr := http.NewRequest(config.Requests.Put, config.Curl.AddSentMail+mail.ID, mailBody)
if mailBodyerr != nil { if mailBodyerr != nil {
alert := " Error requesting newmail to add in SENTITEMS DB \n" + mailBodyerr.Error() alert := " Error requesting newmail to add in SENTITEMS DB \n" + mailBodyerr.Error()
...@@ -355,7 +377,7 @@ func worker(i int) { ...@@ -355,7 +377,7 @@ func worker(i int) {
ioutil.ReadAll(resp.Body) ioutil.ReadAll(resp.Body)
mailAddedSentitems := time.Now().String() mailAddedSentitems := time.Now().String()
logmail(subject, sender, recipient, readTimeOutbox, mailSentTimeMailgun, id, MailgunResp, mailAddedSentitems, deleteTimeOutbox, mail.ID) logmail(subject, sender, recipient, cc, bcc, attachment, readTimeOutbox, mailSentTimeMailgun, id, MailgunResp, mailAddedSentitems, deleteTimeOutbox, mail.ID)
} }
...@@ -423,10 +445,33 @@ func alertAdmin(err string) { ...@@ -423,10 +445,33 @@ func alertAdmin(err string) {
} }
/**
* Gets the file from given URL
*/
func getFile(fileName, url string) {
// Get the data
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
// Create the file
out, err := os.Create(fileName)
if err != nil {
panic(err)
}
defer out.Close()
// Write the body to file
_, err = io.Copy(out, resp.Body)
}
/** /**
* log worker tasks * log worker tasks
*/ */
func logmail(subject, sender, recipient, readTimeOutbox, mailSentTimeMailgun, id, MailgunResp, mailAddedSentitems, deleteTimeOutbox, mailID string) { func logmail(subject, sender, recipient, cc, bcc, attachment, readTimeOutbox, mailSentTimeMailgun, id, MailgunResp, mailAddedSentitems, deleteTimeOutbox, mailID string) {
// get configurations // get configurations
var config Config var config Config
...@@ -442,6 +487,9 @@ func logmail(subject, sender, recipient, readTimeOutbox, mailSentTimeMailgun, id ...@@ -442,6 +487,9 @@ func logmail(subject, sender, recipient, readTimeOutbox, mailSentTimeMailgun, id
logBody := strings.NewReader(`{"Mail Subject":"` + subject + logBody := strings.NewReader(`{"Mail Subject":"` + subject +
`","Mail sender":"` + sender + `","Mail sender":"` + sender +
`","Mail recipiants":"` + recipient + `","Mail recipiants":"` + recipient +
`","Mail cc":"` + cc +
`","Mail bcc":"` + bcc +
`","Mail attachment":"` + attachment +
`","OUTBOX read time":"` + readTimeOutbox + `","OUTBOX read time":"` + readTimeOutbox +
`","Mail sent to mailgun":"` + mailSentTimeMailgun + `","Mail sent to mailgun":"` + mailSentTimeMailgun +
`","Mailgun ID":"` + id + `","Mailgun ID":"` + id +
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment