123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- // Copyright (c) 2020 Shivaram Lingamneni
- // released under the MIT license
-
- package email
-
- import (
- "errors"
- dkim "github.com/toorop/go-dkim"
- "io/ioutil"
- )
-
- var (
- ErrMissingFields = errors.New("DKIM config is missing fields")
- )
-
- type DKIMConfig struct {
- Domain string
- Selector string
- KeyFile string `yaml:"key-file"`
- keyBytes []byte
- }
-
- func (dkim *DKIMConfig) Postprocess() (err error) {
- if dkim.Domain != "" {
- if dkim.Selector == "" || dkim.KeyFile == "" {
- return ErrMissingFields
- }
- dkim.keyBytes, err = ioutil.ReadFile(dkim.KeyFile)
- if err != nil {
- return err
- }
- }
- return nil
- }
-
- var defaultOptions = dkim.SigOptions{
- Version: 1,
- Canonicalization: "relaxed/relaxed",
- Algo: "rsa-sha256",
- Headers: []string{"from", "to", "subject", "message-id", "date"},
- BodyLength: 0,
- QueryMethods: []string{"dns/txt"},
- AddSignatureTimestamp: true,
- SignatureExpireIn: 0,
- }
-
- func DKIMSign(message []byte, dkimConfig DKIMConfig) (result []byte, err error) {
- options := defaultOptions
- options.PrivateKey = dkimConfig.keyBytes
- options.Domain = dkimConfig.Domain
- options.Selector = dkimConfig.Selector
- err = dkim.Sign(&message, options)
- return message, err
- }
|