How to Send Email in WP7 using the EmailComposeTask?



In the last blog post we learnt “How to Save Email Address in WP7 using the SaveEmailAddressTask?” where we shared code snippet of the internal implementation of the SaveEmailAddressTask along with the code implementation of a demo app.

 

Today in this blog post we will learn how to compose an email using the Windows Phone 7 SDK class called “EmailComposeTask”. Also sharing the decompiled version of the class, so that you can know the SDK implementation. Continue reading and at the end don’t forget to leave your feedback.

 

Know About the API

Like all other launchers and choosers, “EmailComposeTask” is also a sealed class present inside the namespace Microsoft.Phone.Tasks . It exposes few properties to populate the email fields like “To”, “Cc”, “Bcc”, “Subject”, “Body” etc. The one and only one method named “Show()” opens up the Email Composer dialog in the screen.

 

Here is the meta data of the EmailComposeTask class:

 

 
namespace Microsoft.Phone.Tasks
{
    public sealed class EmailComposeTask
    {
        public string Body { get; set; }
        public string Bcc { get; set; }
        public string Cc { get; set; }
        public int? CodePage { get; set; }
        public string Subject { get; set; }
        public string To { get; set; }
 
        public void Show();
    }
}

 

 

Do you want to know how this class has been implemented inside the SDK library? Then here is your chance to study the code. I am sharing the decompiled version of the EmailComposeTask class here:

 

 
namespace Microsoft.Phone.Tasks
{
  public sealed class EmailComposeTask
  {
    private const int SHAREMETHOD_SEND = 1;
    private const string AppUri = "app://5B04B775-356B-4AA0-AAF8-6491FFEA5614/ShareContent";
 
    public string Body { get; set; }
    public string Bcc { get; set; }
    public string Cc { get; set; }
    public int? CodePage { get; set; }
    public string Subject { get; set; }
    public string To { get; set; }
 
    public void Show()
    {
      if (!ChooserHelper.NavigationInProgressGuard((Action) (() => this.Show())))
        return;

ChooserHelper.Navigate(new Uri(this.BuildUri(), UriKind.Absolute),

this.BuildParameterPropertyBag());

    }
 
    internal string BuildUri()
    {
      return "app://5B04B775-356B-4AA0-AAF8-6491FFEA5614/ShareContent";
    }
 
    internal ParameterPropertyBag BuildParameterPropertyBag()
    {
      ParameterPropertyBag parameterPropertyBag = new ParameterPropertyBag();
      if (!string.IsNullOrEmpty(this.To))
        parameterPropertyBag.CreateProperty("To").StringValue = this.To;
      if (!string.IsNullOrEmpty(this.Cc))
        parameterPropertyBag.CreateProperty("Cc").StringValue = this.Cc;
      string subject = this.Subject;
      if (!string.IsNullOrEmpty(subject))
        parameterPropertyBag.CreateProperty("Subject").StringValue = subject;
      string body = this.Body;
      if (!string.IsNullOrEmpty(body))
        parameterPropertyBag.CreateProperty("Body").StringValue = body;
      string bcc = this.Bcc;
      if (!string.IsNullOrEmpty(bcc))
        parameterPropertyBag.CreateProperty("Bcc").StringValue = bcc;
      int? codePage = this.CodePage;
      if (codePage.HasValue)
        parameterPropertyBag.CreateProperty("CodePage").StringValue = codePage.Value.ToString();
      parameterPropertyBag.CreateProperty("ShareMethod").Int32Value = 1;
      parameterPropertyBag.CreateProperty("MsgClass").StringValue = "IPM.Note";
      return parameterPropertyBag;
    }
  }
}

 

 

Here the internal method named BuildParameterPropertyBag() constructs all the properties to compose the email. Check out the AppUri that the class generates.

 

Implementation Steps

Now it’s time to demonstrate the implementation to compose an email from the code. The exposed properties allows you to auto populate the values. Based on your requirement set the required properties as shown below:

 
var emailComposeTask = new EmailComposeTask
         {
             To = "no-reply-to@kunal-chowdhury.com",
             Cc = "no-reply-cc-1@kunal-chowdhury.com; no-reply-cc-2@kunal-chowdhury.com",
             Bcc = "no-reply-bcc@kunal-chowdhury.com",
             Subject = "Test Message using EmailComposeTask",
             Body = "This is a test email body created using the EmailComposeTask"
         };
emailComposeTask.Show();

 

At the end call the Show() method to open the composer task. If you have multiple email account setup in your phone device, this will ask you to chose the right account. Otherwise, it will directly go to the next screen where the UI will have an email client showing the email compose screen. User will be able to add/update any field from the screen.

 

Note: Windows Phone 7 Emulator doesn’t allow you to set up the email account and hence I am unable to attach screenshot of it here.

 

I hope that this post was very useful for you to understand the SDK API, it’s internal code implementation and the sample code implementation. Please leave your feedback below to leave your comment.

 

Stay tuned to my blog, twitter or facebook to read more articles, tutorials, news, tips & tricks on various technology fields. Also Subscribe to our Newsletter with your Email ID to keep you updated on latest posts. We will send newsletter to your registered email address. We will not share your email address to anybody as we respect privacy.

2 comments

  1. hi Kunal, Here you explained how to compose your mail. but how to send it.
    Could you share a full-fledged email sending code.

    ReplyDelete
  2. To send emails with any kind of attachment from a WP7 or WP8 app directly to Microsoft Hotmail SMTP server , you can use this component: http://www.windowsphonegeek.com/marketplace/components/livemailmessage

    ReplyDelete


 
© 2008-2014 Kunal-Chowdhury.com | Designed by Kunal Chowdhury
Back to top