I am trying to use the following code to send out meeting request using nodemailer. The problem I am facing is that the meeting invite is going as an attachment ics file instead of request where one can directly add. I have tried it on multiple mail client. Any pointers would be highly appreciated.
transport.sendMail({
from: 'BakBak.io ' ,
to: 'biplav.saraf@gmail.com',
subject: 'Meeting',
//html: "Hi",
text: "Hola!!",
alternative: {
contentType: "text/calendar; method=REQUEST; name='meeting.ics';component=VEVENT",
contents: new Buffer(cal.toString()),
contentEncoding:"7bit",
"Content-Class":"urn:content-classes:calendarmessage"
},
headers: {
"Content-Type": "text/calendar",
//"charset":"utf-8",
"method":"REQUEST",
"component":"VEVENT",
"Content-Class":"urn:content-classes:calendarmessage"
}//,
//attachments : [{filename:'invite.ics',contents: cal.toString()}]
}, function(err, responseStatus) {
if (err) {
console.log(err);
res.render('schedule',{errors: err.message});
} else {
console.log(responseStatus.message);
res.render('schedule',{success_msg: "Successfully Created!"});
}
});
Answer:
Gmail does not show meeting request and give an option to add to calendar if sender and receiver are same.
This is what worked for me:
transport.sendMail({
from: 'BakBak.io ' ,
to: 'donateoldspectacles@gmail.com',
subject: 'Meeting',
html: "Hiya!!",
text: "Hola!!",
alternatives: [{
contentType: "text/calendar",
content: new Buffer(ical)
}]
}, function(err, responseStatus) {
if (err) {
console.log(err);
res.render('schedule',{errors: err.message});
} else {
console.log(responseStatus.message);
res.render('schedule',{success_msg: "Successfully Created!"});
}
});
function createIcal(params,uid) {
start = new Date(params.start);
end = new Date(params.end);
ts = new Date();
start = getTZFormat(start);
end = getTZFormat(end);
ts = getTZFormat(ts);
uid = replaceAll('-','',guid());
main_email = params.email;
part_email = params.main_email;
org_name = "BakBak Scheduler";
org_email = "donateoldspectacles@gmail.com";
subject = params.subject;
agenda = params.agenda;
url = 'http://www.bakbak.io/schedule/meeting/parts?users='+main_email+','+part_email;
escaped_url = ' <'+url+'>';
return 'BEGIN:VCALENDAR\r\n'
+'PRODID:-//Bakbak//BakBak Scheduler Calendar 1.0//EN\r\n'
+'VERSION:2.0\r\n'
+'CALSCALE:GREGORIAN\r\n'
+'METHOD:REQUEST\r\n'
+'BEGIN:VEVENT\r\n'
+'DTSTAMP:'+ts+'\r\n'
+'DTSTART:'+start+'\r\n'
+'DTEND:'+end+'\r\n'
+'SUMMARY:'+subject+escaped_url+'\r\n'
+'UID:'+ uid +'\r\n'
+'DESCRIPTION:'+ agenda +' \r\n'
+'LOCATION: Web Location'+escaped_url+'\r\n'
+'ORGANIZER;CN='+org_name+':mailto:'+org_email+'\r\n'
+'ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN='+part_email+';X-NUM-GUESTS=0:mailto:'+part_email+'\r\n'
+'ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN='+main_email+';X-NUM-GUESTS=0:mailto:'+main_email+'\r\n'
+'SEQUENCE:0\r\n'
+'LAST-MODIFIED:'+ts+'\r\n'
+'CREATED:'+ts+'\r\n'
+'TRANSP:OPAQUE\r\n'
+'STATUS:CONFIRMED\r\n'
+'END:VEVENT\r\n'
+'END:VCALENDAR\r\n';
}
Checkout this link , it might help
ReplyDeletehttps://medium.com/@manishbit97/sending-email-via-node-js-with-calendar-invite-2ebf8637b22f?source=friends_link&sk=623d1b467bdd5716f076f2bae7f2b5a3