我关注了 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)
  }
}

请建议缺少什么

最佳答案

我遇到了同样的问题,经过长时间阅读找到一个支持附件的库 https://github.com/jordan-wright/email

关于go - 在 golang 中使用 gmail API 发送带附件的电子邮件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37523884/

10-16 13:49