javascript - Nodejs 编码为 Base64 字符串不起作用

标签 javascript node.js mandrill

我正在尝试将日历事件作为 nodejs 中的附件 (.ics) 文件发送。

我正在使用 ical-generator 库来创建事件。

下面的代码生成一个 .ics 文件并将其附加到电子邮件中,但文件始终为空。

我不确定为什么事件内容没有转换为 base64。当我记录转换后的内容时,它显示相同的内容(未转换为 base64)

const cal = ical({ domain: "github.com", name: "my first iCal" });
// overwrite domain
cal.domain("example.net");

cal.createEvent({
  start: moment(),
  end: moment().add(1, "hour"),
  summary: "Example Event",
  description: "It works ;)",
  location: "my room",
  url: "http://example.net/",
});

 console.log('result :', cal.toString("base64"));
    // result : 
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//example.net//ical-generator//EN
NAME:my first iCal
X-WR-CALNAME:my first iCal
BEGIN:VEVENT
UID:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="566666667b22383b2f373316332e373b263a3378383322" rel="noreferrer noopener nofollow">[email protected]</a>
SEQUENCE:0
DTSTAMP:20210403T212902Z
DTSTART:20210403T212902Z
DTEND:20210403T222902Z
SUMMARY:Example Event
LOCATION:my room
DESCRIPTION:It works \;)
URL;VALUE=URI:http://example.net/
END:VEVENT
END:VCALENDAR

 var message = {
      html: emailBody,
      subject: "test",
      from_email: "from email",
      from_name: "sender name",
      to: [
        {
          email: "receiver email",
        },
      ],
      tags: ["test"],
      attachments: [
        {
          type: "text/calendar",
          content: cal.toString("base64"),
          name: "fileName.ics",
        },
      ],
    };

我发现这个编码为来自其他线程的 base64 内容,并且它工作得很好。 “QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjIuMA0KUFJPRElEOi0vL01lZXRlci9tZWV0ZXIvL05PTlNHTUwgdjEuMC8vRU4NCkNBTFNDQUxFOkdSRUdPUklBTg0KTUVUSE9EolJFUVVFU1QNCkJFR0lOOlZFVkVOVA 0KRFRTVEFSVDoyMDE0MTAxOFQyMDMwMDBaDQpEVEVORDoyMDE0MTAxOFQyMTAwMDBaDQpVSUQ6MjAxNDEwMTVUMDAYODEzLTIyMzc4ODg2OEBtZWV0ZXIuY29tDQpEVFNUQU1QOJIwMTQxMDE0VDIxMjgxM1onck 9SR0FOSVpFUjtDTj0ic25hZ2dzQGdtYWlsLmNvbSI7U0VOVC1CWT0iTUFJTFRPOnNvbWVhchHBAZ21haWwuY29tIjtMQU5HVUFHRT1zZTpNQUlMVE86c25hZ2dzQGdtYWlsLmNvbQ0KQVRURU5ERUU7Q1V UWVBFPULORELWSURVQUW7Uk9MRT1SRVEtUEFSVElDSVBBTlQ7UEFSVFNUQVQ9TkVFRFMtQUNUSU9OO1JTVlA9VFJVRTtDTj1GZXNzeSBNO1gtTlVNLUdVRVNUUz0wOk1BSUxUTzpzbmFnZ3MyQGdtyWlsLmNvbQ0KREVTQ1 JJUFRJT046ZGRkZCBtYW5kcmlsbA0KTE9DQVRJT046ZGRkZGRkIG1hbmRyaWxsDQpTVU1NQVJZOkNhbiBJIGxheSBsb3c/IENvb2sgc29tZSB5YXkteW8gMg0KVFJBTlNQOk9QQVFVRQ0KU0VRVUVOQ 0U6MA0KU1RBVFVTOkNPTkZJUk1FRA0KRU5EOlZFVkVOVA0KRU5EOlZDQUxFTkRBUg==”

如果我尝试上面的编码字符串,我的日历事件工作正常。 file.ics 也工作正常..所以我的猜测是将该事件内容转换为 base64 时出现问题。

最佳答案

ical-generator 包的日历类不提供将格式作为参数的 toString(),如 Buffer。您只需将其转换为 Base 64,就像转换任何其他字符串一样。

const calStr = cal.toString()
const calB64 = Buffer.from(calStr).toString('base64')
console.log('result :', calB64);

关于javascript - Nodejs 编码为 Base64 字符串不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66936061/

相关文章:

ruby-on-rails - OpenSSL::SSL::SSLError(主机名 "smtp.mandrillapp.com"与服务器证书不匹配)

javascript - 识别图像点击

javascript - DOM 准备好后立即开始抓取 Nightmarejs

javascript - Google Cloud Storage 上传请求有时有效,有时无效 - 是否可恢复?

javascript - 带有 jquery ui 可排序问题的 jquery slim scroll

c++ - Node 缓冲区到字符数组

java - 如何在 Mandrill 模板中使用 ParseObject 发送动态内容电子邮件?

email - SPF 记录 - DNS 查询过多

javascript - node.js cron 作业未启动

javascript - 为什么这个简单的 Node 程序不是非阻塞的?