8000 实现邮件通知功能 by Jinvic · Pull Request #265 · kingwrcy/moments · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

实现邮件通知功能 #265

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Feb 12, 2025
Merged

实现邮件通知功能 #265

merged 7 commits into from
Feb 12, 2025

Conversation

Jinvic
Copy link
Contributor
@Jinvic Jinvic commented Jan 29, 2025

这个 PR 做了什么?

实现了邮件通知功能

  • 需要在用户中心配置smtp及选择是否开启通知
  • 开启通知且smtp配置无误,将在收到评论时发送邮件通知
  • 只测试了QQ邮箱

示例:
image
image
image
image

@dianso
Copy link
Contributor
dianso commented Jan 29, 2025

辛苦啦

@dinphy
Copy link
Contributor
dinphy commented Jan 29, 2025

先提交的RSS功能,被MAIL功能的部分代码覆盖了。

另外,评论时缺少邮箱输入框,似乎实现不了邮件通知啊!

@Jinvic
Copy link
Contributor Author
Jinvic commented Jan 30, 2025

先提交的RSS功能,被MAIL功能的部分代码覆盖了。

另外,评论时缺少邮箱输入框,似乎实现不了邮件通知啊!

现有的评论系统没有记录邮箱地址,好像确实实现不了对评论者的通知,只能通知配置了邮箱的动态发布者。

@dianso
Copy link
Contributor
dianso commented Jan 30, 2025

先提交的RSS功能,被MAIL功能的部分代码覆盖了。

我记得以前可以填写邮箱,能否修改网站这一栏,支持填写网址和邮箱呢

@Jinvic
Copy link
Contributor Author
Jinvic commented Feb 5, 2025

不止是没有邮件地址的问题。目前要实现评论回复的邮件通知主要有三点需要解决。

  1. 不能定位具体回复的哪条评论。目前评论系统只有个replyTo字段标识回复给谁,但记录的是username而不是id。对同一username的多条评论无法区别,而且匿名用户这个username是随便填的。
  2. 无法从评论定位到具体用户。评论表中的username标识实际对应的是用户表的nickname字段,而这个字段是没有唯一约束的完全可以重复。而且匿名用户这个username是随便填的。
  3. 匿名用户的发信账号问题。目前邮件通知的实现并不是服务器自己发邮件,而是使用的第三方服务(如qq邮箱),所以需要配置账号密码,相当于自己给自己发邮件。但匿名用户没有这个配置,如果直接使用管理员的账号一方面给大量陌生邮箱发送邮件可能有一定风险,另一方面出于私心我也不想把自己的账号贡献出来公用。

以上问题要解决需要对评论系统大改才行,而这就不是这一个pr能够解决的了。

@Jinvic
Copy link
Contributor Author
Jinvic commented Feb 5, 2025

不止是没有邮件地址的问题。目前要实现评论回复的邮件通知主要有三点需要解决。

  1. 不能定位具体回复的哪条评论。目前评论系统只有个replyTo字段标识回复给谁,但记录的是username而不是id。对同一username的多条评论无法区别,而且匿名用户这个username是随便填的。
  2. 无法从评论定位到具体用户。评论表中的username标识实际对应的是用户表的nickname字段,而这个字段是没有唯一约束的完全可以重复。而且匿名用户这个username是随便填的。
  3. 匿名用户的发信账号问题。目前邮件通知的实现并不是服务器自己发邮件,而是使用的第三方服务(如qq邮箱),所以需要配置账号密码,相当于自己给自己发邮件。但匿名用户没有这个配置,如果直接使用管理员的账号一方面给大量陌生邮箱发送邮件可能有一定风险,另一方面出于私心我也不想把自己的账号贡献出来公用。

以上问题要解决需要对评论系统大改才行,而这就不是这一个pr能够解决的了。

现在的实现是每个用户各自配置自己的stmp服务。
看了看之前的实现好像是配置一个公用的发信账号+每次评论时填写邮箱。需要改成这种方式吗?

@kingwrcy
Copy link
Owner
kingwrcy commented Feb 5, 2025

我个人觉得部署的人配置一次就行,每个人都配置一遍邮箱服务器之类的,还是很麻烦的.

