Gitlab新建用户无法收到邮件的问题解决办法

news/2024/11/8 15:35:27/

文章目录

  • 前言
  • 解决方案
  • 遇到的错误
    • 域名解析问题
      • 解决办法
    • 邮箱认证问题
      • 解决方案
    • 端口配置互斥
      • 解决方案
  • 运行环境
  • docker安装
  • 总结

前言

这个问题网上解决的帖子很多,根本原因就是配置错误,修改好配置就可以了,我也没有其他的更加新奇的解决办法,之所以再总结一遍只是为了自己统一查找方便,同时把一些差异点记录一下,因为版本和运行环境的不同,可能跟网上的解决方案有一点点差异,先写答案再聊不同吧。

解决方案

  1. 开启企业微信邮箱(QQ邮箱、163邮箱亦可)的POP3/SMTP服务,获取授权码

  2. 修改gitlab的配置文件 /etc/gitlab/gitlab.rb 如下

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "gitlab@gameup.com"
gitlab_rails['smtp_password'] = "授权码"
gitlab_rails['smtp_domain'] = "exmail.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = truegitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'gitlab@gameup.com'
gitlab_rails['gitlab_email_display_name'] = 'Gitlab'
  1. 重新加载配置生效 gitlab-ctl reconfigure,等待执行完成

  2. 利用gitlab测试配置是否成功

  • 执行 gitlab-rails console进入控制台,我的机器性能较差,多等一会看到命令提示符
  • 输入后面面的命令 Notify.test_email('收件人邮箱', '邮件标题', '正文').deliver_now 发送一封测试邮件
  • 若成功过则收到测试邮件,失败则会在控制台显示错误消息,根据错误信息检查和修改配置即可

遇到的错误

我修改配置的旅程也不是一帆风顺的,期间也遇到的了几个错误,都是在 Notify.test_email 测试之后发现有问题,逐步修改的

域名解析问题

Notify.test_email('shz@gamegu.com', 'Test Email', 'This is a test email from GitLab').deliver_now
--------------------------------------------------------------------------------Ruby:         ruby 3.2.5 (2024-07-26 revision 31d0f1a2e7) [x86_64-linux]GitLab:       17.5.1 (e8dca573167) FOSSGitLab Shell: 14.39.0PostgreSQL:   14.11
------------------------------------------------------------[ booted in 61.07s ]
Loading production environment (Rails 7.0.8.4)
Delivered mail 67248a5c847e9_6f32fe445660@gitlab.gamegu.com.mail (20023.7ms)
/opt/gitlab/embedded/lib/ruby/3.2.0/socket.rb:231:in getaddrinfo': getaddrinfo: Temporary failure in name resolution (SocketError)from /opt/gitlab/embedded/lib/ruby/3.2.0/socket.rb:231:in foreach'from /opt/gitlab/embedded/lib/ruby/3.2.0/socket.rb:635:in tcp'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/net-smtp-0.3.3/lib/net/smtp.rb:643:in tcp_socket'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/net-smtp-0.3.3/lib/net/smtp.rb:656:in do_start'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/net-smtp-0.3.3/lib/net/smtp.rb:611:in start'from /opt/gitlab/embedded/service/gitlab-rails/config/initializers/mail_starttls_patch.rb:53:in start_smtp_session'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:100:in deliver!'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/mail-2.8.1/lib/mail/message.rb:2145:in do_delivery'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/mail-2.8.1/lib/mail/message.rb:253:in block in deliver'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/actionmailer-7.0.8.4/lib/action_mailer/base.rb:588:in block in deliver_mail'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/activesupport-7.0.8.4/lib/active_support/notifications.rb:206:in block in instrument'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/activesupport-7.0.8.4/lib/active_support/notifications/instrumenter.rb:24:in instrument'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/activesupport-7.0.8.4/lib/active_support/notifications.rb:206:in instrument'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/actionmailer-7.0.8.4/lib/action_mailer/base.rb:586:in deliver_mail'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/mail-2.8.1/lib/mail/message.rb:253:in deliver'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/actionmailer-7.0.8.4/lib/action_mailer/message_delivery.rb:119:in block in deliver_now'... 15 levels...
irb(main):002:0>

