使用gomail开发联系表单时如何接收所有提交用户的咨询消息?
解决方法
首先你混淆了Reply-To的配置逻辑:这个属性属于单封邮件的自定义头部,不需要在Gmail账户后台设置,直接在发信代码里动态配置即可,完全不需要获取用户的邮箱密码,具体操作如下:
核心修改点
- 你的联系表单需要先采集用户的联系邮箱、咨询内容等提交字段,假设你拿到的用户联系邮箱存储在变量
userContactEmail中,用户提交的咨询内容存储在userConsultContent中。 - 代码中新增
Reply-To头部配置,指定为用户提交的邮箱,你收到邮件后点击回复,收件人会自动填充为该用户邮箱,不会默认回复到发信的email1@gmail.com。 - 注意不要直接修改
From字段为用户邮箱:Gmail SMTP要求发件人必须是当前验证的账号,随意修改会触发发件失败。
修改后的代码示例
package main import ( "log" "gopkg.in/gomail.v2" ) func main() { abc := gomail.NewMessage() // 注意你原代码里的邮箱拼写错误:gamil修正为gmail abc.SetHeader("From", "email1@gmail.com") abc.SetHeader("To", "email2@gmail.com") // 动态设置用户的联系邮箱为Reply-To userContactEmail := "user_submitted_email@example.com" // 这里替换为你表单拿到的用户实际邮箱 abc.SetHeader("Reply-To", userContactEmail) // 可以优化主题,带上用户标识方便识别 abc.SetHeader("Subject", "联系表单新咨询:来自" + userContactEmail) // 正文替换为用户提交的咨询内容 userConsultContent := "用户提交的实际咨询内容" // 这里替换为你表单拿到的用户实际内容 abc.SetBody("text/plain", userConsultContent) a := gomail.NewDialer("smtp.gmail.com", 587, "email1@gmail.com", "app password") if err := a.DialAndSend(abc); err != nil { log.Fatal(err) } }
额外注意事项
- 测试时可以用自己的邮箱提交表单,收到邮件后点击回复,确认收件人是否为你提交的测试邮箱,验证配置是否生效。
- 原代码中
email1@gamil.com拼写错误(多了个a),如果实际代码也是这个写法会导致发件异常,记得修正。
内容的提问来源于stack exchange,提问作者user17198758
相关产品推荐
相关产品推荐

