{
  config,
  lib,
  myData,
  pkgs,
  ...
}:
{
  options.mj.services.postfix = with lib.types; {
    enable = lib.mkEnableOption "Enable postfix";
    saslPasswdPath = lib.mkOption { type = path; };
  };

  config = lib.mkIf config.mj.services.postfix.enable {
    environment.systemPackages = [ pkgs.mailutils ];

    services.postfix = {
      enable = true;
      enableSmtp = true;
      networks = [
        "127.0.0.1/8"
        "[::ffff:127.0.0.0]/104"
        "[::1]/128"
        myData.subnets.tailscale.cidr
      ];
      hostname = "${config.networking.hostName}.${config.networking.domain}";
      relayHost = "smtp.sendgrid.net";
      relayPort = 587;
      mapFiles = {
        sasl_passwd = config.mj.services.postfix.saslPasswdPath;
      };
      extraConfig = ''
        smtp_sasl_auth_enable = yes
        smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
        smtp_sasl_security_options = noanonymous
        smtp_sasl_tls_security_options = noanonymous
        smtp_tls_security_level = encrypt
        header_size_limit = 4096000
      '';
    };
  };
}