解决办法

修改 /etc/resolv.conf 来指定自己服务器的DNS,通用的可以使用 nameserver 8.8.8.8

邮箱认证问题

/opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/net-smtp-0.3.3/lib/net/smtp.rb:1076:in check_response': 501 mail from address must be same as authorization user (Net::SMTPSyntaxError)from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/net-smtp-0.3.3/lib/net/smtp.rb:1044:in getok'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/net-smtp-0.3.3/lib/net/smtp.rb:945:in mailfrom'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/net-smtp-0.3.3/lib/net/smtp.rb:767:in send_message'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp_connection.rb:53:in deliver!'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:101:in block in deliver!'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/net-smtp-0.3.3/lib/net/smtp.rb:612:in start'from /opt/gitlab/embedded/service/gitlab-rails/config/initializers/mail_starttls_patch.rb:53:in start_smtp_session'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:100:in deliver!'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/mail-2.8.1/lib/mail/message.rb:2145:in do_delivery'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/mail-2.8.1/lib/mail/message.rb:253:in block in deliver'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/actionmailer-7.0.8.4/lib/action_mailer/base.rb:588:in block in deliver_mail'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/activesupport-7.0.8.4/lib/active_support/notifications.rb:206:in block in instrument'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/activesupport-7.0.8.4/lib/active_support/notifications/instrumenter.rb:24:in instrument'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/activesupport-7.0.8.4/lib/active_support/notifications.rb:206:in instrument'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/actionmailer-7.0.8.4/lib/action_mailer/base.rb:586:in deliver_mail'from /opt/gitlab/embedded/lib/ruby/gems/3.2.0/gems/mail-2.8.1/lib/mail/message.rb:253:in deliver'... 16 levels...

解决方案

smtp 配置中应该填写正确的邮箱和授权码,同时 /etc/gitlab/gitlab.rb 中设置 gitlab_rails['gitlab_email_from']gitlab_rails['smtp_user_name'] 一致

端口配置互斥

gitlab_rails['smtp_tls'] and gitlab_rails['smtp_enable_starttls_auto'] are mutually exclusive. Set one of them to false. SMTP providers usually use port 465 for TLS and port 587 for STARTTLS.

解决方案

这个错误表明在 GitLab 的配置文件中同时启用了 smtp_tlssmtp_enable_starttls_auto 选项,但它们是互斥的,只能选择其中一个设置为 true,如果使用 TLS(通常是端口 465)仅将 smtp_tls 选项设置为 true,如果使用 STARTTLS(通常是端口 587)只能将 smtp_enable_starttls_auto 设置为true。

关于gitlab的参数,有一个external_url 表示gitlab的访问域名,可以配置为 external_url 'http://gitlab.gameup.com',而这个域名也可以在定义容器时通过 --hostname 指定

运行环境

我的Gitlab不是在服务器上直接安装的,而是通过Docker安装的gitlab镜像,服务器是CentOS7系统,gitlab组件相关版本如下:

Components

GitLab v17.5.1
GitLab Shell 14.39.0
GitLab Workhorse v17.5.1
GitLab API v4
GitLab KAS 17.5.1
Ruby 3.2.5p208
Rails 7.0.8.4
PostgreSQL (main) 14.11
PostgreSQL (ci) 14.11
Redis 7.0.15

正因为我是通过Dokcer安装的,所以上面的很多命令需要到容器中执行,也就是得先执行 docker exec -it gitlab /bin/bash

而通过Docker安装gitlab的命令也列举一下:

docker run --detach \--hostname gitlab.gameup.com \--publish 443:443 --publish 80:80 --publish 22:22 \--name gitlab \--restart always \--volume /export/docker/gitlab/config:/etc/gitlab \--volume /export/docker/gitlab/logs:/var/log/gitlab \--volume /export/docker/gitlab/data:/var/opt/gitlab \registry.cn-hangzhou.aliyuncs.com/z5z/gitlab-ce:latest

不要问我这个镜像名字为什么这样古怪,那么因为DockerHub镜像在当前的网络环境下实在难以下载,不得不借助Github的Actions和阿里云的镜像完成中转,可以利用这个开源项目 进行中转

