Skip to content

Commit 4445676

Browse files
committed
Model API usage example added
1 parent a5e9b02 commit 4445676

File tree

2 files changed

+138
-22
lines changed

2 files changed

+138
-22
lines changed

Aspose.Email-Cloud.Tests/Tests/TestFixture.cs

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -322,27 +322,20 @@ public async Task CreateCalendarEmailTest()
322322
},
323323
Description = "Some description",
324324
Summary = "Some summary",
325-
Reminders = new List<CalendarReminder>
326-
{
327-
new CalendarReminder
328-
{
329-
Action = "Email",
330-
Description = "Reminder",
331-
Duration = TimeSpan.FromMinutes(5).Ticks,
332-
Repeat = 3,
333-
Summary = "Reminder summary",
334-
Trigger = new ReminderTrigger(DateTime.Today, TimeSpan.FromMinutes(5).Ticks, "Start"),
335-
Attendees = new List<ReminderAttendee>
336-
{
337-
new ReminderAttendee("cloud.em@yandex.ru")
338-
}
339-
}
340-
},
341325
Organizer = new MailAddress("Organizer Name", "cloud.em@yandex.ru", null),
342-
StartDate = DateTime.Now,
343-
EndDate = DateTime.Now.AddHours(1),
326+
StartDate = DateTime.UtcNow.AddDays(1).AddHours(12),
327+
EndDate = DateTime.UtcNow.AddDays(1).AddHours(13),
344328
Location = "Some location"
345329
};
330+
var folderLocation = new StorageFolderLocation(StorageName, folder);
331+
var calendarFile = $"{Guid.NewGuid()}.ics";
332+
await emailApi.SaveCalendarModelAsync(
333+
new SaveCalendarModelRequest(calendarFile, new StorageModelRqOfCalendarDto(
334+
calendar, folderLocation)));
335+
336+
var exists = await IsFileExist(calendarFile);
337+
Assert.True(exists);
338+
346339
var alternate = await emailApi.ConvertCalendarModelToAlternateAsync(
347340
new ConvertCalendarModelToAlternateRequest(
348341
new CalendarDtoAlternateRq(calendar, "Create", null)));
@@ -354,14 +347,13 @@ public async Task CreateCalendarEmailTest()
354347
Subject = "Some subject",
355348
Body = "Some body"
356349
};
357-
var file = $"{Guid.NewGuid().ToString()}.eml";
358-
var folderLocation = new StorageFolderLocation(StorageName, folder);
350+
var emailFile = $"{Guid.NewGuid().ToString()}.eml";
359351
await emailApi.SaveEmailModelAsync(
360-
new SaveEmailModelRequest("Eml", file,
352+
new SaveEmailModelRequest("Eml", emailFile,
361353
new StorageModelRqOfEmailDto(email,
362354
folderLocation)));
363355
var emlFile = await emailApi.DownloadFileAsync(
364-
new DownloadFileRequest($"{folder}/{file}", StorageName));
356+
new DownloadFileRequest($"{folder}/{emailFile}", StorageName));
365357
emlFile.Seek(0, SeekOrigin.Begin);
366358
var fileReader = new StreamReader(emlFile);
367359
var emlFileContent = await fileReader.ReadToEndAsync();

