
Microsoft 365 Outlook for Business: メール取得
Microsoft 365 Outlook for Business: Get Email Message
この工程は、Outlook のメールを取得します。
Basic Configs
- 工程名
- メモ
Configs for this Auto Step
- conf_OAuth2
- C1: OAuth2 設定 *
- conf_MessageId
- C2: メール ID *
- conf_FromAddress
- C3-A: From メールアドレスを保存するデータ項目
- conf_FromName
- C3-N: From 表示名を保存するデータ項目
- conf_ReplyToAddresses
- C4-A: Reply-To メールアドレス一覧を保存するデータ項目
- conf_ReplyToNames
- C4-N: Reply-To 表示名一覧を保存するデータ項目
- conf_RecipientAddresses
- C5-A: To/Cc/Bcc メールアドレス一覧を保存するデータ項目
- conf_RecipientNames
- C5-N: To/Cc/Bcc 表示名一覧を保存するデータ項目
- conf_SentDatetime
- C6: 送信日時を保存するデータ項目
- conf_Subject
- C7: 件名を保存するデータ項目
- conf_Body
- C8-1: 本文を保存するデータ項目
- conf_AsHTML
- C8-2: 本文を HTML 形式で取得する
- conf_Attachments
- C9: 添付ファイルを保存するデータ項目
Notes
- Microsoft 365 の Outlook for Business で使用できる自動工程です
- 個人用の Outlook では使用できません
- メール ID は Outlook 上では確認できません
- 「開始: Microsoft 365 Outlook for Business: メール受信時」で取得したメール ID を使用してください
Capture

