aboutsummaryrefslogtreecommitdiff
path: root/deliver_dir.go
diff options
context:
space:
mode:
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
+}