README.md
# gsmtp
SMTP Client for Gleam
[](https://hex.pm/packages/gsmtp)
[](https://hexdocs.pm/gsmtp/)
Further documentation can be found at <https://hexdocs.pm/gsmtp>.
## RFC
* SMTP: https://datatracker.ietf.org/doc/html/rfc5321
* OLD SMTP: https://datatracker.ietf.org/doc/html/rfc821
* Auth: https://datatracker.ietf.org/doc/html/rfc4616
## Current state
A simple mail to a SMTP server can be sent
Use it like this
```sh
gleam add gsmtp
```
```gleam
import gsmtp/builder
import gsmtp/smtp
import logging
pub fn main() {
logging.configure()
logging.set_level(logging.Debug)
let message =
builder.new_builder()
|> builder.from_email("send@gleam.com")
|> builder.to_emails(["receive@gleam.com"])
|> builder.subject("Test Gleam E-Mail")
|> builder.body("Mail from Gleam")
|> builder.create()
let auth = Some(#("testuser", "start123"))
let assert Ok(Nil) =
smtp.send(host: "127.0.0.1", port: 2525, auth: auth, message: message)
}
```
## TODO
- [X] Plain Auth
- [X] Extensions
- [ ] TLS (might be a bigger thing...)
- [ ] Tests
- [ ] Error handling
- [ ] Better docs
- [ ] Cleanup API
## Development
Use [smtp4dev](https://github.com/rnwood/smtp4dev) as a dev SMTP server
```
docker compose up
```
Make sure to setup postfix to send mails only locally
For just simple SMTP command tests you can use telnet
```sh
telnet localhost 2525
```
and run the following commands
```sh
HELO localhost
MAIL FROM:<sender@example.com>
RCPT TO:<user@localhost>
DATA
Subject: Test Email
From: sender@example.com
To: user@localhost
This is a test email sent manually.
.
QUIT
```
This is basically what the library does. it opens a TCP connection and runs the commands
To test the gleam smtp client run
```sh
gleam test
```
This project is inspired by the go [smtp](https://pkg.go.dev/net/smtp) package
Thats why there is a working smtp client in the `go/` directory.
Run it with
```sh
go run go/main.go
```