Send a vcard attachment by email

Hey,

I am trying to send a vcard as an attachment.

I can generate a basic vcard without problem from contact details. I am then generating a binary file with proper mime type.

However, when I try to send the email, I get the following error message:

Has anyone done something similar? Am I going about it the right way?

Thanks in advance,

This is the workflow:

{
  "nodes": [
    {
      "parameters": {
        "functionCode": "// create vCard\n\nvar contact = items[0].json.contact;\n\n\nvCard = 'BEGIN:VCARD\\nVERSION:4.0\\n';\nvCard += 'FN:'+ contact.first_name + ' ' + contact.last_name + '\\n';\nvCard += 'N:'+ contact.last_name + ';' + contact.first_name + ';;\\n';\nvCard += 'EMAIL:'+ contact.email + '\\n';\nvCard += 'TEL;TYPE=work,voice;VALUE=uri:tel:'+ contact.phone + '\\n';\nvCard += 'NOTE:Contact créé par n8n\\n';\nvCard += 'END:VCARD';\n\nitems = [ { 'json' : { 'data' : vCard } }];\n\nreturn items;"
      },
      "name": "Function",
      "type": "n8n-nodes-base.function",
      "typeVersion": 1,
      "position": [
        700,
        300
      ]
    },
    {
      "parameters": {
        "mode": "jsonToBinary",
        "convertAllData": false,
        "options": {
          "fileName": "contact.vcf",
          "mimeType": "text/vcard",
          "useRawData": true
        }
      },
      "name": "Move Binary Data",
      "type": "n8n-nodes-base.moveBinaryData",
      "typeVersion": 1,
      "position": [
        980,
        300
      ],
      "alwaysOutputData": false
    },
    {
      "parameters": {
        "functionCode": "// initiate contact details\n\nvar contact = {\n  'first_name' : 'My',\n  'last_name' : 'Contact',\n  'phone' : '+123456789',\n  'email' : '[email protected]'\n}\n\n\nitems = [ { 'json' : { 'contact' : contact } }];\n\n\nreturn items;"
      },
      "name": "Function1",
      "type": "n8n-nodes-base.function",
      "typeVersion": 1,
      "position": [
        460,
        300
      ]
    },
    {
      "parameters": {
        "fromEmail": "[email protected]",
        "toEmail": "[email protected]",
        "text": "this is your new contact",
        "attachments": "={{$binary}}",
        "options": {}
      },
      "name": "Send Email",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 1,
      "position": [
        1200,
        300
      ],
      "credentials": {
        }
      }
    }
  ],
  "connections": {
    "Function": {
      "main": [
        [
          {
            "node": "Move Binary Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Move Binary Data": {
      "main": [
        [
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Function1": {
      "main": [
        [
          {
            "node": "Function",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Hi @steph, it seems you are using an expression to reference binary data. The email node would however expect the name of the binary property.

So you’d probably want to reset the expression and just enter data here like so:
image

Once done the email should go out as expected:
image

Example Workflow
{
  "nodes": [
    {
      "parameters": {
        "fromEmail": "[email protected]",
        "toEmail": "[email protected]",
        "text": "this is your new contact",
        "attachments": "data",
        "options": {}
      },
      "name": "Send Email",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 1,
      "position": [
        1200,
        320
      ],
      "credentials": {
        "smtp": {
          "id": "14",
          "name": "SMTP Account"
        }
      }
    },
    {
      "parameters": {},
      "name": "Start",
      "type": "n8n-nodes-base.start",
      "typeVersion": 1,
      "position": [
        240,
        300
      ]
    },
    {
      "parameters": {
        "functionCode": "// create vCard\n\nvar contact = items[0].json.contact;\n\n\nvCard = 'BEGIN:VCARD\\nVERSION:4.0\\n';\nvCard += 'FN:'+ contact.first_name + ' ' + contact.last_name + '\\n';\nvCard += 'N:'+ contact.last_name + ';' + contact.first_name + ';;\\n';\nvCard += 'EMAIL:'+ contact.email + '\\n';\nvCard += 'TEL;TYPE=work,voice;VALUE=uri:tel:'+ contact.phone + '\\n';\nvCard += 'NOTE:Contact créé par n8n\\n';\nvCard += 'END:VCARD';\n\nitems = [ { 'json' : { 'data' : vCard } }];\n\nreturn items;"
      },
      "name": "Function",
      "type": "n8n-nodes-base.function",
      "typeVersion": 1,
      "position": [
        700,
        320
      ]
    },
    {
      "parameters": {
        "mode": "jsonToBinary",
        "convertAllData": false,
        "options": {
          "fileName": "contact.vcf",
          "mimeType": "text/vcard",
          "useRawData": true
        }
      },
      "name": "Move Binary Data",
      "type": "n8n-nodes-base.moveBinaryData",
      "typeVersion": 1,
      "position": [
        980,
        320
      ],
      "alwaysOutputData": false
    },
    {
      "parameters": {
        "functionCode": "// initiate contact details\n\nvar contact = {\n  'first_name' : 'My',\n  'last_name' : 'Contact',\n  'phone' : '+123456789',\n  'email' : '[email protected]'\n}\n\n\nitems = [ { 'json' : { 'contact' : contact } }];\n\n\nreturn items;"
      },
      "name": "Function1",
      "type": "n8n-nodes-base.function",
      "typeVersion": 1,
      "position": [
        460,
        320
      ]
    },
    {
      "parameters": {
        "fromEmail": "[email protected]",
        "toEmail": "[email protected]",
        "text": "this is your new contact",
        "attachments": "data",
        "options": {}
      },
      "name": "Send Email",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 1,
      "position": [
        1200,
        320
      ],
      "credentials": {
        "smtp": {
          "id": "14",
          "name": "SMTP Account"
        }
      }
    }
  ],
  "connections": {
    "Start": {
      "main": [
        [
          {
            "node": "Function1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Function": {
      "main": [
        [
          {
            "node": "Move Binary Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Move Binary Data": {
      "main": [
        [
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Function1": {
      "main": [
        [
          {
            "node": "Function",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
1 Like

Thanks so much @MutedJam - it works perfectly, and it’s really helping my workflows :slight_smile:

1 Like