Rename Go module path to github.com/hanzoai/mail

Fork of github.com/mjl-/mox at 5656ca6d1b
(upstream v0.0.15 plus 55 commits).

Rename the module path in go.mod and the import paths in 268 Go files. Also
update the five scripts that "go install" the module (genwebsite.sh,
docker-release.sh, apidiff.sh, test-upgrade.sh, Dockerfile.release), which
would otherwise build upstream rather than this fork.

Add NOTICE recording the upstream project, author, license, and fork point,
and stating which license covers which files: MIT for the mox source and our
changes, MPL-2.0 for publicsuffix/public_suffix_list.txt alone, and the
vendored dependencies' own licenses under licenses/. Embed NOTICE so
"mail licenses" prints the lineage from the running binary. LICENSE.MIT,
LICENSE.MPLv2.0 and the licenses/ tree are preserved verbatim; no code is
relicensed.

The mox command name, config keys, data directory layout and website content
are unchanged. LLM.md records the fork point, the rename, what was left alone,
and the steps to stand the server up.

Co-authored-by: Hanzo Dev <[email protected]>
This commit is contained in:
2026-07-27 23:16:19 -07:00
co-authored by Hanzo Dev
parent 5656ca6d1b
commit 15909c7b79
277 changed files with 1247 additions and 1015 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ ARG goos
ARG goarch
WORKDIR /
ARG moxversion
RUN CGO_ENABLED=0 GOOS=$goos GOARCH=$goarch go install -mod mod -trimpath github.com/mjl-/mox@$moxversion
RUN CGO_ENABLED=0 GOOS=$goos GOARCH=$goarch go install -mod mod -trimpath github.com/hanzoai/mail@$moxversion
RUN test -f /go/bin/mox && cp /go/bin/mox /bin/mox || cp /go/bin/${goos}_${goarch}/mox /bin/mox
# Using latest may break at some point, but will hopefully be convenient most of the time.
+141
View File
@@ -0,0 +1,141 @@
# Hanzo Mail
Fork of Mox. Mail server (SMTP, IMAP4, webmail, DKIM/SPF/DMARC, autoconfig, ACME).
This is the foundation for replacing Google Workspace email at Hanzo.
## Lineage
| | |
|---|---|
| Upstream | [github.com/mjl-/mox](https://github.com/mjl-/mox) |
| Upstream author | Mechiel Lukkien <mechiel@ueber.net> |
| Upstream license | MIT |
| Fork point | `9bbad6af30ae1c429dde9cdc2d04130532e1fed1` (v0.0.15 + 55 commits, 2026-07-21) |
| This repo | [github.com/hanzoai/mail](https://github.com/hanzoai/mail) |
| Module path | `github.com/hanzoai/mail` |
This is a real GitHub fork (`isFork: true`, parent `mjl-/mox`), matching how
`hanzoai/git` (← go-gitea/gitea) and `hanzoai/deploy` (← argoproj/argo-cd) were
done. Provenance is therefore visible in the GitHub UI as well as in `NOTICE`.
Full upstream history is preserved; `git remote upstream` points at mjl-/mox.
## Licensing — what applies to what
Verified by reading the tree, not assumed. `NOTICE` is the authoritative
statement; `mail licenses` prints it from the running binary.
1. **Mox source + Hanzo's changes** — MIT (`LICENSE.MIT`), © 2021 Mechiel
Lukkien, plus Hanzo AI, Inc. for modifications. Not relicensed.
2. **`publicsuffix/public_suffix_list.txt`** — MPL-2.0 (`LICENSE.MPLv2.0`),
Mozilla's Public Suffix List. **This one data file is the only thing the MPL
covers.** Mox is *not* dual-licensed. Proof: `mox-/licenses.go` labels
`LICENSE.MPLv2.0` as `https://publicsuffix.org - Public Suffix List Mozilla`,
separate from mox's own MIT, and `README.md` says the same.
3. **`vendor/**`** — third-party deps under their own licenses. Copies collected
verbatim in `licenses/` (42 files) by `genlicenses.sh`, which reads `vendor/`.
Includes BSD-3-Clause from The Go Authors (`golang.org/x/...` and the
Go-derived forks `mjl-/{adns,autocert,flate,sherpa}`) and Apache-2.0
(Prometheus, protobuf). The `licenses/` tree is *dependency* licenses — it is
not a license grant over Mox or Hanzo Mail.
Mox was chosen over Stalwart deliberately: Stalwart is AGPL-3.0-only plus a
proprietary per-file SELv2 enterprise license. AGPL's network clause would force
publishing our fork and the SELv2 files cannot be forked commercially. Mox is
MIT and Go, which matches our stack and our licensing posture.
## What was renamed
Only the Go module path, and only where it affects the build:
- `go.mod` module line.
- 268 `.go` files — import paths `github.com/mjl-/mox/...` → `github.com/hanzoai/mail/...`.
- 5 scripts that `go install` the module and would otherwise build **upstream**
instead of this fork: `genwebsite.sh`, `docker-release.sh`, `apidiff.sh`,
`test-upgrade.sh`, `Dockerfile.release`.
- `licenses.go` — embeds `NOTICE`; `mox-/licenses.go` prints it first and labels
the MIT section as a fork of mjl-/mox, so the binary states its own lineage.
## What was NOT touched — and why
- **`LICENSE.MIT`, `LICENSE.MPLv2.0`, `licenses/`** — preserved verbatim. Never
edit these.
- **`vendor/`** — no dependency was added, removed, or bumped.
- **`apidiff/v0.0.9.txt`, `v0.0.10.txt`, `v0.0.11.txt`, `next.txt`** — historical
records of *upstream's* API at upstream releases. Rewriting the paths in them
would falsify a historical record. Leave them.
- **`website/**`, `develop.txt`** — upstream's own website/docs content.
(`develop.txt` also references `mjl-/mox-website-files`, a different repo —
do not let a careless `sed` catch that prefix.)
- **The `mox` command name, config keys, data directory layout, and the `mox`
Go package name in `mox-/`.** Renaming these is a separate, larger job that
breaks on-disk config and data compatibility. The binary still prints
`usage: mox ...`. Deliberate: the module rename is what makes the fork
independently buildable; the rest is branding with real breakage risk.
- **`webmail/webmail.ts` / `webmail.js`** — still link to `mjl-/mox/issues` for
bug reports. `webmail.js` is generated from the `.ts`, so this needs the
frontend toolchain, not a `sed`. **Blocking before any deploy** — otherwise our
webmail sends Hanzo users to file bugs on upstream's tracker.
## Build and test
```sh
export PATH=$PATH:/usr/local/go/bin
export GOWORK=off GOFLAGS=-mod=vendor # a parent go.work in ~/work/hanzo shadows this repo
go build ./...
go test ./...
```
`GOWORK=off` is required — without it `go build ./...` fails with "directory
prefix . does not contain modules listed in go.work".
Integration tests are behind `//go:build integration` and need Docker; the
default `go test ./...` excludes them.
**Test flakiness is pre-existing upstream, not caused by the fork.** `go test
./...` runs up to 32 package binaries at once on this box; mox's server tests
use hard 1s deadlines (`server_test.go:414` "server not done within 1s") and
starve. The failing set differs every run — baseline upstream (before any change)
failed `TestQresyncUIDOnly`/`TestSubscribe`; the renamed tree failed a different
set. Both pass in isolation. Use `go test -p 1 ./...` for a clean signal.
## Standing it up — next steps
Nothing is deployed. No DNS points anywhere. Repo setup only.
1. **Mailbox storage.** Per-account BoltDB index plus message files on disk:
`<DataDir>/accounts/<name>/index.db` and `<DataDir>/accounts/<name>/msg/<shard>/<id>`.
This is a *stateful, single-writer* design — it is not a stateless service and
does not shard across replicas. It needs a real PersistentVolume with backups
(`mail backup <destdir>` and `mail verifydata <data-dir>` are built in), not
an emptyDir. Decide the storage class and backup target before anything else;
this is the main architectural constraint of the whole project.
2. **Config and keys.** `mail quickstart user@domain` generates `mox.conf`,
`domains.conf`, and DKIM keys. DKIM private keys and the admin/account
password hashes are secrets — they go in KMS (`kms.hanzo.ai`) and reach the
cluster via KMSSecret CRDs. Never commit them. Passwords are hashed by mox
(bcrypt/SCRAM credentials); do not add any plaintext path.
3. **DKIM / SPF / DMARC / MX / DNS.** `mail config dnsrecords <domain>` prints
every record to publish; `mail config dnscheck <domain>` verifies them.
Publish in Cloudflare. MX records must **not** be proxied. Sequence matters:
stand the server up and verify with `dnscheck` *before* moving MX off Google,
or mail bounces.
4. **Migration from Google.** There is **no built-in IMAP puller** — verified, not
assumed. Two real options: (a) Google Takeout → mbox → `mail import mbox
<account> <mailbox> <file>` (also available as mbox/maildir `.zip`/`.tgz`
upload in the web account UI); or (b) an external IMAP-to-IMAP sync tool run
against Hanzo Mail's IMAP server. Pick one and pilot it on a single throwaway
account before touching anyone's real mail.
5. **CI/CD and image.** Images build in CI only — never locally — and publish to
`ghcr.io/hanzoai/mail`. Note `docker-release.sh`/`Dockerfile.release` still
carry upstream's release flow and registry; repoint them (or replace with a
`.hanzo/workflows` pipeline) as part of the deploy work, not before.
6. **IAM.** Mox has its own account/password store. Integrating Hanzo IAM
(hanzo.id, OIDC) is a genuine design question, because IMAP and SMTP clients
authenticate with SASL, not OIDC — expect app passwords or a SASL-to-IAM
bridge. Design it before promising SSO.
## Syncing upstream
`git fetch upstream && git merge upstream/main`. The module rename touches nearly
every `.go` file, so import-path conflicts are expected on merge; resolve by
keeping our path. Do not resolve a conflict by reverting `go.mod`.
+68
View File
@@ -0,0 +1,68 @@
Hanzo Mail
==========
Hanzo Mail is a fork of Mox, a mail server by Mechiel Lukkien.
Upstream project: Mox
Upstream URL: https://github.com/mjl-/mox
Upstream author: Mechiel Lukkien <[email protected]>
Upstream license: MIT (see LICENSE.MIT)
Fork point: 9bbad6af30ae1c429dde9cdc2d04130532e1fed1
(upstream tag v0.0.15 plus 55 commits, 2026-07-21)
Fork repository: https://github.com/hanzoai/mail
Go module path: github.com/hanzoai/mail
Hanzo Mail is not affiliated with or endorsed by the Mox project or its author.
Licensing
---------
This repository is MIT licensed. The fork does not relicense any upstream code,
and modifications made by Hanzo are released under the same MIT license.
Three distinct sets of terms apply to the files in this repository:
1. Mox source code, and Hanzo's modifications to it — the great majority of
this repository.
License: MIT, in LICENSE.MIT
Copyright: 2021 Mechiel Lukkien <[email protected]>, and Hanzo AI, Inc.
for subsequent modifications
The MIT copyright notice is preserved verbatim. Upstream's copyright line
is retained as-is; Hanzo claims copyright only over its own changes.
2. publicsuffix/public_suffix_list.txt — the Public Suffix List, published by
Mozilla. This single data file is the only content in this repository
covered by the Mozilla Public License.
License: MPL-2.0, in LICENSE.MPLv2.0
Source: https://publicsuffix.org
LICENSE.MPLv2.0 is present solely to cover this file. Neither Mox nor Hanzo
Mail is dual-licensed: the MPL applies to the Public Suffix List data and to
nothing else in this repository.
3. vendor/** — third-party Go dependencies, each under its own license as
published by its respective authors. These include BSD-3-Clause code from
The Go Authors (golang.org/x/..., and the Go-derived forks
github.com/mjl-/{adns,autocert,flate,sherpa}), Apache-2.0 code (the
Prometheus client libraries, google.golang.org/protobuf), and others.
Licenses: collected verbatim under licenses/
The licenses/ tree is generated from vendor/ by genlicenses.sh and is
preserved intact from upstream. It contains the dependencies' license files,
not any license grant covering Mox or Hanzo Mail themselves.
The command `mail licenses` prints all of the above from the running binary.
Changes from upstream
---------------------
The Go module path was renamed from github.com/mjl-/mox to
github.com/hanzoai/mail, and import paths were updated to match. See LLM.md for
the full record of what was and was not changed.
+16
View File
@@ -1,3 +1,19 @@
# Hanzo Mail
Hanzo Mail is a fork of [Mox](https://github.com/mjl-/mox) by Mechiel Lukkien,
taken at upstream commit `9bbad6af30ae1c429dde9cdc2d04130532e1fed1` (v0.0.15
plus 55 commits). Mox is MIT licensed; this fork stays MIT and does not
relicense any upstream code. See [NOTICE](NOTICE) for the full lineage and for
exactly which license applies to which files, and [LLM.md](LLM.md) for what this
fork changes.
Hanzo Mail is not affiliated with or endorsed by the Mox project or its author.
The Go module path is `github.com/hanzoai/mail`. Apart from that rename, the
documentation below is upstream's and still describes the software accurately.
---
Mox is a modern full-featured open source secure mail server for low-maintenance self-hosted email.
For more details, see the mox website, https://www.xmox.nl.
+9 -9
View File
@@ -19,15 +19,15 @@ import (
"strings"
"time"
"github.com/mjl-/mox/config"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/junk"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/mtasts"
"github.com/mjl-/mox/queue"
"github.com/mjl-/mox/smtp"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/config"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/junk"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/mtasts"
"github.com/hanzoai/mail/queue"
"github.com/hanzoai/mail/smtp"
"github.com/hanzoai/mail/store"
)
var pkglog = mlog.New("admin", nil)
+3 -3
View File
@@ -5,9 +5,9 @@ import (
"maps"
"slices"
"github.com/mjl-/mox/config"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mox-"
"github.com/hanzoai/mail/config"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mox-"
)
type TLSMode uint8
+9 -9
View File
@@ -12,14 +12,14 @@ import (
"github.com/mjl-/adns"
"github.com/mjl-/mox/config"
"github.com/mjl-/mox/dkim"
"github.com/mjl-/mox/dmarc"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/smtp"
"github.com/mjl-/mox/spf"
"github.com/mjl-/mox/tlsrpt"
"github.com/hanzoai/mail/config"
"github.com/hanzoai/mail/dkim"
"github.com/hanzoai/mail/dmarc"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/smtp"
"github.com/hanzoai/mail/spf"
"github.com/hanzoai/mail/tlsrpt"
"slices"
)
@@ -261,7 +261,7 @@ func DomainRecords(domConf config.Domain, domain dns.Domain, hasDNSSEC bool, cer
// ../rfc/6186:133 ../rfc/8314:692
// ../rfc/2782:202 says we MUST NOT have a CNAME as the target to a SRV record, but
// arnt says it's safe to ignore that statement, see
// https://github.com/mjl-/mox/pull/367#issuecomment-3486518824. Software isn't
// https://github.com/hanzoai/mail/pull/367#issuecomment-3486518824. Software isn't
// likely to actually update their configs to the targets of CNAMEs, and the
// additional lookups won't cause relevant delays or traffic.
"; For secure IMAP and submission autoconfig, point to mail host.",
+1 -1
View File
@@ -1,7 +1,7 @@
#!/bin/sh
set -e
prevversion=$(go list -mod=readonly -m -f '{{ .Version }}' github.com/mjl-/mox@latest)
prevversion=$(go list -mod=readonly -m -f '{{ .Version }}' github.com/hanzoai/mail@latest)
if ! test -d tmp/mox-$prevversion; then
mkdir -p tmp/mox-$prevversion
git archive --format=tar $prevversion | tar -C tmp/mox-$prevversion -xf -
+3 -3
View File
@@ -36,9 +36,9 @@ import (
"github.com/mjl-/autocert"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/moxvar"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/moxvar"
)
var (
+2 -2
View File
@@ -11,8 +11,8 @@ import (
"github.com/mjl-/autocert"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
)
func TestAutotls(t *testing.T) {
+7 -7
View File
@@ -18,13 +18,13 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/dmarcdb"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/moxvar"
"github.com/mjl-/mox/mtastsdb"
"github.com/mjl-/mox/queue"
"github.com/mjl-/mox/store"
"github.com/mjl-/mox/tlsrptdb"
"github.com/hanzoai/mail/dmarcdb"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/moxvar"
"github.com/hanzoai/mail/mtastsdb"
"github.com/hanzoai/mail/queue"
"github.com/hanzoai/mail/store"
"github.com/hanzoai/mail/tlsrptdb"
)
func xbackupctl(ctx context.Context, xctl *ctl) {
+5 -5
View File
@@ -11,11 +11,11 @@ import (
"regexp"
"time"
"github.com/mjl-/mox/autotls"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/junk"
"github.com/mjl-/mox/mtasts"
"github.com/mjl-/mox/smtp"
"github.com/hanzoai/mail/autotls"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/junk"
"github.com/hanzoai/mail/mtasts"
"github.com/hanzoai/mail/smtp"
)
// todo: better default values, so less has to be specified in the config file.
+12 -12
View File
@@ -22,18 +22,18 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/admin"
"github.com/mjl-/mox/config"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/imapserver"
"github.com/mjl-/mox/message"
"github.com/mjl-/mox/metrics"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/queue"
"github.com/mjl-/mox/smtp"
"github.com/mjl-/mox/store"
"github.com/mjl-/mox/webapi"
"github.com/hanzoai/mail/admin"
"github.com/hanzoai/mail/config"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/imapserver"
"github.com/hanzoai/mail/message"
"github.com/hanzoai/mail/metrics"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/queue"
"github.com/hanzoai/mail/smtp"
"github.com/hanzoai/mail/store"
"github.com/hanzoai/mail/webapi"
)
// ctl represents a connection to the ctl unix domain socket of a running mox instance.
+11 -11
View File
@@ -17,17 +17,17 @@ import (
"testing"
"time"
"github.com/mjl-/mox/config"
"github.com/mjl-/mox/dmarcdb"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/imapclient"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/mtastsdb"
"github.com/mjl-/mox/queue"
"github.com/mjl-/mox/smtp"
"github.com/mjl-/mox/store"
"github.com/mjl-/mox/tlsrptdb"
"github.com/hanzoai/mail/config"
"github.com/hanzoai/mail/dmarcdb"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/imapclient"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/mtastsdb"
"github.com/hanzoai/mail/queue"
"github.com/hanzoai/mail/smtp"
"github.com/hanzoai/mail/store"
"github.com/hanzoai/mail/tlsrptdb"
)
var ctxbg = context.Background()
+3 -3
View File
@@ -62,9 +62,9 @@ import (
"github.com/mjl-/adns"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/stub"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/stub"
"slices"
)
+2 -2
View File
@@ -22,8 +22,8 @@ import (
"github.com/mjl-/adns"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
)
func tcheckf(t *testing.T, err error, format string, args ...any) {
+2 -2
View File
@@ -8,8 +8,8 @@ import (
"github.com/mjl-/adns"
"github.com/mjl-/mox/dane"
"github.com/mjl-/mox/dns"
"github.com/hanzoai/mail/dane"
"github.com/hanzoai/mail/dns"
)
func ExampleDial() {
+6 -6
View File
@@ -25,12 +25,12 @@ import (
"strings"
"time"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/moxio"
"github.com/mjl-/mox/publicsuffix"
"github.com/mjl-/mox/smtp"
"github.com/mjl-/mox/stub"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/moxio"
"github.com/hanzoai/mail/publicsuffix"
"github.com/hanzoai/mail/smtp"
"github.com/hanzoai/mail/stub"
"slices"
)
+2 -2
View File
@@ -16,8 +16,8 @@ import (
"strings"
"testing"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
)
var pkglog = mlog.New("dkim", nil)
+2 -2
View File
@@ -8,8 +8,8 @@ import (
"golang.org/x/text/unicode/norm"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/smtp"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/smtp"
)
// Pedantic enables stricter parsing.
+3 -3
View File
@@ -7,9 +7,9 @@ import (
"fmt"
"strings"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/message"
"github.com/mjl-/mox/smtp"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/message"
"github.com/hanzoai/mail/smtp"
)
// Sig is a DKIM-Signature header.
+2 -2
View File
@@ -7,8 +7,8 @@ import (
"strings"
"testing"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/smtp"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/smtp"
)
func TestSig(t *testing.T) {
+6 -6
View File
@@ -18,12 +18,12 @@ import (
mathrand2 "math/rand/v2"
"time"
"github.com/mjl-/mox/dkim"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/publicsuffix"
"github.com/mjl-/mox/spf"
"github.com/mjl-/mox/stub"
"github.com/hanzoai/mail/dkim"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/publicsuffix"
"github.com/hanzoai/mail/spf"
"github.com/hanzoai/mail/stub"
)
var (
+4 -4
View File
@@ -6,10 +6,10 @@ import (
"reflect"
"testing"
"github.com/mjl-/mox/dkim"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/spf"
"github.com/hanzoai/mail/dkim"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/spf"
)
var pkglog = mlog.New("dmarc", nil)
+5 -5
View File
@@ -7,11 +7,11 @@ import (
"net"
"strings"
"github.com/mjl-/mox/dkim"
"github.com/mjl-/mox/dmarc"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/message"
"github.com/mjl-/mox/spf"
"github.com/hanzoai/mail/dkim"
"github.com/hanzoai/mail/dmarc"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/message"
"github.com/hanzoai/mail/spf"
)
func ExampleLookup() {
+3 -3
View File
@@ -19,9 +19,9 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/moxvar"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/moxvar"
)
// Init opens the databases.
+14 -14
View File
@@ -27,20 +27,20 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/dkim"
"github.com/mjl-/mox/dmarc"
"github.com/mjl-/mox/dmarcrpt"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/message"
"github.com/mjl-/mox/metrics"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/moxio"
"github.com/mjl-/mox/moxvar"
"github.com/mjl-/mox/publicsuffix"
"github.com/mjl-/mox/queue"
"github.com/mjl-/mox/smtp"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/dkim"
"github.com/hanzoai/mail/dmarc"
"github.com/hanzoai/mail/dmarcrpt"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/message"
"github.com/hanzoai/mail/metrics"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/moxio"
"github.com/hanzoai/mail/moxvar"
"github.com/hanzoai/mail/publicsuffix"
"github.com/hanzoai/mail/queue"
"github.com/hanzoai/mail/smtp"
"github.com/hanzoai/mail/store"
)
var (
+6 -6
View File
@@ -13,12 +13,12 @@ import (
"testing"
"time"
"github.com/mjl-/mox/dmarcrpt"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/moxio"
"github.com/mjl-/mox/queue"
"github.com/hanzoai/mail/dmarcrpt"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/moxio"
"github.com/hanzoai/mail/queue"
"slices"
)
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"os"
"testing"
"github.com/mjl-/mox/metrics"
"github.com/hanzoai/mail/metrics"
)
func TestMain(m *testing.M) {
+2 -2
View File
@@ -10,8 +10,8 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/dmarcrpt"
"github.com/mjl-/mox/dns"
"github.com/hanzoai/mail/dmarcrpt"
"github.com/hanzoai/mail/dns"
)
var (
+3 -3
View File
@@ -8,9 +8,9 @@ import (
"testing"
"time"
"github.com/mjl-/mox/dmarcrpt"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mox-"
"github.com/hanzoai/mail/dmarcrpt"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mox-"
)
var ctxbg = context.Background()
+3 -3
View File
@@ -13,9 +13,9 @@ import (
"net/http"
"strings"
"github.com/mjl-/mox/message"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/moxio"
"github.com/hanzoai/mail/message"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/moxio"
)
var ErrNoReport = errors.New("no dmarc aggregate report found in message")
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"strings"
"testing"
"github.com/mjl-/mox/mlog"
"github.com/hanzoai/mail/mlog"
)
var pkglog = mlog.New("dmarcrpt", nil)
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"fmt"
"log"
"github.com/mjl-/mox/dns"
"github.com/hanzoai/mail/dns"
)
func ExampleParseDomain() {
+2 -2
View File
@@ -13,8 +13,8 @@ import (
"github.com/mjl-/adns"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/stub"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/stub"
)
// todo future: replace with a dnssec capable resolver
+3 -3
View File
@@ -24,9 +24,9 @@ import (
"strings"
"time"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/stub"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/stub"
)
var (
+2 -2
View File
@@ -5,8 +5,8 @@ import (
"net"
"testing"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
)
func TestDNSBL(t *testing.T) {
+2 -2
View File
@@ -6,8 +6,8 @@ import (
"log/slog"
"net"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/dnsbl"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/dnsbl"
)
func ExampleLookup() {
+2 -2
View File
@@ -11,10 +11,10 @@ set -e
platforms=linux/amd64,linux/arm64,linux/arm,linux/386,linux/ppc64le,linux/s390x
# todo: linux/riscv64 currently absent for alpine:latest, only at alpine:edge
# We are building by "go install github.com/mjl-/mox@$moxversion", to ensure the
# We are building by "go install github.com/hanzoai/mail@$moxversion", to ensure the
# binary gets a proper version stamped into its buildinfo. It also helps to ensure
# there is no accidental local change in the image.
moxversion=$(go list -mod mod -m github.com/mjl-/mox@$(git rev-parse HEAD) | cut -f2 -d' ')
moxversion=$(go list -mod mod -m github.com/hanzoai/mail@$(git rev-parse HEAD) | cut -f2 -d' ')
echo Building mox $moxversion for $platforms, without local/uncommitted changes
# Ensure latest golang and alpine docker images.
+3 -3
View File
@@ -14,9 +14,9 @@ import (
"strings"
"time"
"github.com/mjl-/mox/message"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/smtp"
"github.com/hanzoai/mail/message"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/smtp"
)
// Message represents a DSN message, with basic message headers, human-readable text,
+4 -4
View File
@@ -10,10 +10,10 @@ import (
"testing"
"time"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/message"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/smtp"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/message"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/smtp"
)
var pkglog = mlog.New("dsn", nil)
+4 -4
View File
@@ -10,10 +10,10 @@ import (
"strings"
"time"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/message"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/smtp"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/message"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/smtp"
"slices"
)
+4 -4
View File
@@ -12,10 +12,10 @@ import (
"github.com/mjl-/sconf"
"github.com/mjl-/mox/config"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/smtp"
"github.com/mjl-/mox/webhook"
"github.com/hanzoai/mail/config"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/smtp"
"github.com/hanzoai/mail/webhook"
)
func cmdExample(c *cmd) {
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/store"
)
func cmdExportMaildir(c *cmd) {
+14 -14
View File
@@ -12,20 +12,20 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/sconf"
"github.com/mjl-/mox/config"
"github.com/mjl-/mox/dmarcdb"
"github.com/mjl-/mox/dmarcrpt"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/moxvar"
"github.com/mjl-/mox/mtasts"
"github.com/mjl-/mox/mtastsdb"
"github.com/mjl-/mox/queue"
"github.com/mjl-/mox/smtp"
"github.com/mjl-/mox/store"
"github.com/mjl-/mox/tlsrpt"
"github.com/mjl-/mox/tlsrptdb"
"github.com/hanzoai/mail/config"
"github.com/hanzoai/mail/dmarcdb"
"github.com/hanzoai/mail/dmarcrpt"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/moxvar"
"github.com/hanzoai/mail/mtasts"
"github.com/hanzoai/mail/mtastsdb"
"github.com/hanzoai/mail/queue"
"github.com/hanzoai/mail/smtp"
"github.com/hanzoai/mail/store"
"github.com/hanzoai/mail/tlsrpt"
"github.com/hanzoai/mail/tlsrptdb"
)
func cmdGentestdata(c *cmd) {
+3 -3
View File
@@ -97,13 +97,13 @@ const init = () => {
elem('p', 'Compile or download any version of mox, by tag (release), branch or commit hash.'),
elem('h1', 'Compile'),
elem('p', 'Run:'),
elem('pre', 'CGO_ENABLED=0 GOBIN=$PWD go install github.com/mjl-/mox@'+h),
elem('pre', 'CGO_ENABLED=0 GOBIN=$PWD go install github.com/hanzoai/mail@'+h),
elem('p', 'Mox is tested with the Go toolchain versions that are still have support: The most recent version, and the version before.'),
elem('h1', 'Download'),
elem('p', 'Download a binary for your platform:'),
elem('blockquote', ok ?
link('https://beta.gobuilds.org/github.com/mjl-/mox@'+h) :
'https://beta.gobuilds.org/github.com/mjl-/mox@'+h
link('https://beta.gobuilds.org/github.com/hanzoai/mail@'+h) :
'https://beta.gobuilds.org/github.com/hanzoai/mail@'+h
),
elem('p', 'Because mox is written in Go, builds are reproducible, also when cross-compiling. Gobuilds.org is a service that builds Go applications on-demand with the latest Go toolchain/runtime.'),
elem('h1', 'Localserve'),
+1 -1
View File
@@ -1,4 +1,4 @@
module github.com/mjl-/mox
module github.com/hanzoai/mail
go 1.25.0
+3 -3
View File
@@ -11,9 +11,9 @@ import (
"github.com/prometheus/client_golang/prometheus/promauto"
"rsc.io/qr"
"github.com/mjl-/mox/admin"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/smtp"
"github.com/hanzoai/mail/admin"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/smtp"
)
var (
+1 -1
View File
@@ -17,7 +17,7 @@ import (
"sync"
"time"
"github.com/mjl-/mox/mlog"
"github.com/hanzoai/mail/mlog"
)
// todo: consider caching gzipped responses from forward handlers too. we would need to read the responses (handle up to perhaps 2mb), hash the data (blake2b seems fast), check if we have the gzip content for that hash, cache it on second request. keep around entries for non-yet-cached hashes, with some limit and lru eviction policy. we have to recognize some content-types as not applicable and do direct streaming compression, e.g. for text/event-stream. and we need to detect when backend server could be slowly sending out data and abort the caching attempt. downside is always that we need to read the whole response before and hash it before we can send our response. it is best if the backend just responds with gzip itself though. compression needs more cpu than hashing (at least 10x), but it's only worth it with enough hits.
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"os"
"testing"
"github.com/mjl-/mox/metrics"
"github.com/hanzoai/mail/metrics"
)
func TestMain(m *testing.M) {
+2 -2
View File
@@ -10,8 +10,8 @@ import (
"slices"
"strings"
"github.com/mjl-/mox/admin"
"github.com/mjl-/mox/smtp"
"github.com/hanzoai/mail/admin"
"github.com/hanzoai/mail/smtp"
)
// Apple software isn't good at autoconfig/autodiscovery, but it can import a
+4 -4
View File
@@ -7,10 +7,10 @@ import (
"strings"
"time"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/mtasts"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/mtasts"
)
func mtastsPolicyHandle(w http.ResponseWriter, r *http.Request) {
+12 -12
View File
@@ -30,18 +30,18 @@ import (
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/mjl-/mox/autotls"
"github.com/mjl-/mox/config"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/imapserver"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/ratelimit"
"github.com/mjl-/mox/smtpserver"
"github.com/mjl-/mox/webaccount"
"github.com/mjl-/mox/webadmin"
"github.com/mjl-/mox/webapisrv"
"github.com/mjl-/mox/webmail"
"github.com/hanzoai/mail/autotls"
"github.com/hanzoai/mail/config"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/imapserver"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/ratelimit"
"github.com/hanzoai/mail/smtpserver"
"github.com/hanzoai/mail/webaccount"
"github.com/hanzoai/mail/webadmin"
"github.com/hanzoai/mail/webapisrv"
"github.com/hanzoai/mail/webmail"
)
var pkglog = mlog.New("http", nil)
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"path/filepath"
"testing"
"github.com/mjl-/mox/mox-"
"github.com/hanzoai/mail/mox-"
)
func TestServeHTTP(t *testing.T) {
+4 -4
View File
@@ -25,10 +25,10 @@ import (
"syscall"
"time"
"github.com/mjl-/mox/config"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/hanzoai/mail/config"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
)
func recvid(r *http.Request) string {
+1 -1
View File
@@ -16,7 +16,7 @@ import (
"golang.org/x/net/websocket"
"github.com/mjl-/mox/mox-"
"github.com/hanzoai/mail/mox-"
)
func tcheck(t *testing.T, err error, msg string) {
+2 -2
View File
@@ -19,8 +19,8 @@ import (
"net"
"strings"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/moxio"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/moxio"
)
// Conn is an connection to an IMAP server.
+3 -3
View File
@@ -12,9 +12,9 @@ import (
"github.com/mjl-/flate"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/moxio"
"github.com/mjl-/mox/scram"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/moxio"
"github.com/hanzoai/mail/scram"
)
// Capability writes the IMAP4 "CAPABILITY" command, requesting a list of
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"strings"
"time"
"github.com/mjl-/mox/mlog"
"github.com/hanzoai/mail/mlog"
)
// todo: stricter parsing. xnonspace() and xword() should be replaced by proper parsers
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestAppend(t *testing.T) {
+4 -4
View File
@@ -20,10 +20,10 @@ import (
"golang.org/x/text/secure/precis"
"github.com/mjl-/mox/imapclient"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/scram"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/imapclient"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/scram"
"github.com/hanzoai/mail/store"
)
func TestAuthenticateLogin(t *testing.T) {
+3 -3
View File
@@ -7,9 +7,9 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/imapclient"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/imapclient"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/store"
"slices"
)
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestCopy(t *testing.T) {
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestCreate(t *testing.T) {
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestDelete(t *testing.T) {
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestExpunge(t *testing.T) {
+5 -5
View File
@@ -16,11 +16,11 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/message"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/moxio"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/message"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/moxio"
"github.com/hanzoai/mail/store"
)
// functions to handle fetch attribute requests are defined on fetchCmd.
+2 -2
View File
@@ -7,8 +7,8 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/imapclient"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/imapclient"
"github.com/hanzoai/mail/store"
)
func TestFetch(t *testing.T) {
+4 -4
View File
@@ -12,10 +12,10 @@ import (
"testing"
"time"
"github.com/mjl-/mox/imapclient"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/imapclient"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/store"
)
// Fuzz the server. For each fuzz string, we set up servers in various connection states, and write the string as command.
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"testing"
"time"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestIdle(t *testing.T) {
+2 -2
View File
@@ -8,8 +8,8 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/store"
)
// LIST command, for listing mailboxes with various attributes, including about subscriptions and children.
+2 -2
View File
@@ -3,8 +3,8 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/imapclient"
"github.com/hanzoai/mail/store"
)
func TestListBasic(t *testing.T) {
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestLsub(t *testing.T) {
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"os"
"testing"
"github.com/mjl-/mox/metrics"
"github.com/hanzoai/mail/metrics"
)
func TestMain(m *testing.M) {
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/store"
)
// Changed during tests.
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"testing"
"time"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestMetadata(t *testing.T) {
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestMove(t *testing.T) {
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/store"
)
// Max number of pending changes for selected-delayed mailbox before we write a
+2 -2
View File
@@ -5,8 +5,8 @@ import (
"testing"
"time"
"github.com/mjl-/mox/imapclient"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/imapclient"
"github.com/hanzoai/mail/store"
)
func TestNotify(t *testing.T) {
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"io"
"strings"
"github.com/mjl-/mox/mlog"
"github.com/hanzoai/mail/mlog"
)
type token interface {
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"fmt"
"time"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/store"
)
type numSet struct {
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/store"
)
func TestNumSetContains(t *testing.T) {
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestQuota1(t *testing.T) {
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestRename(t *testing.T) {
+3 -3
View File
@@ -8,9 +8,9 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/message"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/message"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/store"
)
// Replace relaces a message for another, atomically, possibly in another mailbox,
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestReplace(t *testing.T) {
+2 -2
View File
@@ -12,8 +12,8 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/message"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/message"
"github.com/hanzoai/mail/store"
)
// If last search output was this long ago, we write an untagged inprogress
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"testing"
"time"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
var searchMsg = strings.ReplaceAll(`Date: Mon, 1 Jan 2022 10:00:00 +0100 (CEST)
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"strings"
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestSelect(t *testing.T) {
+11 -11
View File
@@ -67,17 +67,17 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/flate"
"github.com/mjl-/mox/config"
"github.com/mjl-/mox/junk"
"github.com/mjl-/mox/message"
"github.com/mjl-/mox/metrics"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/moxio"
"github.com/mjl-/mox/moxvar"
"github.com/mjl-/mox/ratelimit"
"github.com/mjl-/mox/scram"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/config"
"github.com/hanzoai/mail/junk"
"github.com/hanzoai/mail/message"
"github.com/hanzoai/mail/metrics"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/moxio"
"github.com/hanzoai/mail/moxvar"
"github.com/hanzoai/mail/ratelimit"
"github.com/hanzoai/mail/scram"
"github.com/hanzoai/mail/store"
)
var (
+5 -5
View File
@@ -21,11 +21,11 @@ import (
"github.com/mjl-/bstore"
"github.com/mjl-/mox/imapclient"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/moxvar"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/imapclient"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/moxvar"
"github.com/hanzoai/mail/store"
"slices"
)
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestStatus(t *testing.T) {
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"strings"
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestStore(t *testing.T) {
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestSubscribe(t *testing.T) {
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestUnselect(t *testing.T) {
+1 -1
View File
@@ -3,7 +3,7 @@ package imapserver
import (
"testing"
"github.com/mjl-/mox/imapclient"
"github.com/hanzoai/mail/imapclient"
)
func TestUnsubscribe(t *testing.T) {
+6 -6
View File
@@ -18,12 +18,12 @@ import (
"golang.org/x/text/unicode/norm"
"github.com/mjl-/mox/config"
"github.com/mjl-/mox/message"
"github.com/mjl-/mox/metrics"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/moxio"
"github.com/mjl-/mox/store"
"github.com/hanzoai/mail/config"
"github.com/hanzoai/mail/message"
"github.com/hanzoai/mail/metrics"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/moxio"
"github.com/hanzoai/mail/store"
)
// todo: add option to trust imported messages, causing us to look at Authentication-Results and Received-SPF headers and add eg verified spf/dkim/dmarc domains to our store, to jumpstart reputation.
+6 -6
View File
@@ -17,12 +17,12 @@ import (
"testing"
"time"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/imapclient"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/mox-"
"github.com/mjl-/mox/sasl"
"github.com/mjl-/mox/smtpclient"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/imapclient"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/mox-"
"github.com/hanzoai/mail/sasl"
"github.com/hanzoai/mail/smtpclient"
)
func tcheck(t *testing.T, err error, errmsg string) {
+3 -3
View File
@@ -11,9 +11,9 @@ import (
"slices"
"time"
"github.com/mjl-/mox/dns"
"github.com/mjl-/mox/mlog"
"github.com/mjl-/mox/stub"
"github.com/hanzoai/mail/dns"
"github.com/hanzoai/mail/mlog"
"github.com/hanzoai/mail/stub"
)
var xlog = mlog.New("iprev", nil)
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"strings"
"testing"
"github.com/mjl-/mox/dns"
"github.com/hanzoai/mail/dns"
)
func TestIPRev(t *testing.T) {

Some files were not shown because too many files have changed in this diff Show More