Я хочу прикрепить URL-адрес к электронной почте. Я использовал некоторые решения, такие как получение URL-адреса pdf по запросу или чтение его как файла, но это не сработало.
Привет @ShahrokhNiakan!
Вы пробовали здесь пример? Если да, не могли бы вы поделиться кодом, чтобы мы могли его воспроизвести?
Спасибо!
С наилучшими пожеланиями,
Элмер
@thinkingserious Я исправил это, загрузив URL-адрес pdf, а затем прочитал файл и прикрепил его к почте, но это не лучший способ!
Вот мой пример кода, это просто для проверки :)
Спасибо
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);
});
});
}
});
});
Привет @ShahrokhNiakan ,
Спасибо, что поделились своим решением.
Как насчет того, чтобы взять файл с URL-адреса таким образом ?
С наилучшими пожеланиями,
Элмер
@thinkingserious Я тестировал его, но PDF-файл иногда не работает и не читается во вложении к письму.
Спасибо
request = require('request');
request.get( url, function(err, res) {
var base64File = new Buffer(res.body).toString('base64');
...
});
Привет @ShahrokhNiakan!
Вы тестируете один и тот же PDF-файл или разные?
В случаях, когда PDF-файл не читается, можно ли убедиться, что исходный PDF-файл не поврежден?
Привет, дорогой @thinkingserious
Я протестировал эту ссылку PDF ниже:
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
Привет @ShahrokhNiakan!
Спасибо. Это сейчас в моем журнале для обзора.
В то же время вы можете подумать о том, что, возможно, вы столкнулись с ограничениями по размеру .
С наилучшими пожеланиями,
Элмер
@ShahrokhNiakan, поскольку pdf является двоичным, а не строкой, я думаю, вы должны указать encoding: null
в параметрах, которые вы передаете для запроса, чтобы библиотека запросов не пыталась декодировать его как строку utf-8.
Например:
request = require('request');
request.get( url, { encoding: null } function(err, res) {
var base64File = new Buffer(res.body).toString('base64');
...
});
Цитата из README запроса :
encoding - кодировка, которая будет использоваться при setEncoding данных ответа. Если null, тело возвращается как буфер. Все остальное (включая значение по умолчанию undefined) будет передано в качестве параметра кодирования toString () (что означает, что по умолчанию это фактически utf8). (Примечание: если вы ожидаете двоичных данных, вы должны установить encoding: null. )
@brafdlog ваше решение сработало для меня! Спасибо!
В более раннем модуле SendGrid была поддержка указания URL-адресов для вложений. Это было очень удобно. Зачем каждому отправителю беспокоиться об отправке громоздкого содержимого base64. Sendgrid должен уметь это делать.
Самый полезный комментарий
@ShahrokhNiakan, поскольку pdf является двоичным, а не строкой, я думаю, вы должны указать
encoding: null
в параметрах, которые вы передаете для запроса, чтобы библиотека запросов не пыталась декодировать его как строку utf-8.Например:
Цитата из README запроса :