Javascript Node.js和NodeEmailer:我们可以将PDF文档附加到电子邮件中吗?

Javascript Node.js和NodeEmailer:我们可以将PDF文档附加到电子邮件中吗?,javascript,node.js,email-attachments,nodemailer,Javascript,Node.js,Email Attachments,Nodemailer,我想使用nodeEmailer和node.js附加一个PDF文档,但是,我在nodeEmailer附件中找到的唯一示例是.txt文件() 有人知道nodemailer是否支持PDF文档附件吗 起初,似乎可以附加PDF,但通过电子邮件到达的PDF文件似乎已损坏(见图) 代码:(根据马赫什的回答改编) fs.readFile('/filePath/fileName.pdf',函数(err,data){ 如果(错误)抛出错误; var mailpoptions={ 发件人:'测试',//发件人地址

我想使用nodeEmailer和node.js附加一个PDF文档,但是,我在nodeEmailer附件中找到的唯一示例是.txt文件()

有人知道nodemailer是否支持PDF文档附件吗

起初,似乎可以附加PDF,但通过电子邮件到达的PDF文件似乎已损坏(见图)

代码:(根据马赫什的回答改编)

fs.readFile('/filePath/fileName.pdf',函数(err,data){
如果(错误)抛出错误;
var mailpoptions={
发件人:'测试',//发件人地址
收件人:'toPersonName',//收件人列表
主题:'附件',//主题行
text:'Hello world附件测试',//纯文本正文
html:‘Hello world附件测试html’,//html正文
附件:[
{
文件名:“filename.pdf”,
contentType:'应用程序/pdf'
}]
};
//使用定义的传输对象发送邮件
transporter.sendMail(邮件选项,函数(错误,信息){
如果(错误){
返回console.log(错误);
}
console.log('发送的消息:'+信息响应);
});
控制台日志(数据);
});
终端响应:

<Buffer 25 50 44 46 2d 31 2e 33 0a 25 c4 e5 f2 e5 eb a7 f3 a0 d0 c4 c6 0a 34 20 30 20 6f 62 6a 0a 3c 3c 20 2f 4c 65 6e 67 74 68 20 35 20 30 20 52 20 2f 46 69 ... >
Message sent: 250 2.0.0 OK 1443026036 hq8sm3016566pad.35 - gsmtp

发送消息:250 2.0.0正常1443026036 hq8sm3016566pad.35-gsmtp

是的,你可以。您必须添加要附加的文件的路径

transporter.sendMail({
  from: 'foo@bar.com',
  to: 'bar@foo.com',
  subject: 'An Attached File',
  text: 'Check out this attached pdf file',
  attachments: [{
    filename: 'file.pdf',
    path: 'C:/Users/Username/Desktop/somefile.pdf',
    contentType: 'application/pdf'
  }],
  function(err, info) {
    if (err) {
      console.error(err);
    } else {
      console.log(info);
    }
  }
});

是的,您可以将pdf文档附加到电子邮件中,以获取您可以使用的路径,并从当前文件到要附加的pdf。这对我有用

// node-mailer.js
const nodemailer = require('nodemailer');
const path = require('path');
...
const mailOptions = {
    from: '',
    to: '',
    subject: '',
    text: '',
    html: '',
    attachments: [
        {
            filename: 'file-name.pdf', // <= Here: made sure file name match
            path: path.join(__dirname, '../output/file-name.pdf'), // <= Here
            contentType: 'application/pdf'
        }
    ]
};

transporter.sendMail(mailOptions, function(error, cb) {

});
//node-mailer.js
const nodemailer=require('nodemailer');
const path=require('path');
...
常量邮件选项={
从:“”,
至:'',
主题:'',
文本:“”,
html:“”,
附件:[
{

文件名:'file name.pdf',//要记住两件事

  • 提供pdf文件的完整地址。您可以使用
    \uu dirname
    (见下文)

  • 文件名和路径上的pdf名称应完全相同

    let info = await transporter.sendMail({
      from: '"Subject Foo Bar" <foo@bar.com>', // sender address
      to: `foo@bar.com, foofoo@bar.com`, // list of receivers
      subject: "Your's subject", // Subject line
      text: "Body of the email",
      attachments: [
        {
          filename: "Trial_Agreement.pdf",
          path: __dirname + "/Trial_Agreement.pdf",
        },
      ],
    });
    
    let info=wait transporter.sendMail({
    发件人:“'Subject Foo Bar',//发件人地址
    致:`foo@bar.com, foofoo@bar.com`,//接收者列表
    主题:“您的主题”,//主题行
    正文:“电子邮件正文”,
    附件:[
    {
    文件名:“试用协议.pdf”,
    路径:“\u dirname+”/Trial\u Agreement.pdf”,
    },
    ],
    });
    

  • 是的,这很容易做到。我最近在一个项目上工作,需要同样的东西,对我来说效果很好。我用Gmail在这里发送邮件

    导入nodeEmailer

    const nodemailer = require('nodemailer');
    
    发送邮件的主要功能

    const sendEmailWithPromiseWithDynamicData = async () => {        
        let mailOptions = mailOptionsForDynamicMail()
        return new Promise((resolve, reject) => {
        createEmailTranspoter().sendMail(mailOptions, async(error, info) => 
        {                      
            if (error) {
            reject(error);
        }
            resolve(info);
        });
      });
    }
    
    邮件选项功能

    const mailOptionsForDynamicMail = async() => {            
                return {
                    from: `"PROJECT NAME" <SENDER EMAIL ADDRESS>`, // sender address
                    to: "RECEIVER EMAIL ADDRESS", // list of receivers
                    subject: "Test Subject", // Subject line
                    text: "Test Text", // plain text body
                    html: generateEmailTemplateForDynamicMail(), // html body
                    attachments: [
                        {   // utf-8 string as an attachment
                            filename: "YOUR ATTACHMENT FILE NAME", // file name, like 'test.pdf'
                            href: "LINK TO THE FILE" // link to the file, like http://example.com/invoices/test.pdf 
                        }
                    ]
                };
            }
        }
    
    邮件HTML正文

    const generateEmailTemplateForDynamicMail = async() => {
                return `
          <h4>This is a test mail</h4>
          <h5>Testing for email Attachments</h5>
          <br>
          <br>
          <br>
          <p></p>
          <p>Thanks</p>
          <p>Test person</p>
          `;
    }
    
    const generateEmailTemplateForDynamicMail=async()=>{
    返回`
    这是一封测试邮件
    测试电子邮件附件
    


    谢谢

    测试人员

    `; }
    NodeEmailer文档链接:


    谢谢

    AFAIK它支持所有的非文本内容类型哦,我的天啊,非常感谢!!!。直到现在我都沉浸在网络包配置的海洋中。妈的,谢谢你。你怎么解释允许人们上传pdf和附加?路径是什么?对不起,我没有理解你。在mem中生成pdf时,我不能这样做ory(即,没有文件)。除了base64编码的图像外,任何地方都没有示例。@Vishnu和Roko C.Buljax哦,我的天啊,非常感谢你!!!。直到现在我都淹没在web包配置的海洋中。天哪,谢谢你。
    const mailOptionsForDynamicMail = async() => {            
                return {
                    from: `"PROJECT NAME" <SENDER EMAIL ADDRESS>`, // sender address
                    to: "RECEIVER EMAIL ADDRESS", // list of receivers
                    subject: "Test Subject", // Subject line
                    text: "Test Text", // plain text body
                    html: generateEmailTemplateForDynamicMail(), // html body
                    attachments: [
                        {   // utf-8 string as an attachment
                            filename: "YOUR ATTACHMENT FILE NAME", // file name, like 'test.pdf'
                            href: "LINK TO THE FILE" // link to the file, like http://example.com/invoices/test.pdf 
                        }
                    ]
                };
            }
        }
    
    const createEmailTranspoter = () => {        
            return nodemailer.createTransport({
                host: 'smtp.gmail.com', //your smtp host name
                service: 'Gmail', // your service name
                port: 465,
                secure: true, // true for 465, false for other ports
                auth: {
                    user: "SENDER MAIL",
                    pass: "SENDER MAIL PASSWORD"
                },
                tls: {
                    rejectUnauthorized: true
                }
            });
        
        }
    
    const generateEmailTemplateForDynamicMail = async() => {
                return `
          <h4>This is a test mail</h4>
          <h5>Testing for email Attachments</h5>
          <br>
          <br>
          <br>
          <p></p>
          <p>Thanks</p>
          <p>Test person</p>
          `;
    }