メールにURLを添付したいリクエストでPDFのURLを取得したり、ファイルとして読み取ったりするなどの解決策を使用しましたが、機能しませんでした。
@thinkingserious pdf urlをダウンロードして修正し、ファイルを読んでメールに添付しましたが、良い方法ではありません。
これが私のサンプルコードです。これはテスト用です:)
ありがとうございました
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);
});
});
}
});
});
@thinkingseriousテストしましたが、PDFファイルが
ありがとうございました
request = require('request');
request.get( url, function(err, res) {
var base64File = new Buffer(res.body).toString('base64');
...
});
こんにちは@ShahrokhNiakan 、
同じPDFまたは異なる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 、
ありがとうございました。 これはレビューのために私のバックログにあります。
その間に考慮できることの1つは、おそらくサイズ制限に直面しているということです。
敬具、
エルマー
@ShahrokhNiakan pdfは文字列ではなくバイナリであるため、リクエストライブラリがutf-8文字列としてデコードしようとしないように、リクエストに渡すオプションでencoding: null
を指定する必要があると思います。
例えば:
request = require('request');
request.get( url, { encoding: null } function(err, res) {
var base64File = new Buffer(res.body).toString('base64');
...
});
encoding-応答データのsetEncodingで使用されるエンコーディング。 nullの場合、本文はバッファとして返されます。 それ以外のもの(undefinedのデフォルト値を含む)は、エンコードパラメータとしてtoString()に渡されます(これは、デフォルトでは事実上utf8であることを意味します)。 (注:バイナリデータが必要な場合は、encoding:nullを設定する必要があります。 )
@brafdlogあなたのソリューションは私のために働いた! ありがとう!
以前のSendGridモジュールでは、添付ファイルのURLを指定することがサポートされていました。 とても便利でした。 すべての送信者がかさばるbase64コンテンツの送信を気にする必要があるのはなぜですか。 Sendgridはそれを実行できるはずです。
最も参考になるコメント
@ShahrokhNiakan pdfは文字列ではなくバイナリであるため、リクエストライブラリがutf-8文字列としてデコードしようとしないように、リクエストに渡すオプションで
encoding: null
を指定する必要があると思います。例えば:
リクエストの