Billionmail/BillionMail · error

Not suppliers found

Error message

Not suppliers found

What it means

modifyPostfixNetworksText scans a docker-compose.yml line-by-line to locate the postfix-billionmail service so it can rewrite its networks section. It throws this error when no line containing 'postfix-billionmail:' was found in the file, meaning the compose file has no Postfix service under that name. The function returns the original lines unchanged along with the error, so no modification is applied.

Source

Thrown at core/internal/controller/askai/askai_v1_supplier.go:16

package askai

import (
	v1 "billionmail-core/api/askai/v1"
	"billionmail-core/internal/service/askai"
	"billionmail-core/internal/service/public"
	"billionmail-core/utility/types/api_v1"
	"context"
	"errors"
)

func (c *ControllerV1) List(ctx context.Context, req *v1.ListReq) (res *v1.ListRes, err error) {
	res = &v1.ListRes{}
	res.Data = askai.List()
	if res.Data == nil {
		res.SetError(errors.New(public.LangCtx(ctx, "Not suppliers found")))
		return res, nil
	}
	res.SetSuccess(public.LangCtx(ctx, "List of suppliers retrieved successfully"))
	return res, nil
}

func (c *ControllerV1) Models(ctx context.Context, req *v1.ModelsReq) (res *v1.ModelsRes, err error) {
	res = &v1.ModelsRes{}
	res.Data = askai.Models(req.SupplierName)
	res.SetSuccess(public.LangCtx(ctx, "List of models retrieved successfully"))
	return res, nil
}

func (c *ControllerV1) AddModel(ctx context.Context, req *v1.AddModelReq) (res *v1.AddModelRes, err error) {
	res = &v1.AddModelRes{}
	res.Data = askai.AddModel(req.SupplierName, req.Title, req.ModelId, req.MaxTokens, req.Capability)
	res.SetSuccess(public.LangCtx(ctx, "Model added successfully"))
	return res, nil

View on GitHub (pinned to fc36c76c05)

Solutions

  1. Ensure the docker-compose.yml being modified contains a service named exactly 'postfix-billionmail:'
  2. Verify the path passed to modifyDockerComposeText points to the full BillionMail compose file, not an override/fragment
  3. If the service was intentionally renamed, update the hardcoded 'postfix-billionmail' key in config_manager.go or rename it back
  4. Restore the original BillionMail docker-compose.yml and reapply customizations

Example fix

# before (custom compose file)
services:
  my-mailer:
    image: billionmail/postfix
# after
services:
  postfix-billionmail:
    image: billionmail/postfix
Defensive patterns

Strategy: validation

Validate before calling

data, _ := os.ReadFile(composePath)
if !strings.Contains(string(data), "postfix-billionmail:") {
	return fmt.Errorf("%s has no postfix-billionmail service; refusing multi-IP rewrite", composePath)
}

Try / catch

lines, err := m.modifyDockerComposeText(path, configs)
if err != nil {
	if strings.Contains(err.Error(), "service not found") {
		// restore stock compose file or abort with a clear user-facing message
	}
	return err
}

Prevention

When it happens

Trigger: modifyDockerComposeText is called with a docker-compose.yml that lacks a service key named 'postfix-billionmail' — e.g. a manually trimmed compose file, an override file, or a renamed service.

Common situations: Users replaced the BillionMail docker-compose.yml with a custom one, renamed the service during customization, or the tooling is pointed at the wrong compose file (e.g. an override or fragment file). Also happens with heavily reformatted files where the scanner's indentation assumptions break.

Related errors


AI-assisted analysis of Billionmail/BillionMail@fc36c76c05 (2026-09-05). Data as JSON: /api/errors/f87ad649ab54f0b2. Report an issue: GitHub.