diff options
author | Thomas Dupas <thomas.dupas@dnsbelgium.be> | 2020-11-17 10:00:58 +0100 |
---|---|---|
committer | Thomas Dupas <thomas.dupas@dnsbelgium.be> | 2020-11-17 10:00:58 +0100 |
commit | 4f475c98dc1a3b7f9b4c0ce783f8da52c8aebb41 (patch) | |
tree | 06482953909e71a019e2227e5c3a8aa33aae3531 | |
parent | 837762f56718fab3a4d4b34f1dc0151065ed38c2 (diff) | |
download | ses-smtpd-proxy-4f475c98dc1a3b7f9b4c0ce783f8da52c8aebb41.tar.bz2 ses-smtpd-proxy-4f475c98dc1a3b7f9b4c0ce783f8da52c8aebb41.tar.xz ses-smtpd-proxy-4f475c98dc1a3b7f9b4c0ce783f8da52c8aebb41.zip |
Make SES error (like SES api unreachable for example) a transient error so MTA's can use queueing/retry mechanism before dropping mail
-rw-r--r-- | main.go | 14 |
1 files changed, 7 insertions, 7 deletions
@@ -12,8 +12,8 @@ import ( | |||
12 | ) | 12 | ) |
13 | 13 | ||
14 | const ( | 14 | const ( |
15 | SES_SIZE_LIMIT = 10000000 | 15 | SesSizeLimit = 10000000 |
16 | DEFAULT_ADDR = ":2500" | 16 | DefaultAddr = ":2500" |
17 | ) | 17 | ) |
18 | 18 | ||
19 | var sesClient *ses.SES | 19 | var sesClient *ses.SES |
@@ -38,8 +38,8 @@ func (e *Envelope) BeginData() error { | |||
38 | 38 | ||
39 | func (e *Envelope) Write(line []byte) error { | 39 | func (e *Envelope) Write(line []byte) error { |
40 | e.b.Write(line) | 40 | e.b.Write(line) |
41 | if e.b.Len() > SES_SIZE_LIMIT { // SES limitation | 41 | if e.b.Len() > SesSizeLimit { // SES limitation |
42 | log.Println("message size %d exceeds SES limit of %d", e.b.Len(), SES_SIZE_LIMIT) | 42 | log.Printf("message size %d exceeds SES limit of %d\n", e.b.Len(), SesSizeLimit) |
43 | return smtpd.SMTPError("554 5.5.1 Error: maximum message size exceeded") | 43 | return smtpd.SMTPError("554 5.5.1 Error: maximum message size exceeded") |
44 | } | 44 | } |
45 | return nil | 45 | return nil |
@@ -62,14 +62,14 @@ func (e *Envelope) Close() error { | |||
62 | _, err := sesClient.SendRawEmail(r) | 62 | _, err := sesClient.SendRawEmail(r) |
63 | if err != nil { | 63 | if err != nil { |
64 | log.Printf("ERROR: ses: %v", err) | 64 | log.Printf("ERROR: ses: %v", err) |
65 | return smtpd.SMTPError(fmt.Sprintf("554 5.5.1 Error: %v", err)) | 65 | return smtpd.SMTPError(fmt.Sprintf("451 4.5.1 Temporary server error. Please try again later: %v", err)) |
66 | } | 66 | } |
67 | return err | 67 | return err |
68 | } | 68 | } |
69 | 69 | ||
70 | func main() { | 70 | func main() { |
71 | sesClient = ses.New(session.New()) | 71 | sesClient = ses.New(session.Must(session.NewSession())) |
72 | addr := DEFAULT_ADDR | 72 | addr := DefaultAddr |
73 | 73 | ||
74 | if len(os.Args) == 2 { | 74 | if len(os.Args) == 2 { |
75 | addr = os.Args[1] | 75 | addr = os.Args[1] |