2014-06-11 5 views
2

기본적으로 Canvas를 사용하여 만든 이미지가 있고 base64로 인코딩 된 데이터 URI가 있습니다. 이 데이터 URI는 이메일에 첨부됩니다.Nodemailer는 base64 데이터 URI를 첨부 파일로 보냅니다. 방법?

..., 
attachments:[{ 
fileName: "cat.jpg", 
contents: new Buffer(cat, 'base64') 
}], 

이메일을 수신했지만 첨부 파일을 볼 수 없습니다. 리눅스에서 $ file cat.jpg을 실행하면 다음과 같이 반환됩니다 :

cat.jpg: ASCII text, with very long lines, with no line terminators 

왜이 ASCII입니까? 나는 이미 base64에 대해 언급했다. 이 문제를 어떻게 해결할 수 있습니까? 감사합니다.

답변

2

변수 cat은 아마도 'data : image/jpeg; base64,' 부분을 포함합니다. 그 비트는 Buffer 생성자에 전달하면 안됩니다.

그것은 당신이 유효하지 않은 데이터를 전달하는 경우, new Buffer() 불평하지 않는 것 같다

var pixel = "data:image/gif;base64," 
    + "R0lGODlhAQABAIABAP///wAAACH5" 
    + "BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; 
var buffer = new Buffer(pixel, "base64"); // does not throw an error. 

심지어 유효한 버퍼를 다시 얻을. 버퍼가 손상된 이미지입니다 (또는 오히려 이미지 헤더로 시작하지 않습니다).

var buffer = new Buffer(pixel.split("base64,")[1], "base64"); 
+0

그것은 작동합니다. 나는 다만 흥미 롭다, 당신은 이것을 알았 는가 당신은 그것을 시험 했는가? –

+1

질문을 올바르게 해석하고 있는지 확실하지 않지만 : Nodemailer가 유효한 이미지 버퍼를 원하고'새로운 버퍼 (stringWithPrefix)'가 깨진 이미지를 만들고'new Buffer (stringWithoutPrefix)'가 않습니다. 아니. 생성자가 오류를 일으키지 않으며 두 버퍼가 (예상대로) 같은 바이트로 시작하지 않음을 알 수 있습니다. 파일을 디스크에 기록하고 무결성을 검사했습니다. 그 질문에 대답합니까? – RikkusRukkus

0

은 버퍼가 필요하지 않습니다 :

당신은 데이터 URI 자신의 첫 부분을 제거해야합니다. 당신은 그것으로 base64로 인코딩 접두사 뒤에서 시작하는 문자열을 넣을 수 있습니다 :

var cat = "...base64 encoded image..."; 
var mailOptions = { 
    ... 
    attachments: [ 
    { // encoded string as an attachment 
     filename: 'cat.jpg', 
     content: cat.split("base64,")[1], 
     encoding: 'base64' 
    } 
    ] 
}; 

상세 정보를 여기에서 찾을 수 있습니다 : https://github.com/nodemailer/nodemailer#attachments

2

당신은 단순히 패키지 nodemailer-base64-to-s3를 사용할 수 있습니다.

패키지를 설치

npm install -s nodemailer-base64-to-s3 

구성을 nodemailer로 :

var base64ToS3 = require('nodemailer-base64-to-s3'); 
var nodemailer = require('nodemailer'); 

var transport = nodemailer.createTransport({}); 
transport.use('compile', base64ToS3(opts)); 

https://github.com/ladjs/nodemailer-base64-to-s3