Pleskのアカウント設定をコマンドで行なう

## Pleskのメールアカウント設定をコマンドで行なう

### 基本書式

```bash
/usr/local/psa/bin/mail command <mail_name> [options]
```

### コマンド

|記法|実行内容|
|:--|:--|
|--create or -c \<mail\>@\<domain\>|メールアカウントを追加|
|--update or -u \<mail\>@\<domain\>|メールアカウントを更新|
|--remove or -r \<mail\>@\<domain\>|メールアカウントを削除|
|--info or -i \<mail\>@\<domain\>|メールアカウントの情報を取得する|
|--on \<domain\>|指定したドメインでのメールサービスを有効にする|
|--off \<domain\>|指定したドメインでのメールサービスを無効にする|
|--update-service \<domain\>|指定したドメインでのメールサービスを更新する|
|--rename \<mail\>@\<domain\>|メールアドレスをリネームする|
|--list or -l|メールアカウントのリストを表示します。[^list]|
|--help or -h|ヘルプを表示|


### オプション

|記法|内容|
|:--|:--|
|-manage-virusfilter \<true&#124;false\>|アンチウィルスの設定を許可するかどうか。デフォルトは false|
|-manage-spamfilter \<true&#124;false\>|スパムフィルタの設定を許可するかどうか。デフォルトは false|
|-mailbox \<true&#124;false\>|メールボックスを作るか消すか。|
|-passwd \<passwd\>|メールボックスのパスワードをセット[^passwd1][^passwd2]|
|-passwd_type \<plain&#124;encrypted\>|メールボックスのパスワードのタイプを指定します。パスワードが指定されていない場合は無視されます。[^passwd2]|
|-mbox_quota \<number\>[K&#124;M&#124;G]|メールボックスの容量をバイト単位で制限します。 (`-1` で、デフォルトサイズ（無制限）)|
|-aliases \<add&#124;del\>:\<name1[,name2]\>|メールのエイリアスを追加または削除します。|
|-mgroups \<add&#124;del\>:\<list1[,list2]\>|メール転送にメールアカウントを追加または削除します。|
|-forwarding \<true&#124;false\>|メール転送を有効にするかどうか。[^forwarding]|
|-forwarding-addresses \<add&#124;del\>:\<addr1[,addr2]\>|メール転送内のアドレスを追加および削除します。|
|-status \<enabled&#124;disabled&#124;admin,domadm,parent,client\>|ドメインメールサービスのステータスを有効または無効にします。|
|-new \<mail\>|メールアドレスを作ります。|
|-cp-access \<true&#124;false\>|コントロールパネルへのアクセスを有効にするかどうか。デフォルトは false|
|-description \<string\>|メールアドレスの説明を指定できます。|
|-json|JSON形式で出力します。`--list`コマンドと共に使用します。|
|-antivirus \<off&#124;inout&#124;in&#124;out\>|アンチウイルスの設定をします。`Off` は無効に、`Inout` は送信と受信の両方、`In` は受信メールのみ、`Out` は送信メールのみ。|
|-outgoing-messages-mbox-limit \<number&#124;default\>|１時間あたりの送信メッセージの制限を設定します。`-1` で無制限に、`default` を指定するとサーバ全体の設定が適用されます。|

## 登録済みのメールアドレス一覧を取得する方法

`--list` コマンドはPleskのバージョンによっては使えないのでDBから値を取得します。

```bash
mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa -e "SELECT CONCAT( mail.mail_name, '@', domains.name ) FROM mail LEFT JOIN domains on mail.dom_id=domains.id ORDER BY mail.mail_name ASC INTO OUTFILE '~/mail.csv';"
```

実行すると `/var/lib/mysql/mail.csv` にメールアドレス一覧が生成されます。


## PleskのFTPアカウント設定をコマンドで行なう

### 基本書式

```bash
/usr/local/psa/bin/ftpsubaccount <command> [<code><login_name>] [</code> <option 1> <param> [<option 2> <param>] ... [<option N> <param>] ]
```

### コマンド

|記法|実行内容|
|:--|:--|
|--create or -c \<login_name\>|FTPアカウントを追加。-domain と -passwd のオプションは必須。|
|--update or -u \<login_name\>|FTPアカウントを更新|
|--remove or -r \<login_name\>|FTPアカウントを削除|
|--info or -i \<login_name\>|FTPアカウントの情報を取得する|
|--help or -h|ヘルプを表示|

### オプション

|記法|内容|
|:--|:--|
|-login \<login_name\>|追加FTPアカウントのユーザーのログイン名を設定します。[^login]|
|-passwd \<password\>|追加のFTPアカウントのパスワードを設定します。[^passwd1][^passwd2]|
|-passwd_type \<plain&#124;encrypted\>|パスワードのタイプを指定します。パスワードが指定されていない場合は無視されます。[^passwd2]|
|-domain \<domain name\>|追加のFTPアカウントを作成するドメインを指定します。新規作成（`--create`）で必要です|

## 登録済みのFTPアカウント一覧を取得する方法

DBから値を取得します。

```bash
mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa -e "SELECT sys_users.login FROM sys_users LEFT JOIN accounts on sys_users.account_id=accounts.id ORDER BY sys_users.home ASC INTO OUTFILE '~/ftp.csv';"
```

実行すると `/var/lib/mysql/ftp.csv` にメールアドレス一覧が生成されます。

---------------------------------
[^list]: ※`--list`コマンドはPleskのバージョンによっては利用できない。

[^passwd1]: ※メールのパスワードはアカウント名と同じ文字列が含まれていると登録できません。

[^passwd2]: ※セキュリティ上の理由から、環境変数 `PSA_PASSWORD` または `PSA_CRYPTED_PASSWORD` を使用してパスワードを渡すことをお勧めします。これを行うには、コマンドラインで引数 `passwd` に空の値を指定し（ `-passwd ""` など）、環境変数にパスワードを指定します。`PSA_PASSWORD` は暗号化されていないパスワードで渡す場合、`PSA_CRYPTED_PASSWORD` は暗号化したパスワードで渡す場合に使用します。

[^forwarding]: ※メールの転送設定の有効無効は一回のコマンドで上手くいかない場合が多いので、アカウント作成の後にもう一度更新コマンドで再設定した方が確実です。

[^login]: ※FTPアカウント名は半角英数字から始まる16文字以内である必要があります。半角小文字の英数字、ハイフン、アンダースコアが使えます。