Quero anexar url ao e-mail Usei algumas soluções como obter url em pdf por solicitação ou ler como arquivo, mas não funcionou.
Olá @ShahrokhNiakan ,
Você já tentou o exemplo aqui ? Em caso afirmativo, você poderia compartilhar o código para que possamos tentar reproduzi-lo?
Obrigado!
Obrigado pela atenção,
Elmer
@thinkingserious Corrigi -o baixando a url do pdf e depois li o arquivo e anexei ao e-mail, mas não é um bom caminho!
Aqui está meu código de exemplo, isso é apenas para teste :)
Obrigado
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);
});
});
}
});
});
Olá @ShahrokhNiakan ,
Obrigado por compartilhar sua solução.
Que tal pegar o arquivo da url assim ?
Obrigado pela atenção,
Elmer
@thinkingserious eu testei, mas o arquivo PDF às vezes não está OK e não pode ser lido em anexo de email.
Obrigado
request = require('request');
request.get( url, function(err, res) {
var base64File = new Buffer(res.body).toString('base64');
...
});
Olá @ShahrokhNiakan ,
Você está testando com o mesmo PDF ou com outros diferentes?
Nos casos em que o PDF não é legível, é possível verificar se o PDF de origem não está corrompido?
Oi querido @thinkingserious
Testei o link do PDF abaixo:
http://www.africau.edu/images/default/sample.pdf
http://www.pdf995.com/samples/pdf.pdf
https://www.ets.org/Media/Tests/GRE/pdf/gre_research_validity_data.pdf
Olá @ShahrokhNiakan ,
Obrigado. Isso agora está na minha lista de pendências para uma revisão.
Nesse ínterim, você pode considerar que talvez esteja enfrentando limitações de tamanho .
Obrigado pela atenção,
Elmer
@ShahrokhNiakan, uma vez que o pdf é binário em vez de uma string, acho que você deve especificar encoding: null
nas opções que passar para request, para que a biblioteca de solicitações não tente decodificá-lo como uma string utf-8.
Por exemplo:
request = require('request');
request.get( url, { encoding: null } function(err, res) {
var base64File = new Buffer(res.body).toString('base64');
...
});
Citando o README do pedido :
codificação - codificação a ser usada em setEncoding de dados de resposta. Se nulo, o corpo é retornado como um buffer. Qualquer outra coisa (incluindo o valor padrão de undefined) será passado como o parâmetro de codificação para toString () (o que significa que é efetivamente utf8 por padrão). (Observação: se você espera dados binários, deve definir a codificação: nulo. )
@brafdlog sua solução funcionou para mim! obrigado!
O módulo SendGrid anterior tinha suporte para especificar URLs para anexos. Isso foi muito conveniente. Por que todo remetente deveria se preocupar em enviar conteúdo base64 volumoso? Sendgrid deve ser capaz de fazer isso.
Comentários muito úteis
@ShahrokhNiakan, uma vez que o pdf é binário em vez de uma string, acho que você deve especificar
encoding: null
nas opções que passar para request, para que a biblioteca de solicitações não tente decodificá-lo como uma string utf-8.Por exemplo:
Citando o README do pedido :