@Jinvic Jinvic marked this pull request as draft February 5, 2025 06:23
@Jinvic
Copy link
Contributor Author
Jinvic commented Feb 5, 2025

已更新PR

  • 添加回复评论时的邮件通知
  • smtp配置由用户设置改为系统设置(只需管理员配置)
  • 已注册用户需要在用户设置配置收信邮箱,未注册用户(访客)在评论时可以配置收信邮箱

改的比较仓促,各位可以多试试看有没有问题。

@Jinvic Jinvic marked this pull request as ready for review February 5, 2025 09:39
- 邮箱验证 错误处理
- 头部字段补充
@dinphy
Copy link
Contributor
dinphy commented Feb 6, 2025

已更新PR

  • 添加回复评论时的邮件通知
  • smtp配置由用户设置改为系统设置(只需管理员配置)
  • 已注册用户需要在用户设置配置收信邮箱,未注册用户(访客)在评论时可以配置收信邮箱

改的比较仓促,各位可以多试试看有没有问题。

测试了,
image

@Jinvic
Copy link
Contributor Author
Jinvic commented Feb 6, 2025

已更新PR

  • 添加回复评论时的邮件通知
  • smtp配置由用户设置改为系统设置(只需管理员配置)
  • 已注册用户需要在用户设置配置收信邮箱,未注册用户(访客)在评论时可以配置收信邮箱

改的比较仓促,各位可以多试试看有没有问题。

测试了, image

这里用的是
email-verifier这个库,你可以在网页版验证邮箱格式。

如果不是邮箱本身格式不正确,可能是没有邮箱被正确保存和获取。可以检查数据库看是否保存了邮箱,以及在https://github.com/Jinvic/moments/blob/feat/mail/backend/handler/comment.go#L245 前添加一行:

c.base.log.Info().Msgf(targetEmail)

输出一下邮箱看是否正确获取,从而进一步确定原因。

@dinphy
Copy link
Contributor
dinphy commented Feb 6, 2025

已更新PR

  • 添加回复评论时的邮件通知
  • smtp配置由用户设置改为系统设置(只需管理员配置)
  • 已注册用户需要在用户设置配置收信邮箱,未注册用户(访客)在评论时可以配置收信邮箱

改的比较仓促,各位可以多试试看有没有问题。

测试了, image

这里用的是 email-verifier这个库,你可以在网页版验证邮箱格式。

如果不是邮箱本身格式不正确,可能是没有邮箱被正确保存和获取。可以检查数据库看是否保存了邮箱,以及在https://github.com/Jinvic/moments/blob/feat/mail/backend/handler/comment.go#L245 前添加一行:

c.base.log.Info().Msgf(targetEmail)

输出一下邮箱看是否正确获取,从而进一步确定原因。

image

@Jinvic
Copy link
Contributor Author
Jinvic commented Feb 6, 2025

image

image
image

我好像没办法复现这个问题。。。
是不是多输了空格之类,实在不行你把 L245-L247 这几行删了吧。

@dinphy
Copy link
Contributor
dinphy commented Feb 6, 2025

image

image image

我好像没办法复现这个问题。。。 是不是多输了空格之类,实在不行你把 L245-L247 这几行删了吧。

网页版验证邮箱,一次没成功过。
按你的方法删除这几行代码,也没有成功过。
部署到网站上,也没有成功过。

@Jinvic
Copy link
Contributor Author
Jinvic commented Feb 6, 2025

我好像没办法复现这个问题。。。 是不是多输了空格之类,实在不行你把 L245-L247 这几行删了吧。

网页版验证邮箱,一次没成功过。 按你的方法删除这几行代码,也没有成功过。 部署到网站上,也没有成功过。

试试debug/mail这个分支,环境变量LOG_LEVEL设为debug,我看看日志。

@dinphy
Copy link
Contributor
dinphy commented Feb 8, 2025

我好像没办法复现这个问题。。。 是不是多输了空格之类,实在不行你把 L245-L247 这几行删了吧。

网页版验证邮箱,一次没成功过。 按你的方法删除这几行代码,也没有成功过。 部署到网站上,也没有成功过。

试试debug/mail这个分支,环境变量LOG_LEVEL设为debug,我看看日志。

这个分支测试成功了!

