联系表单邮件处理程序示例继续进行appengine

时间:2013-12-05 02:48:24

标签: google-app-engine go

令我惊讶的是,我没有找到一个联系表单邮件处理程序示例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)如果ReplyToSender不同,To仅适用于Gmail。

2)Sender应该在Google云端控制台或something@yourappid.appspotmail.com中拥有管理员角色。

1 个答案:

答案 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的建议并验证你的表格。