你有碰到過通過docker部署Exceptionless無法發送郵件的問題嗎?此解決辦法適用於Exceptionless 5.x版本(如果你不想升級6.x的話)。
1、問題起因
去年這個時候,得知Exceptionless 5.0版本發布,我立即將一直部署在Windows Server上的線上Exceptionless遷移到了Linux上。但是,期間發現按照wiki配置好Email卻一直無法發送郵件,但由於不影響使用,我也就沒有深究(其實還是懶),發布了一篇快速的部署Exceptionless 5.0的博文在博客園上並發出了求助,結果各個園友的幫助回答都沒有解決我的問題。
近兩個月發現容器化的Exceptionless的賬號沒有經過驗證,經常兩三周賬號數據就會丟失,於是就花了一點時間排查了一下。想着肯定有人跟我碰到了同樣的問題,於是直接去github上搜了搜issue,果然有很多chinese friends都提了問題,但是大家的描述都不到位,終於找到了兩個issue和我問題比較match,於是嘗試了大家給的辦法並且驗證可行,所以也分享給大家。
2、問題描述與解決
無法發送驗證郵件
我們應該都看過Exceptionless的wiki文檔上介紹,通過docker-compose.yml中為api和job兩個服務配置一下這個參數配置就可以發送郵件:
EX_ConnectionStrings__Email: smtps://itc-dev%40qq.com:your-password@smtp.qq.com:465
其中,smtps代表使用SSL安全協議,itc-dev%40qq.com是我的賬號名,其中%40是轉義字符,代表@號,即itc-dev@qq.com。
但是通過docker-compose up -d啟動起來之后,你會發現所有服務都正常,但就是在“My Account”頁面中點擊發送驗證郵件始終無法收到驗證郵件。通過查看logs發現Mailkit報錯,通過查詢issues中了解到,如果不想改代碼的話就需要額外再配置一個參數EX_SmtpFrom(給api和job項目都配置一下):
EX_ConnectionStrings__Email: smtps://itc-dev%40qq.com:your-password@smtp.qq.com:465EX_SmtpFrom: itc-dev@qq.com
這個EX_SmtpFrom是你需要通過SMTP協議登錄的發送者郵箱,這里不再需要轉移字符了,直接配置上即可。
重新啟動,你會發現,你可以收到驗證郵件了。
更多細節,請參考:https://github.com/exceptionless/Exceptionless/issues/545
點擊驗證郵件鏈接無法真正驗證郵箱
前面收到了郵件鏈接,我想終於可以激活了我的賬號郵箱了,結果沒想到通過驗證鏈接過去還是沒有真正激活我的賬號。於是,我又去issue里面找了一下,發現需要更改一下BASE_URL的配置(也是同樣給api和job項目都配置一下):
EX_BaseURL: http://192.168.16.180:5100/#!
原配置:EX_BaseURL: http://192.168.16.180:5100,需要加上 /#! 符號,因為如果你沒有使用url重寫,需要給BaseURL加上這個符號。后續6.x版本應該已經解決了這個問題了,但是5.x版本應該還是存在。
更多細節,請參考:https://github.com/exceptionless/Exceptionless/issues/295
3、啟用郵件之后
每日項目簡報
Exceptionless的強大之后就在於它提供了這個功能,對於線上環境特別有用。
呼呼,我一般只選擇通過我嚴重錯誤。
新的異常錯誤通知
對於線上環境,一些可以避免的異常及時通知,可以幫助我們盡早在下個版本發布前修正。
4、小結
最后,如果你也在用Exceptionless 5.x,希望可以幫到你。