funnyJackPeng / yukunyuan-tools-feature

业务需求讨论的仓库,不涉及前后端代码
1 stars 0 forks source link

实现小程序发送邮件的功能 #7

Closed funnyJackPeng closed 1 week ago

funnyJackPeng commented 2 months ago

小程序或者各大邮箱网(例如 qq 邮箱, 网易邮箱等) 都没有提供方便的 API 支持开发者直接调用然后发送邮件,只能自己后端使用 SMTP 协议发送邮件。 好在 spring boot 3 中提供了很好的支持。

不过难点是如何针对不同用户选择的不同邮箱和地址,都可以顺利的发送邮件。 以下是咨询 AI 后生成的结果,可供参考:

问:

我的小程序主要功能是提供给用户发送指定内容的 email,收件人相对固定,但是发件人是不同客户选择的不同邮箱和 email。
例如用户 A 选择使用 qq 邮箱,email 地址是 [xxx@qq.com](mailto:xxx@qq.com); 用户 B 选择使用网易邮箱,email 地址是 [xxx@163.com](mailto:xxx@163.com)。
这样的小程序功能前后端怎样设计比较好?

答:

你描述的小程序功能非常实用,可以帮助用户使用不同的邮箱发送固定内容的邮件。针对你的需求,前后端可以这样设计:

前端设计:

邮箱选择: 提供下拉菜单或其他方式让用户选择要使用的邮箱类型(QQ 邮箱、网易邮箱等)。
邮箱授权:
如果选择 QQ 邮箱,引导用户跳转到 QQ 邮箱小程序进行授权,获取发送邮件的权限。
如果选择其他邮箱,可以考虑使用 OAuth 2.0 授权方式,引导用户到对应邮箱服务商的授权页面进行授权。
内容展示: 展示用户需要发送的固定邮件内容,并允许用户进行简单的编辑(例如修改收件人)。
发送邮件: 用户确认邮件内容后,点击发送按钮,将邮件内容、选择的邮箱类型、授权信息等数据发送到后端服务器。
后端设计:

接收请求: 接收前端发送的邮件内容、邮箱类型、授权信息等数据。
处理授权:
如果使用 QQ 邮箱小程序授权,需要后端验证授权信息是否有效。
如果使用 OAuth 2.0 授权,需要使用授权码换取访问令牌,并存储令牌信息。
发送邮件:
根据用户选择的邮箱类型,使用对应的 SMTP 服务器信息和授权方式发送邮件。
例如,如果用户选择了 QQ 邮箱,就使用 QQ 邮箱的 SMTP 服务器地址、端口号和授权信息发送邮件。
返回结果: 将邮件发送结果返回给前端,例如发送成功或失败信息。
技术选型:

前端: 微信小程序原生开发框架
后端: Kotlin + Spring Boot 3
邮件发送: Spring Mail + spring-boot-starter-mail 组件
授权: OAuth 2.0 协议
其他建议:

安全性:
妥善保管用户的授权信息,避免泄露。
对用户输入的内容进行校验,防止 XSS 攻击等安全问题。
用户体验:
提供清晰的授权流程指引,方便用户授权。
发送邮件时,提供进度提示,让用户了解发送状态。
可扩展性:
可以考虑支持更多类型的邮箱服务商。
可以考虑提供更多的邮件模板,方便用户选择。
希望以上设计思路能够帮助你开发出功能完善、安全可靠的小程序!

后端

funnyJackPeng commented 2 months ago

使用 qq 邮箱授权码的例子: https://juejin.cn/post/6844904153047646216

spring boot 发送 email 例子: https://www.baeldung.com/spring-email https://mailtrap.io/blog/spring-send-email/

funnyJackPeng commented 2 months ago

image

ROEGRFUFXGBFJAAR

目前 qq 邮箱和网易邮箱都可以获取到 SMTP 的授权码,有效期一般为半年。

funnyJackPeng commented 2 months ago

qq 邮箱和网易邮箱使用的 smtp 端口还不一样,得分别设置, 网易邮箱:https://mail.163.com/mailhelp/client.htm qq 邮箱: https://service.mail.qq.com/detail/0/427

funnyJackPeng commented 1 month ago

小程序发送邮件功能已完成,还差一步制作如何获取邮箱授权码的教程

hk6888 commented 1 week ago

抽空时,再加上网易的126邮箱