通知として処理する方法(連携先がサイボウズ製品以外の場合)

連携先が、サイボウズ製品以外のシステムである場合の設定を説明します。
連携先側、サイボウズ Office側、それぞれで準備が必要です。

連携システム側の設定

通知メールを、通知として処理するには、システムから送信される通知メールのヘッダーに、サイボウズ Office側の処理に必要な特殊なヘッダーを設定する必要があります。
下記で説明するヘッダーやメール形式の仕様と、サンプルプログラムのソースコードを参照し、必要なプログラムをお客様自身で準備する必要があります。

処理に必要なヘッダー

連携システムからの通知では、通知の表示に、通知内の情報を表示する仕様です。
  • 「連携システムからの通知」画面の例:
    連携システムからの通知の画面の画像
システムからの通知メールのヘッダーに、次の情報を設定します。「X-Cybozu-Notify-App-Name」と「X-Cybozu-Notify-App-URL」は必須項目です。必ず設定してください。
ヘッダー名 概要 説明
X-Cybozu-Notify-App-Name 製品名 製品名を設定するヘッダーです。
通知は製品名ごとにカテゴリ分けできるため、システム名などを設定すると便利です。
半角、全角の区別なく設定できます。
X-Cybozu-Notify-App-Ver 製品バージョン 製品のバージョン情報を設定するヘッダーです。
バージョン情報を管理する場合に使用します。
X-Cybozu-Notify-App-UniqueID 通知の識別ID 通知の識別 IDを設定するヘッダーです。
通知の識別 IDは、通知の重複チェックに使用します。
重複した通知があった場合、E-mailの送信時刻(「X-Cybozu-Notify-Date」が設定されている場合は、「X-Cybozu-Notify-Date」の時刻を優先)をもとに、最新 のものに上書きします。
このヘッダーを省略した場合は、「X-Cybozu-Notify-App-URL」(リンク先URL)に設定された文字列を識別ID とします。
X-Cybozu-Notify-App-URL リンク先URL 通知のリンク先URLを設定するヘッダーです。
通知メールに「X-Cybozu-Notify-App-UniqueID」が設定されていない場合は、このヘッダーに設定されている文字列が通知の識別IDになります。その際、「#」以降の文字列は無視されます。
X-Cybozu-Notify-Date 受信日時 受信日時を設定するヘッダーです。通知の新旧を比較する際に使用します。
通知の識別IDが重複する通知が、既に最新情報に表示されている場合、受信日時が新しい通知が優先されます。
このヘッダーを省略した場合は、メールヘッダー「Date」を受信日時とします。
X-Cybozu-Notify-Name 送信者名 通知の送信者名を設定するヘッダーです。
このヘッダーを省略した場合は、メールヘッダー「From」を通知の送信者名とします。
X-Cybozu-Notify-Subject 標題 通知の標題を設定するヘッダーです。
このヘッダーを省略した場合は、メールヘッダー「Subject」を通知の標題とします。
X-Cybozu-Notify-Abstract 内容 通知の内容を設定するヘッダーです。
このヘッダーを省略した場合は、メールの本文を通知の内容とします。
X-Cybozu-Notify-Version 通知メールバージョン 通知のバージョンを設定するヘッダーです。
X-Cybozu-Notify-Icon-URL アイコンURL 通知のアイコン用URLです。
省略した場合は、外部通知用に組み込まれている 「notify16.png」が通知アイコンとして指定されます。
アイコンを別途作成する場合は、アイコンサイズは「16×16」を推奨します。

通知メールの形式

連携先のシステムからの通知メールは、次の形式で設定してください。
項目
Content-Type text/plain
charset JIS(iso-2022-jp)、us-ascii
Content-Transfer-Encoding 7bit、base64、quote-printable

サンプルプログラムのソースコード(Perl)

