Exchange で EWS を使用してメール メッセージを送信する
Exchange で EWS マネージ API または EWS を使用して、新規または下書きのメール メッセージを送信する方法、または遅延していたメール メッセージを送信する方法を説明します。
EWS マネージ API と EWS のどちらを使用していても、メール メッセージは 2 つの方法で送信することができます。 [下書き] フォルダーに保存されているメッセージなどの既存のメッセージを送信するか、または 1 つの手順でメールを作成して送信するかのいずれかが行えます。 メッセージの送信に使用するメソッドと操作は、すぐにメッセージを送信する場合でも、遅延していたメッセージを送信する場合でも同じです。
表 1. メール メッセージを送信するための EWS マネージ API のメソッドと EWS 操作
タスク | EWS マネージ API メソッド | EWS 操作 |
---|---|---|
新しいメール メッセージを送信する |
EmailMessage.SendAndSaveCopy |
CreateItem |
既存のメール メッセージを送信する |
EmailMessage.Send |
SendItem |
EWS マネージ API を使用して新しいメール メッセージを送信する
次のコード例は、EmailMessage オブジェクトを使用してメール メッセージを作成する方法と、SendAndSaveCopy メソッドを使用して受信者にメッセージを送信してそれを [送信済みアイテム] フォルダーに保存する方法を示しています。
この例では、service が有効な ExchangeService オブジェクトであり、ユーザーが Exchange サーバーに既に認証されていると想定しています。
// Create an email message and provide it with connection
// configuration information by using an ExchangeService object named service.
EmailMessage message = new EmailMessage(service);
// Set properties on the email message.
message.Subject = "Company Soccer Team";
message.Body = "Are you interested in joining?";
message.ToRecipients.Add("sadie@contoso.com");
// Send the email message and save a copy.
// This method call results in a CreateItem call to EWS.
message.SendAndSaveCopy();
Console.WriteLine("An email with the subject '" + message.Subject + "' has been sent to '" + message.ToRecipients[0] + "' and saved in the SendItems folder.");
EWS を使用して新しいメール メッセージを送信する
次のコード例は、CreateItem 操作で SendAndSaveCopy の MessageDisposition 値を使用してメール メッセージを作成する方法と、メッセージを受信者に送信してそれを [送信済みアイテム] フォルダーに保存する方法を示しています。 また、これは、新しいメール メッセージを送信するときに EWS マネージ API が送信する XML 要求でもあります。
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2007_SP1" />
</soap:Header>
<soap:Body>
<m:CreateItem MessageDisposition="SendAndSaveCopy">
<m:SavedItemFolderId>
<t:DistinguishedFolderId Id="sentitems" />
</m:SavedItemFolderId>
<m:Items>
<t:Message>
<t:Subject>Company Soccer Team</t:Subject>
<t:Body BodyType="HTML">Are you interested in joining?</t:Body>
<t:ToRecipients>
<t:Mailbox>
<t:EmailAddress>sadie@contoso.com </t:EmailAddress>
</t:Mailbox>
</t:ToRecipients>
</t:Message>
</m:Items>
</m:CreateItem>
</soap:Body>
</soap:Envelope>
サーバーは、CreateItemResponse メッセージで CreateItem 要求に応答します。このメッセージには、電子メールが正常に作成されたことを示す NoError の ResponseCode 値、および新しく作成されたメッセージの ItemId が含まれます。
EWS マネージ API を使用して下書きのメール メッセージを送信する
次のコード例は、「EWS マネージ API を使用してメール メッセージを作成する」に記載されている、[下書き] フォルダーに保存されたメッセージを送信する方法を示しています。 まず、次のコード例に示すように、Bind メソッドを使用してメッセージを取得し、次に Send メソッドを使用してメール メッセージを送信します。 このメソッドでは、送信済みメッセージは [送信済みアイテム] フォルダーに保存されないことに注意してください。
この場合、値をコンソール出力に含めるため、EmailMessageSchema.Subject プロパティと EmailMessageSchema.ToRecipients プロパティを PropertySet に追加します。
この例では、service が有効な ExchangeService オブジェクトであり、ユーザーが Exchange サーバーに既に認証されていると想定しています。
// As a best practice, create a property set that limits the properties returned by the Bind method to only those that are required.
PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.Subject, EmailMessageSchema.ToRecipients);
// This method call results in a GetItem call to EWS.
EmailMessage message = EmailMessage.Bind(service, ItemId, propSet);
// Send the email message.
// This method call results in a SendItem call to EWS.
message.Send();
Console.WriteLine("An email with the subject '" + message.Subject + "' has been sent to '" + message.ToRecipients[0] + "'.");
EWS を使用して下書きのメール メッセージを送信する
次のコード例は、「EWS を使用してメール メッセージを作成する」に記載されている、[下書き] フォルダーに以前保存されていたメッセージを送信する方法を示しています。 まず、GetItem 操作を使用して送信するメール メッセージを取得します。 次に、SendItem 操作を使用して、メール メッセージを受信者に送信し、そのメッセージを [送信済みアイテム] フォルダーに保存します。
最初のメッセージである GetItem 要求メッセージは、バインド先の下書きメールメッセージの ItemId を指定し、ItemShape 要素内の要素は GetItem 応答に含める結果を限定します。 ItemShape 要素の BaseShape は IdOnly であり、AdditionalProperties 要素では FieldURI 値に Item スキーマからの Subject プロパティと Message スキーマからの ToRecipients プロパティが含まれています。これは、クライントに対する応答で ItemId、Subject、ToRecipients の各要素のみが返されることを意味します。 呼び出しで返される値の制限と BaseShape 要素の意味の詳細については、「EWS でのプロパティ セットと応答の形」を参照してください。
これは、Bind メソッドの呼び出し時に EWS マネージ API によって送信される XML 要求でもあります。 読みやすくするため、一部の属性と要素の値が短縮されています。
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2007_SP1" />
</soap:Header>
<soap:Body>
<m:GetItem>
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
<t:AdditionalProperties>
<t:FieldURI FieldURI="item:Subject" />
<t:FieldURI FieldURI="message:ToRecipients" />
</t:AdditionalProperties>
</m:ItemShape>
<m:ItemIds>
<t:ItemId Id="AAMkADE4=" />
</m:ItemIds>
</m:GetItem>
</soap:Body>
</soap:Envelope>
次の例は、GetItem 操作の処理後にサーバーから返される XML 応答を示しています。 応答は、メール メッセージが正常に取得されたことを示し、要求に応じて Subject 要素と ToRecipient 要素を含みます。 読みやすくするため、一部の属性と要素の値が短縮されています。
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15"
MinorVersion="0"
MajorBuildNumber="842"
MinorBuildNumber="10"
Version="V2_8"
xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:GetItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:GetItemResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:Items>
<t:Message>
<t:ItemId Id="AAMkADE4="
ChangeKey="CQAAABYA" />
<t:Subject>Project priorities</t:Subject>
<t:ToRecipients>
<t:Mailbox>
<t:Name>sadie@contoso.com</t:Name>
<t:EmailAddress>sadie@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>OneOff</t:MailboxType>
</t:Mailbox>
</t:ToRecipients>
</t:Message>
</m:Items>
</m:GetItemResponseMessage>
</m:ResponseMessages>
</m:GetItemResponse>
</s:Body>
</s:Envelope>
2 番目のメッセージである SendItem 要求メッセージは、送信するメール メッセージの ItemId と、送信済みアイテムを保存するフォルダーを指定する SavedItemFolderId を指定します。
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2007_SP1" />
</soap:Header>
<soap:Body>
<m:SendItem SaveItemToFolder="true">
<m:ItemIds>
<t:ItemId Id="AAMkADE4="
ChangeKey="CQAAABYA" />
</m:ItemIds>
<m:SavedItemFolderId>
<t:DistinguishedFolderId Id="sentitems" />
</m:SavedItemFolderId>
</m:SendItem>
</soap:Body>
</soap:Envelope>
サーバーは、SendItemResponse メッセージを含む SendItem 要求に応答します。このメッセージには、メールが正常に作成されたことを示す、NoError の ResponseCode の値が含まれます。
EWS マネージ API を使用して遅延メール メッセージを送信する
次のコード例は、EmailMessage オブジェクトを使用してメール メッセージを作成する方法、ExtendedPropertyDefinition クラスを使用して PidTagDeferredSendTime (0x3FEF0040) プロパティのプロパティ定義を作成する方法、および SendAndSaveCopy メソッドを使用して遅延メッセージを送信しそのメッセージを [送信済みアイテム] フォルダーに保存する方法を示します。
この例では、service が有効な ExchangeService オブジェクトであり、ユーザーが Exchange サーバーに既に認証されていると想定しています。
// Create a new email message.
EmailMessage message = new EmailMessage(service);
// Specify the email recipient and subject.
message.ToRecipients.Add("sadie@contoso.com");
message.Subject = "Delayed email";
// Identify the extended property that can be used to specify when to send the email.
ExtendedPropertyDefinition PidTagDeferredSendTime = new ExtendedPropertyDefinition(16367, MapiPropertyType.SystemTime);
// Set the time that will be used to specify when the email is sent.
// In this example, the email will be sent one minute after the next line executes,
// provided that the message.SendAndSaveCopy request is processed by the server within one minute.
string sendTime = DateTime.Now.AddMinutes(1).ToUniversalTime().ToString();
// Specify when to send the email by setting the value of the extended property.
message.SetExtendedProperty(PidTagDeferredSendTime, sendTime);
// Specify the email body.
StringBuilder str = new StringBuilder();
str.AppendLine("The client submitted the SendAndSaveCopy request at: " + DateTime.Now.ToUniversalTime().ToString() + ".");
str.AppendLine("The email message will be sent at: " + sendTime + ".");
message.Body = str.ToString();
Console.WriteLine("");
Console.WriteLine("The client submitted the SendAndSaveCopy request at: " + DateTime.Now.ToUniversalTime().ToString() + ".");
Console.WriteLine("The email message will be sent at: " + sendTime + ".");
// Submit the request to send the email message.
message.SendAndSaveCopy();
EWS を使用して遅延メール メッセージを送信する
次のコード例は、CreateItem 操作で SendAndSaveCopy に MessageDisposition 値を使用してメール メッセージを作成する方法、メッセージを送信する時間を設定するための PidTagDeferredSendTime (0x3FEF0040) プロパティのプロパティ定義を ExtendedProperty 要素を使用して作成する方法、および SavedItemFolderId 要素を使用して送信済みメッセージを [送信済みアイテム] フォルダーに保存する方法を示します。
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange207_SP1" />
</soap:Header>
<soap:Body>
<m:CreateItem MessageDisposition="SendAndSaveCopy">
<m:SavedItemFolderId>
<t:DistinguishedFolderId Id="sentitems" />
</m:SavedItemFolderId>
<m:Items>
<t:Message>
<t:Subject>Delayed email</t:Subject>
<t:Body BodyType="HTML">
The client submitted the SendAndSaveCopy request at: 1/2/2014 9:08:52 PM.
The email message will be sent at: 1/2/2014 9:09:52 PM.
</t:Body>
<t:ExtendedProperty>
<t:ExtendedFieldURI PropertyTag="16367"
PropertyType="SystemTime" />
<t:Value>2014-01-02T21:09:52.000</t:Value>
</t:ExtendedProperty>
<t:ToRecipients>
<t:Mailbox>
<t:EmailAddress>sadie@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:ToRecipients>
</t:Message>
</m:Items>
</m:CreateItem>
</soap:Body>
</soap:Envelope>
サーバーは、CreateItemResponse メッセージで CreateItem 要求に応答します。このメッセージには、電子メールが正常に作成されたことを示す NoError の ResponseCode 値、および新しく作成されたメッセージの ItemId が含まれます。