The page contains release notes for Aspose.Email Cloud 20.1 – [API Reference](https://apireference.aspose.cloud/email/)
New features
Introducing new Model API for VCard, iCalendar and Email message
**iCalendar** is a MIME type which allows users to exchange and store calendaring and scheduling information such as journal entries, events, free/busy information and to-dos.
In the previous version were only property sets based API. For example, to create iCalendar file using .Net SDK you had to use the following code:
typescript
await api.createCalendar(new requests.CreateCalendarRequest(
fileName,
new models.HierarchicalObjectRequest(
new models.HierarchicalObject(
'CALENDAR',
undefined, [
new models.PrimitiveObject("LOCATION", undefined, "location"),
new models.PrimitiveObject("STARTDATE", undefined, startDate.toUTCString()),
new models.PrimitiveObject("ENDDATE", undefined, endDate.toUTCString()),
new models.HierarchicalObject("ORGANIZER", undefined, [
new models.PrimitiveObject("ADDRESS", undefined, "organizeraspose.com"),
new models.PrimitiveObject("DISPLAYNAME", undefined, "Organizer Name")
]),
new models.HierarchicalObject("ATTENDEES", undefined, [
new models.IndexedHierarchicalObject("ATTENDEE", undefined, 0, [
new models.PrimitiveObject("ADDRESS", undefined, "attendeeaspose.com"),
new models.PrimitiveObject("DISPLAYNAME", undefined, "Attendee Name")
])
])
]),
new models.StorageFolderLocation(storage, folder))));
In the current version, we simplified the work with iCalendar files. Now the same object can be represented by using new **CalendarDto** model:
typescript
var calendar = new models.CalendarDto();
calendar.attendees = [
new models.MailAddress('Attendee Name', 'attendeeaspose.com', 'Accepted')
];
calendar.description = 'Some description';
calendar.summary = 'Some summary';
calendar.organizer = new models.MailAddress('Organizer Name', 'organizeraspose.com');
calendar.startDate = getDate(undefined, 1);
calendar.endDate = getDate(calendar.startDate, 1);
calendar.location = 'Some location';
**You can use both ways to work with iCalendar files.**
Model API does not have separate methods to operate with attachments. Attachments can be operated directly by transforming files to Base64 strings:
typescript
var data= fs.readFileSync(filePath).toString('base64');
var attachment = new models.Attachment();
attachment.base64Data = data;
attachment.name = 'attachment-name.txt';
calendar.attachments = [attachment];
More examples available on SDK wiki pages: [.Net](https://github.com/aspose-email-cloud/aspose-email-cloud-dotnet/wiki/Model-API), [Java](https://github.com/aspose-email-cloud/aspose-email-cloud-java/wiki/Model-API), [Python](https://github.com/aspose-email-cloud/aspose-email-cloud-python/wiki/Model-API), [Ruby](https://github.com/aspose-email-cloud/aspose-email-cloud-ruby/wiki/Model-API), [Typescript](https://github.com/aspose-email-cloud/aspose-email-cloud-node/wiki/Model-API), [PHP](https://github.com/aspose-email-cloud/aspose-email-cloud-php/wiki/Model-API)
Files conversion
Aspose.Email Cloud supports MSG, MHTM, HTML and EML file formats to store emails. Now new methods to convert such files are available. For example, to convert EML to MSG, you can use the following code:
typescript
var convertedFile = await api.convertEmail(
new requests.ConvertEmailRequest(
'Msg', fs.readFileSync('file/on/disk')));
More details on SDK wiki pages: [.Net](https://github.com/aspose-email-cloud/aspose-email-cloud-dotnet/wiki/Email-Converter), [Java](https://github.com/aspose-email-cloud/aspose-email-cloud-java/wiki/Email-Converter), [Python](https://github.com/aspose-email-cloud/aspose-email-cloud-python/wiki/Email-Converter), [Ruby](https://github.com/aspose-email-cloud/aspose-email-cloud-ruby/wiki/Email-Converter), [Typescript](https://github.com/aspose-email-cloud/aspose-email-cloud-node/wiki/Email-Converter), [PHP](https://github.com/aspose-email-cloud/aspose-email-cloud-php/wiki/Email-Converter)
Also, we added iCalendar to AlternateView converter. Now it can be properly attached to an email message:
ruby
var alternate = await api.convertCalendarModelToAlternate(
new requests.ConvertCalendarModelToAlternateRequest(
new models.CalendarDtoAlternateRq(calendar, 'Create')));
SDK changes
- All SDKs now have wiki pages: [.Net](https://github.com/aspose-email-cloud/aspose-email-cloud-dotnet/wiki), [Java](https://github.com/aspose-email-cloud/aspose-email-cloud-java/wiki), [Python](https://github.com/aspose-email-cloud/aspose-email-cloud-python/wiki), [Ruby](https://github.com/aspose-email-cloud/aspose-email-cloud-ruby/wiki), [Typescript](https://github.com/aspose-email-cloud/aspose-email-cloud-node/wiki), [PHP](https://github.com/aspose-email-cloud/aspose-email-cloud-php/wiki)
- Fixed bug with Date serialization in Typescript SDK
- SDK docstrings improved