PDF 附件 NodeMailer

PDF Attachment NodeMailer

提前感谢您的回复。我已经编写了一些使用 nodemailer 0.7 的代码。1.It 发送电子邮件并将 pdf 附加到电子邮件中。但是,.pdf 附件在编码或截断时会损坏自身。我之所以说这是附件前的文件(即我本地的那个)是512kb,而邮件中的附件只有1kb。

这是使用nodemailer的代码:

var nodemailer = require("nodemailer");
var util = require("./util");
var env = require('./environment');

var smtpTransport = nodemailer.createTransport("SMTP",{
    service: env.service,
    auth: {
        user: env.user,
        pass: env.password
    }
});

exports.sendAttachment = function(info, callback, debug) {
    util.validatInput(info, ["body"] , function(err, info){
        if(err){
            util.errPrint(err, "serverUtil/nodemailer.sendAttachment", 1, function(message){callback(err);});
        }else {
            var mailOptions={
                from : "noreply@idasurance.com",
                to : "tgraham@maurasoftware.com",
                subject : "Application from " + info.userEmail,
                text : info.body,
                attachments: [
                    {
                        fileName: 'file.pdf',               //This needs to be the link to the form, or the actual form
                        filePath: 'file.pdf',
                        contentType: "application/pdf"
                    }
                ]
            }

            smtpTransport.sendMail(mailOptions, function(error, response){
                
                if(error){
                    console.log(error);
                    callback(err);
                }
                else{
                    console.log("Message sent: " + response.message);
                    callback({msg: "form sent"});
                }
            }); 
        }
    })
}

我正在使用 google chrome 作为浏览器,但尝试使用其他浏览器无济于事。显然,浏览器不应该与此有任何关系,因为 pdf 本身的数据是这里的问题。

我将文件放在同一目录中以避免出现问题,甚至在当前目录的文件之前添加了“./”。我也把 'filepath' 改成 'path' 然后它根本没有发送任何附件。

我认为问题出在 'attachments' 数组中。也许字段不正确或者我需要添加更多信息。

如果有人能告诉我是否需要流式传输或其他什么而不是我正在做的事情,如果是的话如何流式传输文件那就太好了!

事实证明我需要摆脱 filePath 和 contentType 属性并改为使用 streamSource。我还需要使用 fs.createReadStream。如果您有兴趣,这是代码。

var nodemailer = require("nodemailer");
var util = require("./util");
var env = require('./environment');
var fs = require('fs');
var path = require('path');
var smtpTransport = nodemailer.createTransport("SMTP", {
  service: env.service,
  auth: {
    user: env.user,
    pass: env.password
  }
});

exports.sendAttachment = function(info, callback, debug) {
  util.validatInput(info, ["body"], function(err, info) {
    if (err) {
      util.errPrint(err, "serverUtil/nodemailer.sendAttachment", 1, function(message) {
        callback(err);
      });
    } else {
      var filePath = path.join(__dirname, 'file.pdf');

      var mailOptions = {
        from: "noreply@idasurance.com",
        to: "tgraham@maurasoftware.com",
        subject: "Application from " + info.userEmail,
        text: info.body,
        attachments: [{
          fileName: 'file.pdf', //This needs to be the link to the form, or the actual form
          // filePath: './file.pdf',
          streamSource: fs.createReadStream(filePath)
            // , contentType: "application/pdf"
        }]
      }

      smtpTransport.sendMail(mailOptions, function(error, response) {

        if (error) {
          console.log(error);
          callback(err);
        } else {
          console.log("Message sent: " + response.message);
          callback({
            msg: "form sent"
          });
        }
      });
    }
  })
}

var api_key = 'key-6b6987887a1aa9489958a5f280645f8b';
var domain = 'sandboxcd1a6d15d41541f38519af3f5ee93190.mailgun.org';
var mailgun = require('mailgun-js')({apiKey: api_key,domain:domain});
var path = require("path");

var filepath = path.join(__dirname, 'wacc.pdf');

var data = {
  from: 'me@gmail.com',
  to: 'you@gmail.com',
  subject: 'Today Test',
  text: 'Sending Test',
  attachment: filepath
};

mailgun.messages().send(data, function (error, body) {
  console.log(body);
});