title: How to create and send update to existing event by uisng BiWeekly library and Java Mail API?
body: <p>I'm using <a href="http://sourceforge.net/projects/biweekly/" rel="nofollow noreferrer">BiWeekly</a> library to create VEVENT and then send it by using <a href="https://java.net/projects/javamail/pages/Home" rel="nofollow noreferrer">Java Mail API</a>. Everything work fine but how can I create an update for an existing event, i.e. when I receive VEVENT which is update it won't create a new event in a calendar but will update an existing event?</p>
  
  <p>I've tried to set sequence in the following way <code>event.setSequence(2)</code> , but it doesn't work. Upon receive email agent, Lotus Notes, google mail always creates new event.</p>
  
  <p>This is my code of creating and sending event:</p>
  
  <pre><code>try {
              String from = "email@example.com";
              String to = "email@example.com";
              Properties prop = new Properties();
              prop.setProperty("mail.transport.protocol", "smtp");
              prop.setProperty("mail.host", "smtp.example.com");
              prop.setProperty("mail.user", "email");
              prop.setProperty("mail.password", "");
  
              Session session = Session.getDefaultInstance(prop, null);
  
              // Define message
              MimeMessage message = new MimeMessage(session);
              message.addHeaderLine("method=REQUEST");
              message.addHeaderLine("charset=UTF-8");
              message.addHeaderLine("component=VEVENT");
  
              message.setFrom(new InternetAddress(from));
              message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
              message.setSubject("Message Subject");
  
              StringBuffer sb = new StringBuffer();
  
  
              /*EVENT START*/
              VEvent event = new VEvent();
              event.setUid("ANATOLYTARNAVSKY123");
              event.setDescription("Invitation Description");
              event.setSummary("Invitation Description");
              event.setOrganizer("anatolyt@gmail.com");
              event.setLocation("room");
  
              event.setSequence(sequence);
  
  
              Calendar start = Calendar.getInstance();
              start.add(Calendar.HOUR_OF_DAY, sequence + 2);
              Calendar end = Calendar.getInstance();
              end.add(Calendar.HOUR_OF_DAY, sequence + 2);
  
              event.setDateStart(start.getTime());
              event.setDateEnd(end.getTime());
              icals.addEvent(event);
  
              WriterChainText text = Biweekly.write(icals);
              String result = text.go(); 
  
  
              System.out.println(result);
              /*EVENT END*/
  
              StringBuffer buffer = sb.append(result);
  
  
              // Create the message part
              BodyPart messageBodyPart = new MimeBodyPart();
  
              // Fill the message
              messageBodyPart.setHeader("Content-Class", "urn:content-classes:calendarmessage");
              messageBodyPart.setHeader("Content-ID", "calendar_message");
              messageBodyPart.setDataHandler(new DataHandler( new ByteArrayDataSource(buffer.toString(), "text/calendar")));// very important
  
              // Create a Multipart
              Multipart multipart = new MimeMultipart();
  
              // Add part one
              multipart.addBodyPart(messageBodyPart);
  
              // Put parts in message
              message.setContent(multipart);
  
              // send message
              Transport.send(message);
          } catch (MessagingException me) {
              me.printStackTrace();
          } catch (Exception ex) {
              ex.printStackTrace();
          }
  </code></pre>
  
  <p><strong>Here I'll place iterations of the code which I use to send the invitations</strong>:</p>
  
  <ul>
  <li>2nd: <a href="http://pastebin.com/2NWhkgZb" rel="nofollow noreferrer">Added <code>LAST-MODIFIED</code> property as advised by @Michael</a> </li>
  </ul>
  
  <p>Thank you in advance.</p>
  
  <p><strong>UPDATE 1</strong>: </p>
  
  <p>This is first and second VEVENT as generated by my code and BiWeekly library:</p>
  
  <p><strong>CREATE EVENT- VEVENT DATA ONLY</strong>:</p>
  
  <pre><code>BEGIN:VCALENDAR
  VERSION:2.0
  PRODID:-//Michael Angstadt//biweekly 0.4.3//EN
  METHOD:REQUEST
  BEGIN:VEVENT
  DTSTAMP:20151113T100301Z
  UID:ANATOLYTARNAVSKY123
  DESCRIPTION:Invitation Description
  SUMMARY:Invitation Description
  ORGANIZER:mailto:anatolyt@example.com
  LOCATION:room
  SEQUENCE:0
  DTSTART:20151113T120301Z
  DTEND:20151113T120301Z
  END:VEVENT
  END:VCALENDAR
  </code></pre>
  
  <p><strong>UPDATE EVENT - VEVENT DATA ONLY</strong>:</p>
  
  <pre><code>BEGIN:VCALENDAR
  VERSION:2.0
  PRODID:-//Michael Angstadt//biweekly 0.4.3//EN
  METHOD:REQUEST
  BEGIN:VEVENT
  DTSTAMP:20151113T100333Z
  UID:ANATOLYTARNAVSKY123
  DESCRIPTION:Invitation Description
  SUMMARY:Invitation Description
  ORGANIZER:mailto:anatolyt@example.com
  LOCATION:room
  SEQUENCE:1
  DTSTART:20151113T130333Z
  DTEND:20151113T130333Z
  END:VEVENT
  END:VCALENDAR
  </code></pre>
  
  <p><strong>UPDATE 2</strong>:</p>
  
  <p>When I send first and second invitation I get the following email on gmail: </p>
  
  <p><a href="https://i.stack.imgur.com/lfK9K.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/lfK9K.png" alt="enter image description here"></a></p>
  
  <p>The full <strong>original</strong> email content with removed tracerout path due to some privacy issues here:</p>
  
  <p><strong>CREATE EVENT - FULL EMAIL without routing part</strong>:</p>
  
  <pre><code>Date: Sat, 14 Nov 2015 08:03:47 -0700
  From: anatolyt@example.com
  To: anatolyt@gmail.com
  Message-ID: *****
  Subject: Escape Room Invitation
  MIME-Version: 1.0
  Content-Type: multipart/mixed; 
      boundary="----=_Part_0_451111351.1447513426727"
  X-TM-AS-MML: disable
  X-Content-Scanned: Fidelis XPS MAILER
  x-cbid: 15111415-0021-0000-0000-000004CDC424
  
  method=REQUEST
  charset=UTF-8
  component=VEVENT
  
  ------=_Part_0_451111351.1447513426727
  Content-Type: text/calendar; charset=us-ascii
  Content-Transfer-Encoding: 7bit
  Content-Class: urn:content-classes:calendarmessage
  Content-ID: calendar_message
  
  BEGIN:VCALENDAR
  VERSION:2.0
  PRODID:-//Michael Angstadt//biweekly 0.4.3//EN
  METHOD:REQUEST
  CALSCALE:GREGORIAN
  BEGIN:VEVENT
  DTSTAMP:20151114T150346Z
  UID:anatolyt@example.com
  STATUS:CONFIRMED
  DESCRIPTION:Invitation Description
  SUMMARY:Invitation Summary
  ORGANIZER:mailto:anatolyt@example.com
  LOCATION:Escape room
  TRANSP:OPAQUE
  CREATED:20151114T150346Z
  LAST-MODIFIED:20151114T150346Z
  SEQUENCE:0
  DTSTART:20151114T170346Z
  DTEND:20151114T170346Z
  END:VEVENT
  END:VCALENDAR
  
  ------=_Part_0_451111351.1447513426727--
  </code></pre>
  
  <p><strong>UPDATE EVENT - FULL EMAIL without routing part</strong>:</p>
  
  <pre><code>Date: Sat, 14 Nov 2015 08:05:06 -0700
  From: anatolyt@example.com
  To: anatolyt@gmail.com
  Message-ID: *****
  Subject: Escape Room Invitation
  MIME-Version: 1.0
  Content-Type: multipart/mixed; 
      boundary="----=_Part_0_451111351.1447513506015"
  X-TM-AS-MML: disable
  X-Content-Scanned: Fidelis XPS MAILER
  x-cbid: 15111415-0029-0000-0000-000004D409DF
  
  method=REQUEST
  charset=UTF-8
  component=VEVENT
  
  ------=_Part_0_451111351.1447513506015
  Content-Type: text/calendar; charset=us-ascii
  Content-Transfer-Encoding: 7bit
  Content-Class: urn:content-classes:calendarmessage
  Content-ID: calendar_message
  
  BEGIN:VCALENDAR
  VERSION:2.0
  PRODID:-//Michael Angstadt//biweekly 0.4.3//EN
  METHOD:REQUEST
  CALSCALE:GREGORIAN
  BEGIN:VEVENT
  DTSTAMP:20151114T150505Z
  UID:anatolyt@example.com
  STATUS:CONFIRMED
  DESCRIPTION:Invitation Description
  SUMMARY:Invitation Summary
  ORGANIZER:mailto:anatolyt@example.com
  LOCATION:Escape room
  TRANSP:OPAQUE
  CREATED:20151114T150505Z
  LAST-MODIFIED:20151114T150505Z
  SEQUENCE:1
  DTSTART:20151114T180505Z
  DTEND:20151114T180505Z
  END:VEVENT
  END:VCALENDAR
  
  ------=_Part_0_451111351.1447513506015--
  </code></pre>
  
  <p><strong>UPDATE 3</strong>
  It looks that it works correctly on a Lotus Notes but Google Calendar still doesn't recognize an update event.</p>
  
  <p><strong>UPDATE 4 - SOLUTION</strong></p>
  
  <p>As @arnaudq wrote I've missed <code>ATTENDEE</code> property to make a Google Calendar to recognise update event. Here is an example how to do it:</p>
  
  <pre><code>        VEvent event = new VEvent();
          ...
          Attendee attendee = new Attendee("Anatoly Tarnavsky", "anatolyt@gmail.com");
          attendee.setRsvp(true);
          attendee.setRole(Role.CHAIR);
          attendee.setParticipationStatus(ParticipationStatus.CONFIRMED);
          ...
          event.setProperty(attendee);
  </code></pre>