Salesforce Email Attachment Limits Are More Restrictive Than You Think. Here’s the Full Picture.
Know every Salesforce email attachment limit. Covers the 25 MB total cap, 5 MB per-file restriction, 10-attachment Lightning ceiling, Base64 encoding overhead, Apex heap constraints, Email-to-Case thresholds, and how to bypass them all.
Salesforce imposes attachment limits at every layer: total email size, individual file size, number of attachments, encoding overhead, Apex heap memory, and org-wide storage capacity. Most teams hit one of these walls only after an email silently fails or a Flow throws an exception in production. This guide documents every attachment limit across every Salesforce email sending method—so you can architect workflows that never break.
Total Email Size Limit: The 25 MB Ceiling
Every outbound email from Salesforce is subject to a 25 MB total size limit. This is not just attachments—it includes the HTML body, plain-text body, email headers, inline images, signatures, and every attached file combined. Salesforce rejects the entire email if the assembled payload exceeds this threshold, with no partial delivery and often no user-facing error in the UI. The Salesforce attachment limits documentation confirms this cap applies across Lightning Experience and Classic.
The practical limit is significantly lower than 25 MB because of Base64 encoding. Every binary attachment is converted to Base64 text for SMTP transport, inflating its size by approximately 33%. A 15 MB PDF becomes roughly 20 MB after encoding. Add a rich HTML template with embedded images and a signature block, and you’re over the limit with what appears to be a modest attachment. Always calculate true payload as: (attachment size × 1.33) + body + headers. For a detailed breakdown, see our attachment size limit guide.
Per-File Size and Attachment Count Restrictions
When Salesforce stores an attachment as a record (using the legacy Attachment object), the per-file limit is 25 MB in Classic and up to 2 GB in Lightning via the Files system (ContentVersion). However, for email specifically, individual files attached through the composer are further constrained. Lightning Experience allows a maximum of 10 attachments per email. Classic permits more, but all files must still fit within the 25 MB total envelope.
The email attachment settings under Setup → Email offer three delivery modes: always as links, as attachments up to 3 MB (links if larger), or as attachments up to the full email size limit. Files exceeding the chosen threshold are automatically converted to Salesforce-hosted download links. Note that link-based delivery requires the recipient to have access—external recipients without Salesforce credentials may be unable to download unless public links are generated. For broader attachment strategies, see our email attachment guide.
Base64 Encoding: The Hidden 33% Tax on Every File
Base64 encoding is the single most misunderstood attachment limit. It is not a Salesforce-specific restriction—it is an SMTP protocol requirement. Every binary file must be encoded into ASCII text for email transport, converting every 3 bytes of data into 4 characters. The result: a file that is 10 MB on disk occupies approximately 13.3 MB in the email payload. Two 10 MB attachments would consume 26.6 MB after encoding, exceeding the 25 MB limit before headers or body are even added.
To estimate true email size before sending: sum all attachment file sizes, multiply by 1.33, then add 50–200 KB for headers, body, and template HTML. Test in sandbox by sending to your own address and checking email log entries for the actual message size. If you regularly send presentations, proposals, or media files, consider sharing via Salesforce Files links or using a platform that handles encoding transparently. Our large file delivery guide covers practical workarounds.
Apex Heap Size and Governor Limits for Attachments
Programmatic email with attachments hits Apex governor limits before it hits the 25 MB email cap. The Apex heap size limit is 6 MB for synchronous transactions and 12 MB for asynchronous transactions. When code reads a file blob into memory via setFileAttachments(), the entire file content loads into the heap. A 5 MB file consumed synchronously leaves only 1 MB for all other variables, queries, and processing—almost certainly triggering the “Apex heap size too large” exception.
Use setEntityAttachments() with ContentVersion IDs instead of setFileAttachments() to avoid loading file content into heap memory. For dynamically generated files (like rendered PDFs), use asynchronous Apex (Queueable or Batch) to access the 12 MB heap. For files exceeding 12 MB, the only native option is link-based delivery. The daily email sending limit of 5,000 also applies—attachment emails count against the same pool. See our email automation overview for governor-safe design patterns.
Email-to-Case and Inbound Attachment Thresholds
Inbound emails processed through Email-to-Case have a separate 35 MB total limit—more generous than outbound, but still a hard boundary. If a customer’s email with attachments exceeds 35 MB, Salesforce rejects the entire message, and no Case is created. The sender may receive a bounce notification, but your support team sees nothing—a critical gap for customer-facing operations.
Within the 35 MB envelope, individual attachments are stored as Salesforce Files (ContentVersion), and the per-file cap is 25 MB. Binary attachments within the email body (inline images) also count toward the total. To handle large inbound files, implement a web-to-case form with file upload as an alternative channel, or configure your email service to strip attachments above a threshold and notify the sender. For a complete email sending and receiving architecture, review our guide to understand how inbound and outbound limits interact.
Flow Builder and Mass Email Attachment Restrictions
Flow Builder’s Send Email action supports attachments through ContentVersion IDs in the Attachment ID Collection field. However, using attachments in Flow switches the email from the DailyWorkflowEmails pool to the SingleEmail limit—a different 5,000/day cap that’s shared with Apex sends. This pool shift catches many teams off guard when automated attachment emails suddenly stop sending because the single email quota was exhausted by another process.
Native Salesforce mass email (List Email) does not support file attachments at all—neither in Lightning nor Classic. You cannot attach files to bulk email campaigns through standard mass email features. The only native option is custom Apex using SingleEmailMessage with batched sends, which consumes single email limits and is subject to heap constraints. For teams needing attachment-enabled mass email beyond 5,000/day, a native platform like MassMailer is the only viable path.
File Storage Quota: The Limit Nobody Monitors
Every attachment stored in Salesforce—whether through email logging, Email-to-Case, or manual upload—consumes file storage quota. Enterprise Edition provides 10 GB base plus 2 GB per user license. When email logging is active, Salesforce duplicates inbound attachments to each matched record: a 3 MB file matched to two records becomes 6 MB of storage. High-volume support teams processing file-heavy cases can exhaust storage within months.
Monitor storage under Setup → Storage Usage. Implement retention policies to archive or purge attachments beyond your compliance window. For outbound campaigns, sending files as hosted links instead of direct attachments eliminates storage duplication entirely. MassMailer Docs provides document management that offloads file storage while maintaining full tracking visibility for opens, clicks, and downloads directly on Salesforce records.
Bypassing Attachment Limits with Native Salesforce Tools
Native Salesforce provides no way to increase the 25 MB email cap, the 10-attachment Lightning ceiling, or the Apex heap constraint. You cannot purchase higher limits or request exceptions. The only architectural choices within the platform are: use link-based delivery, compress files before attaching, split large files across multiple emails, or move to asynchronous Apex for marginal heap relief—all workarounds with usability tradeoffs.
MassMailer eliminates every native attachment limit. Attach files of any type and size directly from Salesforce Files, Documents, Attachments, or your device. Dynamically attach record-specific files so each recipient gets the document tied to their record. Send to any standard or custom object without consuming native email limits, without heap constraints, and with full download tracking through native email reporting and campaign performance tracking—100% inside Salesforce.
Every attachment limit in Salesforce exists because email was never the platform’s priority. MassMailer makes it one. Send any file, any size, to any object—with dynamic per-recipient attachments, zero storage duplication, and complete download tracking. No Apex. No workarounds. No limits. Install MassMailer free and start sending attachments without restrictions →
Key Takeaways
- Salesforce caps outbound email at 25 MB total—including body, headers, and all attachments—with no option to increase or purchase higher limits.
- Base64 encoding inflates every file by 33%, so the practical attachment ceiling is approximately 18–19 MB before body and header overhead.
- Lightning Experience limits emails to 10 attachments maximum; Salesforce mass email and List Email do not support attachments at all.
- Apex heap limits (6 MB synchronous, 12 MB asynchronous) constrain programmatic attachments—use setEntityAttachments() with ContentVersion IDs to avoid loading files into memory.
- Email-to-Case accepts 35 MB inbound, but rejects the entire message silently if exceeded—no Case is created, and no admin notification is sent.
- File storage quota is consumed by every stored attachment and duplicated per matched record during email logging—monitor Setup → Storage Usage proactively.