]>
git.immae.eu Git - perso/Immae/Config/Nix.git/blob - modules/private/mail/verify_from.py
4 from email
.header
import decode_header
5 from email
.utils
import parseaddr
7 class CheckMilter(Milter
.Base
):
9 self
.envelope_from
= None
10 self
.header_from
= None
13 def connect(self
, IPname
, family
, hostaddr
):
14 return Milter
.CONTINUE
16 def hello(self
, heloname
):
17 return Milter
.CONTINUE
19 def envfrom(self
, mailfrom
, *args
):
20 self
.envelope_from
= parseaddr(mailfrom
)[1]
21 return Milter
.CONTINUE
24 def envrcpt(self
, to
, *str):
25 return Milter
.CONTINUE
28 def header(self
, name
, hval
):
29 if name
.lower() == "from":
30 self
.header_from
= parseaddr(decode_header(hval
)[-1][0])[1]
31 return Milter
.CONTINUE
34 if self
.header_from
is not None and self
.header_from
!= "" and self
.header_from
!= self
.envelope_from
:
35 self
.setreply("553", xcode
="5.7.1", msg
="<%s>: From header rejected: not matching envelope From %s"
36 % (self
.header_from
, self
.envelope_from
))
39 return Milter
.CONTINUE
42 def body(self
, chunk
):
43 return Milter
.CONTINUE
49 return Milter
.CONTINUE
52 return Milter
.CONTINUE
54 if __name__
== "__main__":
55 parser
= argparse
.ArgumentParser()
56 parser
.add_argument("--socket", "-s", type=str, help="socket to listen to")
57 config
= parser
.parse_args()
59 Milter
.factory
= CheckMilter
60 Milter
.runmilter("check_from", config
.socket
, timeout
=300)