- Implement TNEF extraction and recursive parsing in new `tnef_reader.go` and associated tests. - Create tests for TNEF extraction scenarios in `tnef_diag_test.go`, `tnef_diag7_test.go`, and `tnef_diag8_test.go`.
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package internal
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/teamwork/tnef"
|
|
)
|
|
|
|
func TestTNEFAttributes(t *testing.T) {
|
|
testFile := `H:\Dev\Gits\EMLy\EML_TNEF.eml`
|
|
if _, err := os.Stat(testFile); os.IsNotExist(err) {
|
|
t.Skip("test EML file not present")
|
|
}
|
|
|
|
f, _ := os.Open(testFile)
|
|
defer f.Close()
|
|
|
|
outerEmail, _ := Parse(f)
|
|
var innerData []byte
|
|
for _, att := range outerEmail.Attachments {
|
|
if strings.Contains(strings.ToLower(att.Filename), "postacert.eml") {
|
|
innerData, _ = io.ReadAll(att.Data)
|
|
break
|
|
}
|
|
}
|
|
|
|
innerEmail, _ := Parse(bytes.NewReader(innerData))
|
|
for _, att := range innerEmail.Attachments {
|
|
data, _ := io.ReadAll(att.Data)
|
|
if strings.ToLower(att.Filename) != "winmail.dat" {
|
|
continue
|
|
}
|
|
|
|
decoded, _ := tnef.Decode(data)
|
|
fmt.Printf("MAPI Attributes (%d):\n", len(decoded.Attributes))
|
|
for _, attr := range decoded.Attributes {
|
|
dataPreview := fmt.Sprintf("%d bytes", len(attr.Data))
|
|
if len(attr.Data) < 200 {
|
|
dataPreview = fmt.Sprintf("%q", attr.Data)
|
|
}
|
|
fmt.Printf(" Name=0x%04X Data=%s\n", attr.Name, dataPreview)
|
|
}
|
|
|
|
// Check Body/BodyHTML from TNEF data struct fields
|
|
fmt.Printf("\nBody len: %d\n", len(decoded.Body))
|
|
fmt.Printf("BodyHTML len: %d\n", len(decoded.BodyHTML))
|
|
|
|
// Check attachment details
|
|
for i, ta := range decoded.Attachments {
|
|
fmt.Printf("Attachment[%d]: title=%q dataLen=%d\n", i, ta.Title, len(ta.Data))
|
|
}
|
|
}
|
|
}
|