An open API service indexing awesome lists of open source software.

https://github.com/metaer/go-easy-dkim-signer

Easy dkim signer Go
https://github.com/metaer/go-easy-dkim-signer

Last synced: 2 months ago
JSON representation

Easy dkim signer Go

Awesome Lists containing this project

README

        

# Go easy dkim signer

## How to use
### Generate keys and add txt-record to your domain
```shell
openssl genrsa -out private 1024
```
```shell
openssl rsa -in private -pubout -out public
```
```shell
sed '1d;$d' public | tr -d '\n' > spublic; echo "" >> spublic
```
Then make up a selector, i.e. `myselector` (could be any other string)

Add txt-record to DNS of your domain:
- Key: `myselector._domainkey`
- Value: `v=DKIM1; k=rsa; p=`

### Use the lib in your project
1. Add the lib to your go module: `go get github.com/metaer/go-easy-dkim-signer`
2. Use `easydkim.Sign` method like this:

#### Example 1
```go
package main

import (
"log"
"net/smtp"

"github.com/metaer/go-easy-dkim-signer/easydkim"
)

func main() {
var err error
domain := "example.com"
from := "[email protected]"
rcpt := "[email protected]"
selector := "myselector"
privateFileKeyPath := "private"

message := []byte("Subject: test subject\r\n" +
"To: " + rcpt + "\r\n" +
"From: " + from + "\r\n" +
"Content-Type: text/plain; charset=\"utf-8\"\r\n" +
"\r\n" +
"Message body")

message, err = easydkim.Sign(message, privateFileKeyPath, selector, domain)
if err != nil {
log.Fatal(err)
}

err = smtp.SendMail("localhost:1525", nil, from, []string{rcpt}, message)
if err != nil {
log.Fatal(err)
}
}

```

#### Example 2
Install `go get github.com/metaer/go-easy-dkim-signer`

Install `go get gopkg.in/gomail.v2` for object-oriented way to create an email message
```go
package main

import (
"bytes"
"log"
"net/smtp"

"github.com/metaer/go-easy-dkim-signer/easydkim"
"gopkg.in/gomail.v2"
)

func main() {
var err error
domain := "example.com"
from := "[email protected]"
rcpt := "[email protected]"
selector := "myselector"
privateFileKeyPath := "private"

m := gomail.NewMessage()
m.SetHeader("From", from)
m.SetHeader("To", rcpt)
m.SetHeader("Subject", "My subject")
m.SetBody("text/html", "My body")

var buffer bytes.Buffer
_, err = m.WriteTo(&buffer)
if err != nil {
log.Fatal(err)
}
var signedMessage []byte
signedMessage, err = easydkim.Sign(buffer.Bytes(), privateFileKeyPath, selector, domain)
if err != nil {
log.Fatal(err)
}
err = smtp.SendMail("localhost:1525", nil, from, []string{rcpt}, signedMessage)
if err != nil {
log.Fatal(err)
}
}
```

### How to test locally
1. Run `openssl genrsa -out private 2048`
2. Run `docker-compose up -d`
3. Run `example1` or `example2`
4. Open `http://localhost:1580`
5. Check dkim signature in message source