1.通用的配置CDH郵件報警設置
- 進入cloudera manager service頁面,選擇配置
- 左側菜單Alert Publisher
- 勾選【啟用電子郵件警報】
- 郵件服務協議smtp,如果使用ssl加密的,請選擇smtps
- 輸入郵件服務器主機名稱或者IP
- 輸入郵件服務器用戶名,一般和郵箱一致
- 輸入郵箱密碼或者授權碼,授權碼具體百度,郵箱授權碼
- 填寫郵件發件人郵箱
- 填寫郵件收件人郵箱
- 第二頁設置,修改TCP端口為25,這里的端口就是SMTP服務的端口
- 回到CDH主頁,管理--警報--發送測試警報
2.內網環境,郵件登錄失敗,不能發送郵件的問題
點擊發送測試警報之后,查看Alert Publisher日志,發現經過以上配置之后,居然顯示郵件認證失敗,錯誤代碼:334 ntlm supported
從報錯的問題來看,我是沒有發現一點兒的TLS加密方面的信息,因此一開始排查問題的時候也絲毫沒有往這個方向考慮過。
當我手動構建了javamail進行服務器環境下的郵件發送,python直接調用airflow的send_email方法等測試驗證之后,確定了賬號密碼沒錯,服務器環境也沒有問題等之后,注意力放在CDH密碼解析上!
手動修改郵箱的密碼,由於公司的LDAP不允許簡單密碼,無論如何都需要特殊符號,經過幾次設置之后,也無奈的放棄了密碼解析的想法。
然后開始漫無目的的搜百度,沒錯,是的,只能搜百度,公司不讓有翻牆的工具!
直到看到有博客說,office365需要使用ssl,但是不知道怎么啟動時,下面有人回復可以修改郵件程序的啟動命令,來啟動TLS加密
於是我突然想到了airflow郵件配置中,默認是smtp_starttls=true的狀態
然后又意識到javamail中並沒有設置該參數,在糾結於到底是不是該參數造成的時,果斷選擇了修改參數做測試。於是問題解決
3.問題解決,通過java啟動參數開啟SMTP服務的TLS加密
在alter中搜索java,修改alter的java參數,添加
-Dmail.smtp.starttls.enable=true -Dmail.smtp.ssl.trust={your_email_smtp_host}
大概說明一下這個-D參數的作用:D是用來在啟動一個java程序時設置系統屬性值的,此參數的優先級最高,會覆蓋項目中配置的此項!