@Jinvic
Copy link
Contributor Author
Jinvic commented Feb 8, 2025

这个分支测试成功了!

这个分支除了加了点日志输出什么也没改啊 😶
可能是之前你的分支没有同步到最新
总之没问题就行

@dinphy
Copy link
Contributor
dinphy commented Feb 8, 2025

这个分支测试成功了!

这个分支除了加了点日志输出什么也没改啊 😶 可能是之前你的分支没有同步到最新 总之没问题就行

问题是,重新拉代码部署,用新的数据库能成功,如果用已经存在的数据库测试就不行。具体情况我不清楚了

@dinphy
Copy link
Contributor
dinphy commented Feb 11, 2025

大佬抽空研究下,这分支我用已有的数据库测试不行,没有通知发出。本地和在线部署都一样,如果用新生成的数据库可以,但总不能不要以前的数据了吧!

@Jinvic
Copy link
Contributor Author
Jinvic commented Feb 11, 2025

大佬抽空研究下,这分支我用已有的数据库测试不行,没有通知发出。本地和在线部署都一样,如果用新生成的数据库可以,但总不能不要以前的数据了吧!

debug/mail分支上发送失败的日志有吗?环境变量设置LOG_LEVEL=debug。

@dinphy
Copy link
Contributor
dinphy commented Feb 11, 2025

大佬抽空研究下,这分支我用已有的数据库测试不行,没有通知发出。本地和在线部署都一样,如果用新生成的数据库可以,但总不能不要以前的数据了吧!

debug/mail分支上发送失败的日志有吗?环境变量设置LOG_LEVEL=debug。

没有失败的日志,只打印通知发送失败,其他的没有

@Jinvic
Copy link
Contributor Author
Jinvic commented Feb 11, 2025

没有失败的日志,只打印通知发送失败,其他的没有

环境变量改了吗?实在不行加我q私聊开个远程吧。

@dianso
Copy link
Contributor
dianso commented Feb 11, 2025

没有失败的日志,只打印通知发送失败,其他的没有

环境变量改了吗?实在不行加我q私聊开个远程吧。

我试了下没问题啊,要不合并到DEV版,在TG群再找几个测试下

@Jinvic
Copy link
Contributor Author
Jinvic commented Feb 12, 2025

我试了下没问题啊,要不合并到DEV版,在TG群再找几个测试下

我也没法复现他的问题,感觉不一定是代码问题而是配置有误。
总之多测试下总是没错的。

@Jinvic
Copy link
Contributor Author
Jinvic commented Feb 12, 2025

@dinphy 可以按照以下步骤依次排查:

新的数据库能成功,如果用已经存在的数据库测试就不行

每次启动服务都会使用AutoMigrate同步表结构,请确认切换分支后是否正确重新编译重启服务

# 进入后端目录
cd moments/backend

# 编译后端
go build -ldflags="-X main.version=local -X main.commitId=local" -o ./dist/moments

# 启动后端,注意此时的工作目录是后端目录 moments/backend
./dist/moments

邮件发送失败

pr更新后,smtp配置由用户设置改为系统设置,请确认smtp配置项是否正确设置并保存

image

没有失败的日志

请确认环境变量是否正确设置LOG_LEVEL=debug。如正确设置,将在启动时额外打印调试信息。示例:

