replace zxq.co/ripple/hanayo
This commit is contained in:
123
vendor/google.golang.org/appengine/mail/mail.go
generated
vendored
Normal file
123
vendor/google.golang.org/appengine/mail/mail.go
generated
vendored
Normal file
@@ -0,0 +1,123 @@
|
||||
// Copyright 2011 Google Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Apache 2.0
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
/*
|
||||
Package mail provides the means of sending email from an
|
||||
App Engine application.
|
||||
|
||||
Example:
|
||||
msg := &mail.Message{
|
||||
Sender: "romeo@montague.com",
|
||||
To: []string{"Juliet <juliet@capulet.org>"},
|
||||
Subject: "See you tonight",
|
||||
Body: "Don't forget our plans. Hark, 'til later.",
|
||||
}
|
||||
if err := mail.Send(c, msg); err != nil {
|
||||
log.Errorf(c, "Alas, my user, the email failed to sendeth: %v", err)
|
||||
}
|
||||
*/
|
||||
package mail // import "google.golang.org/appengine/mail"
|
||||
|
||||
import (
|
||||
"net/mail"
|
||||
|
||||
"github.com/golang/protobuf/proto"
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"google.golang.org/appengine/internal"
|
||||
bpb "google.golang.org/appengine/internal/base"
|
||||
pb "google.golang.org/appengine/internal/mail"
|
||||
)
|
||||
|
||||
// A Message represents an email message.
|
||||
// Addresses may be of any form permitted by RFC 822.
|
||||
type Message struct {
|
||||
// Sender must be set, and must be either an application admin
|
||||
// or the currently signed-in user.
|
||||
Sender string
|
||||
ReplyTo string // may be empty
|
||||
|
||||
// At least one of these slices must have a non-zero length,
|
||||
// except when calling SendToAdmins.
|
||||
To, Cc, Bcc []string
|
||||
|
||||
Subject string
|
||||
|
||||
// At least one of Body or HTMLBody must be non-empty.
|
||||
Body string
|
||||
HTMLBody string
|
||||
|
||||
Attachments []Attachment
|
||||
|
||||
// Extra mail headers.
|
||||
// See https://cloud.google.com/appengine/docs/go/mail/
|
||||
// for permissible headers.
|
||||
Headers mail.Header
|
||||
}
|
||||
|
||||
// An Attachment represents an email attachment.
|
||||
type Attachment struct {
|
||||
// Name must be set to a valid file name.
|
||||
Name string
|
||||
Data []byte
|
||||
ContentID string
|
||||
}
|
||||
|
||||
// Send sends an email message.
|
||||
func Send(c context.Context, msg *Message) error {
|
||||
return send(c, "Send", msg)
|
||||
}
|
||||
|
||||
// SendToAdmins sends an email message to the application's administrators.
|
||||
func SendToAdmins(c context.Context, msg *Message) error {
|
||||
return send(c, "SendToAdmins", msg)
|
||||
}
|
||||
|
||||
func send(c context.Context, method string, msg *Message) error {
|
||||
req := &pb.MailMessage{
|
||||
Sender: &msg.Sender,
|
||||
To: msg.To,
|
||||
Cc: msg.Cc,
|
||||
Bcc: msg.Bcc,
|
||||
Subject: &msg.Subject,
|
||||
}
|
||||
if msg.ReplyTo != "" {
|
||||
req.ReplyTo = &msg.ReplyTo
|
||||
}
|
||||
if msg.Body != "" {
|
||||
req.TextBody = &msg.Body
|
||||
}
|
||||
if msg.HTMLBody != "" {
|
||||
req.HtmlBody = &msg.HTMLBody
|
||||
}
|
||||
if len(msg.Attachments) > 0 {
|
||||
req.Attachment = make([]*pb.MailAttachment, len(msg.Attachments))
|
||||
for i, att := range msg.Attachments {
|
||||
req.Attachment[i] = &pb.MailAttachment{
|
||||
FileName: proto.String(att.Name),
|
||||
Data: att.Data,
|
||||
}
|
||||
if att.ContentID != "" {
|
||||
req.Attachment[i].ContentID = proto.String(att.ContentID)
|
||||
}
|
||||
}
|
||||
}
|
||||
for key, vs := range msg.Headers {
|
||||
for _, v := range vs {
|
||||
req.Header = append(req.Header, &pb.MailHeader{
|
||||
Name: proto.String(key),
|
||||
Value: proto.String(v),
|
||||
})
|
||||
}
|
||||
}
|
||||
res := &bpb.VoidProto{}
|
||||
if err := internal.Call(c, "mail", method, req, res); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
internal.RegisterErrorCodeMap("mail", pb.MailServiceError_ErrorCode_name)
|
||||
}
|
65
vendor/google.golang.org/appengine/mail/mail_test.go
generated
vendored
Normal file
65
vendor/google.golang.org/appengine/mail/mail_test.go
generated
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
// Copyright 2011 Google Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Apache 2.0
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package mail
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/golang/protobuf/proto"
|
||||
|
||||
"google.golang.org/appengine/internal/aetesting"
|
||||
basepb "google.golang.org/appengine/internal/base"
|
||||
pb "google.golang.org/appengine/internal/mail"
|
||||
)
|
||||
|
||||
func TestMessageConstruction(t *testing.T) {
|
||||
var got *pb.MailMessage
|
||||
c := aetesting.FakeSingleContext(t, "mail", "Send", func(in *pb.MailMessage, out *basepb.VoidProto) error {
|
||||
got = in
|
||||
return nil
|
||||
})
|
||||
|
||||
msg := &Message{
|
||||
Sender: "dsymonds@example.com",
|
||||
To: []string{"nigeltao@example.com"},
|
||||
Body: "Hey, lunch time?",
|
||||
Attachments: []Attachment{
|
||||
// Regression test for a prod bug. The address of a range variable was used when
|
||||
// constructing the outgoing proto, so multiple attachments used the same name.
|
||||
{
|
||||
Name: "att1.txt",
|
||||
Data: []byte("data1"),
|
||||
ContentID: "<att1>",
|
||||
},
|
||||
{
|
||||
Name: "att2.txt",
|
||||
Data: []byte("data2"),
|
||||
},
|
||||
},
|
||||
}
|
||||
if err := Send(c, msg); err != nil {
|
||||
t.Fatalf("Send: %v", err)
|
||||
}
|
||||
want := &pb.MailMessage{
|
||||
Sender: proto.String("dsymonds@example.com"),
|
||||
To: []string{"nigeltao@example.com"},
|
||||
Subject: proto.String(""),
|
||||
TextBody: proto.String("Hey, lunch time?"),
|
||||
Attachment: []*pb.MailAttachment{
|
||||
{
|
||||
FileName: proto.String("att1.txt"),
|
||||
Data: []byte("data1"),
|
||||
ContentID: proto.String("<att1>"),
|
||||
},
|
||||
{
|
||||
FileName: proto.String("att2.txt"),
|
||||
Data: []byte("data2"),
|
||||
},
|
||||
},
|
||||
}
|
||||
if !proto.Equal(got, want) {
|
||||
t.Errorf("Bad proto for %+v\n got %v\nwant %v", msg, got, want)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user