43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package attachments
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/base64"
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
const delimeter = "**=myohmy689407924327"
|
|
|
|
type EmailAttachment struct {
|
|
File io.Reader
|
|
Title string
|
|
}
|
|
|
|
func (e EmailAttachment) ReadContent() ([]byte, error) {
|
|
bts, err := io.ReadAll(e.File)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error loading attachment: %s", err)
|
|
}
|
|
return bts, nil
|
|
}
|
|
|
|
func AttachmentsToBytes(body string, attachments []EmailAttachment) ([]byte, error) {
|
|
var message bytes.Buffer
|
|
message.WriteString("Content-Type: text/html; charset=\"UTF-8\"\r\n\r\n")
|
|
message.WriteString(body + "\r\n\r\n")
|
|
for _, attachment := range attachments {
|
|
attachmentRawFile, err := attachment.ReadContent()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
message.WriteString("--" + delimeter + "\r\n")
|
|
message.WriteString("Content-Disposition: attachment; filename=\"" + attachment.Title + "\"\r\n")
|
|
message.WriteString("Content-Type: application/octet-stream\r\n")
|
|
message.WriteString("Content-Transfer-Encoding: base64\r\n\r\n")
|
|
message.WriteString(base64.StdEncoding.EncodeToString(attachmentRawFile) + "\r\n")
|
|
}
|
|
message.WriteString("--" + delimeter + "--") // End the message
|
|
return message.Bytes(), nil
|
|
}
|