Documentation
¶
Overview ¶
Package blackmail sends emails.
Index ¶
- func Attachment(contentType, filename string, body []byte) bodyPart
- func Bcc(addr ...string) []recipient
- func BccAddress(addr ...mail.Address) []recipient
- func BccNames(nameAddr ...string) []recipient
- func Body(contentType string, body []byte) bodyPart
- func BodyHTML(body []byte, images ...bodyPart) bodyPart
- func BodyMust(contentType string, fn func() ([]byte, error)) bodyPart
- func BodyMustHTML(fn func() ([]byte, error)) bodyPart
- func BodyMustText(fn func() ([]byte, error)) bodyPart
- func BodyText(body []byte) bodyPart
- func Bodyf(s string, args ...any) bodyPart
- func Cc(addr ...string) []recipient
- func CcAddress(addr ...mail.Address) []recipient
- func CcNames(nameAddr ...string) []recipient
- func From(name, address string) mail.Address
- func Headers(keyValue ...string) bodyPart
- func HeadersAutoreply() bodyPart
- func InlineImage(contentType, filename string, body []byte) bodyPart
- func Message(subject string, from mail.Address, rcpt []recipient, firstPart bodyPart, ...) ([]byte, []string, error)
- func NopCloser(r io.Writer) io.WriteCloser
- func To(addr ...string) []recipient
- func ToAddress(addr ...mail.Address) []recipient
- func ToNames(nameAddr ...string) []recipient
- func With(ctx context.Context, m Mailer) context.Context
- type Mailer
- type RelayOptions
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Attachment ¶
Attachment returns a new attachment part with the given Content-Type.
It will try to guess the Content-Type if empty.
func BccAddress ¶
func BodyHTML ¶
func BodyHTML(body []byte, images ...bodyPart) bodyPart
BodyHTML returns a new text/html part.
func BodyMust ¶
BodyMust sets the body using a callback, propagating any errors back up.
This is useful when using Go templates for the mail body;
buf := new(bytes.Buffer)
err := tpl.ExecuteTemplate(buf, "email", struct{
Name string
}{"Martin"})
if err != nil {
log.Fatal(err)
}
err := Send("Basic test", From("", "me@example.com"),
To("to@to.to"),
Body("text/plain", buf.Bytes()))
With BodyMust(), it's simpler; you just need to define a little helper re-usable helper function and call that:
func template(tplname string, args any) func() ([]byte, error) {
return func() ([]byte, error) {
buf := new(bytes.Buffer)
err := tpl.ExecuteTemplate(buf, tplname, args)
return buf.Bytes(), err
}
}
err := Send("Basic test", From("", "me@example.com"),
To("to@to.to"),
BodyMust("text/html", template("email", struct {
Name string
}{"Martin"})))
Other use cases include things like loading data from a file, reading from a stream, etc.
func BodyMustHTML ¶
BodyMustHTML is like BodyMust() with contentType text/html.
func BodyMustText ¶
BodyMustText is like BodyMust() with contentType text/plain.
func From ¶
From makes creating a mail.Address a bit more convenient.
mail.Address{Name: "foo, Address: "foo@example.com}
blackmail.From{"foo, "foo@example.com)
func Headers ¶
func Headers(keyValue ...string) bodyPart
Headers adds the headers to the message.
This will override any headers set automatically by the system, such as Date: or Message-Id:
Headers("My-Header", "value",
"Message-Id", "<my-message-id@example.com>")
func HeadersAutoreply ¶
func HeadersAutoreply() bodyPart
HeadersAutoreply sets headers to indicate this message is a an autoreply.
See e.g: https://www.arp242.net/autoreply.html#what-you-need-to-set-on-your-auto-response
func InlineImage ¶
InlineImage returns a new inline image part.
It will try to guess the Content-Type if empty.
Then use "cid:blackmail:<n>" to reference it:
<img src="cid:blackmail:1"> First InlineImage() <img src="cid:blackmail:2"> Second InlineImage()
func Message ¶
func Message(subject string, from mail.Address, rcpt []recipient, firstPart bodyPart, parts ...bodyPart) ([]byte, []string, error)
Message formats a message.
Types ¶
type Mailer ¶
type Mailer interface {
// Send an email.
Send(subject string, from mail.Address, rcpt []recipient, firstPart bodyPart, parts ...bodyPart) error
// Info returns some information about this mailer for debugging purposes.
Info() map[string]any
}
A Mailer sends messages.
func Get ¶
Get retrieves the Mailer stored on the context with With, returning nil if there is no context stored.
func NewRelay ¶
func NewRelay(smtpURL string, opts *RelayOptions) (Mailer, error)
NewRelay returns a new relay mailer.
Any URL will be used as a SMTP relay; "smtp://" for unencrypted or STARTTLS connections, and "smtps://" for TLS connections.
For example:
"smtp://user:pass@mail.example.com:587" "smtps://user:pass@mail.example.com"
type RelayOptions ¶
type RelayOptions struct {
// Auth sets the AUTH method; currently LOGIN, PLAIN, and CRAM-MD5 are
// supported.
//
// In general, PLAIN is preferred and is the default. Note that CRAM-MD5
// only provides weak security over untrusted connections.
Auth smtp.AuthMethod
// TLS configuration for smtps and STARTTLS.
TLS *tls.Config
Debug io.Writer
}
func (RelayOptions) String ¶
func (o RelayOptions) String() string
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
blackmail
command
|
|
|
internal
|
|
|
ztest
Package ztest contains helper functions that are useful for writing tests.
|
Package ztest contains helper functions that are useful for writing tests. |
|
ztest/image
Package image contains helpers for testing image-related code.
|
Package image contains helpers for testing image-related code. |
|
Package smtp implements the Simple Mail Transfer Protocol as defined in RFC 5321.
|
Package smtp implements the Simple Mail Transfer Protocol as defined in RFC 5321. |