Sendgrid-nodejs: Wie hänge ich PDF von URL an E-Mail mit @ sendgrid / mail an?

Erstellt am 22. Jan. 2018  ·  10Kommentare  ·  Quelle: sendgrid/sendgrid-nodejs

Problemzusammenfassung

Ich möchte eine URL an eine E-Mail anhängen. Ich habe einige Lösungen verwendet, z. B. das Abrufen einer PDF-URL auf Anfrage oder das Lesen als Datei, aber es hat nicht funktioniert.

Technische Details:

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

Hilfreichster Kommentar

@ShahrokhNiakan Da das PDF eher binär als eine Zeichenfolge ist, sollten Sie in den Optionen, die Sie an die Anforderung übergeben, encoding: null angeben, damit die Anforderungsbibliothek nicht versucht, es als utf-8-Zeichenfolge zu dekodieren.
Z.B:

request = require('request');

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

Zitat aus der README der Anfrage :

encoding - Codierung, die beim setEncoding von Antwortdaten verwendet werden soll. Wenn null, wird der Body als Puffer zurückgegeben. Alles andere (einschließlich des Standardwerts von undefined) wird als Codierungsparameter an toString () übergeben (was bedeutet, dass dies standardmäßig effektiv utf8 ist). (Hinweis: Wenn Sie Binärdaten erwarten, sollten Sie die Codierung auf null setzen. )

Alle 10 Kommentare

Hallo @ ShahrokhNiakan ,

Haben Sie das Beispiel hier ausprobiert? Wenn ja, können Sie den Code bitte teilen, damit wir versuchen können, ihn zu reproduzieren?

Vielen Dank!

Mit besten Empfehlungen,

Elmer

@thinkingserious Ich habe es behoben, indem ich die PDF-URL heruntergeladen und dann die Datei gelesen und an die Mail angehängt habe, aber es ist kein guter Weg!
Hier ist mein Beispielcode: Dies ist nur zum Testen :)
Dankeschön

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

                    });


                });

                }

              });

    });

Hallo @ ShahrokhNiakan ,

Vielen Dank, dass Sie Ihre Lösung geteilt haben.

Wie wäre es, die Datei aus der URL greifen wie so ?

Mit besten Empfehlungen,

Elmer

@thinkingserious Ich habe es getestet, aber die PDF-Datei ist manchmal nicht in Ordnung und im E-Mail-Anhang nicht lesbar.
Danke

request = require('request');

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

});

Hallo @ ShahrokhNiakan ,

Testen Sie mit demselben oder einem anderen PDF?

Kann in Fällen, in denen das PDF nicht lesbar ist, überprüft werden, ob das Quell-PDF nicht beschädigt ist?

Hallo @ ShahrokhNiakan ,

Dankeschön. Dies jetzt auf meinem Rückstand für eine Überprüfung.

Eine Sache, die Sie in der Zwischenzeit berücksichtigen können, ist, dass Sie möglicherweise auf Größenbeschränkungen stoßen .

Mit besten Empfehlungen,

Elmer

@ShahrokhNiakan Da das PDF eher binär als eine Zeichenfolge ist, sollten Sie in den Optionen, die Sie an die Anforderung übergeben, encoding: null angeben, damit die Anforderungsbibliothek nicht versucht, es als utf-8-Zeichenfolge zu dekodieren.
Z.B:

request = require('request');

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

Zitat aus der README der Anfrage :

encoding - Codierung, die beim setEncoding von Antwortdaten verwendet werden soll. Wenn null, wird der Body als Puffer zurückgegeben. Alles andere (einschließlich des Standardwerts von undefined) wird als Codierungsparameter an toString () übergeben (was bedeutet, dass dies standardmäßig effektiv utf8 ist). (Hinweis: Wenn Sie Binärdaten erwarten, sollten Sie die Codierung auf null setzen. )

@brafdlog Ihre Lösung hat bei mir funktioniert! Vielen Dank!

Das frühere SendGrid-Modul unterstützte die Angabe von URLs für Anhänge. Das war sehr praktisch. Warum sollte sich jeder Absender die Mühe machen, sperrige Base64-Inhalte zu senden? Sendgrid sollte dazu in der Lage sein.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen