【问题标题】:how to attach .ics file with email in node js?如何在节点 js 中附加带有电子邮件的 .ics 文件?
【发布时间】:2016-08-27 04:15:54
【问题描述】:

我正在使用 ics 进行日历以成功完成获取事件,但我想发送一些带有 .ics 附件的文本,为此我尝试使用此代码,只需查看并告诉我必须更改的地方。 我有 event.ics 文件,但想发送带有邮件文本/html 内容的文件。

var ics = require('ics');
var options = {
    eventName: 'Fingerpainting lessons',
    filename: 'event1.ics',
    dtstart: date,
    location: 'Here and there',
    email: {
        name: 'alex bob',
        email: email
    }
};
ics.createEvent(options, null, function(err, calendar) {
    if (!err)
    {
            console.log('Event file',calendar);
            var filePath = path.join('vabo_email', 'email.html');
                fs.readFile(filePath, {encoding: 'utf-8'},
                function(err, data) {
                        if ( ! err )
                        {

                            var helper = require('sendgrid').mail;

                            from_email = new helper.Email('booking@callvabo.com')
                            to_email = new helper.Email(email)
                            subject = subject
                            //Dynamic content
                            var data = data.replace("$content", bodycontent)

                            content = new helper.Content('text/html', data)
                            //content = new helper.Content("text/Calendar",calendar)
                            mail = new helper.Mail(from_email, subject, to_email,content);

                            var sg = require('sendgrid')('secretekey');

                            var requestBody = mail.toJSON();
                            var request = sg.emptyRequest();
                            request.method = 'POST';
                            request.path = '/v3/mail/send';
                            request.body = requestBody;
                            data = new helper.Content("text/Calendar",calendar)
                            request.attachments = [{'filename': 'calendar.ics', 'content': data}]

                            sg.API(request, function (error, response) {
                                if ( ! error )
                                {
                                        console.log('mail send Successfully to',email);
                                }
                                else
                                {
                                        console.log('Error for send mail',error);
                                }
                            });
                        }
                        else
                        {
                                console.log('Error for calendar',err);
                        }
                        });
    }
    else
    {
            console.log('Error for creating Event',err);
    }
});

【问题讨论】:

  • 您需要删除并重新创建一个新的 API 密钥(在将其包含在上面的代码 sn-p 中之后)。如果我是您,我会尽快这样做。
  • 我看到你编辑了上面的代码。请确保您仍然销毁了该密钥并创建了一个新密钥,因为任何人都可以查看编辑历史记录以查看发生了什么变化并获取该 API 密钥。
  • 感谢@贾斯汀斯蒂尔
  • 我也在努力解决这个问题。我现在似乎也无法获取附件...

标签: node.js email sendgrid


【解决方案1】:

日历只包含文件路径和名称。您需要读入文件内容,然后需要对文件内容进行 Base64 编码,最后 request.attachments 不正确。将附件添加到邮件对象或 requestBody。

mail = new helper.Mail(from_email, subject, to_email,content);
var base64Content = fs.readFileSync(calendar).toString('base64');
mail.attachments = [{'filename': 'calendar.ics', 'content': base64Content, 'type': 'text/Calendar'}]

var sg = require('sendgrid')('secretekey');

var requestBody = mail.toJSON();
var request = sg.emptyRequest();
request.method = 'POST';
request.path = '/v3/mail/send';
request.body = requestBody;

sg.API(request, function (error, response) {

【讨论】:

  • 谢谢@贾斯汀斯蒂尔
  • 我仍然无法将文件作为附件发送
  • @Alex,尝试上述更改。这终于对我有用了。
  • 但是我在内容之前得到了日历,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 2021-07-10
  • 2018-11-29
  • 2016-01-16
  • 2012-04-16
相关资源
最近更新 更多