jinvic@DESKTOP-CSOOK6J:/mnt/d/Workspace/NodeJS/moments/backend$ go build -ldflags="-X main.version=local -X main.commitId=local" -o ./dist/moments
jinvic@DESKTOP-CSOOK6J:/mnt/d/Workspace/NodeJS/moments/backend$ ./dist/moments
2025-02-12 10:44:56 INF version = local
2025-02-12 10:44:56 INF commitId = local
2025-02-12 10:44:56 DBG 基本信息 JWT密钥[JWT_KEY]= 上传目录[UPLOAD_DIR]= 数据库[DB]= 日志级别[LOG_LEVEL]=debug 是否启用Swagger文档[ENABLE_SWAGGER]=false 是否输出SQL[ENABLE_SQL_OUTPUT]=false 端口[PORT]=37892
2025-02-12 10:44:56 DBG 没有配置默认所必需的环境变量,使用当前目录[/mnt/d/Workspace/NodeJS/moments/backend]作为项目目录
2025-02-12 10:44:56 DBG JWT_KEY没有配置,随机生成为6f08c46aab724f85aa2de20527dd98c7,每次重启服务需要重新登录,配置后则不会
2025-02-12 10:44:56 DBG 连接数据库路径:/mnt/d/Workspace/NodeJS/moments/backend/db.sqlite,成功
⇨ http server started on [::]:37892
2025-02-12 10:47:00 DBG 已开启邮件通知
2025-02-12 10:47:00 DBG 直接评论
2025-02-12 10:47:00 DBG TargetEmail: dinphy1205@qq.com
2025-02-12 10:47:00 DBG 邮箱验证成功
2025-02-12 10:47:00 DBG SmtpHost: smtp.qq.com
2025-02-12 10:47:00 DBG SmtpPort: 465
2025-02-12 10:47:00 DBG SmtpUsername: 2528976435@qq.com
2025-02-12 10:47:00 DBG smtp: 尝试DialTLS连接...
2025-02-12 10:47:00 INF 成功连接到SMTP服务器
2025-02-12 10:47:00 DBG Host: http://172.25.120.38:3000
2025-02-12 10:47:00 DBG EmailHead:
From: 2528976435@qq.com
To: [dinphy1205@qq.com]
Subject: 极简朋友圈
Date: Wed, 12 Feb 2025 10:47:00 +0800
Message-ID: <20250212104700@qq.com>
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8


2025-02-12 10:47:01 INF 成功发送邮件

@dinphy
Copy link
Contributor
dinphy commented Feb 12, 2025

@dinphy 可以按照以下步骤依次排查:

新的数据库能成功,如果用已经存在的数据库测试就不行

每次启动服务都会使用AutoMigrate同步表结构,请确认切换分支后是否正确重新编译重启服务

# 进入后端目录
cd moments/backend

# 编译后端
go build -ldflags="-X main.version=local -X main.commitId=local" -o ./dist/moments

# 启动后端,注意此时的工作目录是后端目录 moments/backend
./dist/moments

邮件发送失败

pr更新后,smtp配置由用户设置改为系统设置,请确认smtp配置项是否正确设置并保存

image

没有失败的日志

请确认环境变量是否正确设置LOG_LEVEL=debug。如正确设置,将在启动时额外打印调试信息。示例:

jinvic@DESKTOP-CSOOK6J:/mnt/d/Workspace/NodeJS/moments/backend$ go build -ldflags="-X main.version=local -X main.commitId=local" -o ./dist/moments
jinvic@DESKTOP-CSOOK6J:/mnt/d/Workspace/NodeJS/moments/backend$ ./dist/moments
2025-02-12 10:44:56 INF version = local
2025-02-12 10:44:56 INF commitId = local
2025-02-12 10:44:56 DBG 基本信息 JWT密钥[JWT_KEY]= 上传目录[UPLOAD_DIR]= 数据库[DB]= 日志级别[LOG_LEVEL]=debug 是否启用Swagger文档[ENABLE_SWAGGER]=false 是否输出SQL[ENABLE_SQL_OUTPUT]=false 端口[PORT]=37892
2025-02-12 10:44:56 DBG 没有配置默认所必需的环境变量,使用当前目录[/mnt/d/Workspace/NodeJS/moments/backend]作为项目目录
2025-02-12 10:44:56 DBG JWT_KEY没有配置,随机生成为6f08c46aab724f85aa2de20527dd98c7,每次重启服务需要重新登录,配置后则不会
2025-02-12 10:44:56 DBG 连接数据库路径:/mnt/d/Workspace/NodeJS/moments/backend/db.sqlite,成功
⇨ http server started on [::]:37892
2025-02-12 10:47:00 DBG 已开启邮件通知
2025-02-12 10:47:00 DBG 直接评论
2025-02-12 10:47:00 DBG TargetEmail: dinphy1205@qq.com
2025-02-12 10:47:00 DBG 邮箱验证成功
2025-02-12 10:47:00 DBG SmtpHost: smtp.qq.com
2025-02-12 10:47:00 DBG SmtpPort: 465
2025-02-12 10:47:00 DBG SmtpUsername: 2528976435@qq.com
2025-02-12 10:47:00 DBG smtp: 尝试DialTLS连接...
2025-02-12 10:47:00 INF 成功连接到SMTP服务器
2025-02-12 10:47:00 DBG Host: http://172.25.120.38:3000
2025-02-12 10:47:00 DBG EmailHead:
From: 2528976435@qq.com
To: [dinphy1205@qq.com]
Subject: 极简朋友圈
Date: Wed, 12 Feb 2025 10:47:00 +0800
Message-ID: <20250212104700@qq.com>
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8


