メールをそのまま取り込むと、本文と添付ファイルがバラバラに取り込まれるため、視認性が良くありません。一メール毎にフォルダにまとめて参照しやすくします。
複数のスクリプトを組み合わせて実現します。
- メール件名を修正…rename.js
- メールをまとめるフォルダを作成…create.js
- メールをフォルダへ移動する…move.js
- 仕分けを行う…sort.js
- 未登録のメールアドレスを手動で振り分け時に登録…sortAdd.js
1~4をメール格納フォルダのルールに設定 5を振分先のフォルダそれぞれにルールとして設定
①メール件名を修正
// ファイル名に送信日時を追加し、URLエンコード記号を半角スペースに置換
/* javascriptで処理した場合、同名のファイルがあるとエラーとなります。
送信日時+作成日時の秒1桁を追加して、同名のメールを取得できるようにします。
あわせて、名前に使用できない記号["*<>:?/|]が含まれている場合URLエンコードされるため、 全角に置換します。*/
// 2021.8.25
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 送信日時・作成日時を取得
var mailDate = document.properties['cm:sentdate'];
var creatDate = document.properties['cm:created'];
// プロパティに送信日時の情報をもち、コンテンツである場合
if (mailDate != null && document.isDocument){
//=======以下日時を文字列に変換 年を2桁で処理 型特定のため、year_strに0を追加======
/* 送信日時のみでは、自動返送メールを複数に分けて発信された場合、同一日時となることがあるため、作成日時の秒1桁を最後に追加 */
var year_str = mailDate.getFullYear();
//月だけ+1すること
var month_str = 1 + mailDate.getMonth();
var day_str = mailDate.getDate();
var hour_str = mailDate.getHours();
var minute_str = mailDate.getMinutes();
var second_str = mailDate.getSeconds();
// 作成日時より秒のみ取得
var Csecond_str = creatDate.getSeconds();
year_str = ('0' + year_str).slice(-2);
month_str = ('0' + month_str).slice(-2);
day_str = ('0' + day_str).slice(-2);
hour_str = ('0' + hour_str).slice(-2);
minute_str = ('0' + minute_str).slice(-2);
second_str = ('0' + second_str).slice(-2);
Csecond_str = ('0' + Csecond_str).slice(-1);
format_str = 'YYMMDDhhmmssz';
format_str = format_str.replace(/YY/g, year_str);
format_str = format_str.replace(/MM/g, month_str);
format_str = format_str.replace(/DD/g, day_str);
format_str = format_str.replace(/hh/g, hour_str);
format_str = format_str.replace(/mm/g, minute_str);
format_str = format_str.replace(/ss/g, second_str);
format_str = format_str.replace(/z/g, Csecond_str);
// ========ここまで=========
// 文字列変換後の日時に_を追加し取得
var stringDate = format_str + '_';
}else{
// プロパティに送信日時情報がないか、フォルダの場合、空白
var stringDate = '';
}
// ========HTMLメールの場合、タイプを変更=========
// 本文を取得
var mailContent = document.content;
// タグが5回以上出現した場合、html文書と判断
if ((mailContent.match(/(<([^>]+)>)/gi) || []).length > 5){
// mimeタイプをHTMLに変更
document.mimetype = 'text/html';
}
// ========ここまで=========
// ファイル名を取得
var fullName = document.properties[ 'cm:name' ];
// 特定の記号がURLエンコードされるため、全角に置換
var replaced = fullName.replace(/%3a/g, ':').replace(/%2f/g, '/').replace(/%3f/g, '?').replace(/%7c/g, '|').replace(/%22/g, '” ').replace(/%2a/g, '*').replace(/%3c/g, '<').replace(/%3e/g, '>');
// 送信日時+置換後ファイル名を取得
document.properties[ 'cm:name' ] = stringDate + replaced;
// 確定
document.save();
②メールをフォルダにまとめる
// メールフォルダ作成
/*メール本体と添付ファイルをフォルダにまとめます。*/
// 2021.7.31
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// メール格納フォルダのノードを取得
var parentNode = companyhome.childByNamePath('Shared/mail');
// 送信者を取得
var mailFrom = document.properties['cm:originator'];
// 送信者が空白でない=メール本体を判定
if (mailFrom != null)
{
// 拡張子を含むファイル名を取得
var fullName = document.properties[ 'cm:name' ];
// ファイル名と拡張子を分割
var fNameArray = fullName.split('.');
// ファイル名のみ取得
var fileName = fNameArray[0];
// ファイルのパスを取得
var titleFolder = space.childByNamePath(fileName);
// 無限ループを避けるため、一度だけフォルダを作成する条件
// 拡張子がない場合、フォルダが作成済と判定されるため、ドキュメント判定との論理和
if (fullName.indexOf('.') == -1 && titleFolder.isDocument || titleFolder == null && space.hasPermission('CreateChildren'))
{
// フォルダ名と同一の場合エラーとなるため、フォルダ名に任意の記号(ex.★)を追加
// 特殊な記号は入力は可能だが、フォルダを開く際にエラーとなるため、一般的な記号を選択
titleFolder = space.createFolder('★' + fileName);
// ========フォルダの説明に本文1~2行目を追加=========
// 本文を取得
var mailContent = document.content;
// 本文をテキスト型に指定
var mailContent = new String(mailContent);
// 改行を空白に置換し、記号(長音・句読点・括弧・○数字等を除く)を削除
var mailContent = mailContent.replace(/\r?\n/g,' ').replace(/[^0-9A-Za-z\u2460-\u2473\u3001-\u3012\u3041-\u3096\u30A1-\u30FF\u3005-\u3006\u4e00-\u9ff f\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF61-\uFF9F]/g, '');
// 一行で収まるよう、60文字でスライス
titleFolder.properties[ 'cm:description' ] = mailContent.slice(0,60);
titleFolder.save();
// フォルダに送信日時と送信者のアスペクトを追加
props = new Array(2);
props['cm:sentdate'] = document.properties['cm:sentdate'];
props['cm:originator'] = mailFrom;
titleFolder.addAspect('cm:emailed', props);
// フォルダに発行日のアスペクトを追加し、送信日時を挿入(発行日を標準の並びかえにしているため)
CSprops = new Array(1);
CSprops['cs:publishdate'] = document.properties['cm:sentdate'];
titleFolder.addAspect('cs:published', CSprops);
}
// 一時フォルダのタイトルにまとめフォルダのノードをテキスト保存
parentNode.properties[ 'cs:address' ] = titleFolder;
parentNode.save();
}
③メール(本文+添付ファイル)を②で作成したフォルダへ移動します。
以下のスクリプトを作成し登録。このスクリプトのみバックグラウンドで実行にチェック
// メールをフォルダに移動
/* alfrescoでのmove APIの実行はバックグラウンドで行う必要があります。
しかし、プロパティの取得は、バックグラウンドの場合、nameに限られます。
よって、別スクリプトに分離します。*/
// 2021.8.27
///////////////////////////////////////////////////////////////////////////
// メール格納フォルダのノードを取得
var parentNode = companyhome.childByNamePath('Shared/mail');
// 一時フォルダのアスペクトのプロパティから格納するフォルダのノードの文字列を取得
var nodeString = parentNode.properties[ 'cs:address' ];
// ノードの文字列をノードに変換
var convNode = search.findNode(nodeString);
// 添付ファイルに発行日のアスペクトを追加し、送信者・送信日時を挿入(発行日を標準の並びかえにしているため)
props = new Array(2);
props['cs:publishdate'] = convNode.properties[ 'cm:sentdate' ];
props['cs:publisher'] = convNode.properties[ 'cm:originator' ];
document.addAspect('cs:published', props);
// 格納するフォルダへ移動
document.move(convNode);
// メールを振り分ける
// 2021.8.2
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 振り分け先で指定したアドレスを取得する関数
function getAdd(sortFolder){
//振り分け先を取得 関数外でも使用するため、グローバル化
dest = document.parent.childByNamePath(sortFolder);
//あらかじめ追加したアスペクトのプロパティより取得
var adList = dest.properties['cs:address'];
//置換前にテキスト型を宣言
var adList = new String(adList);
//改行コードをビット論理和に置換
var regexp = adList.replace(/\r?\n/g,'|');
//コンストラクター化
var regexp = new RegExp(regexp);
return regexp
}
// 送信者情報を取得
var mailFrom = document.properties['cm:originator'];
// 送信者情報がないものを除外 そのまま通すとエラー
if (mailFrom != null) {
if (getAdd('フォルダA').test(mailFrom)) {
document.move(dest);
}else if (getAdd('フォルダB').test(mailFrom)) {
document.move(dest);
}else if (getAdd('フォルダC').test(mailFrom)) {
document.move(dest);
}
else if (getAdd('フォルダD').test(mailFrom)) {
document.move(dest);
}
else if (getAdd('フォルダE').test(mailFrom)) {
document.move(dest);
}
else if (getAdd('フォルダF').test(mailFrom)) {
document.move(dest);
}
else if (getAdd('フォルダG).test(mailFrom)) {
document.move(dest);
}
else if (getAdd('フォルダH').test(mailFrom)) {
document.move(dest);
}
else if (getAdd('フォルダI').test(mailFrom)) {
document.move(dest);
}
}
⑤手動で振分時にアドレスを登録
以下のスクリプトを各振分フォルダのルールに登録// メール振り分け登録
/*未登録の振り分け先を手動で移動時に追加*/
// 2021.8.10
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//作成日を取得
var created = document.properties['cm:created'];
//変更日を取得
var modified = document.properties['cm:modified'];
//作成日と変更日が異なる=メール取得時ではない場合スクリプトを続行
if (created != modified) {
//親フォルダのノードを取得
var parentNode= document.parent;
//振り分け先よりアスペクトのプロパティを取得
var adList = parentNode.properties['cs:address'];
//置換前にテキスト型を宣言
var adList = new String(adList);
//改行コードをビット論理和に置換
var regexp = adList.replace(/\r?\n/g,'|');
//コンストラクター化
var regexp = new RegExp(regexp);
// 送信者情報を取得
var mailFrom = document.properties['cm:originator'];
// アドレスリストに送信先のアドレスが含まれていない 送信先アドレスがnullでない
if (regexp.test(mailFrom) || mailFrom != null) {
;
}else{
// アドレスリストに改行コードを付加して送信先アドレスを追加
parentNode.properties['cs:address'] = adList + '\n' + mailFrom;
parentNode.save();
}
}