SMS Pictures to Email
@mjclemente
code:
data:privatelast updated:9 months ago
today
Build integrations remarkably fast!
You're viewing a public workflow template.
Sign up to customize, add steps, modify code and more.
Join 100,000+ developers using the Pipedream platform
steps.
trigger
New Incoming SMS
last updated:9 months ago
steps.
parse_message
auth
to use OAuth tokens and API keys in code via theauths object
code
Write any Node.jscodeand use anynpm package. You can alsoexport datafor use in later steps via return or this.key = 'value', pass input data to your code viaparams, and maintain state across invocations with$checkpoint.
async (event, steps) => {
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
}
46
  const extName = require('ext-name');
  const urlUtil = require('url');
  const path = require('path');
  const fs = require("fs");
  const axios = require('axios');

  const attachments = [];
  const NumMedia = steps.trigger.event.NumMedia;
  const payload = steps.trigger.event;
  for (var i = 0; i < NumMedia; i++) {  // eslint-disable-line
    const mediaUrl = payload[`MediaUrl${i}`];
    const contentType = payload[`MediaContentType${i}`];
    const extension = extName.mime(contentType)[0].ext;
    const mediaSid = path.basename(urlUtil.parse(mediaUrl).pathname);
    const filename = `${mediaSid}.${extension}`;

    const fullPath = `/tmp/${filename}`;
    
    const response = await axios({
        url: mediaUrl,
        method: 'GET',
        responseType: 'arraybuffer'
      })
    await fs.writeFileSync(fullPath, response.data);

    let contents_in_base64 = fs.readFileSync(fullPath).toString('base64');

    // Postmark format
    // let attachment = {
    //   Content: contents_in_base64,
    //   Name: filename,
    //   ContentType: contentType
    // };
    // SendGrid format
    let attachment = {
      content: contents_in_base64,
      filename,
      type: contentType
    };

    attachments.push(attachment);
  }

  return attachments;
steps.
send_email
auth
to use OAuth tokens and API keys in code via theauths object
(auths.sendgrid)
params
To email

The email address of the recipient.

string ·params.to_email
Subject
string ·params.subject
From email

The email address of the sender.

string ·params.from_email
Type

The mime type of the content you are including in your email. For example, text/plain or text/html.

string ·params.type
Value

The actual content of the specified mime type that you are including in your email.

string ·params.value
code
Write any Node.jscodeand use anynpm package. You can alsoexport datafor use in later steps via return or this.key = 'value', pass input data to your code viaparams, and maintain state across invocations with$checkpoint.
async (event, steps, params, auths) => {
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
}
37
const axios = require('axios')
let to_email
if (params.to_email.indexOf(',') > -1) { 
  to_email = params.to_email.split(',').map(
    (item,index) => {
      return {
        "email": item
      } 
    }
  )
} else {
  to_email = [{ "email" : params.to_email }]
}

return await require("@pipedreamhq/platform").axios(this, {
  url: `https://api.sendgrid.com/v3/mail/send`,
  headers: {
    Authorization: `Bearer ${auths.sendgrid.api_key}`,
  },
  method: 'POST',
  data: {
    "personalizations": [{
      "to": to_email,
      "subject": params.subject,
    }],
    "from": {
      "email": params.from_email,
    },
    "content": [{
      "type": params.type,
      "value": params.value
    }],
    "attachments": steps.parse_message.$return_value
  }
})