Sendgrid-nodejs: ¿Cómo agrego archivos adjuntos?

Creado en 6 sept. 2016  ·  10Comentarios  ·  Fuente: sendgrid/sendgrid-nodejs

Nuestros correos electrónicos se envían bien y ahora queremos agregar un archivo adjunto. Así que copiamos este ejemplo: https://github.com/sendgrid/sendgrid-nodejs/blob/93763a74a85969382d59fcb3708d22051498f998/examples/helpers/mail/example.js

E hizo un código así:

const sendgrid: any = require('sendgrid')(process.env.sendgrid_key);

sendEmail(data: IEmailData): void {
    const email: any = new sendgrid.Email();
    email.addTo(data.emailTo);
    for (let attachment in data.attachments)
      this.addAttachment(email, attachment);
    sendgrid.send(email, (error: any, json: string) => {
      if (error)
        console.log(error);
    });
  }

  addAttachment(email: any, attachmentData: any): void {
    const attachment = new sendgrid.Attachment();
    attachment.setContent(attachmentData.content);
    attachment.setType(attachmentData.type);
    attachment.setFilename(attachmentData.filename);
    attachment.setDisposition(attachmentData.disposition);
    email.addAttachment(attachment);
  }

Pero al llamar a sendEmail nos dicen sendgrid.Attachment is not a function (primera línea de la segunda función).

Imprimí el objeto sendgrid y se ve así:

{ api_key: 'SG.DaV0L',
  api_user: null,
  options: 
   { uriParts: 
      { protocol: 'https',
        host: 'api.sendgrid.com',
        port: '',
        endpoint: '/api/mail.send.json' },
     uri: 'https://api.sendgrid.com/api/mail.send.json' },
  version: '1.9.2',
  Email: [Function: Email],
  smtpapi: [Function: smtpapi],
  send: [Function] }
  • ¿Está mal el ejemplo?
  • ¿Deberíamos obtener la clase de ayuda para archivos adjuntos de otra manera?

Gracias,
Ricardo.

bug

Comentario más útil

El enlace de ejemplo no funciona.
Este es el nuevo enlace:
https://github.com/sendgrid/sendgrid-nodejs/blob/master/use-cases/attachments.md

Todos 10 comentarios

Descubierto después de leer el código. Ese ejemplo en github está totalmente equivocado. Debería ser así:

addAttachment(email: any, attachmentData: any): void {    
  email.addFile(attachmentData);
}

Gracias @RichardJECooke ,

Investigaremos más y arreglaremos el ejemplo. ¡Gracias por tomarse el tiempo para compartir la solución!

Si nos envía un correo electrónico a

¡Gracias!

El enlace de ejemplo no funciona.
Este es el nuevo enlace:
https://github.com/sendgrid/sendgrid-nodejs/blob/master/use-cases/attachments.md

Hola, sé que este problema se ha resuelto, pero es más un problema que he tenido al intentar enviar imágenes incrustadas a un usuario de Gmail.

Encontré un par de razones por las que gmail no mostraría imágenes debido a cierta seguridad adicional que imponen, así que pensé en usar el parámetro adjuntos para agregar un content_id y ver si eso funciona en lugar de usar una etiqueta src normal.

Cuando se envía, la cuadrícula de envío devuelve una solicitud incorrecta. Este es mi método.

Codifico el JPG así:

    let bitmap = fs.readFileSync(imageDir);
    imageBase64URL = new Buffer(bitmap).toString('base64');

Luego paso el JPG codificado al campo de contenido dentro del argumento de los archivos adjuntos:

mailer.send({
       to: '[email protected]',
       from: '[email protected]',
       subject: `You have been removed from ${house.name} by ${removerName}`,
       html: result,
       attachments: [
            {
               content: imageBase64URL,
               filename: 'cluttr-logo.jpg',
               contentId: 'cluttr-logo'
            },
       ]
});

Finalmente incrusto mi CID así en mi archivo ejs:

html <img alt="Logo" src="cid:cluttr-logo" width="60" height="60"

Ojalá alguien tenga una idea de lo que estoy haciendo mal. Gracias.

Hola @ lvh1g15 ,

Creo que necesitas agregar disposition: inline , así .

Con los mejores deseos,

Elmer

@thinkingserious : Hola, ¿sabes cómo enviar un archivo adjunto con la plantilla transaccional?

@thinkingserious ¿hay alguna manera de agregar un archivo adjunto de URL a mi correo electrónico? No pude encontrar exactamente un documento que indique cómo funcionan los archivos adjuntos en Sendgrid.

Saludos,
Mohit

@thinkingserious : Hola, ¿sabes cómo enviar un archivo adjunto con la plantilla transaccional?

si está utilizando la API v3, acaba de agregar una clave attachments . content debe estar codificado en Base64

https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html

email = {
   "from":{  
      "email":"[email protected]"
   },
   "personalizations":[  
      {  
         "to":[  
            {  
               "email" : "[email protected]"
            }
         ],
         "dynamic_template_data": {
         }
      }
   ],
   "attachments": [
       {
           "content": "",
           "filename" ""
       }
   ]
   "template_id":"someid"
}
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

Loriot-n picture Loriot-n  ·  4Comentarios

nicoasp picture nicoasp  ·  3Comentarios

amlcodes picture amlcodes  ·  4Comentarios

thinkingserious picture thinkingserious  ·  4Comentarios

polkhovsky picture polkhovsky  ·  3Comentarios