Comments (7)
Start pipeline before the body is received
+1
Requires changes to go-smtp (pre-body callback for DATA command)
That's not true, the DATA handler is called before the body has been received (directly after receiving the DATA command). and is given an io.Reader
that directly reads from the underlying net.Conn
.
It is not possible to report errors for individual recipients or even MAIL FROM command.
Hmm. Indeed, that's an issue.
from maddy.
That's not true, the DATA handler is called before the body has been received (directly after receiving the DATA command). and is given an io.Reader that directly reads from the underlying net.Conn.
https://github.com/emersion/go-smtp/blob/930d6dfbf447707ddcc38bbafccd8d1596cc6181/conn.go#L435
From my initial post:
Also, SMTP doesn't allow us to "abort" transaction once we sent 354 intermediate reply to the DATA command.
So at the time DATA handler gets called, we have to consume the body sent by the client, what I want to avoid:
We want to run certain checks (#41) on the envelope before the message body is sent to us to not waste traffic
from maddy.
Oh, I see. You're right.
from maddy.
Still no ideas other/better than n. 1. Though interfaces may be split into three (EHLO/MAIL FROM/RCPT TO checks). Probably we should just go with it, wdyt?
from maddy.
Another (relatively) small change to envelope checks is to hide them behind regular filter directive.
If you, say, write filter check_source_hostname
, it will actually add a check to the EHLO command.
But there are several problems with this "attempt to hide complexity": Envelope checks are executed in a different order. Say, with filter check_source_mx
and then filter check_source_mx
user could expect that the checks will run in that order, but in fact, they will be executed in reverse because first "filter" checks RCPT and second checks EHLO. So I proposed to add explicit groups of checks. The same approach used by postifx and it is actually recommended by RFC 5321 (the allowed way is to accept all messages and then send bounce messages if something is wrong, but it creates more problems on its own).
from maddy.
Alright, a decision is needed on this one.
We are going with a modified version of the first solution.
type EhloFilter interface {
Ehlo(ehlo string) error
}
type FromFilter interface {
From(to string) (string, error)
}
type RcptFilter interface {
Rcpt(to string) (string, error)
}
smtp ... {
ehlo {
check_source_hostname
check_source_rdns
}
rcpt {
check_source_mx
}
}
from maddy.
Closing in favor of the design change proposed in #101.
from maddy.
Related Issues (20)
- auth_map: unknown module or global directive HOT 2
- Add support for delegating DNS-01 challenge to a different domain HOT 1
- Link to DNS configuration on Docker tutorial page is broken HOT 1
- 'SEARCH UNSEEN' doesn't return unseen messages
- Fails to import config from file using absolute path HOT 1
- maddy.email is down HOT 1
- Empty "From" address results in rejection (5.1.7 Malformed address) HOT 1
- Documentation Typo in 'Multiple domains configuration'
- Certificate subject names checked when `min_tls_level` is `encrypted` HOT 1
- Maddy systemd service tries to start before network interfaces are up
- Fail check with go test or test/run.sh HOT 2
- Gandi dns-01 challenge fail: 400 Absolute rrset_name must end with mydomain.org HOT 8
- Quarantined message discarded HOT 3
- Bug report: empty smtp.mailfrom on Delivery Status Notification (DSN) HOT 5
- No usable MXs when sending to IPv6-only domain
- Feature request - replace_rcpt sql_query {} should handle multiple results HOT 3
- Error Message should Validate Username is in Domain for Authentication Error HOT 1
- POP3 support HOT 2
- Check the From header for inbound mail HOT 2
- Bug report: ssl cert expired for docs site HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from maddy.