-
Notifications
You must be signed in to change notification settings - Fork 201
实现邮件通知功能 #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
实现邮件通知功能 #265
Conversation
辛苦啦 |
先提交的RSS功能,被MAIL功能的部分代码覆盖了。 另外,评论时缺少邮箱输入框,似乎实现不了邮件通知啊! |
现有的评论系统没有记录邮箱地址,好像确实实现不了对评论者的通知,只能通知配置了邮箱的动态发布者。 |
我记得以前可以填写邮箱,能否修改网站这一栏,支持填写网址和邮箱呢 |
不止是没有邮件地址的问题。目前要实现评论回复的邮件通知主要有三点需要解决。
以上问题要解决需要对评论系统大改才行,而这就不是这一个pr能够解决的了。 |
现在的实现是每个用户各自配置自己的stmp服务。 |
我个人觉得部署的人配置一次就行,每个人都配置一遍邮箱服务器之类的,还是很麻烦的. |
已更新PR
改的比较仓促,各位可以多试试看有没有问题。 |
- 邮箱验证 错误处理 - 头部字段补充
这里用的是 如果不是邮箱本身格式不正确,可能是没有邮箱被正确保存和获取。可以检查数据库看是否保存了邮箱,以及在https://github.com/Jinvic/moments/blob/feat/mail/backend/handler/comment.go#L245 前添加一行: c.base.log.Info().Msgf(targetEmail) 输出一下邮箱看是否正确获取,从而进一步确定原因。 |
|
试试debug/mail这个分支,环境变量LOG_LEVEL设为debug,我看看日志。 |
这个分支测试成功了! |
这个分支除了加了点日志输出什么也没改啊 😶 |
问题是,重新拉代码部署,用新的数据库能成功,如果用已经存在的数据库测试就不行。具体情况我不清楚了 |
大佬抽空研究下,这分支我用已有的数据库测试不行,没有通知发出。本地和在线部署都一样,如果用新生成的数据库可以,但总不能不要以前的数据了吧! |
debug/mail分支上发送失败的日志有吗?环境变量设置LOG_LEVEL=debug。 |
没有失败的日志,只打印通知发送失败,其他的没有 |
环境变量改了吗?实在不行加我q私聊开个远程吧。 |
我试了下没问题啊,要不合并到DEV版,在TG群再找几个测试下 |
我也没法复现他的问题,感觉不一定是代码问题而是配置有误。 |
@dinphy 可以按照以下步骤依次排查:
每次启动服务都会使用 # 进入后端目录
cd moments/backend
# 编译后端
go build -ldflags="-X main.version=local -X main.commitId=local" -o ./dist/moments
# 启动后端,注意此时的工作目录是后端目录 moments/backend
./dist/moments
pr更新后,smtp配置由用户设置改为系统设置,请确认smtp配置项是否正确设置并保存。
请确认环境变量是否正确设置 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>} |
似乎是AfterShip/email-verifier包查找DNS MX 记录时超时,属于网络问题。但这并不能解释新旧数据库结果不一致的问题。 你是否正在使用代理?如果是,关闭代理试试,判断是否为代理导致的问题。 你是否正在使用docker?如果是,尝试直接部署,判断是否为容器网络配置问题。 检查服务器防火墙和安全组规则,是否开放udp端口53。 使用 也许我应该直接禁用email-verifier这个包,但后续发邮件肯定也要查mx记录治标不治本。网络问题我也不懂,万策尽Orz |
感谢你热心的帮助,问题已经解决了,是Docker容器内无法访问外网的问题,邮件通知成功了。 |
我之前是自己编译二进制运行,没问题。 好奇怪。 目前我的docker-compose.yml是这样用host,大部分时候正常,偶尔还是会提示ERR 邮件通知失败,原因:邮箱格式不正确 services: 或许是这个库的问题,我记得go本身就有个简易的标准库 net/smtp,不过没法发送html,gomail可以,其实用第三方smtp,完全没必要发信前进行mx查询和邮箱格式验证的,因为第三方smtp会进行查询验证。 |
我之前开发时也是一直自己编译运行的,确实没有考虑docker环境。我会尝试去掉这个库,看docker环境下smtp发送邮件是否有问题。 如果仍然有问题,或许需要一个pr更改默认的docker-compose文件。 |
close 78C4 #241 |
这个 PR 做了什么?
实现了邮件通知功能
示例:



