それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Sogoをいれて、WEBメール機能を作り、IMAP/SMTPを使う。

Sogoをいれて、IMAP/SMTPを使う。

Sogoは比較的よくできたグループウェア。ちょっと動作はもっさりしてるけどスマホなどで見ても快適な表示である。大量のメールを捌くのは厳しいが、通常のメール量であれば苦にならない。これをGmailの代替としてインストールしてみる。

インストールは、apt で完了するので素晴らしい。

今回は、さくらメールボックスを相手にSogoを使ってみる。 Sogo を入れて、SakuraメールをIMAP/SMTPで使ったらどうなる。かをインストールをしてみて試す。さくらメールボックスを、Sogo経由で使えばグループウェアになって良いのでは。と思った。

設定ファイル。

設定ファイルは、現在は、/etc になっている。以前はid:sogo の homedir を参照していたが、/etc/に変わっていた。

/etc/sogo/SOGo.conf

インストール

sogo はHTTPサーバーを内蔵しているが。 127.0.0.1/Sogoで動作させることができるので、公式のサンプルはApache2の パスAlias で設定されてる。

Apache2を使う

nginx を使いたいところだが、公式サイトに設定例があるのが、Apacheなのでそれを利用しとにかく動かす。もちろん、サブディレクトリじゃなくても、nginxしてもいいけど、とにかくまず動かすことを目標にする。

MySQLを使う。

postgresql を使うべきところだろうが、mariaDBのほうがユーザー作成など管理コマンドが楽なのでこっちを採用。

apt でインストール

Sogo は aptで入っちゃう。debianのパッケージにあった。apt でインストールすると、Arm64などのバイナリもサクッと入手可能なので、debian のapt を使うことにした。sogo.nu の公式にもパッケージはあったのだが、nightly はめんどくさそうだったのでやめた。

必要なパッケージをインストール

sudo apt install apache2 sogo  mariadb-server -y 

MySQLデータベースの準備

sudo mysql 

MySQLにsogo ユーザーを作成する。 ( id:sogo / pw:password )

GRANT ALL ON sogo.* TO 'sogo'@'localhost' IDENTIFIED BY 'password';
flush privileges;
CREATE DATABASE sogo;

MySQLにデータベースの作成し、テーブル作成、ユーザ作成

USE sogo;
CREATE TABLE sogo_users (c_uid VARCHAR(10) PRIMARY KEY, c_name VARCHAR(10), c_password VARCHAR(32), c_cn VARCHAR(128), mail VARCHAR(128));
INSERT INTO sogo_users VALUES ('admin1', 'admin1', MD5('your-secure-password'), 'SOGouser', 'sogo@example.com');

ログインするユーザーのパスワードはMD5で格納する(このあたりはsogo設定で調整が可能)まず動くことを目指す。

必要なテーブル定義を流し込む。

mysql -hHOST -uUSER -p -D SOGO < Scripts/mysql-utf8mb4.sql

Sogo の設定

postgresql になってる部分をmysqlに書き換えて、先程指定した md5パスワードのカラムがあるテーブルを指定する。

/etc/sogo/sogo.conf