2025-02-12 10:47:01 INF 成功发送邮件

估计问题出在我的服务器,失败原因如下:

 http server started on [::]:3000
2025-02-11 16:44:17 ERR 邮件通知失败,原因:验证邮箱失败lookup qq.com on 183.60.82.98:53: read udp 172.17.0.2:40190->183.60.82.98:53: i/o timeout
2025-02-11 17:11:06 INF memo is {Id:0 Content:不会放风筝的人,有风也不能放飞。想登上山顶的人,时刻准备着接纳迎面而来的风。 Imgs: FavCount:0 CommentCount:0 UserId:1 CreatedAt:2025-02-11 17:11:06.822719781 +0800 CST m=+4588.201396930 UpdatedAt:<nil> Music163Url: BilibiliUrl: Location: ExternalUrl: ExternalTitle: ExternalFavicon: Pinned:0xc00111262c Ext:{"music":{},"doubanBook":{},"doubanMovie":{},"video":{}} ShowType:0xc001112640 User:<nil> Comments:[] Tags:<nil>}
2025-02-12 13:24:43 ERR 邮件通知失败,原因:验证邮箱失败lookup qq.com on 183.60.82.98:53: read udp 172.17.0.2:45348->183.60.82.98:53: i/o timeout
2025-02-12 13:25:20 ERR 邮件通知失败,原因:验证邮箱失败lookup qq.com on 183.60.82.98:53: read udp 172.17.0.2:39584->183.60.82.98:53: i/o timeout
2025-02-12 13:29:21 INF memo is {Id:0 Content:不会放风筝的人,有风也不能放飞。想要登上山顶的人,时刻准备着接纳迎面而来的风。 Imgs: FavCount:0 CommentCount:0 UserId:1 CreatedAt:2025-02-12 13:29:21.532183188 +0800 CST m=+77682.910860337 UpdatedAt:<nil> Music163Url: BilibiliUrl: Location: ExternalUrl: ExternalTitle: ExternalFavicon: Pinned:0xc000f04eb8 Ext:{"music":{},"doubanBook":{},"doubanMovie":{},"video":{}} ShowType:0xc000f04ebc User:<nil> Comments:[] Tags:<nil>}

@Jinvic
Copy link
Contributor Author
Jinvic commented Feb 12, 2025

似乎是AfterShip/email-verifier包查找DNS MX 记录时超时,属于网络问题。但这并不能解释新旧数据库结果不一致的问题。

你是否正在使用代理?如果是,关闭代理试试,判断是否为代理导致的问题。

你是否正在使用docker?如果是,尝试直接部署,判断是否为容器网络配置问题。

检查服务器防火墙和安全组规则,是否开放udp端口53。

使用nslookup -type=mx qq.com 183.60.82.98判断你的服务器能否正常访问你使用的DNS服务器183.60.82.98:53。如果不能,考虑手动修改DNS服务器。


也许我应该直接禁用email-verifier这个包,但后续发邮件肯定也要查mx记录治标不治本。网络问题我也不懂,万策尽Orz

@dinphy
Copy link
Contributor
dinphy commented Feb 12, 2025

似乎是AfterShip/email-verifier包查找DNS MX 记录时超时,属于网络问题。但这并不能解释新旧数据库结果不一致的问题。

你是否正在使用代理?如果是,关闭代理试试,判断是否为代理导致的问题。

你是否正在使用docker?如果是,尝试直接部署,判断是否为容器网络配置问题。

检查服务器防火墙和安全组规则,是否开放udp端口53。

使用nslookup -type=mx qq.com 183.60.82.98判断你的服务器能否正常访问你使用的DNS服务器183.60.82.98:53。如果不能,考虑手动修改DNS服务器。

