2016-05-30 4 views
2

Ich habe https://developers.google.com/gmail/api/quickstart/go gefolgt. Ich habe den Bereich auf gmail.MailGoogleComScope geändert und versucht, E-Mails zu senden. Die E-Mail wird gesendet. Der Anhang wird jedoch nicht gesendet. Es gibt auch keinen Fehler. Bitte beachten Sie, dass der Anruf bei Media-Funktion ist, was ich versucht habe, den Code in Gmail API zu sehen, nicht sicher, ob das der richtige Weg ist.senden Sie E-Mail mit Anhang mit Gmail-API in Golang

Wenn ich den contentType auf Anwendung/PNG setzt, löst die API eine Ausnahme mit der Nachricht 'PNG nicht unterstützt, verwenden Sie Nachricht/RFC822'. Im Folgenden finden Sie den Code für 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: [email protected]\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) 
    } 
} 

Bitte legen nahe, was

+0

Sie sollten versuchen, die gesamte Nachricht zu senden (einschließlich attachement, mit dem richtigen headers) in 'message.Raw' ohne die' Media() 'Methode zu benutzen. Ich hatte Erfolg, habe aber die richtigen Header nicht benutzt, also werde ich keinen funktionierenden Code posten. – syntagma

Antwort

Verwandte Themen