在開啟使用者帳號的時候,如果沒有設定 mail server
就得直接寄邀請連結給對方(不然就是把網址貼上,用通訊軟體的方式轉傳給對方),
忘記密碼也是走同樣流程,或是請他本人走到管理者旁邊按下 Change password
這樣對管理者而言相對麻煩不少。
設定 mail server 除了管理帳號方便,
之後再介紹的 Alert 功能時,也可以使用 email 通知。
步驟過程會看到「立即試用」、「是」、「啟動」等訊息,就都點下去,
中間會需要填手機號碼,進行驗證,然後填寫手機收到的驗證碼,
最後成功畫面會如下:
「選取應用程式」選擇「其他(自訂名稱)」
填寫自訂的名稱(這裡填寫 Redash)
按下產生後會跳出 16 碼的密碼(請保存好,之後無法再出現)
這組密碼配合帳號就可以操作 Google 帳戶,
所以要保管好,不要讓他人知道
因為 Redash 底層是用 Python 撰寫,
可以先用下方範例程式碼,來測試以上設定是否正常:
在 smtp.sendmail 第一個參數,這裡是no-reply@example.com
代表的是寄件者,
不過實際上都會以你的你的google帳號@gmail.com
來當成寄件者,
但還是必須要填,且要符合email帳號格式
vim test.py
import smtplib
smtp = smtplib.SMTP('smtp.gmail.com', 587)
smtp.ehlo()
smtp.starttls()
smtp.login('你的google帳號@gmail.com','剛拿到的16碼密碼不含任何符號')
smtp.sendmail('no-reply@example.com',
'收件者信箱',
'Subject: Hello World Email!\n\nHi there~’)
smtp.quit()
python test.py
如果沒有跳出任何錯誤,
收件者信箱會收到一封標題為 "Hello World Email!",內文為 "Hi there" 的信
也代表著以上設定都沒問題了!
我的環境是 5.0.1+b4850,且是用 script 安裝(安裝效果等同 Docker-based)
所以要改的地方為 vim /opt/redash/docker-compose.yml
在每個 command 是 server, scheduler, worker 的 environment 的底下加上
REDASH_MAIL_SERVER: "smtp.gmail.com"
REDASH_MAIL_PORT: 587
REDASH_MAIL_USE_TLS: "true"
REDASH_MAIL_USERNAME: "你的google帳號@gmail.com"
REDASH_MAIL_PASSWORD: "剛拿到的16碼密碼不含任何符號"
REDASH_MAIL_DEFAULT_SENDER: "no-reply@example.com"
然後重啟 docker-compose
cd /opt/redash
docker-compose up -d
Redash 也提供另外一個指令可以測試 email 設定是否正確docker-compose run --rm server manage send_test_mail
看起來沒有任何錯誤訊息,就是一切 ok 了!
接下來可以進到帳號管理頁面,
按下 Send Password Reset Email 發信試試
(也會發覺上方提醒尚未設定 mail server 的紅色警示訊息消失了)
到該帳戶的信箱收信,會收到一封標題為 "Reset your password",
內容為有排版過的 Redash 重設密碼信,
這樣就大功告成了!
目前公司還沒使用到 mail server,趁著這次研究也打算導入到公司內部,
也可省下 Redash 管理員不少心力 (也就是本人自己 0rz)
本來是打算用 localhost 配合 smtp port 25 來設定,
但是一直遇到 errno 111
問題,
後來想到之前 PyLadies 的自動化系列活動的 Python email 設定是使用 Gmail,
就直接改以此設定,也很順利的完成
也有遇到 errno 99
是只在 server 的 environment 設定環境變數,
後來循著 Python Query 設定方式,把全部 worker 都加上相同環境變數就順利解決了!
參考資源
Python Sending Email > SMTP Module
Setting up a Redash Instance > Mail Configuration
ps. 文章同步發表於 Medium
想問一下 如果在google試算表 某一欄要下條件ex:A2>200時 發送 linenotify 或發mail 這樣該如何撰寫呢 感謝