當知道原因之後有種做白工的感覺 =___=
Official 的設定說明文件在https://docs.gitlab.com/omnibus/settings/smtp.html
gitlab smtp 設定在 /etc/gitlab/gitlab.rb 裡面,基本上只要改這些地方
gitlab_rails['gitlab_email_from'] = 'user@domain.com' gitlab_rails['gitlab_email_display_name'] = 'my_vm' gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.office365.com" gitlab_rails['smtp_port'] = 587 gitlab_rails['smtp_user_name'] = "user@domain.com" gitlab_rails['smtp_password'] = "password" gitlab_rails['smtp_domain'] = "domain.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = false
以上是用 office 365 的 smtp 當作例子,然後再 vmware 裏頭做設定,一切看起來都非常的順利。但是… 因為公司的 gitlab 是放在 google cloud platform上,所以在vmware試了之後,就把設定整個套上去,卻發現怎麼不能用。
於是開始翻了一堆資料,包含連 /opt/gitlab/embedded/service/gitlab-rails/config/environments/production.rb 都翻出來改
config.action_mailer.raise_delivery_errors = true config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { :address => 'smtp.office365.com', :port => 587, :domain => "domain.com", :authentication => "login", :user_name => "user@domain.com", :password => "password", :enable_starttls_auto => true }
結果還是不行,後來翻到原來有人說 smtp.office365.com 有時候不能直接用,需要設定 out flow connector relay,找dns 設定的 mx 等等。後來發現怎麼 587, 25 等常用的 smtp port 都連不出去,才發現到原來 google cloud platform上頭把不是用 gmail 的 out going traffic 都擋了。
openssl s_client -connect smtp.office365.com:587 smtp
只好放棄改用 gmail account 來驗證smtp.gmail.com並寄信
gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.gmail.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "account@gmail.com" gitlab_rails['smtp_password'] = "password" gitlab_rails['smtp_domain'] = "gmail.com" gitlab_rails['smtp_authentication'] = "plain" gitlab_rails['smtp_enable_starttls_auto'] = false gitlab_rails['smtp_tls'] = true
最開始 try 的時候是 enable_starttls_auto = true, port = 587。但是下 sudo gitlab-ctl tail | grep ‘mail’ 的時候都可以看到一些錯誤,明明已經有把less secure application 設定打開。
後來才發現google 真的太聰明,發現我人在台灣開啟了 allow less secure application,但是卻在 cloud 機器(usa)上做登入 smtp 的事情,所以就全擋了,需要再Allow DisplayUnlockCaptcha 才能正常運作。
最後,很多失敗的 send mail request 會被放在 queue (redis)內,所以需要清一下
sudo gitlab-rake cache:clear附註: 2018 年中之後,可以在 google cloud 上頭用 offic365 smtp 了 (https://stackoverflow.com/questions/45344000/using-smtp-to-office-365-from-google-cloud-engine)。