Sendgrid-nodejs: Comment joindre un PDF d'une URL à un e-mail en utilisant @ sendgrid / mail?

Créé le 22 janv. 2018  ·  10Commentaires  ·  Source: sendgrid/sendgrid-nodejs

Résumé de la question

Je veux joindre l'URL à l'e-mail J'ai utilisé certaines solutions telles que l'obtention de l'URL PDF sur demande ou la lecture en tant que fichier, mais cela n'a pas fonctionné.

Détails techniques:

  • sendgrid-nodejs Version: @ sendgrid / mail: ^ 6.2.1
  • Version de Node.js: 9.2.1
easy hacktoberfest help wanted help wanted question up for grabs up-for-grabs

Commentaire le plus utile

@ShahrokhNiakan puisque le pdf est binaire plutôt qu'une chaîne, je pense que vous devriez spécifier encoding: null dans les options que vous passez à la requête afin que la bibliothèque de requêtes n'essaye pas de le décoder comme une chaîne utf-8.
Par exemple:

request = require('request');

request.get( url, { encoding: null } function(err, res) {
 var base64File = new Buffer(res.body).toString('base64');
 ...
});

Citation du README de la demande :

encoding - encodage à utiliser sur setEncoding des données de réponse. S'il est nul, le corps est renvoyé en tant que tampon. Tout le reste (y compris la valeur par défaut de undefined) sera passé comme paramètre d'encodage à toString () (ce qui signifie qu'il s'agit effectivement de utf8 par défaut). (Remarque: si vous attendez des données binaires, vous devez définir encoding: null. )

Tous les 10 commentaires

Salut @ShahrokhNiakan ,

Avez-vous essayé l'exemple ici ? Dans l'affirmative, pourriez-vous partager le code afin que nous puissions essayer de le reproduire?

Merci!

Meilleures salutations,

Elmer

@thinkingserious Je l'ai corrigé en téléchargeant l'URL du pdf, puis en lisant le fichier et en le
Voici mon exemple de code, c'est juste pour le test :)
Merci

const sgMail = require('@sendgrid/mail');
    sgMail.setApiKey("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

    var download = require('download-file'),
        fs = require('fs'),
        array = [],
        temp = [],
        files = [];

    array.push('https://www.antennahouse.com/XSLsample/pdf/sample-link_1.pdf');
    array.push('https://www.antennahouse.com/XSLsample/pdf/sample-link_1.pdf');
    array.push('https://www.antennahouse.com/XSLsample/pdf/sample-link_1.pdf');


    array.forEach(function(url) {

        temp++;

        var options = {
            directory: "./pdf",
            filename: temp.toString() + Date.now() + ".pdf"
        };

        download(url, options, function(err, res) {

            console.log( __dirname + '/pdf/' + options.filename );

            files.push(res);

            if ( array.length == files.length ) {

                // console.log( "hello" );

                var counter = 0,
                    attach = [];
                files.forEach( function(name, index) {

                    name = name.substring(1, name.length );

                    fs.readFile(__dirname + name, function(err, file) {

                        console.log( file );

                        var base64File = new Buffer(file).toString('base64');
                        counter++;

                        attach.push({
                            content : base64File,
                            filename : 'Report.pdf'
                        });

                        console.log( attach );


                    const msg = {
                            to: '[email protected]',
                            from: '[email protected]',
                            subject: 'Test',
                            text: 'this is test',
                            html: '<strong>Hello World</strong>',
                            attachments: attach,
                    };

                    // console.log( msg );

                  if ( counter == files.length )
                      sgMail.send(msg);

                    });


                });

                }

              });

    });

Bonjour @ShahrokhNiakan ,

Merci d'avoir partagé votre solution.

Que diriez-vous de récupérer le fichier de l'URL comme ça ?

Meilleures salutations,

Elmer

@thinkingserious Je l'ai testé mais le fichier PDF n'est parfois pas correct et ne peut pas être lu en pièce jointe.
Merci

request = require('request');

request.get( url, function(err, res) {
 var base64File = new Buffer(res.body).toString('base64');
 ...

});

Salut @ShahrokhNiakan ,

Testez-vous avec le même PDF ou avec des fichiers différents?

Dans les cas où le PDF n'est pas lisible, est-il possible de vérifier que le PDF source n'est pas corrompu?

Salut @ShahrokhNiakan ,

Merci. Ceci maintenant sur mon arriéré pour un examen.

Une chose que vous pouvez considérer en attendant est que vous vous heurtez peut-être à des limitations de taille .

Meilleures salutations,

Elmer

@ShahrokhNiakan puisque le pdf est binaire plutôt qu'une chaîne, je pense que vous devriez spécifier encoding: null dans les options que vous passez à la requête afin que la bibliothèque de requêtes n'essaye pas de le décoder comme une chaîne utf-8.
Par exemple:

request = require('request');

request.get( url, { encoding: null } function(err, res) {
 var base64File = new Buffer(res.body).toString('base64');
 ...
});

Citation du README de la demande :

encoding - encodage à utiliser sur setEncoding des données de réponse. S'il est nul, le corps est renvoyé en tant que tampon. Tout le reste (y compris la valeur par défaut de undefined) sera passé comme paramètre d'encodage à toString () (ce qui signifie qu'il s'agit effectivement de utf8 par défaut). (Remarque: si vous attendez des données binaires, vous devez définir encoding: null. )

@brafdlog votre solution a fonctionné pour moi! Merci!

L'ancien module SendGrid prenait en charge la spécification d'URL pour les pièces jointes. C'était très pratique. Pourquoi chaque expéditeur devrait-il se soucier d'envoyer un contenu base64 volumineux? Sendgrid devrait pouvoir le faire.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

polkhovsky picture polkhovsky  ·  3Commentaires

wooyah picture wooyah  ·  4Commentaires

kiranshashiny picture kiranshashiny  ·  4Commentaires

Chrischuck picture Chrischuck  ·  3Commentaires

agostonbonomi picture agostonbonomi  ·  3Commentaires