I have a very simple website hosted on a GCP storage segment and now I need to make it slightly less simple by adding a contact form. Then I realiz...
For further actions, you may consider blocking this person and/or reporting abuse
Very helpful guide, thanks. However, I believe there is a typo in your replace function.
I think it should be replacing the single backslash with the escaped doule-backslash:
process.env.PRIVATE_KEY.replace(/\n/g, "\\n")
Hi Dominic,
Thank you for your suggestion. I had to double check because, I confess, it's a bit counterintuitive.
I don't remember exactly, but I think that at some point GC checks the string and, if it finds a "\n", it will add an additional backslash trying to do us a favor, hence we need to check it and remove the additional backslash to keep maintain the integrity of the private key.
i am new to google function can you please explain , where and how to run "npm i --S nodemailer" command on google cloud platform.
Secondly i am getting this error "Deployment failure:
Function failed on loading user code. Error message: Node.js module defined by file index.js is expected to export function" on deploying
Hey there, thanks for asking!
"npm i --S nodemailer" has to be run on your local terminal, it will download the Nodemailer dependencies and update your package.json with the dependency. Your file should look like my package.json on the dependencies section.
Regarding the error, bear in mind that GCP expect you to export a method that will be run from the server, in this example I exported the method "sendMail()". Maybe is not very clear on the article, but you can check the final result of the file here. You will find the final method at the very end of the file.
Thank So much for the humble reply .This issue is now resolved. Now i am facing an error {"error":{"code":422,"message":"Missing arguments"}} . G suite admin console require domain verification which i can not do , Can we use another way instead of using GSuite ?
Based on what you say, the error is possibly because you are not providing the api key... I'm afraid you will need to check if there is another way to authenticate GSuite and modify the code accordingly, but there is no option without verifying your domain, as far as I'm aware.
Yeah seems like that.Anyways Thanks alot.
This is a fantastic walkthrough for setting up email functionality with Google Cloud Functions! I’ve worked on a similar use case recently where I implemented email notifications using Nodemailer and OAuth2 on GCP.
One optimization I'd suggest is leveraging Secrets Manager for securely storing sensitive values like PRIVATE_KEY and CLIENT_ID instead of environment variables, ensuring better security and easier updates.
Also, for syncing the GitHub repo, you could consider using Cloud Build triggers to automate deployments every time the repo is updated—this ensures seamless CI/CD integration.
Curious—have you explored using other serverless options like Firebase Functions for simpler hosting alongside the frontend? It might help streamline the stack for smaller projects.
Great work and thanks for sharing!
Great
"Great guide! Try Secrets Manager for better security!
Thank you @lilabennett I will definitely try and test it
Thank You @vansh_shukla_60b7d232c9a5
Great guide. Used this to add a contact form to my site. One step that I had to do that wasn't included here was to check the "Enable G Suite Domain-wide Delegation" checkbox when creating the service account.
Thank you.
That's interesting, I just checked I didn't have to enable it... Maybe your G Suite is configured in a specific way that requires it to be enabled? In my case, G Suite is configured as it comes out-of-the-box.
So if I have a custom domain (@domain) on Google Workspace, and I have a bunch of Firebase projects each of which I would like to be sending emails "from @domain".
In which account do I use for getting the Service Account, in which do I enable the GMail API, how do I (securely!) get the configuration into each of these different Firebase projects, etc?
I haven't worked with Firebase, and I'm not entirely sure what you mean by "get the configuration". If you mean the function's URL, I use environment variables in my projects.
Regarding the service account... I would use any account from @domain
I LOVE THIS SO MUCH. You saved me so much time. It is such a complicated procedure for something so simple. I am so happy I found this guide. You are a lifesaver!!! Thank you thank you thank you.
Very glad I was able to help. Thank you for sharing your feedback :)
Thanks for this guide! I was getting error code 500 and I realized it was because I wasn't pasting the entire private key (including the very beginning portion of '-----BEGIN PRIVATE KEY-----\n...
Thanks for the good information
Anyone having problems with their mail being sent to spam folder? Thank you for any help!
I have enabled domain wide delegation for service account...