最新迁移把原来的 poste.io 迁移到了新的服务器上,资料备份恢复没有任何问题。
博客的邮件提醒也没有任何问题。但是想在 gitlab 和 jira 里都配置发送邮件,结果都是失败。遇到的错误分别是:
#GitLab
OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=error: wrong version number)
#Jira
com.atlassian.mail.MailException: javax.mail.MessagingException: Could not convert socket to TLS
关于 Jira 的问题
这个问题还比较好解决。
原因是我忘记了在 poste.io 里配置 tls 的证书。因为使用了 Nginx 的反向代理,配置的 ssl 证书是宝塔申请的 Let's Encrypt 。所以导致了 587 端口连接的时候,协议不正确。
解决方法很简单,记得在 poste.io 管理后台里申请 tls 证书。至于申请证书的时候,要在 .well-known 里写入 DNS 的文件,所以在 Docker 运行的命令里要增加一个参数,就是将 Docker 里的 .well-known 目录映射到外部目录。
-v /home/posteio/.well-known:/opt/www//.well-known
而外部的这个目录,必须是在 Nignx 里添加目录映射
location /.well-known {
alias /home/posteio/.well-known;
}
关于 GitLab 的问题
一开始我简单的以为将 Jira 的问题解决了,这个问题也会一并解决。
但是后来我错了,事实上并没有。因为 poste.io 已经没有什么设置可以修改,最后将问题归并在了 GitLab 里,觉得是 GitLab 的设置有问题。
查看了一下 poste.io 的 tls 版本,是 1.3
[root@mail ~]# docker exec -it gitlab /bin/bash
root@git:/# /opt/gitlab/embedded/bin/openssl s_client -connect mail.test.com:587 -starttls smtp -tlsextdebug < /dev/null | grep TLS
TLS server extension "supported versions" (id=43), len=2
TLS server extension "key share" (id=51), len=36
TLS server extension "signature algorithms" (id=13), len=34
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = mail.test.com
verify return:1
250 STARTTLS
DONE
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
查了很多资料,各种设置都尝试了。最后果然修改了 GitLab SMTP 邮件设置,发送测试邮件正常了。
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.test.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "test@test.com"
gitlab_rails['smtp_password'] = "xxxxxxxx"
gitlab_rails['smtp_domain'] = "test.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
#请注意以下两行的设置
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
附上 GitLab 发送测试邮件
#先进入 gitlab-rails 的命令行界面
gitlab-rails console
#发送测试邮件
Notify.test_email('test@test.com', 'topic', 'test').deliver_now