{
  SOGoProfileURL = "mysql://sogo:password@localhost:3306/sogo/sogo_user_profile";
  OCSFolderInfoURL = "mysql://sogo:password@localhost:3306/sogo/sogo_folder_info";
  OCSSessionsFolderURL = "mysql://sogo:password@localhost:3306/sogo/sogo_sessions_folder";
  OCSEMailAlarmsFolderURL = "mysql://sogo:password@localhost:3306/sogo/sogo_alarms_folder";
  SOGoUserSources = (
    {
      type = sql;
      id = users;
      viewURL = "mysql://sogo:password@localhost:3306/sogo/sogo_users";
      canAuthenticate = YES;
      isAddressBook = NO;
      userPasswordAlgorithm = md5;
    }
  );
  # 書き換え前。
  #SOGoProfileURL = "postgresql://sogo:password@127.0.0.1:5432/sogo/sogo_user_profile";
  #OCSFolderInfoURL = "postgresql://sogo:password@127.0.0.1:5432/sogo/sogo_folder_info";
  #OCSSessionsFolderURL = "postgresql://sogo:password@127.0.0.1:5432/sogo/sogo_sessions_folder";
  #OCSEMailAlarmsFolderURL = "postgresql://sogo:password@127.0.0.1:5432/sogo/sogo_alarms_folder";

/etc/sogo/sogo.conf

アドミンユーザーを指定する。

MySQL時に作成したAdminユーザを指定する。複数人いるときは、列挙。

SOGoSuperUsernames = (admin1, admin2);

sogo.conf の記入例

NSDictionary なので厳密に記入する、設定ファイルはなるほどなって感じになる。SogoはGNUStetpのライブラリも使って動いてるし。

{
    key = value; 
    arrays = (
        {
            key = "NAME";
            flag = YES;
        }
    );
}
  • 末尾にはセミコロン;をつける。
  • key = valueはスペースを入れる。
  • boolena は YESNO で記入する。
  • string は ダブルクォーテーション"value"する。
  • YES ; のような無駄なスペースは許されない。

apache2 の設定を記入する

サンプルは次の場所にある。

Apache/SOGo.conf

この中から次の部分を書き換えておく、起動実験なのでHTTPSを使わない。 そのためHTTPSをHTTPに変更する(443ー>80,HTTPSー>HTTP)

sudo touch  /etc/apache2/conf-enabled/SOGo.conf
sudo vim /etc/apache2/conf-enabled/SOGo.conf
# RequestHeader set "x-webobjects-server-port" "443"
RequestHeader set "x-webobjects-server-port" "80"
# RequestHeader set "x-webobjects-server-url" "https://%{HTTP_HOST}e" env=HTTP_HOST
RequestHeader set "x-webobjects-server-url" "http://%{HTTP_HOST}e" env=HTTP_HOST

あとは、サンプルと同じにした。

設定を有効にする

sudo a2enconf SOGo
sudo a2enmod proxy proxy_http headers rewrite

再起動

sudo systemctl restart apache2
sudo systemctl restart sogo

この設定で、 http://localhost/SOGo/ が有効になる。

ログイン画面を出す

http://localhost/SOGo/ にアクセスすると、ログイン画面が出る。

ここで、MySQLのテーブルに登録したユーザー名とパスワード(admin1/your-secure-password) を使ってログインする。

画面が一通り動く

設定画面とかも動くのを確認

imapアカウントが使えない・・・

このままだと、IMAPアカウントがlocalhost:143に固定されるので。

このように、dovecot が同一サーバーで動く前提なので、いくつかの設定を見直さないと、使えない。

sogo.conf の次のあたりを見直す。

SOGoSMTPServer
SOGoSMTPAuthenticationType
SOGoForceExternalLoginWithEmail
SOGoIMAPServer
SOGoForceExternalLoginWithEmail

日本語化

/etc/sogo/sogo.conf

SOGoLanguage = Japanese;
SOGoSupportedLanguages=( English , Japanese  );

ただし、日本語化すると、いくつかの機能がエラーになったので注意。 日本語化ファイルでエラーになる箇所を英語版で置き換えればいいし、Nightlyを使えば修正されていたでの、そのうち治ると思う。

時刻

SOGoTimeZone = Asia/Tokyo;

IMAP/SMTPサーバー自分で用意する

SOGoのパッケージインストールには、IMAPdもSMTPdも含まれてないので、自分で準備する必要がある。サーバーは自分の契約しているメールサーバーを利用すればいい。

sogo の依存ライブラリを確認する。

apt-cache --installed depends sogo
sogo
  PreDepends: init-system-helpers
  Depends: gnustep-base-runtime
  Depends: libc6
  Depends: libcrypt1
  Depends: libcurl4
  Depends: libgcc-s1
  Depends: libglib2.0-0
  Depends: libgnustep-base1.28
  Depends: liblasso3
  Depends: libmemcached11
  Depends: liboath0
  Depends: libobjc4
  Depends: libsbjson2.3
  Depends: libsodium23
  Depends: libsope1
  Depends: libssl3
  Depends: libytnef0
  Depends: libzip4
  Depends: systemd
  Depends: sogo-common
  Depends: adduser
  Depends: zip
  Depends: lsb-base
  Depends: memcached

sogo はIMAPクライアントなので、自分で用意する必要があります。

参考資料

https://wiki.archlinux.jp/index.php/SOGo https://linuxhostsupport.com/blog/how-to-install-sogo-on-ubuntu-20-04/