令我惊讶的是,我没有找到一个联系表单邮件处理程序示例go?我今天不想制作一个轮子,有可用的例子吗?
编辑:(剪切并粘贴答案)package bin
import (
"fmt"
"net/http"
netMail "net/mail"
"appengine"
"appengine/mail"
)
func contact(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
name := r.FormValue("name")
email := r.FormValue("email")
subject := r.FormValue("subject")
message := r.FormValue("message")
msg := &mail.Message{
Sender: name + " <...@yourappid.appspotmail.com>",
To: []string{"...@..."},
ReplyTo: email,
Subject: subject,
Body: message,
Headers: netMail.Header{
"On-Behalf-Of": []string{email},
},
}
if err := mail.Send(c, msg); err != nil {
c.Errorf("Couldn't send email: %v", err)
fmt.Fprint(w, "Mail NOT send! Error")
}else{
fmt.Fprint(w, "Mail send.")
}
}
注:
1)如果ReplyTo
和Sender
不同,To
仅适用于Gmail。
2)Sender
应该在Google云端控制台或something@yourappid.appspotmail.com
中拥有管理员角色。
答案 0 :(得分:3)
这很可能失败,因为Sender
只能是
something@yourappid.appspotmail.com
我建议您对发件人的电子邮件进行硬编码,并使用包含原始发件人姓名/电子邮件的On-Behalf-Of
标题。
此外,WriteString
接受一个string
,而不是[]string
切片。
您的示例的最小修改将是:
…
msg := &mail.Message{
Sender: name + " <developer@yourapp.com>",
To: []string{"...@gmail.com"},
Subject: subject,
Body: message,
Headers: netMail.Header{
"On-Behalf-Of": []string{email},
},
}
…
此外,您需要确保用户的名称实际上不包含电子邮件地址。这可能会导致你的问题...
最好的办法是按照@elithrar的建议并验证你的表格。