README.md

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,130 @@ System.Console.WriteLine(surName.Value); // "Cane"
235235
```
236236
</details>
237237

238+
#### Model API
239+
There are 2 ways to operate with Eml/VCard/iCalendar files available in Aspose.Email Cloud.
240+
First is operating files as property sets. For example:
241+
<details>
242+
<summary>Create iCalendar using property set</summary>
243+
244+
```csharp
245+
var fileName = $"{Guid.NewGuid().ToString()}.ics";
246+
startDate = startDate ?? DateTime.UtcNow.Date.AddDays(1).AddHours(12);
247+
var endDate = startDate.Value.AddHours(1);
248+
var request = new CreateCalendarRequest(fileName,
249+
new HierarchicalObjectRequest(
250+
new HierarchicalObject("CALENDAR", null,
251+
new List<BaseObject>
252+
{
253+
new PrimitiveObject("LOCATION", null, "location"),
254+
new PrimitiveObject("STARTDATE", null, startDate.Value.ToString("u")),
255+
new PrimitiveObject("ENDDATE", null, endDate.ToString("u")),
256+
new HierarchicalObject("ORGANIZER", null,
257+
new List<BaseObject>
258+
{
259+
new PrimitiveObject("ADDRESS", null, "organizer@am.ru"),
260+
new PrimitiveObject("DISPLAYNAME", null, "Piu Man")
261+
}),
262+
new HierarchicalObject("ATTENDEES", null,
263+
new List<BaseObject>
264+
{
265+
new IndexedHierarchicalObject("ATTENDEE", null, 0,
266+
new List<BaseObject>
267+
{
268+
new PrimitiveObject("ADDRESS", null, "attendee@am.ru"),
269+
new PrimitiveObject("DISPLAYNAME", null,
270+
"Attendee Name")
271+
})
272+
})
273+
}), new StorageFolderLocation(StorageName, folder)));
274+
await emailApi.CreateCalendarAsync(request);
275+
```
276+
</details>
277+
278+
And second way is **Model API**, where files are represented using models:
279+
<details open>
280+
<summary>Operate iCalendar using Model API</summary>
281+
282+
First, we can create **CalendarDto** object:
283+
284+
```csharp
285+
var calendar = new CalendarDto
286+
{
287+
Attendees = new List<MailAddress>
288+
{
289+
new MailAddress("Attendee Name", "attendee@am.ru", "Accepted")
290+
},
291+
Description = "Some description",
292+
Summary = "Some summary",
293+
Organizer = new MailAddress("Organizer Name", "organizer@am.ru", null),
294+
StartDate = DateTime.UtcNow.AddDays(1).AddHours(12),
295+
EndDate = DateTime.UtcNow.AddDays(1).AddHours(13),
296+
Location = "Some location"
297+
};
298+
```
299+
This model could be saved as an .ics file:
300+
```csharp
301+
var calendarFileName = $"{Guid.NewGuid()}.ics";
302+
var folderLocation = new StorageFolderLocation(StorageName, folder);
303+
await emailApi.SaveCalendarModelAsync(
304+
new SaveCalendarModelRequest(calendarFileName, new StorageModelRqOfCalendarDto(
305+
calendar, folderLocation)));
306+
```
307+
Or converted to an AlternateView:
308+
```csharp
309+
var alternate = await emailApi.ConvertCalendarModelToAlternateAsync(
310+
new ConvertCalendarModelToAlternateRequest(
311+
new CalendarDtoAlternateRq(calendar, "Create", null)));
312+
```
313+
This AlternateView can be added to **EmailDto** object:
314+
```csharp
315+
var email = new EmailDto
316+
{
317+
AlternateViews = new List<AlternateView> {alternate},
318+
From = new MailAddress("From address", "organizer@am.ru", "Accepted"),
319+
To = new List<MailAddress> {new MailAddress("To address", "attendee@am.ru", null)},
320+
Subject = "Some subject",
321+
Body = "Some body"
322+
};
323+
```
324+
So, the email variable now represents an email with iCalendar in it. This email can be saved to a .eml file:
325+
```csharp
326+
var emailFile = $"{Guid.NewGuid().ToString()}.eml";
327+
await emailApi.SaveEmailModelAsync(
328+
new SaveEmailModelRequest("Eml", emailFile,
329+
new StorageModelRqOfEmailDto(email,
330+
folderLocation)));
331+
```
332+
Also, email can be sent using built-in email client:
333+
```csharp
334+
//First, if there is no email client account configuration on storage:
335+
//Create IMAP account
336+
var imapFile = $"{Guid.NewGuid().ToString()}.account";
337+
var imap = new SaveMailAccountRequest(
338+
new SaveEmailAccountRequest(
339+
"imap.am.ru", 993, "organizer@am.ru", "Auto", "IMAP", "IMAP account",
340+
new StorageFileLocation(StorageName, folder, imapFile), "OrganizerPassword"));
341+
await emailApi.SaveMailAccountAsync(imap);
342+
//Create SMTP account
343+
var smtpFile = $"{Guid.NewGuid().ToString()}.account";
344+
var smtp = new SaveMailAccountRequest(
345+
new SaveEmailAccountRequest(
346+
"smtp.am.ru", 465, "organizer@am.ru", "Auto", "SMTP", "SMTP account",
347+
new StorageFileLocation(StorageName, folder, smtpFile), "OrganizerPassword"));
348+
await emailApi.SaveMailAccountAsync(smtp);
349+
350+
//Then, send email
351+
await emailApi.SendEmailModelAsync(
352+
new SendEmailModelRequest(
353+
new SendEmailModelRq(
354+
imapFile,
355+
smtpFile,
356+
new StorageFolderLocation(StorageName, folder),
357+
email)));
358+
```
359+
</details>
360+
361+
238362
# Licensing
239363
All Aspose.Email Cloud SDKs, helper scripts and templates are licensed under [MIT License](LICENSE).
240364

0 commit comments

Comments
 (0)