Skip to main content

Using a Script to Send Batch Emails in Gmail

 I touch base with people once a month, and it's about 20 people, and I need to automate sending the messages. I write the messages myself, don't worry, this entire thing isn't automated, what am I? 

If that is you, and you are reading this - Hello! You were part of a successful experiment! 

You could use this to, well, send messages en masse. I only added people who have opened a dialogue with me, not random people I find on the internet. Use discretion.

I wanted to create an automated script to mass send it, so I used both Bing CoPilot and ChatGPT and started with the same prompt to see if it could create it;




Write a Gmail script that inserts formatted text to each selected email in my inbox. 

It should be able to accept hyperlinks 

You should prompt me for the text once each time I run it. 

It should not send the email. ]



Copilot gave me a script, and then followed up with apparently creating a Google Developers Account to make apps that work

in the Google ecosystem, 

and getting the Gmail API to use it. Now, you can use scripts in Docs without doing all of that.


ChatGPT 3.5 told me how to use it, involving POP/IMAP settings in Gmail, which sounds weird. I know what those options are, basically point your email in the direction you want to receive it

but that's not my first expectation to run a script, with one step that isn't visible on my Gmail screen.



I do not see "Enable "IMAP access" and "Less secure apps" (if not already enabled)."


My apologies for the confusion. You're correct. Enabling "IMAP access" and "Less secure apps" is not necessary for this specific script. Let's focus on the script itself.

It tells me to create a Apps Script in Drive, something I didn't know you could do - but there it is, when you hit 'New' --> 'More' on the Drive home page. ChatGPT also kept giving me incorrect code that wasn't compatible with what I was doing (For instance, it would have a function to open something, but since the code was running in the App space and not triggered from Gmail, it wouldn't know what to start.)

For a time, I couldn't open the Apps Script option in the menu with a new sheet without the page not being found; I do not think it was attached to the script I had created previously. Creator error!

...And then after YouTubing, I found that not only had someone created a script prior, but one of my favorite YouTubers, Jeff Su, had already walked us through using it. When in doubt, you don't need to spend 4 hours reinventing what's already there. And 2 years later, this post is still accurate.

Basically, you fill out the email's body and subject, then run the sheet, tell it the title of the draft, and send it to people in the list.

It even confirms it with the date and time sent, which means no more running through your sent folder going "...Oh god when did I send this."

My only issue is that making a copy keeps defaulting to my personal gmail account instead of my business-personal one. I had to log out of my personal one for it to take.

This may also trigger DMARC issues if enough recipients mark it as spam.

I also tried with an attachment and it went through. So this was an exercise in researching available options, comparing AI chat systems and their different methodologies, using queries and prompts and refining them, working with Google Sheets, Gmail, and automation.


Popular posts from this blog

Connecting IoT Devices to a Registration Server (Packet Tracer, Cisco)

 If you're seeing this post, I'm helping you, and you probably have LI presence: React and share this post to help me in return.   In Packet Tracer, a demo software made by Cisco Systems. It certainly has changed a lot since 2016. It's almost an Olympic feat to even get started with it now, but it does look snazzy. This is for the new CCNA, that integrates, among other things, IoT and Automation, which I've worked on here before. Instructions here . I don't know if this is an aspect of "Let's make sure people are paying attention and not simply following blindly", or an oversight - The instructions indicate a Meraki Server, when a regular one is the working option here. I have to enable the IoT service on this server. Also, we assign the server an IPv4 address from a DHCP pool instead of giving it a static one. For something that handles our IoT business, perhaps that's safer; Getting a new IPv4 address every week or so is a minimal step against an

Create a Simple Network (Packet Tracer) + A Walkthrough

Again; I've done this, but now there's so many new things, I'm doing it again. The truly new portions were...everything on the right side of this diagram; The cloud needed a coax connector and a copper Ethernet connector. It's all easy to install, turn off the cloud (Weird), install the modules. Getting the Cable section of Connections was an unusual struggle - The other drop down menu had nothing within. It required going into the Ethernet options and setting the Provider Network to 'cable', which is the next step AFTER the drop-downs. The rest was typical DHCP and DNS setups, mainly on the Cisco server down there. The post is rather short - How about adding a video to it? Find out what A Record means - This site says 'Maps a name to an IP address', which is DNS. So it's another name for DNS? You can change them (presumably in a local context) to associate an IP address to another name.

Securing Terraform and You Part 1 -- rego, Tfsec, and Terrascan

9/20: The open source version of Terraform is now  OpenTofu     Sometimes, I write articles even when things don't work. It's about showing a learning process.  Using IaC means consistency, and one thing you don't want to do is have 5 open S3 buckets on AWS that anyone on the internet can reach.  That's where tools such as Terrascan and Tfsec come in, where we can make our own policies and rules to be checked against our code before we init.  As this was contract work, I can't show you the exact code used, but I can tell you that this blog post by Cesar Rodriguez of Cloud Security Musings was quite helpful, as well as this one by Chris Ayers . The issue is using Rego; I found a cool VS Code Extension; Terrascan Rego Editor , as well as several courses on Styra Academy; Policy Authoring and Policy Essentials . The big issue was figuring out how to tell Terrascan to follow a certain policy; I made it, put it in a directory, and ran the program while in that directory