Release 4.0.0-preview1-00051
[platform/core/csapi/tizenfx.git] / src / Tizen.Messaging / Tizen.Messaging.Email / EmailSender.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 using System;
18 using System.Threading.Tasks;
19
20 namespace Tizen.Messaging.Email
21 {
22     /// <summary>
23     /// The class to send email messages.
24     /// </summary>
25     public static class EmailSender
26     {
27         /// <summary>
28         /// Sends the email message.
29         /// </summary>
30         /// <param name="email">The email message</param>
31         /// <returns> Failure if email sending failed otherwise Success</returns>
32         public static async Task<EmailSendResult> SendAsync(EmailMessage email)
33         {
34             var task = new TaskCompletionSource<EmailSendResult>();
35             int ret = (int)EmailError.None;
36             bool saveToSentBox = false;
37
38             email.FillHandle();
39             email.Save();
40
41             Interop.Email.EmailSentCallback _emailSendingCallback = (IntPtr handle, int result, IntPtr userData) =>
42             {
43                 task.SetResult((EmailSendResult)result);
44             };
45
46             ret = Interop.Email.SetCb(email._emailHandle, _emailSendingCallback, IntPtr.Zero);
47             if (ret != (int)EmailError.None)
48             {
49                 Log.Error(EmailErrorFactory.LogTag, "Failed to set email incoming callback, Error code: " + (EmailError)ret);
50                 throw EmailErrorFactory.GetException(ret);
51             }
52
53             ret = Interop.Email.SendEmail(email._emailHandle, saveToSentBox);
54             if (ret != (int)EmailError.None)
55             {
56                 Log.Error(EmailErrorFactory.LogTag, "Failed to send email, Error code: " + (EmailError)ret);
57                 throw EmailErrorFactory.GetException(ret);
58             }
59
60             var sendResult = await task.Task;
61
62             ret = Interop.Email.UnsetCb(email._emailHandle);
63             if (ret != (int)EmailError.None)
64             {
65                 Log.Error(EmailErrorFactory.LogTag, "Failed to set email incoming callback, Error code: " + (EmailError)ret);
66                 throw EmailErrorFactory.GetException(ret);
67             }
68
69             return sendResult;
70         }
71     }
72 }