Sending emails to multiple recipients can be a time-consuming task, especially when you’re addressing a large group. Whether you’re organizing a community event, promoting a business offering, or managing a classroom, automating the email sending process can save hours of work. Gmail, combined with a CSV (Comma-Separated Values) file and tools like Google Sheets and Google Apps Script, offers a powerful yet user-friendly way to send personalized bulk emails efficiently.
This article explores a step-by-step guide on how to send emails to multiple people from a CSV file using Gmail.
Understanding the Process
Before diving into the tutorial, it’s important to understand the general workflow:
- Create or obtain a CSV file with contact details (Name, Email, and possibly other custom variables).
- Import or open the CSV file in Google Sheets.
- Craft the email message using dynamic fields.
- Use Google Apps Script to automate the email-sending process.
Step 1: Prepare Your CSV File
Begin by creating a CSV file that includes all the recipients to whom you want to send an email. At a minimum, your file should have columns for:
- Name – To personalize the email content.
- Email Address – The target email address.
- Other Fields (optional) – Such as company, role, or custom messages.
Example structure:
Name,Email,Company Jane Doe,jane.doe@example.com,Example Corp John Smith,john.smith@example.com,Tech Innovators
Save the file with a .csv extension. Open Google Drive and upload the file, then open it with Google Sheets.

Step 2: Compose Email in Google Sheets
Once your data is available in Google Sheets, you can add a new column titled “Email Sent” to monitor the progress of your outgoing emails. This comes in handy to prevent duplicate sends.
Next, draft your email message. You can write the message directly into the script later, but it’s better to prepare it in advance. You’ll use placeholders to insert dynamic data from your sheet, such as:
Subject: Welcome to {{Company}}, {{Name}}! Body: Hi {{Name}}, Thanks for connecting with us at {{Company}}. We’re excited to have you onboard. Best, The Team
The placeholders like {{Name}} and {{Company}} will be replaced by actual data from your sheet during the email merge process.
Step 3: Open the Script Editor
In your Google Sheet, go to the menu bar, click on Extensions → Apps Script. A new tab will open with the Apps Script editor.
Delete any existing code and paste the following script:
function sendEmails() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var startRow = 2; // Skip header row var numRows = sheet.getLastRow() - 1; var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn()); var data = dataRange.getValues(); for (var i = 0; i < data.length; ++i) { var row = data[i]; var name = row[0]; var email = row[1]; var company = row[2]; var sent = row[3]; if (sent != "EMAIL SENT") { var subject = "Welcome to " + company + ", " + name + "!"; var message = "Hi " + name + ",\n\nThanks for connecting with us at " + company + ". We’re excited to have you onboard.\n\nBest,\nThe Team"; MailApp.sendEmail(email, subject, message); sheet.getRange(startRow + i, 4).setValue("EMAIL SENT"); SpreadsheetApp.flush(); } } }
This script loops through each row in your sheet, grabs the appropriate data, constructs a personalized email, sends it via Gmail, and logs the progress by writing “EMAIL SENT” into the fourth column.
Step 4: Run the Script
After pasting the script:
- Click the disk icon to save the project and name it.
- Click the Run button (▶️) to execute the script.
The first time you run the script, Gmail will ask for authorization. Click Review Permissions, choose your account, and allow the necessary permissions.
If done correctly, the script will iterate through each contact and send a custom email. Your “Email Sent” column in the sheet will update accordingly.

Step 5: Verify Your Emails
To ensure that the emails were delivered, check your Gmail Sent folder. You should see the individual emails addressed to each contact. If an email fails (e.g., due to a typo in the email address), check the execution log in the Apps Script editor by clicking Executions under the left-side menu.
Tips for Best Results
- Test with a few emails first – Before sending to everyone on the list, test your script with 2-3 emails to confirm the format and delivery.
- Stay within Gmail limits – Gmail has daily sending limits: 500/day for free accounts and 2,000/day for Workspace users.
- Use BCC if needed – If you’d prefer to send the same message to all without personalization, consider using BCC with MailApp.
- Use HTML formatting – You can send HTML emails by using
MailApp.sendEmail({to, subject, htmlBody})
instead of plain text.
Why Use Google Apps Script Instead of Mail Merge Tools?
While tools like GMass or Mail Merge add-ons can simplify the process, they usually come with price tags or limitations. Google Apps Script offers complete control and doesn’t require any third-party tools or subscriptions. It’s perfect for technical users who want flexibility and scalability.
Common Use Cases
- Sending personalized event invitations
- Notifying employees or participants about instructions
- Delivering newsletters to a curated list
- Welcoming new customers or subscribers
Frequently Asked Questions (FAQ)
- Can I send attachments with the email?
- Yes, you can. Modify the
MailApp.sendEmail
function to include the attachments parameter using DriveApp to locate and attach files. - How do I send HTML emails instead of plain text?
- You can use
htmlBody
in the parameters ofMailApp.sendEmail
. Make sure to write your email content using HTML tags. - What’s the sending limit on Gmail?
- For regular Gmail users, the limit is 500 emails/day. For Google Workspace (formerly G Suite) accounts, the limit is up to 2,000 emails/day.
- What if I want to schedule the emails?
- You can set up a time-driven trigger in the script editor under Triggers to schedule the script execution.
- How do I troubleshoot errors in the script?
- Go to Apps Script → Executions or Logs to view real-time debugging information. Ensure that your headers and data columns are aligned.
With a simple CSV and a few lines of code, Gmail becomes a powerful outbound email tool ready to handle projects both big and small. Whether you’re a business owner, educator, or non-profit manager, mastering this technique can save vast amounts of time and deliver better communication.