Skip to main content

How to send a meeting request correctly with nodemailer?

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';
}

Popular posts from this blog

Watch Live cam on Google!!!!!

Ahhh!!! type certain string in google search bar above and it would bring up the network live cam into your browser. These can be anything from CCTV or webcams... There are lots of string.. i suggest a few down below use them to begin with.. And do come up with your own.. and leave a comment to the post... And ya.. if u come up with something interesting then don forget to share it.. Strings::: Axis cameras: "adding live video to one of your own pages a very easy task with an AXIS 2100 Network Camera" ' google ' intile:"Live view - / - AXIS" ' google ' "Your browser has JavaScript turned off.For the user interface to work effectively" ' google ' inurl:indexFrame.html axis ' google ' "Live web imaging unleashed" ' google ' MOBOTIX cameras: (intext:"MOBOTIX M1" | intext:"MOBOTIX M10") intext:"Open Menu" Shift-Reload ' google ' JVC cameras: "(c)copyright 199...

How to set Tomcat 7 source level to Java 7? Avoid "Resource specification not allowed here for source level below 1.7" error

I have been facing problem where whenever I was accessing jsp page which were using some Java 7 specific features, the compilation of such JSP pages use to fail with following error: Resource specification not allowed here for source level below 1.7 To fix this I googled for hours and set up the JDK home correctly on my catalina.sh with env.sh to point to jdk7. But this never solved my problem. Finally today I hit the gold while reading the apache tomcat jasper  documentation . The JSP compiler had to be set to use 1.7 as target and source version. To do this we need to add two extra init-params in the conf/web.xml file in the tomcat home.  The JSP servlet configuration should have      <servlet>         <servlet-name>jsp</servlet-name>         <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>         <init-param>     ...

Did Snapchat CEO's comment on India being a poor country?

I would like to get the facts straight over here before we get more offended reading the headlines of all the major Indian bulletins. Lets breakdown this incident: This is an allegation. There are no evidence yet to prove this yet. The allegation is made by an employee of Snapchat, Anthony Pompliano, who is currently engaged in lawsuit against Snapchat, accusing the company of misleading the investors by providing inflated statistics about user data. Snapchat unredacted lawsuit by gmaddaus on Scribd According to the allegation, the statement was told in answer to a private company meeting, discussing the further expansion plan. India was ranked 126th in the world richest country. Total countries are 189. The ranking was created by adjusting GDP per capita to relative purchasing power.  Snapchat is a business. It earns money from advertising. The digital advertisement market of India is close to   Rs 7000 crore  . Which roughly comes to $ 1 billion whi...