Bulk import mailboxes (CSV + paste)

What this page covers

WarmySender supports two ways to add many mailboxes at once: a paste-style entry where you set one shared SMTP/IMAP host and add one row per mailbox (email + password + optional from-name), and a CSV upload where each row carries its own complete host configuration. This page covers both flows, the exact CSV format, header names we accept, quoting rules for fields that contain commas, the per-row error reporting model (so one bad row never blocks the rest), and the most common error messages and their fixes.

WarmySender is a 4-pillar outreach platform — Cold Emailing, Email Warmup, LinkedIn Outreach, and Multichannel sequences. This page is part of the cold emailing setup pillar — connecting your sending mailboxes is step zero before you can run a campaign or warmup.

The paste flow (shared SMTP host)

Open Mailboxes › Connect mailbox › Bulk add. The drawer asks for one shared SMTP/IMAP host configuration up top (host, port, daily limit, timezone, warmup toggle), then a per-row block for each mailbox: from-name (optional), email address, username (optional, defaults to email), and password.

Use this when you bought a batch of inboxes from one provider (Hostinger, Zoho, Google Workspace, etc.) and they share the same SMTP server (smtp.hostinger.com, smtp.gmail.com, etc.). Click "Add row" to add more mailboxes; click the X next to any row to drop it. When you click Submit, the platform validates each row, checks for duplicate emails on your workspace, and creates the mailboxes one at a time.

The result panel shows per-row outcomes: which rows succeeded with the new mailbox ID, which failed with the specific error. Rows that failed do not block other rows — if 49 of your 50 paste rows are good and one has a duplicate email, the 49 succeed and you see one row marked "Mailbox with this email already exists" so you know exactly which one to fix.

The CSV flow (per-row host configuration)

Open Mailboxes › Connect mailbox › CSV import. Drop or pick a CSV file. We parse it client-side using an RFC-4180 parser, show you a preview of the first five rows so you can sanity-check the column mapping, then send the parsed rows to the server when you click Import.

Use this when each mailbox has its own host configuration (some on Gmail, some on Hostinger, some on a custom IMAP server) — or when you have an export from another platform (PhantomBuster, Lemlist, Smartlead, Instantly, Zoho) and want to upload it directly.

CSV format reference

Required columns

Optional columns

Supported header names (aliases)

We normalize and alias common variations so your existing exports usually work without renaming columns. Header normalization: trim, lowercase, replace spaces / dashes / dots with underscores. So "SMTP Host", SMTP-Host, smtp.host, and smtp_host all map to the canonical smtp_host. Common aliases:

Quoting rules (RFC-4180)

The CSV parser follows RFC-4180. Three rules cover almost every real-world case:

  1. If a field contains a comma, wrap it in double quotes. Example: "Smith, John",jsmith@acme.com,... — the from_name column has a comma; wrapping it in quotes prevents the parser from splitting it into two columns.
  2. If a quoted field contains a double quote, escape it by doubling. Example: "He said ""hi""",he@acme.com,... — the inner doubled quote is interpreted as a single literal quote.
  3. Mixed line endings are fine. Files saved on Windows (\r\n), macOS classic (\r), or Linux (\n) all parse correctly.

The parser also strips a leading UTF-8 BOM if present (some Excel and Google Sheets exports include one). You don't need to do anything special for files with or without a BOM — both work.

Worked example CSV

email,password,smtp_host,smtp_port,from_name,daily_limit,warmup_enabled
jane@acme.com,changeme123,smtp.hostinger.com,587,"Smith, Jane",50,true
john@acme.com,otherpass456,smtp.hostinger.com,587,John Doe,50,true
ceo@acme.com,vipPass789,smtp.gmail.com,587,"O'Brien, Liam",100,false

This CSV imports three mailboxes — two on Hostinger (one with a comma in the from-name, properly quoted) and one on Gmail (with an apostrophe and a comma in the from-name, also properly quoted). All three have warmup configured, with daily limits set per mailbox.

Per-row failure isolation

Bulk imports are per-row: each mailbox is created in its own database operation and succeeds or fails independently. If your CSV has 200 rows and row 47 has a duplicate email, the other 199 rows are still created — only row 47 is marked failed with the specific error "Mailbox with this email already exists". You can fix the failing rows and re-import them without touching the successful ones.

The response includes a per-row outcomes table you can download as a CSV (the "Download error report" button on the import results panel). It contains the row index, email, and error message for every failed row so you can correct them in your source CSV and re-upload.

Common errors and fixes

Mailbox with this email already exists

The email address is already connected to your workspace. Either delete the existing mailbox first (Mailboxes › click the row › Delete) or remove this row from your import.

Required field missing: <field>

One of the required columns (email, password, smtp_host) is empty for this row. Open your CSV in a spreadsheet and check the offending row's columns. If you see the row's value but the parser shows it missing, the column header may not match — see supported header names above.

MAILBOX_LIMIT_EXCEEDED

