Node.js 使用nodejs通过电子邮件发送PKPass

Node.js 使用nodejs通过电子邮件发送PKPass,node.js,wallet,passkit,Node.js,Wallet,Passkit,我正在服务器端成功生成pkpass,现在我正在尝试通过电子邮件发送pkpass。我正在尝试这样做,但是当我从发送的电子邮件下载密码后尝试打开密码时,我收到了以下错误无法打开密码“Event.pkpass”。可以通过我的应用程序打开密码,并且工作正常。我做错了什么 传递Url:shoebox://card/Q03UycwVF9DPkMG6ytNw+DviZ6A= 生成PKPass: try { const examplePass = await createPass({ model

我正在服务器端成功生成
pkpass
,现在我正在尝试通过电子邮件发送
pkpass
。我正在尝试这样做,但是当我从发送的电子邮件下载密码后尝试打开密码时,我收到了以下错误
无法打开密码“Event.pkpass”。
可以通过我的应用程序打开密码,并且工作正常。我做错了什么

传递Url:
shoebox://card/Q03UycwVF9DPkMG6ytNw+DviZ6A=

生成PKPass:

try {
  const examplePass = await createPass({
      model: "./models/Event.pass",
      certificates: {
          wwdr: "./models/certs/wwdrc.pem",
          signerCert: "./models/certs/signerCert.pem",
          signerKey: {
              keyFile: "./models/certs/signerKey.pem",
              passphrase: "54321"
          }
      },
      overrides: {
          // keys to be added or overridden
          serialNumber: serialNumber
      }
  });

  examplePass.barcode("36478105430"); // Random value

  examplePass.headerFields.push({
    label : "EVENT",
    key : "title",
    value : title
  });

  examplePass.primaryFields.push({
    key : "date",
    label : "DATE",
    value : date
  });

  examplePass.secondaryFields.push({
    key : "location",
    label : "LOCATION",
    value : location
  });

// Generate the stream, which gets returned through a Promise
const stream = examplePass.generate();

res.set({
  "Content-Type": "application/vnd.apple.pkpass",
  "Content-disposition": `attachment; filename=${passName}.pkpass`
});

stream.pipe(res);
let transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 587,
secure: false,
requireTLS: true,
auth: {
    user: 'email@gmail.com',
    pass: 'password'
}
});

let mailOptions = {
from: 'email@gmail.com',
to: userEmail,
subject: "You're on your way to ",
html: '<h1>Testing email</h1>',
attachments: [
  {
    filename: 'Event.pkpass',
    contentType: 'application/vnd.apple.pkpass',
    content: stream
  }
]
};

transporter.sendMail(mailOptions, (error, info) => {
   if (error) {
      return console.log(error.message);
   }
   console.log('success');
});
发送电子邮件:

try {
  const examplePass = await createPass({
      model: "./models/Event.pass",
      certificates: {
          wwdr: "./models/certs/wwdrc.pem",
          signerCert: "./models/certs/signerCert.pem",
          signerKey: {
              keyFile: "./models/certs/signerKey.pem",
              passphrase: "54321"
          }
      },
      overrides: {
          // keys to be added or overridden
          serialNumber: serialNumber
      }
  });

  examplePass.barcode("36478105430"); // Random value

  examplePass.headerFields.push({
    label : "EVENT",
    key : "title",
    value : title
  });

  examplePass.primaryFields.push({
    key : "date",
    label : "DATE",
    value : date
  });

  examplePass.secondaryFields.push({
    key : "location",
    label : "LOCATION",
    value : location
  });

// Generate the stream, which gets returned through a Promise
const stream = examplePass.generate();

res.set({
  "Content-Type": "application/vnd.apple.pkpass",
  "Content-disposition": `attachment; filename=${passName}.pkpass`
});

stream.pipe(res);
let transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 587,
secure: false,
requireTLS: true,
auth: {
    user: 'email@gmail.com',
    pass: 'password'
}
});

let mailOptions = {
from: 'email@gmail.com',
to: userEmail,
subject: "You're on your way to ",
html: '<h1>Testing email</h1>',
attachments: [
  {
    filename: 'Event.pkpass',
    contentType: 'application/vnd.apple.pkpass',
    content: stream
  }
]
};

transporter.sendMail(mailOptions, (error, info) => {
   if (error) {
      return console.log(error.message);
   }
   console.log('success');
});
let transporter=nodeEmailer.createTransport({
主机:“smtp.gmail.com”,
港口:587,
安全:错误,
要求:正确,
认证:{
用户:'email@gmail.com',
通行证:“密码”
}
});
让邮件选项={
发件人:'email@gmail.com',
收件人:userEmail,
主题:“你正在去的路上”,
html:“测试电子邮件”,
附件:[
{
文件名:“Event.pkpass”,
contentType:'application/vnd.apple.pkpass',
内容:流
}
]
};
transporter.sendMail(邮件选项,(错误,信息)=>{
如果(错误){
返回console.log(错误消息);
}
console.log('success');
});

您可以发布一个指向您生成的.pkpass捆绑包的链接吗?文件大小是多少?当您尝试在设备上打开时,控制台日志会显示什么作为不打开它的原因?控制台不会记录任何错误,它只会显示我上面在设备上发布的错误。我已经用钱包工具包的URL更新了这个问题&文件大小是“零KB”,现在我正在阅读,这可能是它不起作用的原因@PassKit@PassKit你能帮我一下或者给我一些建议吗?这是node.js的问题,我不是node专家。我猜您需要从流中发送字节,而不是原始的steam对象。您可以发布一个指向生成的.pkpass捆绑包的链接吗?文件大小是多少?当您尝试在设备上打开时,控制台日志会显示什么作为不打开它的原因?控制台不会记录任何错误,它只会显示我上面在设备上发布的错误。我已经用钱包工具包的URL更新了这个问题&文件大小是“零KB”,现在我正在阅读,这可能是它不起作用的原因@PassKit@PassKit你能帮我一下或者给我一些建议吗?这是node.js的问题,我不是node专家。我猜您需要从流中发送字节,而不是原始的steam对象。