If Gmail refuses to attach your photos or the upload bar sits at 0% forever, there are only about six things it can be, and you can identify which one in under two minutes. Check the file size first, then the file type, then whether it fails in an incognito window too. That sequence separates a hard Google limit from a browser problem from a mobile permissions issue.
The frustrating part is that Gmail’s error messages are vague or absent. You often get no explanation at all — just a spinner that never finishes, or a “Send” that quietly does nothing. Here’s what’s actually happening underneath.
The 25 MB limit isn’t really 25 MB
Gmail caps outgoing messages at 25 MB. But that’s the size of the encoded message, not the size of your files on disk.
Email can only carry plain text, so binary attachments get converted using Base64 encoding, which inflates them by roughly 33%. A 20 MB video becomes about 27 MB in transit and gets rejected. In practice your real ceiling is around 18–19 MB of actual files, and less once you account for the message body and headers.
This is why selecting eight phone photos fails when seven worked. Modern phone cameras produce 4–8 MB images, and some in HEIC or RAW are far larger. Six photos can quietly blow past the limit.
There’s a second limit worth knowing: Gmail also caps you at 50 MB total for receiving, so even if your provider let a 40 MB message out, a Gmail recipient may still reject it.
Check the size before you fight it
On Windows, select the files in File Explorer and look at the status bar at the bottom, or right-click and choose Properties for a total. If the sum is over about 18 MB, that’s your answer and no amount of retrying will help.
On Android, open the file manager, long-press the files, and check details. On iPhone, the Photos app shows file size in the info panel when you swipe up on an image.
Size limits compared
| Service | Stated send limit | Realistic file size | Notes |
|---|---|---|---|
| Gmail / Google Workspace | 25 MB | ~18–19 MB | Receives up to 50 MB; Drive links for larger |
| Outlook.com (free) | 20 MB | ~15 MB | Offers OneDrive upload instead |
| Microsoft 365 / Exchange Online | 25 MB default | ~18 MB | Admin can raise to 150 MB per mailbox |
| Yahoo Mail | 25 MB | ~18 MB | Similar encoding overhead |
| Typical hosted business email | 10–50 MB | Varies | Recipient’s server limit also applies |
Note the last row. Even when your provider allows a large attachment, delivery depends on every mail server between you and the recipient accepting it. The smallest limit in the chain wins. That’s the real reason a 30 MB proposal bounces back hours later.
Use Google Drive for anything large
Gmail handles this automatically. Drag a file over 25 MB into a compose window and it uploads to Drive and inserts a link instead. You can also click the Drive icon in the compose toolbar.
One thing to get right: sharing permissions. When you send a Drive link to someone outside your organization, Gmail prompts you to grant access. If you skip that prompt, the recipient gets a “You need permission” page and emails you back confused.
For a business, links are better than attachments anyway. You can revoke access later, you can see who opened the file, you’re not consuming mailbox storage on both ends, and there’s a single current version rather than five copies drifting apart in different inboxes.
Blocked file types
Google blocks executable and script files outright, for security reasons that are entirely reasonable. You’ll see “Blocked for security reasons” or “This message was blocked because its content presents a potential security issue.” No workaround exists within Gmail — this is enforced on Google’s servers.
| Category | Blocked extensions |
|---|---|
| Executables | .exe, .com, .msi, .msp, .cpl, .dll, .scr, .pif, .application |
| Scripts and batch | .bat, .cmd, .js, .jse, .vb, .vbs, .vbe, .ps1, .ps1xml, .psc1, .sh |
| Shortcuts and installers | .lnk, .reg, .inf, .ins, .isp, .jar, .msc, .hta |
| Archives containing the above | .zip, .rar, .7z, .tar, .gz — blocked if they contain a banned type |
| Password-protected archives | Blocked when Gmail can’t scan the contents |
Zipping doesn’t help — Gmail inspects archive contents. Renaming setup.exe to setup.txt sometimes gets through but is a bad habit, and Google increasingly detects file type by content rather than extension.
The correct approach for sending software or scripts is to upload to Drive and share the link. Drive isn’t subject to the same attachment restrictions.
Attachment stuck at 0%
The file is well under the limit, the type is fine, and the progress bar just sits there. This is a browser-side problem nearly every time.
Test in incognito first
Press Ctrl+Shift+N in Chrome (Ctrl+Shift+P in Firefox and Edge), sign into Gmail, and try the same attachment. Extensions are disabled by default in private windows, so if it uploads fine there, an extension is the cause.
Then go to chrome://extensions, disable everything, confirm the upload works, and re-enable in batches until it breaks again. The repeat offenders are ad blockers, privacy and script blockers, VPN extensions, download managers, and email-tracking add-ons that inject themselves into the compose window.
Clear the cache
Stale cached Gmail scripts cause upload failures that survive reboots. In Chrome: Settings > Privacy and security > Delete browsing data > Advanced, select Cached images and files plus Cookies, choose All time, and clear. You’ll need to sign back in.
Antivirus intercepting uploads
Security suites with web or HTTPS scanning inspect outbound traffic, and some handle large multipart uploads badly — the transfer stalls or times out. Temporarily disable web/mail scanning in the antivirus (not the whole product), retry, then re-enable and add an exception if that was it.
If you’re seeing this on several office machines running the same security product, that’s your answer without testing each one.
Connection timeouts
Attachments travel on your upload bandwidth, which on many US cable plans is a fraction of download. A 20 MB file on a 5 Mbps upstream takes about 35 seconds at best, and much longer if someone else is on a video call.
If uploads stall consistently at the same percentage, or only fail during busy office hours, the network is the constraint. Test on a phone’s cellular connection to confirm — if it uploads fine there, the office internet is the problem, not Gmail.
When it’s the phone
“Gmail won’t send my selected photos” is overwhelmingly a mobile complaint, and on Android it’s usually permissions.
Android photo permissions
Since Android 13, apps request access to selected photos rather than the whole library. If Gmail only has partial access, some images simply won’t appear or won’t attach.
Go to Settings > Apps > Gmail > Permissions > Photos and videos and set it to Allow all. While there, check Files and media too. Then force stop Gmail and reopen it.
Clear the Gmail app cache
On Android: Settings > Apps > Gmail > Storage & cache > Clear cache. Clear cache only — “Clear storage” wipes account setup and forces you to re-add everything.
This resolves a surprising share of attachment failures, particularly after an app update.
HEIC and format conversion
iPhones shoot in HEIC by default. It’s efficient but poorly supported on older Windows machines and some email clients, so recipients report they “can’t open” the images even though they sent fine.
Fix it at the source: Settings > Camera > Formats > Most Compatible shoots JPEG instead. For existing photos, Settings > Photos > Transfer to Mac or PC > Automatic converts on export.
Stuck in Outbox
If mail sits in the Gmail app’s Outbox, the app is waiting for a good connection or the message exceeds a limit. Check Settings > Data usage for restrictions, confirm Gmail isn’t restricted from background data, and verify the attachment size. Deleting and recomposing with smaller files usually clears a stubborn queue.
Quick triage: Does it fail in an incognito browser window? If no, it’s an extension. If yes, does it fail on a different device on cellular data? If no, it’s your network or that machine. If yes, it’s the file — check size against the ~18 MB practical limit and the blocked-extension list, or check whether an admin policy is filtering it.
Business accounts: admin policies and DLP
If you’re on Google Workspace with a company domain, an administrator can enforce rules that don’t exist on personal Gmail. Attachment compliance settings can block by file type, by size, or by content pattern. Data Loss Prevention rules can silently quarantine messages containing what looks like a credit card number or Social Security number — including inside a PDF or spreadsheet.
The symptom is distinctive: the message appears to send normally, no error is shown, and it never arrives. Sometimes you get a delayed bounce mentioning a policy.
An admin can confirm quickly in the Admin console under Reporting > Email Log Search, which shows exactly what happened to a specific message. If your business handles client financial or medical data, these rules probably exist deliberately — the fix is usually a secure file-sharing workflow, not disabling the rule.
Worth adding: if attachments matter to how your business operates, decide on a standard approach. Ad hoc emailing of 20 MB files to clients fails often enough to cost real time, and each failure looks unprofessional. A shared Drive folder per client, or a proper file-transfer tool, removes the problem entirely.
Making files smaller
- Photos: in Windows Photos, use Resize and pick Medium. A 6 MB phone photo drops to under 1 MB with no visible difference on screen.
- PDFs: most PDF tools have a “reduce file size” or “optimize” option. Scanned documents shrink dramatically when the scan resolution is dropped from 600 to 200 dpi.
- PowerPoint and Word: File > Compress Pictures, choose Email (96 ppi) and untick “Apply only to this picture.”
- Video: don’t email it. Even a short clip exceeds the limit. Use Drive.
- Many small files: zip them. It won’t shrink already-compressed photos much, but it makes one clean attachment instead of thirty.
Common questions
Why won’t Gmail send my selected photos?
Usually total size. Phone photos run 4–8 MB each, and Base64 encoding adds about a third, so five or six images can exceed the 25 MB ceiling even though the folder looks small. On Android, the other frequent cause is partial photo permissions — set Gmail’s Photos and videos permission to “Allow all.” Resize the images or share them through Drive instead.
Why does my attachment upload stop at 0%?
Almost always a browser extension interfering with the compose window — ad blockers, privacy tools, and email trackers are the common ones. Test in an incognito window where extensions are off. If it works there, disable extensions in batches to find the culprit. If incognito also fails, look at antivirus web scanning or a slow upstream connection.
Can I email a .exe or .zip file through Gmail?
Not directly. Google blocks executables and scripts, and it scans inside archives, so zipping an .exe still gets blocked. Password-protecting the archive doesn’t help either, since Gmail blocks what it can’t scan. Upload the file to Google Drive and share a link — Drive doesn’t apply the same attachment restrictions.
The email sent but the recipient says it bounced. Why?
Their mail server has its own size limit, often lower than Gmail’s. Corporate mail systems commonly cap attachments at 10 MB. Every server along the path can reject an oversized message, and the bounce sometimes arrives hours later. When a file is large or the recipient is on a corporate domain, send a Drive link rather than gambling on it.
Is there a way to raise Gmail’s 25 MB limit?
No. It’s fixed for both personal Gmail and Google Workspace, and admins cannot increase it. Microsoft 365 is different — an administrator can raise the per-mailbox limit up to 150 MB, though recipient servers may still reject anything that large. For business use, cloud file links are the durable answer rather than pushing bigger attachments through email.
