parent
2f6d45d4ef
commit
f40cf00f7a
@ -0,0 +1,119 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
imap "github.com/emersion/go-imap"
|
||||||
|
"github.com/emersion/go-imap/client"
|
||||||
|
"github.com/emersion/go-message/mail"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
emailUsername = os.Getenv("GOFF_EMAIL_USERNAME")
|
||||||
|
emailPassword = os.Getenv("GOFF_EMAIL_PASSWORD")
|
||||||
|
)
|
||||||
|
|
||||||
|
var EmailClient client.Client
|
||||||
|
|
||||||
|
func RecieveEmail() {
|
||||||
|
for {
|
||||||
|
log.Println("Connecting to Email server.")
|
||||||
|
|
||||||
|
EmailClient, err := client.DialTLS("mail.djpianalto.com:993", nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err = EmailClient.Login(emailUsername, emailPassword); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Println("Connected to Email server.")
|
||||||
|
defer EmailClient.Logout()
|
||||||
|
|
||||||
|
mbox, err := EmailClient.Select("INBOX", false)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if mbox.Messages == 0 {
|
||||||
|
log.Println("No Messages in Mailbox")
|
||||||
|
}
|
||||||
|
|
||||||
|
criteria := imap.NewSearchCriteria()
|
||||||
|
criteria.WithoutFlags = []string{"\\Seen"}
|
||||||
|
uids, err := EmailClient.Search(criteria)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
if len(uids) > 0 {
|
||||||
|
seqset := new(imap.SeqSet)
|
||||||
|
seqset.AddNum(uids...)
|
||||||
|
section := &imap.BodySectionName{}
|
||||||
|
items := []imap.FetchItem{section.FetchItem()}
|
||||||
|
messages := make(chan *imap.Message, 10)
|
||||||
|
go func() {
|
||||||
|
if err = EmailClient.Fetch(seqset, items, messages); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
for msg := range messages {
|
||||||
|
if msg == nil {
|
||||||
|
log.Println("No New Messages")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
r := msg.GetBody(section)
|
||||||
|
if r == nil {
|
||||||
|
log.Println("Server didn't send a message body")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
mr, err := mail.CreateReader(r)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
header := mr.Header
|
||||||
|
if date, err := header.Date(); err == nil {
|
||||||
|
log.Println("Date:", date)
|
||||||
|
}
|
||||||
|
if from, err := header.AddressList("From"); err == nil {
|
||||||
|
log.Println("From:", from)
|
||||||
|
}
|
||||||
|
if to, err := header.AddressList("To"); err == nil {
|
||||||
|
log.Println("To:", to)
|
||||||
|
}
|
||||||
|
if subject, err := header.Subject(); err == nil {
|
||||||
|
log.Println("Subject:", subject)
|
||||||
|
}
|
||||||
|
for {
|
||||||
|
p, err := mr.NextPart()
|
||||||
|
if err == io.EOF {
|
||||||
|
break
|
||||||
|
} else if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
switch h := p.Header.(type) {
|
||||||
|
case *mail.InlineHeader:
|
||||||
|
// This is the message's text (can be plain-text or HTML)
|
||||||
|
b, _ := ioutil.ReadAll(p.Body)
|
||||||
|
log.Printf("Got text: %v\n", string(b))
|
||||||
|
case *mail.AttachmentHeader:
|
||||||
|
// This is an attachment
|
||||||
|
filename, _ := h.Filename()
|
||||||
|
log.Printf("Got attachment: %v\n", filename)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
time.Sleep(300 * time.Second)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in new issue