The cid contract: why the key names must match
The `src="cid:weeklyChart"` attribute in your HTML and the `weeklyChart` key inside the `inlineImages` object are two halves of the same contract. Apps Script resolves the `cid:` reference at send time by looking up the matching key in `inlineImages` and substituting the blob's binary content. Get the names out of sync by even one character and the image either disappears or falls through as a broken attachment.
The key can be any string without spaces. I keep these names short and descriptive — `weeklyChart`, `headerLogo`, `qrCode` — because you will type them twice and a mismatch is the most common failure mode here. The blob's filename (set with `.setName()`) is separate; it affects the MIME part's `Content-Disposition` header but not the cid lookup.