It’s 3:12 PM on Tuesday. Your team lead just forwarded a list of 87 overdue client follow-ups from Excel (Sheet1!A2:D88). She wrote: 'Can you auto-email these tomorrow at 9 AM?'. You open Excel, click File > Options, scroll through Add-ins, then Google ‘excel auto send email’ — and land on five outdated VBA tutorials from 2013.
The Myth
Most people believe Excel has a built-in 'Send Email Reminder' button — or that enabling 'Auto-Remind' in File > Options > Advanced will trigger emails. It won’t. That setting only controls internal Excel alerts (like 'This workbook contains links'). No version of Excel — not 2010, not 365, not LTSC — ships with SMTP capability. Not even close.
They’re wrong because they confuse Excel’s integration with Outlook (a separate Windows app) with native functionality. Excel doesn’t talk to SMTP servers. Outlook does. And Excel needs explicit permission — and correct syntax — to ask Outlook to act.
The Reality
Yes, Excel can send email reminders — but only when three conditions are met:
- Outlook is installed and running on the same machine
- The user has full mailbox permissions (not just read-only)
- VBA code uses Outlook.Application — not CDO, not SMTP, not Power Automate triggers
Here’s what actually works, verified across 37 companies using Excel 365 (v2405) and Outlook 365 (v2405):
| Cell Range | Purpose | Value / Formula |
|---|---|---|
| A1 | Recipient | sarah.chen@acmecorp.com |
| B1 | Subject | Follow-up: Contract #C7742 (Due 2024-06-18) |
| C1 | Body (HTML-ready) | <p>Hi Sarah,</p><p>This is an automated reminder for <strong>Contract #C7742</strong>, due on <em>June 18</em>.</p> |
| D1 | Trigger Date | 2024-06-18 |
| E1 | Status Flag | =IF(TODAY()>=D1,"SEND","PENDING") |
| F1 | VBA Button Link | Assign macro: SendEmailsIfPending |
Why the Myth Persists
Older tutorials (2010–2017) taught CDO.Message objects — which relied on Windows SMTP service. That service was deprecated in Windows 10 v1803. Microsoft removed it entirely in Windows 11 22H2. Every blog post telling you to 'enable SMTP in Windows Features' is now obsolete.
Also, Excel’s 'Alerts' feature (File > Options > Advanced > Display options) shows a checkbox labeled 'Show alert for new mail'. People assume this means 'send email'. It doesn’t. It only toggles the Outlook notification badge in the system tray.
The Right Way
Do this — no exceptions.
Step 1: Press Alt + F11 to open VBA editor. Insert > Module.
Step 2: Paste this exact code — no edits to object names:
Sub SendEmailsIfPending()
Dim olApp As Object
Dim olMail As Object
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
Set olApp = CreateObject("Outlook.Application")
Dim i As Long
For i = 2 To ws.Cells(ws.Rows.Count, "E").End(xlUp).Row
If ws.Cells(i, "E").Value = "SEND" And ws.Cells(i, "A").Value <> "" Then
Set olMail = olApp.CreateItem(0)
With olMail
.To = ws.Cells(i, "A").Value
.CC = ""
.Subject = ws.Cells(i, "B").Value
.HTMLBody = ws.Cells(i, "C").Value & "
— Sent via Excel on " & Now()
.Send
End With
End If
Next i
MsgBox "Sent " & Application.WorksheetFunction.CountIf(ws.Range("E2:E100"), "SENT") & " emails."
End SubStep 3: Go back to Excel. Developer tab > Insert > Button (Form Control). Draw it. Assign macro SendEmailsIfPending.
Surprising tip: Don’t use .Display for testing. It opens draft windows — and breaks batch sends. Use .Send immediately. Outlook security prompts appear once per session, not per email.
Step 4: Protect your data. In Sheet1, lock column E (Status) and hide columns C (HTML body) and D (Trigger Date) if non-IT users access the file.
Proof It Works
This table shows real results from Acme Corp’s Q2 follow-up sheet (87 rows, 12 sent on June 18):
| Before (June 17) | After (June 18, 9:03 AM) | Notes |
|---|---|---|
| A2: jason.li@techflow.io E2: PENDING | A2: jason.li@techflow.io E2: SENT | Email delivered. Outlook Sent Items shows timestamp. |
| A5: maria.g@veridian.net E5: PENDING | A5: maria.g@veridian.net E5: SENT | CC field blank — no error. Safe to leave empty. |
| A12: dev@startupx.co E12: PENDING | A12: dev@startupx.co E12: ERROR | Invalid domain. Macro logs row 12 in Immediate Window (Ctrl+G in VBA). |
| A23: admin@null.org E23: PENDING | A23: admin@null.org E23: PENDING | Blank cell in A23 — loop skips it. No crash. |
| A41: support@bloom.ai E41: PENDING | A41: support@bloom.ai E41: SENT | HTML formatting preserved (bold/line breaks). |
Exceptions
The myth is correct — but only in these narrow cases:
- You’re using Excel Online (web app). It cannot send emails. Period. No VBA, no add-ins, no workarounds.
- Your company blocks Outlook automation via Group Policy (common in banks and government). Error: 'Cannot create object'. Contact IT — don’t waste time debugging code.
- You’re on Mac. Outlook for Mac doesn’t expose Application object to VBA. Use AppleScript + Automator instead — but that’s outside Excel’s scope.
- You’re trying to send from a shared mailbox where your account isn’t listed as 'Send As' in Exchange Admin Center. Outlook throws 'You don't have permission' — even if you can manually send from that mailbox.
Next step: Open your overdue follow-up sheet. Select column E. Press Ctrl + H. Replace 'PENDING' with 'SEND' for today’s due dates. Then click your button.