Gitlab SMTP Setting (trouble shooting)

當知道原因之後有種做白工的感覺  =___=

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)。