Dynamics CR m4.0 のメール送信機能を使用してメールを作成する機会があったおんで、サンプルの覚書を掲載します。
動作確認は、 Windows Ser ver 2008 上に構築した 英語版のynamics CRM 4.0 UR 11 オールインワン環境で行っています。メールの送信はEメールルータを使用する設定で動作の確認をしています。
メール送信の設定により実際にいつメールが送信されるは変わります。プログラムの動作確認は Email Router を使用するパターンで行っています。Outlookを使用する場合は、メールの送信ユーザがOutlookを起動したときに送信されると思います。
1. メール送信プロジェクトの作成
Visual Studio 2008 でソリューションを作成し、 EmailActivity というコンソールプロジェクトを作成します。
ソースプログラムは次の通りです。ドラフトの状態で作成したEメールをSendMailメソッドで送信しています。実際の送信が同期的に行われているわけではありません。プログラムのCreateTo2メソッドを確認するとわかりますが、任意のメールアドレスや取引先企業やユーザなどのメール属性に存在しないメールアドレスへもactivityparty.addressused を使用することで送信できます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Crm.Sdk;
namespace EmailActivity
{
class Program
{
/// <summary>
/// メールコードを作成して送信するサンプルです。
/// 送信はメールの送信設定によってどのタイミング
/// で実際に送信されるかが変わります。
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
// CrmService の作成
CrmService service = CreateService("testorg");
// メールの作成
Guid emailid = CreateEmail(service);
// メールの送信
SendEmail(service, emailid);
}
/// <summary>
/// ステータスがドラフトのメールレコードを作成する
/// </summary>
/// <param name="service"></param>
/// <returns></returns>
private static Guid CreateEmail(CrmService service)
{
email email = new email();
email.subject = "Mail Test";
email.description = "Main body text.. <a href='http://www.bing.com/'>bing</a>";
email.from = new activityparty[] { CreateFrom(service) };
email.to = new activityparty[] { CreateTo1(service), CreateTo2(service) };
TargetCreateEmail target = new TargetCreateEmail();
target.Email = email;
CreateRequest request = new CreateRequest();
request.Target = target;
CreateResponse response = service.Execute(request) as CreateResponse;
return response.id;
}
/// <summary>
/// ドラフトのメールレコードを送信する。
/// 送信自体は非同期に行われる。
/// </summary>
/// <param name="service"></param>
/// <param name="email"></param>
private static void SendEmail(CrmService service, Guid emailid)
{
SendEmailRequest request = new SendEmailRequest();
request.EmailId = emailid;
request.TrackingToken = "";
// false にすると送信したという履歴のみが設定される。
request.IssueSend = true;
service.Execute(request);
}
private static activityparty CreateFrom(CrmService service)
{
WhoAmIRequest request = new WhoAmIRequest();
WhoAmIResponse response = service.Execute(request) as WhoAmIResponse;
activityparty activity = new activityparty();
Lookup lookup = new Lookup(EntityName.systemuser.ToString(), response.UserId);
activity.partyid = lookup;
return activity;
}
/// <summary>
/// Dynamics CRM のエンティティのレコードをあて先とする場合
/// </summary>
/// <param name="service"></param>
/// <returns></returns>
private static activityparty CreateTo1(CrmService service)
{
WhoAmIRequest request = new WhoAmIRequest();
WhoAmIResponse response = service.Execute(request) as WhoAmIResponse;
activityparty activity = new activityparty();
Lookup lookup = new Lookup(EntityName.systemuser.ToString(), response.UserId);
activity.partyid = lookup;
return activity;
}
/// <summary>
/// 任意のメールアドレスをあて先とする場合
/// </summary>
/// <param name="service"></param>
/// <returns></returns>
private static activityparty CreateTo2(CrmService service)
{
activityparty activity = new activityparty();
// システムユーザや取引先企業などの既定で使用されるメールアドレスを
// 変更する場合もaddressusedを使用する。
// パーティーリストで指定可能なエンティティのうち、どの属性がメールアドレスとして
// 使用されるかは次のリンク参照
// http://technet.microsoft.com/en-us/library/cc151451.aspx
activity.addressused = "sample@live.jp";
return activity;
}
/// <summary>
/// On-Premise 接続
/// </summary>
/// <returns></returns>
private static CrmService CreateService(string orgname)
{
CrmService service = new CrmService();
service.CrmAuthenticationTokenValue = new CrmAuthenticationToken();
service.CrmAuthenticationTokenValue.AuthenticationType = 0;
service.CrmAuthenticationTokenValue.OrganizationName = orgname;
service.UseDefaultCredentials = true;
service.Url = "http://localhost/MSCRMServices/2007/CrmService.asmx";
return service;
}
}
}
説明は以上です。誤り、指摘点などありましたらご連絡ください。