Sendgrid-nodejs: Bagaimana cara melampirkan PDF dari URL ke Email dengan menggunakan @ sendgrid / mail?

Dibuat pada 22 Jan 2018  ·  10Komentar  ·  Sumber: sendgrid/sendgrid-nodejs

Ringkasan Masalah

Saya ingin melampirkan url ke Email Saya menggunakan beberapa solusi seperti mendapatkan url pdf berdasarkan permintaan atau membacanya sebagai file tetapi tidak berhasil.

Detail teknis:

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

Komentar yang paling membantu

@ShahrokNiakan karena pdfnya adalah biner, bukan string, menurut saya Anda harus menentukan encoding: null dalam opsi yang Anda berikan untuk meminta sehingga perpustakaan permintaan tidak akan mencoba mendekodekannya sebagai string ut-8.
Misalnya:

request = require('request');

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

Mengutip dari README permintaan :

encoding - pengkodean untuk digunakan pada setEncoding data respons. Jika null, tubuh akan dikembalikan sebagai Buffer. Yang lainnya (termasuk nilai default undefined) akan diteruskan sebagai parameter encoding ke toString () (artinya ini secara efektif adalah utf8 secara default). (Catatan: jika Anda mengharapkan data biner, Anda harus menyetel encoding: null. )

Semua 10 komentar

Halo @Shahrokiakan ,

Sudahkah Anda mencoba contoh di sini ? Jika ya, dapatkah Anda membagikan kode agar kami dapat mencoba mereproduksi?

Terima kasih!

Salam hangat,

Elmer

@thinkingserious Saya memperbaikinya dengan mengunduh url pdf dan kemudian membaca file dan melampirkannya ke email tetapi itu bukan cara yang baik!
Ini contoh kode saya, Ini hanya untuk tes :)
Terima kasih

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

                    });


                });

                }

              });

    });

Halo @ShahrokhNiakan ,

Terima kasih telah membagikan solusi Anda.

Bagaimana dengan mengambil file dari url seperti itu ?

Salam hangat,

Elmer

@thinkingserious Saya mengujinya tetapi file PDF terkadang tidak OK dan tidak dapat dibaca di lampiran email.
Terima kasih

request = require('request');

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

});

Halo @Shahrokiakan ,

Apakah Anda menguji dengan PDF yang sama atau yang berbeda?

Dalam kasus di mana PDF tidak dapat dibaca, apakah mungkin untuk memverifikasi bahwa PDF sumber tidak rusak?

Halo @Shahrokiakan ,

Terima kasih. Ini sekarang di backlog saya untuk ditinjau.

Satu hal yang mungkin Anda pertimbangkan untuk sementara waktu adalah mungkin Anda menghadapi batasan ukuran .

Salam hangat,

Elmer

@ShahrokNiakan karena pdfnya adalah biner, bukan string, menurut saya Anda harus menentukan encoding: null dalam opsi yang Anda berikan untuk meminta sehingga perpustakaan permintaan tidak akan mencoba mendekodekannya sebagai string ut-8.
Misalnya:

request = require('request');

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

Mengutip dari README permintaan :

encoding - pengkodean untuk digunakan pada setEncoding data respons. Jika null, tubuh akan dikembalikan sebagai Buffer. Yang lainnya (termasuk nilai default undefined) akan diteruskan sebagai parameter encoding ke toString () (artinya ini secara efektif adalah utf8 secara default). (Catatan: jika Anda mengharapkan data biner, Anda harus menyetel encoding: null. )

@brafdlog solusi Anda berhasil untuk saya! Terima kasih!

Modul SendGrid sebelumnya memiliki dukungan untuk menentukan URL untuk lampiran. Itu sangat nyaman. Mengapa setiap pengirim harus repot-repot mengirim konten base64 yang besar. Sendgrid seharusnya bisa melakukan itu.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

agostonbonomi picture agostonbonomi  ·  3Komentar

nicoasp picture nicoasp  ·  3Komentar

egges picture egges  ·  3Komentar

wooyah picture wooyah  ·  4Komentar

prasoonjalan picture prasoonjalan  ·  3Komentar