https://github.com/georgeosddev/acsemailoutputbinding
Azure Communication Service Email output binding for Azure Function
https://github.com/georgeosddev/acsemailoutputbinding
Last synced: 2 months ago
JSON representation
Azure Communication Service Email output binding for Azure Function
- Host: GitHub
- URL: https://github.com/georgeosddev/acsemailoutputbinding
- Owner: georgeOsdDev
- Created: 2023-05-09T10:26:08.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2023-12-15T08:29:55.000Z (over 1 year ago)
- Last Synced: 2025-01-20T19:33:50.087Z (4 months ago)
- Language: C#
- Size: 14.6 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Azure Communication Service Email output binding for Azure Function
This [Azure Functions custom output binding](https://learn.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings?tabs=csharp) send Email using [Azure Communication Service](https://learn.microsoft.com/en-us/azure/communication-services/concepts/email/email-overview)
This project is experimental and not released as nuget package.
## Usage
### App Settings
Setup connectionSting and senderAddress from your Communication Service resource.
```
"AzureWebJobsACSEmailConnecionString": "",
"AzureWebJobsACSEmailSenderAddress": "",
```See also below offical document
[Quickstart - Create and manage Email Communication Service resource in Azure Communication Service - An Azure Communication Services quickstart | Microsoft Learn](https://learn.microsoft.com/en-us/azure/communication-services/quickstarts/email/create-email-communication-resource)
## Sample Code
### .NET language worker
Use `ACSEmail` attribute.
```
[FunctionName("Function1")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
[ACSEmail] out ACSEmailContext mail,
ILogger log)
{string address1 = Environment.GetEnvironmentVariable("testAddress1");
string address2 = Environment.GetEnvironmentVariable("testAddress2");
string address3 = Environment.GetEnvironmentVariable("testAddress3");
string address4 = Environment.GetEnvironmentVariable("testAddress4");mail = new ACSEmailContext();
mail.RecipientToAddresses = new List() { address1, address2 };
mail.RecipientCCAddresses = new List() { address3 };
mail.RecipientBCCAddresses = new List() { address4 };
mail.Subject = "Test acs email from function";
mail.PlainTextContent = "Hello world";
mail.HtmlContent = "This is the html body";mail.AttachmentFilePath = $"{Directory.GetCurrentDirectory()}\\host.json";
mail.AttachmentName = "host.json";
mail.AttachmentContentType = "application/json";
return (ActionResult) new OkObjectResult("OK");
}
```
- [Basic example](https://github.com/georgeOsdDev/ACSEmailOutputBinding/blob/main/FunctionApp1/Function1.cs)
- [Async example](https://github.com/georgeOsdDev/ACSEmailOutputBinding/blob/main/FunctionApp1/Function2.cs)
- [Blob trigger example](https://github.com/georgeOsdDev/ACSEmailOutputBinding/blob/main/FunctionApp1/Function3.cs)### Other language worker
Use `ACSEmail` type.
[JavaScript example](https://github.com/georgeOsdDev/ACSEmailOutputBinding/blob/main/jsFunc/HttpTrigger/index.js)
- function.json
```function.json
{
"bindings": [
{
"type": "ACSEmail",
"direction": "out",
"name": "mail",
"ConnectionString":"AzureWebJobsACSEmailConnecionString"
}
...
}
```- application code
```index.js
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');const name = (req.query.name || (req.body && req.body.name));
const responseMessage = name
? "Hello, " + name + ". This HTTP triggered function executed successfully."
: "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";context.bindings.mail = {
recipientToAddresses : [process.env.testAddress1],
subject : "Test from function",
plainTextContent : "Hi from JSFunc",
};
context.res = {
// status: 200, /* Defaults to 200 */
body: responseMessage
};
}
```## Known issue
- extensions.json for non .NET language worker
https://github.com/Azure/azure-functions-core-tools/issues/3361
- 0-byte attchment file
https://github.com/Azure/azure-sdk-for-net/issues/36086## Reference for custom binding
https://github.com/Azure/azure-webjobs-sdk/wiki/Creating-custom-input-and-output-bindings