Sendgrid-nodejs: Como faço para adicionar anexos?

Criado em 6 set. 2016  ·  10Comentários  ·  Fonte: sendgrid/sendgrid-nodejs

Nossos e-mails estão enviando bem e agora queremos adicionar um anexo. Então, copiamos este exemplo: https://github.com/sendgrid/sendgrid-nodejs/blob/93763a74a85969382d59fcb3708d22051498f998/examples/helpers/mail/example.js

E fez o código assim:

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);
  }

Mas ao chamar sendEmail somos informados de sendgrid.Attachment is not a function (primeira linha da segunda função).

Imprimi o objeto sendgrid e ele se parece com isto:

{ 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] }
  • O exemplo está errado?
  • Devemos obter a classe auxiliar de apego de outra maneira?

Obrigado,
Richard.

bug

Comentários muito úteis

O link de exemplo não está funcionando.
Este é o novo link:
https://github.com/sendgrid/sendgrid-nodejs/blob/master/use-cases/attachments.md

Todos 10 comentários

Descobri depois de ler o código. Esse exemplo no github está totalmente errado. Deve ser assim:

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

Obrigado @RichardJECooke ,

Iremos investigar mais e corrigir o exemplo. Obrigado por compartilhar a solução!

Se você nos enviar um e-mail para [email protected] com seu endereço de correspondência e o tamanho da camiseta, adoraríamos enviar-lhe alguns brindes.

Obrigado!

O link de exemplo não está funcionando.
Este é o novo link:
https://github.com/sendgrid/sendgrid-nodejs/blob/master/use-cases/attachments.md

Olá, sei que este problema foi resolvido, mas é mais um problema que tenho tido ao tentar enviar imagens incorporadas a um utilizador do Gmail.

Eu encontrei alguns motivos pelos quais o gmail não renderizava imagens devido a alguma segurança adicional que eles impõem, então pensei em usar o parâmetro attachments para adicionar um content_id e ver se isso funciona em vez de usar uma tag src regular.

Quando é enviado, a grade de envio retorna uma solicitação incorreta. Aqui está meu método.

Eu codifico o JPG assim:

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

Em seguida, passo o JPG codificado para o campo de conteúdo dentro do argumento de anexos:

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, incorporo meu CID ao meu arquivo ejs:

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

Espero que alguém tenha alguma ideia do que estou fazendo de errado. Obrigado.

Olá @ lvh1g15 ,

Acho que você precisa adicionar disposition: inline , assim .

Obrigado pela atenção,

Elmer

@thinkingserious : Olá, você sabe como enviar um anexo com o modelo transacional?

@thinkingserious existe uma maneira de adicionar um anexo de URL ao meu e-mail, quais são as outras maneiras de adicionar anexo ao meu e-mail. não consegui encontrar exatamente um documento informando como os anexos funcionam no Sendgrid.

Saudações,
Mohit

@thinkingserious : Olá, você sabe como enviar um anexo com o modelo transacional?

se você estiver usando a API v3, basta adicionar uma chave attachments . content precisa ser codificado em 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"
}
Esta página foi útil?
0 / 5 - 0 avaliações