2017-09-22 1 views
1

Haftungsausschluss: Ich habe eine ähnliche Frage in diesem Thema gesehen: Golang multiple recipients with gomail.v2 aber kann nicht dazu kommen, zu arbeiten, und habe noch nicht den Saft zu kommentieren um Hilfe bitten. Das Op in dieser Frage verwendet os.Args[], während ich ein in einer Konfigurationsdatei gespeichertes Segment verwenden möchte.Gomail.v2 - Mehrere recipiens von Slice

Ich versuche, das ehrfürchtige gomail.v2 Paket zu verwenden, um eine Liste der mehr Empfänger e von EmailMail über meine Methode struct in einer Scheibe ToMail in Beispiel enthalten ist, zu senden.

Der Compiler beschwert sich in Zeile 37:

./mailer.go:37: not enough arguments in call to m.SetAddressHeader 
     have (string, []string...) 
     want (string, string, string) 

Wie kann ich vor jedem Empfänger in meinem Stück zum SetAddressHeader("To" passieren ... Methode, um ToMail an alle Empfänger in der Scheibe zu schicken?

Was ich habe versucht:

package main 

import (
     "fmt" 
     "gopkg.in/gomail.v2" 
) 

type Email struct { 
     FromMail, FromFirstLast, Password, Subject, Body, Server string 
     ToMail []string 
     Port int 
} 

func main() { 
     e := Email{FromMail: "[email protected]", 
       FromFirstLast: "From User", 
       ToMail: []string{"[email protected]", "[email protected]"}, 
       Password: "passpasspass", 
       Subject: "Test", 
       Body:"TEST BODY", 
       Server: "foo.foomail.com", 
       Port: 587,} 
     err := e.Mail() 
     if err != nil { 
       fmt.Println(err) 
     } 
} 

func (e Email)Mail() (error) { 
    m := gomail.NewMessage() 
    m.SetAddressHeader("From", e.FromMail, e.FromFirstLast) 
    addresses := make([]string, len(e.ToMail)) 

    for i, _ := range addresses{ 
     addresses[i] = m.FormatAddress(e.ToMail[i], "") 
    } 
    m.SetAddressHeader("To", addresses...) 
    m.SetHeader("Subject", e.Subject) 
    m.SetBody("text/plain", e.Body) 

    d := gomail.NewPlainDialer(e.Server, e.Port, e.FromMail, e.Password) 
    if err := d.DialAndSend(m); err != nil { 
     return err 
    } 
     return nil 
} 

Antwort

1

package gomail

import "gopkg.in/gomail.v2" 

func (*Message) SetAddressHeader

func (m *Message) SetAddressHeader(field, address, name string) 

SetAddressHeader sets an address to the given header field.

func (*Message) SetHeader

func (m *Message) SetHeader(field string, value ...string) 

SetHeader sets a value to the given header field.

Das Beispiel, das Sie verwiesen und die Dokumentation hat, für mehrere Adressen:

addresses := make([]string, len(e.ToMail)) 
for i := range addresses { 
    addresses[i] = m.FormatAddress(e.ToMail[i], "") 
} 
m.SetHeader("To", addresses...) 

Aber Sie schreiben, die einzelne Adresse (mit implizit FormatAddress) form:

m.SetAddressHeader("To", addresses...) 

Fehler:

not enough arguments in call to m.SetAddressHeader 
     have (string, []string...) 
     want (string, string, string) 
+0

Ach du meine Güte, nahm ich 'SetHeader' war gerade von der API v1, und dass' SetAddressHeader' aktuell war. Nicht der Fall! 'SetHeader' hat für mich funktioniert, danke! – gpanda