Golang : How to parse plain email text and process email header?
Problem :
Your program receive email in plain text and you need to parse email header information. How to that in Golang?
Solution :
First, convert the plain text into proper mail message type( see http://golang.org/pkg/net/mail/#Message ) with mail.ReadMessage()
function and then process the email header with the associated methods. See example code below.
package main
import (
"bytes"
"fmt"
"net/mail"
)
var emailData = `From: Adam <adam@earth.com>
To: Eve <eve@earth.com>
Subject: Do not eat the apple from that tree!
Date: Fri, 21 Nov 0000 09:55:06 -0600
Message-ID: <1234@garden.earth>
Don't listen to that snake. Don't eat the apple!
`
func main() {
msg, err := mail.ReadMessage(bytes.NewBuffer([]byte(emailData)))
if err != nil {
panic(err)
}
fmt.Println(msg.Header)
// --------------
header := msg.Header
key := "From"
address, err := header.AddressList(key)
if err != nil {
panic(err)
}
fmt.Println(address[0].String())
// --------------
key = "To"
addresses, err := header.AddressList(key)
if err != nil {
panic(err)
}
fmt.Println(addresses[0].String())
// --------------
dateTime, err := header.Date()
if err != nil {
panic(err)
}
fmt.Println(dateTime.String())
// --------------
getSubject := header.Get("Subject")
fmt.Println(getSubject)
}
Output :
map[Message-Id:[1234@garden.earth] From:[Adam adam@earth.com] To:[Eve eve@earth.com] Subject:[Do not eat the apple from that tree!] Date:[Fri,
21 Nov 0000 09:55:06 -0600]]
"Adam" adam@earth.com
"Eve" eve@earth.com
0000-11-21 09:55:06 -0600 -0600
Do not eat the apple from that tree!
References :
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+8.9k Golang : Get SPF and DMARC from email headers to fight spam
+11.8k Golang : Convert(cast) bigint to string
+12.4k Golang : Forwarding a local port to a remote server example
+5.2k Golang : Calculate half life decay example
+4.2k Golang : Converting individual Jawi alphabet to Rumi(Romanized) alphabet example
+32.3k Golang : Copy directory - including sub-directories and files
+6.1k PHP : How to handle URI or URL with non-ASCII characters such as Chinese/Japanese/Korean(CJK) ?
+7.6k Golang : Test if an input is an Armstrong number example
+10.1k Golang : Check a web page existence with HEAD request example
+18.1k Golang : Get command line arguments
+19.9k Golang : How to run your code only once with sync.Once object
+39.1k Golang : How to read CSV file