aboutsummaryrefslogtreecommitdiff
path: root/deliver_dir.go
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-01-12 05:11:18 +0800
committerRunxi Yu <me@runxiyu.org>2025-01-12 05:11:18 +0800
commit92694600c9011fb9495c12a0e0fdaeffac5b37f8 (patch)
tree8746cbb7e42829b617c9a470f19f27cd99941eee /deliver_dir.go
parentAdd basic routing (diff)
downloadmaild-92694600c9011fb9495c12a0e0fdaeffac5b37f8.tar.gz
maild-92694600c9011fb9495c12a0e0fdaeffac5b37f8.tar.zst
maild-92694600c9011fb9495c12a0e0fdaeffac5b37f8.zip
incoming -> deliver_dir
Diffstat (limited to 'deliver_dir.go')
-rw-r--r--deliver_dir.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/deliver_dir.go b/deliver_dir.go
new file mode 100644
index 0000000..bba9eb4
--- /dev/null
+++ b/deliver_dir.go
@@ -0,0 +1,33 @@
+package main
+
+import (
+ "os"
+ "time"
+
+ "go.lindenii.runxiyu.org/lindenii-common/clog"
+ "go.lindenii.runxiyu.org/lindenii-common/misc"
+)
+
+func deliver_to_local_directory(envelope_from string, envelope_recipients []string, data []byte, dir_path string) error {
+ clog.Debug(
+ "incoming_mail",
+ "envelope_from", envelope_from,
+ "envelope_recipients", envelope_recipients,
+ "data", string(data),
+ )
+ t := time.Now()
+ dir, err := misc.Open_directory_readonly(dir_path)
+ if err != nil {
+ return misc.Wrap_one_error(err_deliver_write, err)
+ }
+ fd, err := misc.Open_file_at(dir, envelope_from+" "+t.Format(time.RFC3339Nano)+".eml", os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0o600)
+ if err != nil {
+ // TODO: handle fs.ErrExist
+ return misc.Wrap_one_error(err_deliver_write, err)
+ }
+ _, err = fd.Write(data)
+ if err != nil {
+ return misc.Wrap_one_error(err_deliver_write, err)
+ }
+ return nil
+}