docker_157">docker安装

上面说了镜像难装,实际上现在连Docker的安装也需要费点劲,我曾经在AWS上安装过一些Docker镜像,那丝滑的程度真的跟教科书写的一模一样,但是在我目前所处的网络注定要一波三折了,CentOS7的系统可以按照下面的步骤操作了。

# 备份源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# yum使用阿里云
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum makecache# 安装必要的一些系统工具
sudo yum install -y wget yum-utils device-mapper-persistent-data lvm2
# 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 修改源
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo# 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# 开启Docker服务
sudo systemctl start docker

总结


==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

他时若遂凌云志,敢笑黄巢不丈夫。伟人可以被人们敬仰,也可以被用来作为登天的阶梯,借他人之成就,抒发自己之情怀~


http://www.ppmy.cn/news/1545391.html

相关文章

input file检验成功之后才可以点击

input file检验成功之后才可以点击 需求 在上传发票前需要先填写发票号&#xff0c;然后点击选择文件直接完成上传功能 实现思路 在没有输入发票号之前&#xff0c;file按钮不可用不能点击&#xff0c;输入之后&#xff0c;按钮可用&#xff0c;点击之后选择文件&#xff…

深度学习(十):伦理与社会影响的深度剖析(10/10)

深度学习&#xff1a;伦理与社会影响的深度剖析 一、深度学习的伦理挑战 &#xff08;一&#xff09;数据隐私之忧 深度学习模型的训练往往需要大量数据&#xff0c;而数据的收集过程可能会侵犯个人隐私。例如&#xff0c;据统计&#xff0c;面部识别技术在全球范围内每天会收…

【算法】【优选算法】双指针(下)

目录 一、611.有效三⻆形的个数1.1 左右指针解法1.2 暴力解法 二、LCR 179.查找总价格为目标值的两个商品2.1 左右指针解法2.2 暴力解法 三、15.三数之和3.1 左右指针解法3.2 暴力解法 四、18.四数之和4.1 左右指针解法4.2 暴力解法 一、611.有效三⻆形的个数 题目链接&#x…

debian11安装最新rabbitmq

1、使用官网提供系统对应的安装脚本 安装 版本说明&#xff1a; Debian Buster代表Debian 10 Debian Bullseye代表Debian 11 Debian Bookworm代表Debian 12 ‌Debian Trixie代表Debian 13 Debian Sid代表Debian unstable版本 2、新建脚本文件 vim rabbitMq.sh将脚本内容复制到…

python操作CSV和excel,如何来做?

诸如pandas、xlrd、xlwings也可以实现excel的读取&#xff0c;但pandas最简单实用。 使用pandas分三步走&#xff1a; 1、安装python 2、安装IDE比如pycharm、jupyter&#xff08;这里强烈推荐使用jupyter notebook或者lab&#xff09; notebook展示数据很直观&#xff0c;就…

LabVIEW VISA通信常见问题

在工业自动化和测试测量等应用中&#xff0c;使用LabVIEW的VISA函数与设备进行通信时&#xff0c;若发送指令后未能接收数据&#xff0c;以下因素可能是原因&#xff1a; 设备未响应或响应延迟应用示例&#xff1a;例如&#xff0c;在控制测量仪器&#xff08;如电压表&#xf…

深入理解torch.functional.cross_entropy或F.cross_entropy的原理

参考Trying to understand cross_entropy loss in PyTorch的回答&#xff1a; 可知以下两个调用等价&#xff1a; import torch import torch.nn.functional as F x torch.FloatTensor([[1.,0.,0.],[0.,1.,0.],[0.,0.,1.]]) y torch.LongTensor([0,1,2])print(torch.nn.fun…

Hive 的数据类型

基本类型 整型 TINYINT: 1字节整数&#xff0c;范围从 -128 到 127。SMALLINT: 2字节整数&#xff0c;范围从 -32,768 到 32,767。INT: 4字节整数&#xff0c;范围从 -2,147,483,648 到 2,147,483,647。BIGINT: 8字节整数&#xff0c;范围从 -9,223,372,036,854,775,808 到 9…