mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 10:02:05 +00:00
✨ Add mail-send operation to SendGrid node (#1526)
* ⚡ Add mail description * ⚡ Add mail:send functionality * 🔨 Refactor sandbox into additional options * 🔨 Refactor MIME type as options * ⚡ Implement send_at functionality * ⚡ Add headers to additional options * ⚡ Implement attachments * 🔥 Remove logging * ⚡ Improvements * ⚡ Fix default operation * 🔨 Fix HTML option * 🔨 Fix subject in dynamic template email Co-authored-by: ricardo <ricardoespinoza105@gmail.com> Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com>
This commit is contained in:
381
packages/nodes-base/nodes/SendGrid/MailDescription.ts
Normal file
381
packages/nodes-base/nodes/SendGrid/MailDescription.ts
Normal file
@@ -0,0 +1,381 @@
|
||||
import {
|
||||
INodeProperties,
|
||||
} from 'n8n-workflow';
|
||||
|
||||
export const mailOperations = [
|
||||
{
|
||||
displayName: 'Operation',
|
||||
name: 'operation',
|
||||
type: 'options',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: [
|
||||
'mail',
|
||||
],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
name: 'Send',
|
||||
value: 'send',
|
||||
description: 'Send an email.',
|
||||
},
|
||||
],
|
||||
default: 'send',
|
||||
description: 'Operation to perform.',
|
||||
},
|
||||
] as INodeProperties[];
|
||||
|
||||
export const mailFields = [
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* mail:send */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
{
|
||||
displayName: 'Sender Email',
|
||||
name: 'fromEmail',
|
||||
type: 'string',
|
||||
default: '',
|
||||
placeholder: 'sender@domain.com',
|
||||
description: 'Email address of the sender of the email.',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: [
|
||||
'mail',
|
||||
],
|
||||
operation: [
|
||||
'send',
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
displayName: 'Sender Name',
|
||||
name: 'fromName',
|
||||
type: 'string',
|
||||
default: '',
|
||||
placeholder: 'John Smith',
|
||||
description: 'Name of the sender of the email.',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: [
|
||||
'mail',
|
||||
],
|
||||
operation: [
|
||||
'send',
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
displayName: 'Recipient Email',
|
||||
name: 'toEmail',
|
||||
type: 'string',
|
||||
default: '',
|
||||
placeholder: 'recipient@domain.com',
|
||||
description: 'Comma-separated list of recipient email addresses.',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: [
|
||||
'mail',
|
||||
],
|
||||
operation: [
|
||||
'send',
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
displayName: 'Subject',
|
||||
name: 'subject',
|
||||
type: 'string',
|
||||
default: '',
|
||||
description: 'Subject of the email to send.',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: [
|
||||
'mail',
|
||||
],
|
||||
operation: [
|
||||
'send',
|
||||
],
|
||||
dynamicTemplate: [
|
||||
false,
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
displayName: 'Dynamic Template',
|
||||
name: 'dynamicTemplate',
|
||||
type: 'boolean',
|
||||
required: true,
|
||||
default: false,
|
||||
description: 'Whether this email will contain a dynamic template.',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: [
|
||||
'mail',
|
||||
],
|
||||
operation: [
|
||||
'send',
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
displayName: 'MIME type',
|
||||
name: 'contentType',
|
||||
type: 'options',
|
||||
default: 'text/plain',
|
||||
description: 'MIME type of the email to send.',
|
||||
options: [
|
||||
{
|
||||
name: 'Plain Text',
|
||||
value: 'text/plain',
|
||||
},
|
||||
{
|
||||
name: 'HTML',
|
||||
value: 'text/html',
|
||||
},
|
||||
],
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: [
|
||||
'mail',
|
||||
],
|
||||
operation: [
|
||||
'send',
|
||||
],
|
||||
dynamicTemplate: [
|
||||
false,
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
displayName: 'Message Body',
|
||||
name: 'contentValue',
|
||||
type: 'string',
|
||||
default: '',
|
||||
required: true,
|
||||
description: 'Message body of the email to send.',
|
||||
typeOptions: {
|
||||
alwaysOpenEditWindow: true,
|
||||
},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: [
|
||||
'mail',
|
||||
],
|
||||
operation: [
|
||||
'send',
|
||||
],
|
||||
dynamicTemplate: [
|
||||
false,
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
displayName: 'Template ID',
|
||||
name: 'templateId',
|
||||
type: 'options',
|
||||
default: [],
|
||||
typeOptions: {
|
||||
loadOptionsMethod: 'getTemplateIds',
|
||||
},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: [
|
||||
'mail',
|
||||
],
|
||||
operation: [
|
||||
'send',
|
||||
],
|
||||
dynamicTemplate: [
|
||||
true,
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
displayName: 'Dynamic Template Fields',
|
||||
name: 'dynamicTemplateFields',
|
||||
placeholder: 'Add Dynamic Template Fields',
|
||||
type: 'fixedCollection',
|
||||
typeOptions: {
|
||||
multipleValues: true,
|
||||
},
|
||||
default: {},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: [
|
||||
'mail',
|
||||
],
|
||||
operation: [
|
||||
'send',
|
||||
],
|
||||
dynamicTemplate: [
|
||||
true,
|
||||
],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
displayName: 'Fields',
|
||||
name: 'fields',
|
||||
values: [
|
||||
{
|
||||
displayName: 'Key',
|
||||
name: 'key',
|
||||
type: 'string',
|
||||
default: '',
|
||||
description: 'Key of the dynamic template field.',
|
||||
},
|
||||
{
|
||||
displayName: 'Value',
|
||||
name: 'value',
|
||||
type: 'string',
|
||||
default: '',
|
||||
description: 'Value for the field',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
displayName: 'Additional Fields',
|
||||
name: 'additionalFields',
|
||||
type: 'collection',
|
||||
placeholder: 'Add Field',
|
||||
default: {},
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: [
|
||||
'mail',
|
||||
],
|
||||
operation: [
|
||||
'send',
|
||||
],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
displayName: 'Attachments',
|
||||
name: 'attachments',
|
||||
type: 'string',
|
||||
default: '',
|
||||
description: 'Comma-separated list of binary properties',
|
||||
},
|
||||
{
|
||||
displayName: 'BCC Email',
|
||||
name: 'bccEmail',
|
||||
type: 'string',
|
||||
default: '',
|
||||
description: 'Comma-separated list of emails of the recipients<br>of a blind carbon copy of the email.',
|
||||
},
|
||||
{
|
||||
displayName: 'Categories',
|
||||
name: 'categories',
|
||||
type: 'string',
|
||||
default: '',
|
||||
description: 'Comma-separated list of categories. Each category name may not exceed 255 characters.',
|
||||
},
|
||||
{
|
||||
displayName: 'CC Email',
|
||||
name: 'ccEmail',
|
||||
type: 'string',
|
||||
default: '',
|
||||
description: 'Comma-separated list of emails of the recipients<br>of a carbon copy of the email.',
|
||||
},
|
||||
{
|
||||
displayName: 'Enable Sandbox',
|
||||
name: 'enableSandbox',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: 'Whether to use to the sandbox for testing out email-sending functionality.',
|
||||
},
|
||||
{
|
||||
displayName: 'IP Pool Name',
|
||||
name: 'ipPoolName',
|
||||
type: 'string',
|
||||
default: '',
|
||||
description: 'The IP Pool that you would like to send this email from.',
|
||||
},
|
||||
{
|
||||
displayName: 'Headers',
|
||||
name: 'headers',
|
||||
placeholder: 'Add Header',
|
||||
type: 'fixedCollection',
|
||||
typeOptions: {
|
||||
multipleValues: true,
|
||||
},
|
||||
default: {},
|
||||
options: [
|
||||
{
|
||||
displayName: 'Details',
|
||||
name: 'details',
|
||||
values: [
|
||||
{
|
||||
displayName: 'Key',
|
||||
name: 'key',
|
||||
type: 'string',
|
||||
default: '',
|
||||
description: 'Key to set in the header object.',
|
||||
},
|
||||
{
|
||||
displayName: 'Value',
|
||||
name: 'value',
|
||||
type: 'string',
|
||||
default: '',
|
||||
description: 'Value to set in the header object.',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
displayName: 'Send At',
|
||||
name: 'sendAt',
|
||||
type: 'dateTime',
|
||||
default: '',
|
||||
description: 'When to deliver the email. Scheduling more than 72 hours in advance is forbidden.',
|
||||
},
|
||||
],
|
||||
},
|
||||
] as INodeProperties[];
|
||||
|
||||
export type SendMailBody = {
|
||||
personalizations: Array<{
|
||||
to: EmailName[],
|
||||
subject?: string,
|
||||
cc?: EmailName[],
|
||||
bcc?: EmailName[],
|
||||
dynamic_template_data?: { [key: string]: string },
|
||||
send_at?: number,
|
||||
}>,
|
||||
ip_pool_name?: string;
|
||||
from: EmailName,
|
||||
template_id?: string,
|
||||
content?: Array<{
|
||||
type: string,
|
||||
value: string,
|
||||
}>,
|
||||
categories?: string[],
|
||||
headers?: { [key: string]: string },
|
||||
attachments?: Array<{
|
||||
content: string,
|
||||
filename: string,
|
||||
type: string,
|
||||
}>,
|
||||
mail_settings: {
|
||||
sandbox_mode: {
|
||||
enable: boolean,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
type EmailName = {
|
||||
email: string,
|
||||
name?: string,
|
||||
};
|
||||
Reference in New Issue
Block a user