Your subscription tier doesn't include enough mailbox slots. The Free plan includes 1 mailbox, the Lite plan includes 3, and the paid plans include Pro 50, Business 200, Enterprise 400, and Ultimate 800 mailboxes per workspace. The first N rows that fit within your remaining headroom are created normally; rows beyond that are marked failed with this error. Upgrade your plan in Billing to import more.

Bulk imports respect your account's mailbox cap. If a CSV would push you over, rows up to your remaining slots are accepted; the rest are tagged MAILBOX_LIMIT_EXCEEDED in the response. Upgrade to expand your cap.

SMTP host is required

The CSV row didn't include a value in the smtp_host column (or any of its aliases — see above). Add the column to your CSV header row and the value to each data row.

We couldn't find any rows with an email column

The parser found a header row but none of the column names matched our email aliases (email, email_address, e_mail, mail). Check your header row — it must include one of these names (case-insensitive, spaces and dashes are normalized to underscores).

CSV must have at least a header row and one data row

Your file is empty, contains only a header, or only a single line that doesn't include any commas. Open it in a spreadsheet and confirm it has at least two rows.

Unsupported file format

You uploaded an Excel file (.xlsx / .xls) or some other non-CSV format. Save your spreadsheet as CSV first (in Excel: File › Save As › CSV UTF-8; in Google Sheets: File › Download › Comma Separated Values) and re-upload.

Subscription tier limits

Per-workspace mailbox caps: Pro 50, Business 200, Enterprise 400, Ultimate 800 mailboxes per workspace, with unlimited warmup on every paid plan. Bulk import up to your plan's cap. The restricted tiers:

The platform pre-checks your tier and current mailbox count before processing the import, so you'll never end up with a partial workspace state where some mailboxes were created but the rest silently dropped.

What happens after import

Each newly-created mailbox runs through the same post-creation checks as a single mailbox:

Account safety

Bulk import respects every safety check that single-mailbox creation does. Daily send limits per mailbox are enforced regardless of the value you set in the CSV — the platform's per-account ramp guard caps every mailbox at safe levels until it has been warming up for the documented period (4-6 weeks for full ramp). Account safety always wins over import speed, throughput, or convenience.

If you import 50 mailboxes and immediately try to run a 10K-prospect campaign, the campaign engine will distribute load across the 50 mailboxes respecting each one's individual ramp ceiling — you won't burn newly-imported mailboxes by hitting them with 200 sends each on day one.

Common questions

My CSV has a column named "Display Name" with spaces — does that work?

Yes. The header normalizer trims, lowercases, and replaces spaces/dashes/dots with underscores, then runs the result through the alias map. Display Namedisplay_namefrom_name. Same path for "SMTP Host"smtp_host and similar.

One of my display names contains a comma. Will it parse correctly?

Yes, as long as you wrap the field in double quotes. Example: "Smith, John",jsmith@acme.com,.... The parser is RFC-4180 compliant; it understands that a quoted comma is part of the field, not a column separator. If your spreadsheet exports CSV with proper quoting (Excel, Google Sheets, Numbers all do this by default), comma-containing values just work.

My CSV came from Excel and the first column header is "email" with a weird character — is that a problem?

No. That's a UTF-8 byte order mark (BOM) — Excel adds it to CSV exports to mark the file as UTF-8 encoded. The parser strips it automatically. You don't need to do anything special.

If 50 rows succeed but 5 fail, can I retry just the 5?

Yes. The import results panel has a "Download error report" button that gives you a CSV containing only the failed rows with their error messages. Fix those rows in the report, drop the error column, and re-upload as a fresh import. The 50 already-created mailboxes are not touched by the retry.

Does bulk import support Gmail OAuth or only password authentication?

The bulk-import paths (paste and CSV) currently support password-based authentication only. For Gmail, that means you need an app-specific password (not your regular Gmail password) — see Connecting Gmail via app password. For OAuth-based connections (Google sign-in flow), use the single-mailbox connection path.

Can I bulk import LinkedIn accounts the same way?

No. LinkedIn accounts go through a different connection flow (Settings › LinkedIn › Connect account) because LinkedIn requires browser-session authentication, not SMTP/IMAP credentials. Bulk import is for email mailboxes only. See LinkedIn campaign documentation for the LinkedIn flow.

How long does a 200-row import take?

Roughly 2-4 seconds for the inserts themselves. The IMAP/SMTP health check on each mailbox runs in parallel after the response is sent, so the import-results panel appears immediately and the per-mailbox health badges fill in over the following 30-60 seconds. You can navigate away — the health checks finish in the background.

What happens if I import the same CSV twice?

The first import creates the mailboxes. The second import will mark every row "Mailbox with this email already exists" and create nothing new. You won't end up with duplicate mailboxes; the unique-email constraint per workspace prevents that at the database level.

Still have questions? Email hello@warmysender.com with your CSV (passwords redacted, please) and the error you saw — we'll look at the exact row and tell you what's wrong.