aboutsummaryrefslogblamecommitdiff
path: root/deliver_local.go
blob: 9a29459ee7f28c30ab60df77436cc426d5be0c40 (plain) (tree)


























                                                                                                                                                                                                         
package main

import (
	"fmt"
	"context"
	"github.com/jackc/pgx/v5/pgxpool"
)

func deliver_local(ctx context.Context, db *pgxpool.Pool, envelope_from string, envelope_recipients []string, data []byte, addresses []string) error {
	tx, err := db.Begin(ctx)
	if err != nil {
		return err
	}
	defer tx.Rollback(ctx) // BUG: Potential missed error here, but this will always fail if commit succeeded
	for _, address := range addresses {
		_, err = tx.Exec(ctx, "INSERT INTO mail (mailbox_id, data) SELECT a.mailbox_id, $2::bytea FROM addresses a JOIN mailboxes m ON a.mailbox_id = m.id WHERE a.address = $1;", address, data)
		if err != nil {
			fmt.Printf("%#v\n", err)
			return err
		}
	}
	err = tx.Commit(ctx)
	if err != nil {
		return err
	}
	return nil
}