diff --git a/firestore-send-email/CHANGELOG.md b/firestore-send-email/CHANGELOG.md
index 6d30cd4a0..d70db6e19 100644
--- a/firestore-send-email/CHANGELOG.md
+++ b/firestore-send-email/CHANGELOG.md
@@ -1,3 +1,11 @@
+## Version 0.2.4
+
+fix: add missing 'headers' field to the mailOptions interface
+
+docs: update documentation to include 'headers' field
+
+fix: TTL expire type "week" fixed (#2455)
+
## Version 0.2.3
fix: remove strict validation of email "from" field
diff --git a/firestore-send-email/PREINSTALL.md b/firestore-send-email/PREINSTALL.md
index db67bafb1..30ab98009 100644
--- a/firestore-send-email/PREINSTALL.md
+++ b/firestore-send-email/PREINSTALL.md
@@ -18,6 +18,29 @@ You can also optionally configure this extension to render emails using [Handleb
When you configure this extension, you'll need to supply your **SMTP credentials for mail delivery**. Note that this extension is for use with bulk email service providers, like SendGrid, Mailgun, etc.
+#### Using custom headers
+
+You can add custom headers to your emails by including a `headers` field in the document you add to the Firestore collection. The `headers` field should be an object where each key is the header name and the value is the header value.
+
+## Example JSON with Custom Headers:
+```json
+{
+ "to": ["example@example.com"],
+ "message": {
+ "subject": "Test Email with Custom Headers",
+ "text": "This is a test email to see if custom headers work.",
+ "html": "This is a test email to see if custom headers work."
+ },
+ "headers": {
+ "X-Custom-Header": "CustomValue",
+ "X-Another-Header": "AnotherValue",
+ }
+}
+```
+
+Add this document to the Firestore mail collection to send an email with custom headers.
+You can even include headers like 'List-Unsubscribe' to allow recipients to unsubscribe from your emails.
+
#### Firestore-Send-Email: SendGrid Categories
When using SendGrid (`SMTP_CONNECTION_URI` includes `sendgrid.net`), you can assign categories to your emails.
diff --git a/firestore-send-email/README.md b/firestore-send-email/README.md
index b12c67c37..8db815d18 100644
--- a/firestore-send-email/README.md
+++ b/firestore-send-email/README.md
@@ -26,6 +26,29 @@ You can also optionally configure this extension to render emails using [Handleb
When you configure this extension, you'll need to supply your **SMTP credentials for mail delivery**. Note that this extension is for use with bulk email service providers, like SendGrid, Mailgun, etc.
+#### Using custom headers
+
+You can add custom headers to your emails by including a `headers` field in the document you add to the Firestore collection. The `headers` field should be an object where each key is the header name and the value is the header value.
+
+## Example JSON with Custom Headers:
+```json
+{
+ "to": ["example@example.com"],
+ "message": {
+ "subject": "Test Email with Custom Headers",
+ "text": "This is a test email to see if custom headers work.",
+ "html": "This is a test email to see if custom headers work."
+ },
+ "headers": {
+ "X-Custom-Header": "CustomValue",
+ "X-Another-Header": "AnotherValue",
+ }
+}
+```
+
+Add this document to the Firestore mail collection to send an email with custom headers.
+You can even include headers like 'List-Unsubscribe' to allow recipients to unsubscribe from your emails.
+
#### Firestore-Send-Email: SendGrid Categories
When using SendGrid (`SMTP_CONNECTION_URI` includes `sendgrid.net`), you can assign categories to your emails.
diff --git a/firestore-send-email/extension.yaml b/firestore-send-email/extension.yaml
index d0b34a42a..a2bbe97ae 100644
--- a/firestore-send-email/extension.yaml
+++ b/firestore-send-email/extension.yaml
@@ -13,7 +13,7 @@
# limitations under the License.
name: firestore-send-email
-version: 0.2.3
+version: 0.2.4
specVersion: v1beta
displayName: Trigger Email from Firestore
diff --git a/firestore-send-email/functions/src/index.ts b/firestore-send-email/functions/src/index.ts
index 2af1518a6..1611a051e 100644
--- a/firestore-send-email/functions/src/index.ts
+++ b/firestore-send-email/functions/src/index.ts
@@ -114,7 +114,7 @@ function getExpireAt(startTime: Timestamp) {
now.setDate(now.getDate() + value);
break;
case "week":
- now.setDate(now.getDate() + value);
+ now.setDate(now.getDate() + value * 7);
break;
case "month":
now.setMonth(now.getMonth() + value);
@@ -122,6 +122,9 @@ function getExpireAt(startTime: Timestamp) {
case "year":
now.setFullYear(now.getFullYear() + value);
break;
+ default:
+ // Optionally handle unknown types
+ throw new Error(`Unknown TTLExpireType: ${config.TTLExpireType}`);
}
return Timestamp.fromDate(now);
}
@@ -170,6 +173,7 @@ async function deliver(ref: DocumentReference): Promise {
subject: payload.message?.subject,
text: payload.message?.text,
html: payload.message?.html,
+ headers: payload?.headers,
attachments: payload.message?.attachments,
categories: payload.categories,
templateId: payload.sendGrid?.templateId,