也许我应该直接禁用email-verifier这个包,但后续发邮件肯定也要查mx记录治标不治本。网络问题我也不懂,万策尽Orz

感谢你热心的帮助,问题已经解决了,是Docker容器内无法访问外网的问题,邮件通知成功了。

@kingwrcy kingwrcy merged commit eb3f731 into kingwrcy:dev Feb 12, 2025
@dianso
Copy link
Contributor
dianso commented Feb 12, 2025

似乎是AfterShip/email-verifier包查找DNS MX 记录时超时,属于网络问题。但这并不能解释新旧数据库结果不一致的问题。

你是否正在使用代理?如果是,关闭代理试试,判断是否为代理导致的问题。

你是否正在使用docker?如果是,尝试直接部署,判断是否为容器网络配置问题。

检查服务器防火墙和安全组规则,是否开放udp端口53。

使用nslookup -type=mx qq.com 183.60.82.98判断你的服务器能否正常访问你使用的DNS服务器183.60.82.98:53。如果不能,考虑手动修改DNS服务器。

也许我应该直接禁用email-verifier这个包,但后续发邮件肯定也要查mx记录治标不治本。网络问题我也不懂,万策尽Orz

我之前是自己编译二进制运行,没问题。
现在拉取DEV这个docker镜像,无法发信。
修改docker compose,用host网络,就正常了。

好奇怪。

目前我的docker-compose.yml是这样用host,大部分时候正常,偶尔还是会提示ERR 邮件通知失败,原因:邮箱格式不正确

services:
moments:
image: kingwrcy/moments:dev
container_name: moments
restart: always
network_mode: host
environment:
PORT: 3000
JWT_KEY:
volumes:
- ./:/app/data

或许是这个库的问题,我记得go本身就有个简易的标准库 net/smtp,不过没法发送html,gomail可以,其实用第三方smtp,完全没必要发信前进行mx查询和邮箱格式验证的,因为第三方smtp会进行查询验证。

@Jinvic
Copy link
Contributor Author
Jinvic commented Feb 12, 2025

似乎是AfterShip/email-verifier包查找DNS MX 记录时超时,属于网络问题。但这并不能解释新旧数据库结果不一致的问题。
你是否正在使用代理?如果是,关闭代理试试,判断是否为代理导致的问题。
你是否正在使用docker?如果是,尝试直接部署,判断是否为容器网络配置问题。
检查服务器防火墙和安全组规则,是否开放udp端口53。
使用nslookup -type=mx qq.com 183.60.82.98判断你的服务器能否正常访问你使用的DNS服务器183.60.82.98:53。如果不能,考虑手动修改DNS服务器。
也许我应该直接禁用email-verifier这个包,但后续发邮件肯定也要查mx记录治标不治本。网络问题我也不懂,万策尽Orz

我之前是自己编译二进制运行,没问题。 现在拉取DEV这个docker镜像,无法发信。 修改docker compose,用host网络,就正常了。

好奇怪。

目前我的docker-compose.yml是这样用host,大部分时候正常,偶尔还是会提示ERR 邮件通知失败,原因:邮箱格式不正确

services: moments: image: kingwrcy/moments:dev container_name: moments restart: always network_mode: host environment: PORT: 3000 JWT_KEY: volumes: - ./:/app/data

或许是这个库的问题,我记得go本身就有个简易的标准库 net/smtp,不过没法发送html,gomail可以,其实用第三方smtp,完全没必要发信前进行mx查询和邮箱格式验证的,因为第三方smtp会进行查询验证。

我之前开发时也是一直自己编译运行的,确实没有考虑docker环境。我会尝试去掉这个库,看docker环境下smtp发送邮件是否有问题。

如果仍然有问题,或许需要一个pr更改默认的docker-compose文件。

@xuewenG xuewenG added the feature New feature label Feb 14, 2025
@xuewenG xuewenG changed the title feature: 实现邮件通知功能 实现邮件通知功能 Feb 14, 2025
@xuewenG xuewenG added this to the v0.2.9 milestone Feb 14, 2025
@xuewenG
Copy link
Collaborator
xuewenG commented Feb 14, 2025

close 78C4 #241

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature New feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants
0