Note: This tutorial and its steps are based on a Wix Editor site. You can adapt the steps for a Wix Studio site by using the equivalent Wix Studio features.
This article describes how to integrate your Wix site with the SendGrid service and send emails directly from your site. You'll need to add the SendGrid npm package to your site to incorporate the SendGrid functionality.
This tutorial is based on the SendGrid npm Integration example. You can test out the live example site or open a copy of the site's editor and play around with the code.
Notes
To set up your site to send emails with the SendGrid service, you'll need to perform the following steps:
Note This tutorial describes how to use a custom form to get email data such as email addresses and body text from site visitors. You might have a different use case, such as constructing the emails yourself as a site admin. You might use email data stored in a database collection, enter the email data directly in your code, or use the custom form but on a Dashboard page. In any case, you'll need to adjust your code to get the email data from its source and pass it to the sendEmail() function.
To use the SendGrid service on your Wix site, you'll need to create a SendGrid account. The email address you verify in the account will be the sender address for the emails you send from your Wix site.
Once you've created an account, do the following:
To set up your Wix site, do the following:
For security purposes, it's best to store sensitive content such as API keys in the Secrets Manager.
In the Code sidebar, select the Developer Tools tab.
Under the Security section, select Secrets Manager.
In the top right, click Store Secret.
Store both your SendGrid API key and the verified email address associated with your SendGrid account in a single secret. The secret should look like this:
Make sure to name the secret: sendGridSecret.
Replace <my-sendgrid-api-key>
with the value of your API key surrounded by quotation marks.
Replace <my-verified-sender-email>
with your email address surrounded by quotes.
Your secret value will look something like this:
Click Save.
Later you'll use the Secrets API to extract the secret and use it securely in your code (see Step 3b).
Use the Package Manager to add the SendGrid npm package to your site:
In the Code sidebar, click the Code Files tab.
In the Packages section, hover over npm, click the plus icon and select Install package from npm.
The Package Manager opens.
In the search bar, enter 'sendgrid'.
Next to the @sendgrid/mail package, click Install.
You'll see the package under npm in the Packages section of your Code Files tab in the Code sidebar.
Now you can import the package and use its functionality in your code.
To create a custom form, add the following elements to your Home page:
Input elements for the recipient's email and subject line
Text box for the email body text
Submit button for sending the email
Text element for displaying success and error messages
Since backend code is more secure, we wrote code to implement the following functionality in a backend web module:
Note To see all the code for this example in a single block, scroll down to the end of the tutorial.
Web modules are exclusive to Velo. In a web module you can write functions that run in the backend and are easily called in your frontend code.
To add a web module:
In the Code sidebar, select the Code Files tab.
In the Backend section, click Add web module.
Name the file sendEmail.web.js.
The file will open in the code editor. Place the code below in the file.
Start by importing the modules you'll need:
Line 1: Import the Permissions
enum and webMethod
function from wix-web-module
.
Line 2: Import the sgMail
module containing the functions you need from the npm package that we added to our site.
Line 3: Import the wix-secrets-backend
module for extracting secrets from the Secrets Manager.
In our sendEmail
function, we start by getting the SendGrid API key and sender email address that we saved in the Secrets Manager, and setting the API key to enable usage of the SendGrid service.
Line 1: Declare and export the asynchronous sendEmail
function for sending the email.
Line 3: Get the SendGrid secret from the Secrets Manager using the getSecret
function and save it in a variable named sendGridSecret
. The JSON.parse
function converts the JSON string into an object.
Line 4: Save the API key extracted from the secret as a variable called key
.
Line 5: Save the sender email extracted from the secret as a variable called senderEmail
.
Line 7: Set the API key using the setApiKey()
function from the SendGrid npm module.
While still inside our sendEmail()
function, we call the npm package send()
function to send the email.
Lines 1-6: Set the data for the email to be sent, such as the recipent's email address and the text of the email body. The sender email was extracted from the Secrets Manager and the rest of the information is entered by site visitors on the frontend via input elements.
Lines 8, 10: Use try
and catch
to catch any errors.
Line 9: Call the send()
npm package function to send the email with the email data passed to the function.
Note The frontend code for this tutorial is based on the setup for this example site, a custom form exposed to site visitors. If you decide to set up your site differently, you'll need to adapt the frontend code accordingly.
In our page code on the frontend of our site, we do the following:
sendEmail()
function imported from the backend with the form field values to send an email.First we import the function we need from the backend and set a global constant.
Line 1: Import the sendEmail()
function that we created in the backend so that we can use it in our page code.
Line 2: Set a SUCCESS_CODE
constant to 202
. We'll use it to check whether the sendEmail()
function request was successful.
We added the checkFormFields()
function to make sure all form field input values are valid before sending an email.
Line 1: Declare the function that we'll call in the onReady()
function.
Line 2: If all input values are valid, return true
. If one is not valid, return false
.
We added the clearFields()
function to reset the form fields following a successful email transmission.
Line 1: Declare the function that we'll call in the onReady()
function.
Lines 2-4: Clear the input values.
Lines 6-8: Reset the inputs' visual validity indications. Some elements have a visual cue, such as a red outline, that indicates when the current value isn't valid. This function clears any indications.
We added the showMessage()
function to temporarily show a success or error message following an attempt to send an email.
Line 1: Declare the function that we'll call in the onReady()
function.
Line 2: Set the message text with the text passed to the function.
Line 3: Show the success or error message.
Line 4: Hide the message after 5 seconds.
When a site visitor clicks the Send button, we do the following:
Line 1: We added our code to the onReady()
function, which runs when the page loads.
Line 2: When a site visitor clicks the Send button, run the following code.
Lines 3-4: Check if all input field values are valid. If not, see Lines 15-16. If they are, run the following code.
Lines 5-8: Run the sendEmail()
function that we imported from the backend with the field input values as parameters, and assign the result to a variable.
Line 9: Check if the email transmission request was successful (returned a 202
status code). If not, see Lines 12-13. If yes, run the following code:
Line 10: Clear the input values and reset validity indications.
Line 11: Display a message to let site visitors know that the email was sent.
Lines 12-13: If the email transmission request was not successful, display an error message.
Lines 15-16: If not all input fields are valid, display an error message.
Check out the SendGrid npm Integration example, which demonstrates this tutorial. You can test out the live example site or open a copy of the site's editor and play around with the code. Note that if you want to work with a copy of the site, you'll need to create your own account with SendGrid and save the API key in the Secrets Manager.
You can also watch a video, which describes the steps in this tutorial.
Here is the complete code for this example: