# How to automate email into ECI M1

> Source: https://netray.co/integrations/eci-m1-email-automation
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: Integrations

## Short answer

Monitor a shared mailbox, classify each message, extract structured fields from the body and attachments, validate them against M1 master data, and stage the result for a person to approve before it becomes a sales order, quote or receipt. Never post straight from an email.

## System

ECI M1

## Capability

email-automation

## Intro

Customer purchase orders, RFQs with drawings, supplier acknowledgements and invoices all arrive by email at ECI M1 shops, and someone retypes them. For make-to-order and engineer-to-order work this is slow and error-prone because each message carries a different layout, part numbering and revision, and the customer's PO number is often the only reference.

Automation here is mostly a matching problem, not a reading problem. Extracting a quantity is easy; knowing that the customer's part ABC-12 Rev C is your item with a particular routing, price and lead time is the hard part. The design should push uncertain matches to a human and learn from corrections.

## Use Cases

### Customer PO to sales order draft

**Description:** Read the PO attachment, match customer and parts, compare prices to the quote, and stage a sales order draft for entry.

### RFQ intake to quote request

**Description:** Capture the sender, due date, quantities and attached drawings, create a quote request for estimating and acknowledge receipt to the customer.

### Supplier acknowledgement parsing

**Description:** Read order confirmations, extract promise dates per line and propose PO date updates for a buyer to accept.

### Vendor invoice triage

**Description:** Match the invoice to a PO and receipt, flag price or quantity variances, and queue clean ones for AP.

### Certificate and packing slip filing

**Description:** Detect certs of conformance and packing slips, attach them to the right receipt or lot, and notify quality.

## System Surface

- M1 master data in SQL Server (customers, vendors, items, customer part cross-references, open orders), used read-only for matching and validation. Table names vary by version.
- The supported M1 interface for creating or updating orders, quotes and receipts in your release, which should receive approved records only.
- M1 document attachment or linked-document features, useful for storing the original email and drawings against the new record.
- Customer part number cross-reference data, which is critical to matching and often under-maintained.
- Import or batch-entry options in M1 that let staged transactions be reviewed before posting; confirm what your version offers.

## How It Works

### Connect to the mailbox

**Detail:** Use Microsoft Graph or IMAP on a shared mailbox, and move processed messages to folders by status rather than deleting.

### Classify the message

**Detail:** Decide PO, RFQ, acknowledgement, invoice, cert or other, using sender, subject and content. Unknown goes to a manual queue.

### Extract fields

**Detail:** Pull header and line data from the body and attachments, with a confidence score per field.

### Match to M1 data

**Detail:** Resolve customer, part and revision against master data and the customer cross-reference. Compare price and lead time to open quotes.

### Stage for review

**Detail:** Show a side-by-side of the source document and proposed M1 record, highlighting low-confidence and mismatched fields.

### Post and learn

**Detail:** Approved records are posted through the supported path. Corrections update the cross-reference so the next message matches.

## Example Flows

### Customer PO arrives

**Trigger:** A PDF purchase order lands in the orders mailbox.

**Steps:**

- Message is classified as a PO and the PDF extracted.
- Customer and each part are matched; one revision mismatch is flagged.
- Prices are compared with the accepted quote and a variance is shown.
- A user corrects the revision and approves; the draft is posted and an acknowledgement is sent.

**Result:** Entry time drops to a review, and the price and revision errors are caught before release to the floor.

### Supplier confirms with new dates

**Trigger:** A supplier replies to a PO with revised delivery dates.

**Steps:**

- The PO number is found in subject or attachment.
- New dates are extracted per line.
- Buyer sees current versus proposed dates.
- Accepted changes update the PO and the schedule impact is reported to planning.

**Result:** The schedule reflects supplier reality without manual copying.

## On Prem

Extraction and matching can run on a server inside your network next to the M1 SQL Server. Use an on-prem or private-cloud mail connector, an OCR engine you host, and an open-weight model served locally for classification and field extraction, so customer POs, drawings and pricing are not sent to a public API. If mail is hosted in Microsoft 365, the connector reads through Graph over an outbound connection while the processing and staging remain internal.

## Security

- Scope mailbox access to the specific shared mailbox with an application permission, not a user's full inbox.
- Scan attachments for malware before extraction and never execute macros.
- Treat email content as untrusted input, including instructions embedded in the text of a message.
- Keep posting behind human approval, with the source email stored against the record.
- Control who can see staged records, since they contain customer pricing.

## Options

### Off-the-shelf intelligent document processing tool

**Fit:** Good for standard invoices if it can write to M1 or output a file M1 can import.

**Effort:** Weeks, plus per-document licensing

### Build in-house with rules and OCR

**Fit:** Works when you have a few high-volume customers with stable formats.

**Effort:** Six to ten weeks, and ongoing rule upkeep

### Partner build with Netray

**Fit:** Better for varied layouts, drawings and a review queue, with a private model if data must stay inside.

**Effort:** Scoped per document type, often a few weeks each

## Pitfalls

- Auto-posting orders without review, which sends a wrong part or price to production.
- Ignoring customer part number cross-references so matching never works at scale.
- Processing reply threads and quoted text as new orders, creating duplicates.
- Dropping the original email, leaving no trail for disputes.
- Trusting extracted totals without recomputing them from the lines.

## Faq

### Can email create sales orders in ECI M1 automatically?

**Answer:** It can stage them. Most shops should keep a human approval before posting because part, revision and price errors are costly. Once a customer's messages match reliably, you can relax review for that customer only.

### How do you avoid duplicate orders?

**Answer:** Use the customer's PO number plus customer ID as a uniqueness key, check against open orders, and handle replies and forwards by thread ID so the same order is not staged twice.

### What about orders with drawings?

**Answer:** Attach the drawing to the staged record and flag revision differences against the item's current revision. Reading dimensions is a separate task and not required for order entry.

### Does this need a cloud AI service?

**Answer:** No. Extraction and classification can run with open-weight models and an OCR engine on your own servers. Cloud services are optional and a policy choice.

### Can I do this just with Power Automate?

**Answer:** For simple, fixed-format emails, yes. For varied PO layouts, matching against M1 master data and an exception queue, you will outgrow flows quickly and need purpose-built logic.

## Search terms

eci m1 email automation, eci m1 purchase order email import, automate rfq intake eci m1, eci m1 sales order from email, m1 erp email parsing, eci m1 invoice email processing, eci m1 supplier acknowledgement automation, eci m1 shared mailbox automation

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
