taigaでgsuiteのsmtpリレーを利用しようとしてはまった(未解決)

スクラム開発もどきをしているのだけど、これまで使ってたRedmineのBacklogsプラグインがいまいち使いづらかったのでtaigaに移行しようとしてはまっている話。

# 何を使うか
サーバ立てるのは面倒なのでdockerでどうにかしたい。
探すといろいろでてくるのだけど、[公式ドキュメント](https://taigaio.github.io/taiga-doc/dist/setup-alternatives.html#_important_notes_about_using_strong_taiga_docker_strong)に当ってみると、taigaはdockerをサポートしていないものの、いくつか紹介されているリポジトリがあったので、せっかくなので使ってみたかったdocker-composeの設定が入ってる

https://github.com/benhutchins/docker-taiga/blob/master/docker-compose.yml

を選んでみる。

# 構築

```$ git clone https://github.com/benhutchins/docker-taiga-example.git```

して、手順に従って設定を修正。

taiga-conf/conf.jsonがtaiga-frontの設定。いくつか修正をいれる。(コメント参照)

```taiga-conf/conf.json
{
    "api": "http://example.com/api/v1/", # 利用しているドメインに合わせて修正
    "eventsUrl": null,
    "eventsMaxMissedHeartbeats": 5,
    "eventsHeartbeatIntervalTime": 60000,
    "eventsReconnectTryInterval": 10000,
    "debug": true, # 転ばぬ先の
    "debugInfo": true, # 杖
    "defaultLanguage": "ja", # 日本人なので
    "themes": ["taiga"],
    "defaultTheme": "taiga",
    "publicRegisterEnabled": true, # オンラインサインアップしたいのでtrueに
    "gravatar": true,
    "feedbackEnabled": false,
    "privacyPolicyUrl": null,
    "termsOfServiceUrl": null,
    "maxUploadFileSize": null,
    "contribPlugins": [
      "/plugins/slack/slack.json"
    ],
    "tribeHost": null,
    "importers": []
}
```
taiga-conf/local.pyはtaiga-backの設定。

```taiga-conf/local.py
# Please modify this file as needed, see the local.py.example for details:
# https://github.com/taigaio/taiga-back/blob/master/settings/local.py.example
#
# Importing docker provides common settings, see:
# https://github.com/benhutchins/docker-taiga/blob/master/docker-settings.py
# https://github.com/taigaio/taiga-back/blob/master/settings/common.py
from .docker import *

PUBLIC_REGISTER_ENABLED = True # オンラインサインアップしたいのでtrueに
DEBUG = True # 転ばぬ先の杖
TEMPLATE_DEBUG = False

## Slack
# https://github.com/taigaio/taiga-contrib-slack
INSTALLED_APPS += ["taiga_contrib_slack"]

## LDAP
# see https://github.com/ensky/taiga-contrib-ldap-auth
# INSTALLED_APPS += ["taiga_contrib_ldap_auth"]

## For additional configuration options, look at:
# https://github.com/taigaio/taiga-back/blob/master/settings/local.py.example

```

で、docker-compose.ymlでメールの設定、SSLの設定ができる。今回はSSL対応は見送るので、メールの設定だけ。
メールはしがらみによりgsuiteのsmtpリレーを利用。

```docker-compose.yml
...
     # Hostname for your instance of Taiga. Required.
      TAIGA_HOSTNAME: example.com # 利用しているドメインに合わせて修正
...
      # Enable SSL externally, preferred method
      #TAIGA_SSL_BY_REVERSE_PROXY: 'True'
      # To use an external SMTP for emails, fill in these values:
      TAIGA_ENABLE_EMAIL: "True" # gsuiteのsmtpリレーを利用したいのでtrueに
      TAIGA_EMAIL_FROM: taiga@example.com  # 通知メールの送信元
      TAIGA_EMAIL_USE_TLS: "True" # 認証あり
      TAIGA_EMAIL_HOST: smtp-relay.gmail.com # gsuiteのsmtpリレーの設定ガイドに従う
      TAIGA_EMAIL_PORT: 465 # gsuiteのsmtpリレーの設定ガイドに従う
      TAIGA_EMAIL_USER: aiga@example.com  # smtp認証のユーザ
      TAIGA_EMAIL_PASS: 'password' # smtp認証のユーザのパスワード
...
```

設定変更後、

```$ docker-compose up -d```

とすると1分程度でtaigaが立ち上がる。

# エラー

一通り操作はできたものの、メールの送信だけ以下のエラー。

```
 9月 06 20:06:33 server_name dockerd-current[11494]: ERROR:2018-09-06 11:06:33,146: Internal Server Error: /api/v1/auth/register
 9月 06 20:06:33 server_name dockerd-current[11494]: Traceback (most recent call last):
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner
 9月 06 20:06:33 server_name dockerd-current[11494]:     response = get_response(request)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
 9月 06 20:06:33 server_name dockerd-current[11494]:     response = self._get_response(request)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
 9月 06 20:06:33 server_name dockerd-current[11494]:     response = self.process_exception_by_middleware(e, request)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
 9月 06 20:06:33 server_name dockerd-current[11494]:     response = wrapped_callback(request, *callback_args, **callback_kwargs)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/src/taiga-back/taiga/base/api/viewsets.py", line 106, in view
 9月 06 20:06:33 server_name dockerd-current[11494]:     return self.dispatch(request, *args, **kwargs)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/local/lib/python3.5/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
 9月 06 20:06:33 server_name dockerd-current[11494]:     return view_func(*args, **kwargs)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/src/taiga-back/taiga/base/api/views.py", line 461, in dispatch
 9月 06 20:06:33 server_name dockerd-current[11494]:     response = self.handle_exception(exc)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/src/taiga-back/taiga/base/api/views.py", line 458, in dispatch
 9月 06 20:06:33 server_name dockerd-current[11494]:     response = handler(request, *args, **kwargs)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/src/taiga-back/taiga/auth/api.py", line 98, in register
 9月 06 20:06:33 server_name dockerd-current[11494]:     return self._public_register(request)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/src/taiga-back/taiga/auth/api.py", line 78, in _public_register
 9月 06 20:06:33 server_name dockerd-current[11494]:     user = public_register(**data)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/local/lib/python3.5/contextlib.py", line 30, in inner
 9月 06 20:06:33 server_name dockerd-current[11494]:     return func(*args, **kwds)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/src/taiga-back/taiga/auth/services.py", line 125, in public_register
 9月 06 20:06:33 server_name dockerd-current[11494]:     send_register_email(user)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/src/taiga-back/taiga/auth/services.py", line 63, in send_register_email
 9月 06 20:06:33 server_name dockerd-current[11494]:     return bool(email.send())
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/local/lib/python3.5/site-packages/django/core/mail/message.py", line 342, in send
 9月 06 20:06:33 server_name dockerd-current[11494]:     return self.get_connection(fail_silently).send_messages([self])
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/local/lib/python3.5/site-packages/django/core/mail/backends/smtp.py", line 100, in send_messages
 9月 06 20:06:33 server_name dockerd-current[11494]:     new_conn_created = self.open()
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/local/lib/python3.5/site-packages/django/core/mail/backends/smtp.py", line 58, in open
 9月 06 20:06:33 server_name dockerd-current[11494]:     self.connection = connection_class(self.host, self.port, **connection_params)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/local/lib/python3.5/smtplib.py", line 251, in __init__
 9月 06 20:06:33 server_name dockerd-current[11494]:     (code, msg) = self.connect(host, port)
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/local/lib/python3.5/smtplib.py", line 338, in connect
 9月 06 20:06:33 server_name dockerd-current[11494]:     (code, msg) = self.getreply()
 9月 06 20:06:33 server_name dockerd-current[11494]:   File "/usr/local/lib/python3.5/smtplib.py", line 394, in getreply
 9月 06 20:06:33 server_name dockerd-current[11494]:     raise SMTPServerDisconnected("Connection unexpectedly closed")
 9月 06 20:06:33 server_name dockerd-current[11494]: smtplib.SMTPServerDisconnected: Connection unexpectedly closed
```


問題の切り分けのため、dockerコンテナ内から

https://stackoverflow.com/questions/17759860/python-2-smtpserverdisconnected-connection-unexpectedly-closed

に載ってるソースを使ってメールを投げてみると成功する。
ここで一つ勘違いをして、このソースだとポート指定していない -> 25使ってるんじゃない？と思い、docker-compose.yamlで25を指定してみる。
smtplib.SMTP_SSL の場合省略時は465なので勘違いなのだけど、何故かこれでメールが届くようになってしまった。なぜ。

```
$ docker exec f2ce38f404db env | grep TAIGA_EMAIL_PORT
TAIGA_EMAIL_PORT=25
```

いちおうポートが設定されているかも確認。されている。
とりあえず動いているのでこのままほうっておきつつ継続調査。