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; } } }
説明は以上です。誤り、指摘点などありましたらご連絡ください。
さんのコメント: さんのコメント: