Azure Functions: Send email using SendGrid

Prior to Azure Functions announcing their General Availability (GA) I had previously used SendGrid as an output binding in order to send email messages.

Since GA, however, the ability to use SendGrid remains undocumented (I assume to give the Functions team time to test and document the binding properly) and the old approach I was using no longer seems valid.

As I needed to use this feature I spent some time digging into getting this working with the GA release of Azure Functions (version ~1). Thankfully as Functions is an abstraction over WebJobs I had plenty of information on how to do it right now thanks to the WebJobs documentation and extensibility :).

Here’s how you can get this working too:

1. Register your SendGrid API key in Application Settings: you must utilise the documented approach of setting your API key in an App Setting called “AzureWebJobsSendGridApiKey”. Without this your Function won’t be able to send mail successfully.

2. Import the SendGrid nuget package into your Function by creating a project.json file that contains this following:

"frameworks": {
"net46": {
"dependencies": {
"Sendgrid": "8.0.5"

view raw


hosted with ❤ by GitHub

3. Create an output binding on your function that will allow you send the message without needing to create client code in your Function:

"bindings": [
"type": "sendGrid",
"name": "message",
"direction": "out",
"from": "[email protected]",
"subject": "Functions r0ck5!"
"disabled": false

view raw


hosted with ❤ by GitHub

4. Add a reference and using statement in your run.csx to ensure you have the right packages included. You can see this in the run.csx below that has all you need to create and send a simple email to a single recipient.

#r "Microsoft.Azure.WebJobs.Extensions.SendGrid"
using SendGrid.Helpers.Mail;
public static void run(out Mail message)
// see the associted function.json & projcet.json files for how to get this working.
// function.json:
// project.json:
// NOTE: no need to set the 'sender/from' property as the output binding does that for us.
var personalization = new Personalization();
personalization.AddTo(new Email("[email protected]"));
var messageContent = new Content("text/html", "My fantastic mail body contents here.");
message = new Mail();

view raw


hosted with ❤ by GitHub

If you want to do a lot more customisation of the email that is sent you can simply refer to the SendGrid C# Library on Github which covers features such as sending using templates.

Once the Functions team publishes an updated approach to using SendGrid I’ll make sure to link to it from here. In the meantime… happy mailing!

6 thoughts on “Azure Functions: Send email using SendGrid

  1. So I want to put the mail in private method in my function, but I keep getting the error.

    Exception while executing function: Functions.XXXXXXXXXXXXX. Microsoft.Azure.WebJobs.Host: Error while handling parameter message after function returned:. Microsoft.Azure.WebJobs.Extensions.SendGrid: A ‘To’ address must be specified for the message

    I think the problem is how I’m passing my ‘out Mail message’ to the method.
    I think it might be easier not to use the binding.

    1. Hi there… Without seeing your code it’s hard to say why you are getting an error response, however, you do need to be mindful of the output binding to SendGrid which requires you populate the necessary Mail object before the Function exits.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s