在 golang 中使用 gmail API 发送带附件的电子邮件
Posted
技术标签:
【中文标题】在 golang 中使用 gmail API 发送带附件的电子邮件【英文标题】:send email with attachment using gmail API in golang 【发布时间】:2016-09-28 04:16:56 【问题描述】:我已关注https://developers.google.com/gmail/api/quickstart/go。我将范围修改为 gmail.MailGoogleComScope 并尝试发送电子邮件。电子邮件被发送。但是,没有发送附件。它也没有给出任何错误。请注意,对 Media 函数的调用是我尝试查看 gmail API 中的代码,但不确定这是否正确。
当我将 contentType 设置为 application/png 时,API 会抛出异常消息“不支持 png,请使用 message/rfc822”。以下是 SendEmail 的代码。
func SendEmail(msg EmailMessage)
ctx := context.Background()
b, err := ioutil.ReadFile("/tmp/client_secret.json")
if err != nil
log.Fatalf("Unable to read client secret file: %v", err)
config, err := google.ConfigFromJSON(b, gmail.MailGoogleComScope)
if err != nil
log.Fatalf("Unable to parse client secret file to config: %v", err)
client := getClient(ctx, config)
srv, err := gmail.New(client)
if err != nil
log.Fatalf("Unable to retrieve gmail Client %v", err)
var message gmail.Message
temp := []byte("From: 'me'\r\n" +
"reply-to: sender@gmail.com\r\n" +
"To: " + msg.To + "\r\n" +
"Subject: " + msg.Subject + "\r\n" +
"\r\n" + msg.Body)
message.Raw = base64.StdEncoding.EncodeToString(temp)
message.Raw = strings.Replace(message.Raw, "/", "_", -1)
message.Raw = strings.Replace(message.Raw, "+", "-", -1)
message.Raw = strings.Replace(message.Raw, "=", "", -1)
imgFile, err := os.Open("image.png") // a QR code image
if err != nil
log.Fatalf("Error in opening file")
defer imgFile.Close()
mediaOptions := googleapi.ContentType("message/rfc822")
_, err = srv.Users.Messages.Send("me", &message).Media(imgFile, mediaOptions).Do()
if err != nil
log.Fatalf("Unable to send. %v", err)
请指出缺少的内容
【问题讨论】:
您应该尝试在不使用Media()
方法的情况下在message.Raw
内发送整个消息(包括附件,带有适当的标头)。我已经取得了一些成功,但没有使用正确的标题,所以我不会发布任何工作代码。
【参考方案1】:
我也遇到了同样的问题,看了很久才找到支持附件的库https://github.com/jordan-wright/email
【讨论】:
我知道我需要标记为重复但还没有声誉 有没有办法使用访问令牌? github.com/jordan-wright/email 方法需要用户的密码以上是关于在 golang 中使用 gmail API 发送带附件的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
Gmail API - Oauth2/google:找不到凭据(Golang)
尝试在 Java 中使用 Gmail API 发送电子邮件时出错
使用 Gmail API 在 Powershell 中使用 Invoke-WebRequest 发送电子邮件
使用 Gmail API 发送的邮件中缺少附件,但仅适用于收件人