---
title: Sending delivery receipts to customers
order: 10
updated: 2026-07-21
---

# Sending delivery receipts to customers

Once a delivery slip has been **approved**, you can email a delivery confirmation to the customer's contact person straight from the app. The email carries a product table (what went out on this trip, what has gone out so far, and what is still pending), and — depending on your firm's settings — a copy of the customer's PO and the proof-of-delivery files the warehouse uploaded. Everything the recipient sees comes from a firm-wide template you configure once under *Settings*; the send screen only lets you review a receipt and either send it or skip it.

This page covers finding a receipt, reviewing it, sending or ignoring it, and reading the send history afterwards. To change the wording, recipients, or attachment defaults, see [Delivery receipt personalisation](/docs/settings/document-templates#delivery-receipt-personalisation).

## Who can send

Sending needs the *Send Delivery Receipt to Customer* permission (`delivery.sendReciptToCustomer`). That permission **depends on** *Approve Delivery Slip* (`delivery.approveDeliverStockRequest`), so only someone already trusted to sign off that goods left the warehouse can email the customer about it. Firm administrators always have it.

The same permission gates the whole *Send Delivery Receipts* page, the *Send* action, and the *Ignore* action — each is re-checked on the server on every request, not just hidden in the UI. Without it you land on a short "You do not have permission to send delivery receipts" notice.

Reading a receipt's *Mail History* is deliberately looser: anyone who can see deliveries at all (approve, see pending, see history, generate, or send) can open it, since audit visibility shouldn't be gated tighter than the delivery itself.

## Open the Send Delivery Receipts page

1. Open *Inventory* in the sidebar and click *Delivery Receipt*. (See [Delivery receipt](/docs/enquiry-bank/delivery-receipt) for that parent screen.)
2. In the page header (top right), open the *Toggle Columns* control.
3. Choose *Send Delivery Receipt* (*Email approved receipts to the customer*).

You land on the *Send Delivery Receipts* page, headed *Send Delivery Receipts* with the subtitle *Email approved receipts to the customer's contact person*. The page is intentionally kept out of the sidebar — it is a sub-flow of *Delivery Receipt*, reached only through that dropdown.

## What appears in the list

The list shows exactly the receipts that still need a decision. A delivery slip qualifies only when **all** of these are true (the server enforces every one):

- Its status is `approved` — pending or rejected slips never appear.
- It is a real delivery, **not a return** (returns are never emailed to the customer).
- It has **not yet been stamped** — it has neither been sent nor ignored before.

The moment you send or ignore a receipt it is stamped and drops off the list for everyone; there is no way for it to reappear. Rows are ordered newest-delivery-first (by upload time). The list loads `20` at a time and pages in more as you scroll.

## Filtering the list

Five search fields sit above the table. Each one refetches the list from the server as you use it:

### Customer

Type-ahead over your customers. Picking a customer narrows the list to that customer's approved receipts and **also resets the Contact Person field**, since a contact person only makes sense within a customer.

### Contact Person

Type-ahead over contact persons. When a customer is selected the search is scoped to that customer's contact persons; with no customer chosen it searches all of them.

### Product Head

Type-ahead over product heads. Selecting a head narrows to receipts whose order contains a code under that head, and **resets the Product Code field**.

### Product Code

Type-ahead over product codes, scoped to the selected head when one is chosen. Filtering by code is the most specific product filter.

### PO Number

A free-text box. It waits until you stop typing (about `0.65` seconds) before searching, and matches the order's PO number as a **case-insensitive partial match** — typing `123` finds `PO-2026-00123`. Special characters are treated literally, so a stray `.` or `*` won't break the search.

> The customer, contact-person, head and code filters resolve against the underlying **orders**, then the list shows the approved receipts raised against the matching orders. If a filter matches no order, the list simply comes back empty rather than erroring.

## The table columns

The table shares the *Toggle Columns* control (top right) with the parent *Delivery Receipt* screen — drag the grip handle beside a name to reorder, tick to show or hide. Available columns:

- *Customer* — the customer name. **Shown by default.**
- *Contact Person* — the recipient's name (salutation + first + last). **Shown by default.**
- *PO No* — the customer's PO number, monospace. **Shown by default.**
- *PO Date* — hidden by default.
- *Delivery Date* — the date the goods went out. **Shown by default.**
- *Products* — one line per product code in this slip. **Shown by default.**
- *Qty* — the quantity of each product in *this* receipt. **Shown by default.**
- *Delivered By* — who recorded the slip; hidden by default.
- *Delivery Upload Date* — when the slip was recorded. **Shown by default.**
- *Send Button* — the blue *Send* link that opens the review modal. **Shown by default.**

## Reviewing a receipt before sending

Clicking the blue *Send* link on a row opens the *Send Delivery Receipt* modal. It is a read-only review — nothing is emailed until you press *Send Receipt* at the bottom. An `approved` chip and the customer name sit in the header, next to a top-right *⋮* menu (see [Open Order / Ignore](#the-top-right-menu-open-order-and-ignore)).

### Order Details card

- *Customer* — the customer on the order.
- *Contact Person* — the contact person the email will be addressed to (in the default recipient mode).
- *PO Date* — the customer's PO date.
- *PO No* — the customer's PO number.

### Delivery Details card

- *Delivered By* — the user who recorded the slip.
- *Created* — when the slip was recorded (date and time).
- *Delivery Date* — the dispatch date (shown only when the slip carries one).
- *Approved By* — who approved the slip (shown only when present).
- *Attachments* — a *View N file(s)* link that opens the delivery's own uploaded files (delivery note, proof of delivery). Each file can be previewed in place.
- *PO Documents* — a second *View N file(s)* link, shown **only when the order's PO has arrived** and PO documents exist. These are the customer-PO files uploaded when the order was marked PO-arrived.

### Products Delivered table

One row per product line in this slip. Each row is expandable — click it to reveal the line's **HSN** and **Description**. Columns:

- *Head* — the customer-facing head name (the head's *External Display Name*, falling back to the head's own name, then the code name).
- *Code* — the product code.
- *Qty* — quantity delivered on **this** receipt (with unit if the line has one).
- *Delivered (cum.)* — total delivered across **all** receipts for that order line so far.
- *Total* — the quantity ordered on that line.
- *Pending* — ordered minus delivered; shown in **red when greater than zero**.

These are the same figures the emailed product table uses, though the email freezes each line's cumulative and pending numbers **as of this receipt's creation time** so the customer-facing table stays stable even if a later delivery is recorded afterwards.

## Sending the receipt

Press *Send Receipt*. A toast confirms the receipt was *queued for sending*, the modal closes, and the row disappears from the list. A background worker composes and sends the actual email. You cannot send the same receipt twice — the first send (or ignore) stamps it and locks it out; a racing second click gets a "already been sent, ignored, or is not eligible" message.

Everything below happens automatically from the firm's [Delivery receipt personalisation](/docs/settings/document-templates#delivery-receipt-personalisation) — the send screen currently exposes no per-send editing of the subject, body, recipients, CC/BCC, or attachments. (The server *can* accept those overrides, but the review modal doesn't offer them yet.)

### Which email account is used

The email goes out from one of the firm's outgoing mail accounts, chosen by the *Delivery Receipt Send* policy under *Settings → Firm Customisation → Email Accounts*. If that policy leaves **no** account eligible for delivery-receipt sends, the send is blocked with a toast telling you to configure the email policy first. When more than one account is eligible the app currently uses the first allowed one (there is no account picker on this screen yet). Whatever account id the app sends, the server re-checks it against the policy before queuing. See [Email accounts and sending policy](/docs/settings/document-templates#email-accounts-and-sending-policy).

### Who the email is addressed to

The recipient follows the firm's configured *Recipient* mode for the delivery receipt template:

- *Contact person email* (the default) — the email goes to the contact person on the order.
- *Fixed mailbox* — every receipt is routed to one firm address (useful for an audit inbox).
- *Hybrid* — designed to let the sender choose between the contact person and the fixed mailbox.

**Gotcha:** in the current review modal, only *Fixed mailbox* mode routes to the fixed address. In *Hybrid* mode this screen does not yet prompt for a choice — it defaults to the **contact person**. So today *Hybrid* behaves like *Contact person email* here. If the resolved recipient has no valid email address (an empty contact-person email, or an unset/invalid fixed mailbox), the send is rejected and the receipt stays in the list — fix the address and try again.

### CC and BCC

Any CC and BCC addresses configured on the delivery receipt template are copied on **every** delivery-receipt email. Duplicates and the primary recipient are removed automatically, so no one is CC'd and To'd on the same mail. These lists are firm-level and managed in the personalisation modal (up to `20` addresses each).

### Attachments

Two things can ride along, both controlled by the firm's template defaults:

- *Attach PO copy* — the customer's PO documents, attached **only when the order's PO has actually arrived**. **On by default.**
- *Attach delivery's own attachments* — the delivery note / proof-of-delivery files uploaded with the slip. **On by default.**

Only files that finished uploading successfully are attached; a half-uploaded or deleted file is silently skipped rather than breaking the send. Because the send screen has no per-send toggles, these two defaults from the template decide what goes out — change them under [Delivery receipt personalisation](/docs/settings/document-templates#delivery-receipt-personalisation).

### Subject, body, and tokens

The subject and body come from the firm template. Tokens in them are replaced with this delivery's real values at send time; anything that isn't a known token is left as literal text, so a stray `{something}` can never leak data. The tokens that resolve in a delivery receipt are:

- `{customer}` — the customer's name.
- `{contactPerson}` — the recipient's name (with salutation if set).
- `{poDate}` — the PO date (`dd/mm/yyyy`).
- `{poNo}` — the customer's PO number.
- `{deliveryDate}` — the delivery date (falls back to the slip's created date).
- `{productsCommaSeparated}` — a comma-joined, de-duplicated list of the customer-facing head names on this delivery.
- `{ProductTable}` — **body only.** Expands to a styled table of the delivered items: `#`, `Item`, `This Delivery`, `Delivered Till Now`, `Ordered`, `Pending`, `Description`. It is filtered out of subject lines (subjects can't hold HTML).

The default subject is `Delivery confirmation for PO {poNo}` and the default body is a short confirmation that references `{poNo}` / `{poDate}` and embeds `{ProductTable}`. Edit either from the personalisation modal, whose quick-insert chips offer exactly the tokens above.

### Additional charges

If the delivery carries any of the parent order's additional charges (for example *Freight* or *Packing*), and the firm has switched on *Include additional charges in receipt*, the email body gains a second table listing each charge with its amount, tax %, per-charge total, and a charge-inclusive grand total. This is **off by default**. See [Delivery receipt](/docs/enquiry-bank/delivery-receipt) for how charges get attached to a delivery in the first place.

## The top-right menu: Open Order and Ignore

The *⋮* menu at the top-right of the review modal has two actions:

### Open Order

Closes the modal and navigates to the underlying sales order, in case you want to verify anything before sending. See [Sales orders](/docs/enquiry-bank/orders).

### Ignore Sending The Receipt

Marks the receipt as **ignored** after a confirmation prompt (*Ignore this delivery receipt?*). No email is sent, but the receipt is stamped (with an *ignored* flag) so it leaves the list — useful for in-house deliveries or samples that don't need a customer-facing confirmation. Like sending, ignoring is a one-time, irreversible stamp: a receipt that has already been sent or ignored can't be ignored again.

## After you send: status, retries, and Mail History

Each send creates a job that moves through `QUEUED` → `PROCESSING` → `SUCCESS` (or `FAILED`). The receipt itself carries a small stamp mirroring that status, plus who sent it and when the mail actually went out.

There is **no automatic retry** — a `FAILED` send stays failed, and its failure reason is recorded. (If a worker crashes mid-send, a job stuck in `PROCESSING` for more than five minutes is swept to `FAILED` on the next worker start, so nothing shows "processing" forever.)

### Reading the Mail History

The full history lives on the **delivery's own detail view**, not on the send page. Open the delivery (from any *Delivery Receipt* tab), open its *⋮* actions menu, and choose *Mail History* — it appears only once a receipt has been sent or ignored. The window shows:

- For an **ignored** receipt: a card naming who chose not to send it and when.
- For a **sent** receipt: a summary line (who first queued it, when, current status) plus one card per send attempt. Each card shows the status chip, the *From* account, who sent it, the *To* / *CC* / *BCC* addresses, the subject, the full body (expandable), the attachments (each tagged *Delivery* or *PO copy* and previewable), and — if it failed — the exact error. The Message-ID and job id sit in a small audit footer.

## Common questions

### Why is my receipt missing from the list?

A receipt shows only while it is `approved`, not a return, and not yet stamped. It leaves the list the instant anyone sends **or** ignores it. Returns and pending/rejected slips never appear here at all.

### Can I send the same receipt twice?

No. The first send (or ignore) stamps the receipt and locks it out; a second attempt gets a 409 "already sent, ignored, or not eligible" response. There is no resend button on this screen yet — the *Mail History* view is read-only.

### What if the contact person has no email?

The send is rejected and the receipt stays in the list. Add or fix the contact person's email (under *Records → Customers → Contact Persons*) and try again. The same applies to a *Fixed mailbox* recipient mode when the firm's fixed address is missing or invalid.

### Nothing sends and I get a "no email account" error — why?

The firm's *Delivery Receipt Send* policy has no eligible outgoing account. Configure it under [Email accounts and sending policy](/docs/settings/document-templates#email-accounts-and-sending-policy), then retry.

### The email went out to the contact person even though we use Hybrid mode — is that a bug?

Not on this screen. The send modal doesn't yet prompt for the *Hybrid* choice, so it defaults to the contact person. Only *Fixed mailbox* mode routes elsewhere. To always use a fixed address, set the recipient mode to *Fixed* in [Delivery receipt personalisation](/docs/settings/document-templates#delivery-receipt-personalisation).

### How do I change what the email says or what it attaches?

Everything the recipient sees — subject, body, tokens, CC/BCC, recipient mode, and the two attachment switches — is firm-wide and edited under [Delivery receipt personalisation](/docs/settings/document-templates#delivery-receipt-personalisation). A change only affects sends made after you save it.

### Where do I record a delivery in the first place?

Delivery slips are raised from the order itself (*Upload Delivery*) and approved on the *Delivery Receipt* screen — only after approval does a receipt become sendable here. See [Delivery receipt](/docs/enquiry-bank/delivery-receipt) and [Sales orders](/docs/enquiry-bank/orders). The supplier-side equivalent for incoming stock is the [arrival receipt](/docs/inventory/send-arrival-receipt).