See Also
Script (click to open)
- 次のスクリプトが記述されている XML ファイルをダウンロードできます
- outlook-message-get.xml (C) Questetra, Inc. (MIT License)
- Professional のワークフロー基盤では、ファイル内容を改変しオリジナルのアドオン自動工程として活用できます
// OAuth2 config sample at [OAuth 2.0 Setting]
// - Authorization Endpoint URL: https://login.microsoftonline.com/{your-tenant-id}/oauth2/v2.0/authorize
// - Token Endpoint URL: https://login.microsoftonline.com/{your-tenant-id}/oauth2/v2.0/token
// - Scope: https://graph.microsoft.com/Mail.Read offline_access
// - Consumer Key: (Get by Microsoft Azure Active Directory)
// - Consumer Secret: (Get by Microsoft Azure Active Directory)
function main(){
//// == 工程コンフィグ・ワークフローデータの参照 / Config & Data Retrieving ==
const auth = configs.getObject('conf_OAuth2');
const messageId = retrieveMessageId();
const defs = retrieveDefs();
const asHtml = configs.getObject('conf_AsHTML');
//// == 演算 / Calculating ==
const message = getMessage(auth, messageId, asHtml);
const qfiles = new java.util.ArrayList(); // もともと添付されていたファイルはクリアする
if (defs.AttachmentsDef !== null) {
getAttachments(auth, messageId, qfiles);
}
//// == ワークフローデータへの代入 / Data Updating ==
setData(defs.FromAddressDef, message.fromAddress);
setData(defs.FromNameDef, message.fromName);
setData(defs.ReplyToAddressesDef, message.replyToAddresses.join('\n'));
setData(defs.ReplyToNamesDef, message.replyToNames.join('\n'));
setData(defs.RecipientAddressesDef, message.recipientAddresses.join('\n'));
setData(defs.RecipientNamesDef, message.recipientNames.join('\n'));
setData(defs.SentDatetimeDef, dateFormatter.parse("yyyy-MM-dd'T'HH:mm:ssX", message.sentDateTime));
setData(defs.SubjectDef, message.subject);
setData(defs.BodyDef, message.body);
setData(defs.AttachmentsDef, qfiles);
}
/**
* config からメール ID を読み出す
* 空の場合はエラー
* @returns {String} メール ID
*/
function retrieveMessageId() {
const messageId = engine.findData(configs.getObject('conf_MessageId'));
if (messageId === null) {
throw new Error('Message ID is blank.');
}
return messageId;
}
/**
* config から保存先データ項目の ProcessDataDefinitionView を読み出す
* 以下の場合はエラー
* - 値を保存するデータ項目が重複して設定されている
* - 値を保存するデータ項目がひとつも設定されていない
* @returns {Object} defs 保存先データ項目の ProcessDataDefinitionView を格納した JSON オブジェクト
*/
function retrieveDefs() {
const items = ['FromAddress', 'FromName', 'ReplyToAddresses', 'ReplyToNames',
'RecipientAddresses', 'RecipientNames', 'SentDatetime', 'Subject', 'Body', 'Attachments'];
const defs = {};
const dataItemNumSet = new Set(); // データ項目の重複確認用
items.forEach( item => {
const dataItemDef = configs.getObject(`conf_${item}`);
if ( dataItemDef !== null ) { // データ項目が設定されている場合は重複を確認する
const dataItemNum = dataItemDef.getNumber();
if ( dataItemNumSet.has( dataItemNum ) ) { // データ項目番号が重複していればエラー
throw new Error('The same data item is set multiple times.');
}
dataItemNumSet.add( dataItemNum ); // データ項目の重複確認用
}
defs[`${item}Def`] = dataItemDef;
});
if (dataItemNumSet.size === 0) {
throw new Error('No data item to save the result is set.');
}
return defs;
}
/**
* Microsoft Graph API にメール取得の GET リクエストを送信
* @param {AuthSettingWrapper} auth 認証設定
* @param {String} messageId メール ID
* @param {Boolean} asHtml 本文を HTML 形式で取得するかどうか
* @returns {Object} message メールの情報を格納した JSON オブジェクト
*/
function getMessage(auth, messageId, asHtml) {
const preferredType = asHtml ? 'html' : 'text';
const response = httpClient.begin()
.authSetting(auth)
.header('Prefer', `outlook.body-content-type="${preferredType}"`)
.queryParam('$select', 'from,replyTo,toRecipients,ccRecipients,bccRecipients,subject,body,sentDateTime')
.get(`https://graph.microsoft.com/v1.0/me/messages/${encodeURI(messageId)}`);
const status = response.getStatusCode();
const responseStr = response.getResponseAsString();
if (status !== 200) {
engine.log(responseStr);
throw new Error(`Failed to get message. status: ${status}`);
}
const message = JSON.parse(responseStr);
const recipients = message.toRecipients.concat(message.ccRecipients, message.bccRecipients);
// 下書きメールの場合、from が undefined になる
let fromAddress = '';
let fromName = '';
if (message.from !== undefined) {
fromAddress = message.from.emailAddress.address;
fromName = message.from.emailAddress.name;
}
return {
fromAddress,
fromName,
replyToAddresses: message.replyTo.map(replyTo => replyTo.emailAddress.address),
replyToNames: message.replyTo.map(replyTo => replyTo.emailAddress.name),
recipientAddresses: recipients.map(recipient => recipient.emailAddress.address),
recipientNames: recipients.map(recipient => recipient.emailAddress.name),
sentDateTime: message.sentDateTime,
subject: message.subject,
body: message.body.content
};
}
/**
* メールの添付ファイルを取得する
* @param {AuthSettingWrapper} auth 認証設定
* @param {String} messageId メール ID
* @param {ArrayList<NewQfile>} qfiles 添付ファイルを格納する配列
*/
function getAttachments(auth, messageId, qfiles) {
const response = httpClient.begin()
.authSetting(auth)
.get(`https://graph.microsoft.com/v1.0/me/messages/${encodeURI(messageId)}/attachments`);
const status = response.getStatusCode();
const responseStr = response.getResponseAsString();
if (status !== 200) {
engine.log(responseStr);
throw new Error(`Failed to get attachments. status: ${status}`);
}
const attachments = JSON.parse(responseStr).value;
attachments.forEach(attachment => {
const qfile = new com.questetra.bpms.core.event.scripttask.NewQfile(
attachment.name,
attachment.contentType,
base64.decodeFromStringToByteArray(attachment.contentBytes) // ByteArrayWrapper
);
qfiles.add(qfile);
});
}
/**
* 保存先データ項目の ProcessDataDefinitionView が null でない場合のみ値を代入する
* @param {ProcessDataDefinitionView} def 保存先データ項目の ProcessDataDefinitionView
* @param {Object} value データ項目に代入する値
*/
function setData(def, value) {
if (def === null) {
return; // データ項目が設定されていなければ何もしない
}
engine.setData(def, value);
}