特殊ヘッダーを含む通知メールを送信するためのサンプルプログラムのソースコード(Perl)を紹介します。
このソースコードをもとに、サンプルプログラムを作成します。
# ------------------------------------------------------- #
# 【Program name 】smtp_sample.pl
# ------------------------------------------------------- #
use Socket;
require './jcode.pl';
# SMTP サーバー名(IP アドレス)
$server = '××.co.jp' ;
# 宛先、送信元、題名、送信データ
$to = '××@××.co.jp' ;
$from = '××@××.co.jp' ;
$subject = '連携システムからの通知サンプル' ;
$data = '連携システムからの通知のサンプルです' ;
# ------------------------------------------------------- #
# ヘッダー、データ部の作成
# ------------------------------------------------------- #
$send_data = 'X-Mailer: SMTP Samle' . "¥r¥n";
$send_data .= 'MIME-Version: 1.0' . "¥r¥n";
$send_data .= 'Content-Type: text/plain; charset=iso-2022-jp' . "¥r¥n";
$send_data .= 'From: '. $from . '<'. $from .'>' . "¥r¥n";
$send_data .= 'To: '. $to . "¥r¥n";
$send_data .= 'Subject: ' . $subject . "¥r¥n";
#Cybozu 拡張ヘッダー
$send_data .= 'X-Cybozu-Notify-App-Name:Sample' . "¥r¥n";
$send_data .= 'X-Cybozu-Notify-App-UniqueID:Sample-notify-1' . "¥r¥n";
$send_data .= 'X-Cybozu-Notify-App-URL:http://www.cybozu.co.jp' . "¥r¥n";
$send_data .= 'X-Cybozu-Notify-App-Name:Sample' . "¥r¥n";
$send_data .= "¥r¥n";
$send_data .= $data;
# ------------------------------------------------------- #
# SOCKET の作成
# ------------------------------------------------------- #
# 接続のための準備
$port = getservbyname('smtp','tcp');
$struct = sockaddr_in($port,inet_aton($server));
socket(SH, PF_INET, SOCK_STREAM, 0) || die("ソケットエラー$!") ;
# 接続
connect(SH, $struct ) || die("接続失敗$!") ;
select(SH); $| = 1; select(STDOUT);
$respons = <SH> ;
unless($respons =~ /^220/)
{
close(SH); die("接続失敗$!") ;
}
# ------------------------------------------------------- #
# コマンドの送信
# ------------------------------------------------------- #
# HELO コマンドの作成、送信
$command = "HELO $server¥r¥n";
print SH $command ;
$respons = <SH> ;
&decode(¥$respons) ;
unless($respons =~ /^250/)
{
close(SH); die("Command:HELO ・・・FAIL $!") ;
}
# MAIL コマンドの作成、送信
$command = "MAIL FROM:$from¥r¥n";
print SH $command ;
$respons = <SH> ;
&decode(¥$respons) ;
unless($respons =~ /^250/)
{
print SH "RSET¥r¥n"; close(SH);
die("Command:MAIL・・・FAIL $!") ;
}
# RCPT コマンドの作成、送信
$command = "RCPT TO:$to¥r¥n";
print SH $command ;
$respons = <SH> ;
&decode(¥$respons) ;
unless($respons =~ /^25[0|1]/)
{
print SH "RSET¥r¥n"; close(SH);
die("Command:RCPT・・・FAIL $!") ;
}
# DATA コマンドの作成、送信
$command = "DATA¥r¥n";
print SH $command ;
$respons = <SH> ;
&decode(¥$respons) ;
unless($respons =~ /^354/){
print SH "RSET¥r¥n"; close(SH);
die("Command:DATA・・・FAIL $!") ;
}
# ------------------------------------------------------- #
# ヘッダー、本文の送信
# ------------------------------------------------------- #
# 文字コードの変換
&jcode'convert(*send_data,'jis');
# コマンドの作成、送信
$command = "$send_data¥r¥n.¥r¥n";
print SH $command ;
$respons = <SH> ;
&decode(¥$respons) ;
unless($respons =~ /^250/){
print SH "RSET¥n"; close(SH);
die("本文、ヘッダーの送信失敗$!") ;
}
# QUIT コマンドの作成、送信
$command = "QUIT¥n";
print SH $command ;
#切断
close(SH); select(STDOUT);
print "MAIL は正常に送信されました。¥n";
# ------------------------------------------------------- #
# 改行コード変換
# ------------------------------------------------------- #
sub decode{
my $inf = $_[0];
$$inf =~ s/¥x0D¥x0A|¥x0D|¥x0A/¥n/g;
}

サンプルプログラムを実行する

サイボウズ Office側の準備が完了したあと、サンプルプログラムを実行します。
サンプルプログラムを実行するのに必要な環境とモジュールは、次のとおりです。
  • Perlがインストールされている環境
  • 文字コード変換ライブラリ(jcode.pl)

ActivePerlがインストールされたWindows環境の場合を例に説明します。
  1. サイボウズ Office側の準備をします。
    詳細は、サイボウズ Office側の設定を参照してください。
  2. 連携先のシステムをインストールしているサーバーにアクセスします。
  3. 作成したサンプルプログラムを、「smtp_sample.pl」の名前で任意のフォルダに保存します。
    例:
    C:¥tmp¥smtp_sample.pl
  4. 「jcode.pl」を、手順3と同じフォルダに保存します。
    例:
    C:¥tmp¥jcode.pl
  5. サンプルプログラムを実行環境に合わせて、編集します。
    パラメーター
    $server E-mailを送信するメールサーバー
    $to 通知メールを送信するユーザーのE-mailアドレス
    $from 通知メールの差出人のE-mailアドレス
    $subject 通知メールのタイトル
    $data 通知メールの本文
    X-Cybozu-Notify-App-URL 通知のリンク先
    X-Cybozu-Notify-App-Name 通知のカテゴリ名
  6. サンプルプログラムを実行します。
    例:
    C:¥tmp > perl smtp_sample.pl

サイボウズ Office側の設定

連携先のシステムでの準備が完了したあと、次の手順でサイボウズ Office側の準備をします。
  1. システム設定で許可するドメインを設定します。
    詳細は、連携システムの登録を参照してください。
  2. システム設定で、連携システムからの通知を有効にします。
    1. システム設定画面で、他システムとの連携をクリックします。
    2. 使用停止をクリックします。
    3. 「連携システムからの通知を使用しない」の選択を外し、設定するをクリックします。
  3. 個人設定で、連携システムからの通知を有効にします。
    ユーザーに次の設定を依頼してください。
    1. 個人設定画面で、他システムとの連携をクリックします。
    2. 「連携システムからの通知を使用しない」の選択を外し、設定するをクリックします。