ms exchangeパブリックフォルダーには、従業員が書くフォーラムがあります。これは非常に不便で抑制的です。 フォーラムを適切なソリューションに転送するには、作成済みのコンテンツを転送する必要もあります。 Googleは* bbに既製のコンバーターを見つけられなかったため、データベースで開始するために、Pythonで独自のコンバーターを作成することにしました。
最初に、私が最終的に取得したいもの、既存のコンテンツが通常のフォーラムの構造と一致するために必要なテーブルを理解する必要があります。
投稿のあるテーブル
コンテンツの主要部分はrtfであるため、すぐにHTMLで書くことはできません。 OutlookはもちろんSaveAsHTMLをサポートしていますが、結果は野生のポルノです。 私はrtfをhtmlに変換するためのいくつかの無料のライブラリを勉強しましたが、良いものは見つかりませんでした。 UnRtf Linuxユーティリティの変換が最適です(Windowsポートがありますが、キリル文字を消化しません)。 したがって、標準のpost_id、user_id、post_time、topic_id、post_textに加えて、rtfバージョンの投稿を保存する列が必要です。
CREATE TABLE `posts` ( `post_id` int(11) NOT NULL, `user_id` int(11) DEFAULT NULL, `post_time` int(11) DEFAULT NULL, `topic_id` int(11) DEFAULT NULL, `post_text` text, `rtf_file` varchar(45) DEFAULT NULL, PRIMARY KEY (`post_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ユーザーとテーブル
CREATE TABLE `users` ( `id` int(11) NOT NULL,
テーマ表
CREATE TABLE `topics` ( `id` int(11) NOT NULL, `title` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `title_UNIQUE` (`title`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
添付テーブル
CREATE TABLE `attachments` ( `filename` varchar(45) NOT NULL,
Outlookオブジェクトが誤って処理されたテーブル
CREATE TABLE `garbage` ( `id` int(11) NOT NULL, `rtf_file` varchar(45) DEFAULT NULL,
テーブルにデータを入力します
フォーラムは主にPostItemオブジェクトで構成され、「account@domain.com」ではなくExchangeUserAddressEntryを「O =最初の組織/ OU = EXCHANGE ADMINISTRATIVE GROUP(FYDIBOHF23SPDLT)/ CN = RECIPIENTS / CN = account」の形式で保存します。 したがって、まずアドレス帳からユーザーに関する必要なデータを取得する必要があります。このデータはExchangeUserAddressEntryにマップできます。
import win32com.client
準備が完了したら、コンテンツ解析に進みます
これを行うには、必要なフォルダーに接続し、すべてのオブジェクトのリストを取得して、それぞれから必要なデータを引き出す必要があります。 残念ながら、Outlookではファイル(xlsなど)をフォーラムにコピーできるため、PostItemおよびMailItemオブジェクトのみに関心があり、残りはゴミに送られます。
import win32com.client import pymysql.cursors object = win32com.client.Dispatch("Outlook.Application") ns = object.GetNamespace("MAPI") tf = ns.GetFolderFromID('<EntryID>')
実行し、ゴミを確認し、コピーと貼り付けでフォーラムにスローされたいくつかのxlsファイルを取得しましたが、これは間違いなくフォーラムでは必要ありません。 投稿付きのRTFファイルと添付ファイル付きのファイルがストアフォルダに表示されました。 rtfファイルからhtmlテキストを作成し、post_textで埋め、残りの添付ファイルを引き出します。
最後のタッチ
上で書いたように、rtfの処理にはLinux UnRtfを使用します。そのため、ストアフォルダーをLinuxマシンにコピーします。 UnRtfはrtfファイルをhtmlコードに変換し、ファイルから画像と添付ファイルを抽出し、それらをimgタグで置き換えます。 添付ファイルは拡張子.wmfを取得します。画像である場合はすべて正常であり、開くことができます。また、何らかの種類のdocファイルである場合は、すでに読み取れません。 幸いなことに、Attachments.Item()。SaveAsFileを使用してこのような添付ファイルをすべて引き出したため、スクリプトはhtmlを抽出するだけでなく、wmfからimgタグを正しいリンクにすぐに修正します。
実行-フォーラムはmysqlに変換され、添付ファイルのあるフォルダーは/ opt / unrtf / store /にあります。 そこから、* .rtfを削除して、/ path /にフォーラムがあるWebサーバーに配置できます。 また、元のrtfファイルへのリンクを削除したり、投稿に追加したりすることはできません。RTFは、MS製品でさえ正常に動作できない、ひどい形式だからです。
おわりに
データベースを本格的なフォーラムにするには、まだ多くの作業を行う必要があります(phpbb / yaf.netに転送するためのフォーラム/コンバーターを作成するなど)が、最初のステップは既に完了しています。
»
Gitコード