Skip to content

Latest commit

 

History

History

openpgp

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Use with caution

While this middleware is mostly complete, it has not been properly tested by a large user base and their corresponding edge-cases. Please keep this in mind when using this middlware. work, you will need the main branch of the go-mail package. The latest releases do not provide all the functionality required for this middleware to work.

OpenPGP middleware

This middleware allows to encrypt the mail body and the attachments of a go-mail *Msg before sending it.

PGP Schme support

This middleware supports two PGP encoding schemes:

  • PGP/Inline
  • PGP/MIME

Please note, that PGP/Inline does only work with plain text mails. Any mail message (alternative) body part of type text/html will be discarded in the final output of the mail.

Example

package main

import (
	"fmt"
	"log"
	"os"

	"github.com/wneessen/go-mail"
	"github.com/wneessen/go-mail-middleware/openpgp"
)

const pubKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----
[...]
-----END PGP PUBLIC KEY BLOCK-----`

func main() {
	// First we need a config for our OpenPGP middleware
	//
	// In case your public key is in byte slice format or even a file, we provide two
	// helper methods:
	// - openpgp.NewConfigFromPubKeyBytes()
	// - openpgp.NewConfigFromPubKeyFile()
	mc, err := openpgp.NewConfig(pubKey, openpgp.WithScheme(openpgp.SchemePGPInline))
	if err != nil {
		fmt.Printf("failed to create new config: %s\n", err)
		os.Exit(1)
	}
	mw := openpgp.NewMiddleware(mc)

	// Finally we create a new mail.Msg with our middleware assigned
	m := mail.NewMsg(mail.WithMiddleware(mw))
	if err := m.From("[email protected]"); err != nil {
		log.Fatalf("failed to set From address: %s", err)
	}
	if err := m.To("[email protected]"); err != nil {
		log.Fatalf("failed to set To address: %s", err)
	}
	m.Subject("This is my first mail with go-mail!")
	m.SetBodyString(mail.TypeTextPlain, "Do you like this mail? I certainly do!")
	c, err := mail.NewClient("smtp.example.com", mail.WithPort(25),
		mail.WithSMTPAuth(mail.SMTPAuthPlain),
		mail.WithUsername("my_username"), mail.WithPassword("extremely_secret_pass"))
	if err != nil {
		log.Fatalf("failed to create mail client: %s", err)
	}
	if err := c.DialAndSend(m); err != nil {
		log.Fatalf("failed to send mail: %s", err)
	}
}