2017-09-22 6 views
1

免責事項:このスレッドでも同様の質問がありました。 Golang multiple recipients with gomail.v2この機能は動作しません。その質問の操作はos.Args[]を使用していますが、設定ファイルに格納されているスライスを使用したいのです。Gomail.v2 - Sliceの複数のレシピエント

私は私の方法Mailを経由して、インスタンス構造体EmaileにスライスToMailに含まれる複数の受信者のリストに送信するために素晴らしいgomail.v2パッケージを使用しようとしています。

コンパイラはライン37で文句を言う:

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

スライスToMailにすべての受信者に送信するようにどのように適切にSetAddressHeader("To" ...メソッドに私のスライス内の各受信者を渡すことができますか?

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 
} 

答えて

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.

を例あなたが参照してドキュメントが複数のアドレスのために、持っている:

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

しかし、あなたが書いた、単一のアドレス(とを使用して、私が試した何

暗黙のFormatAddress)の形式:

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

エラー:

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

ああ良さ、私、私が想定し 'SetHeader'がSetAddressHeader'が最新だっただけで、V1のAPIから、と'ということでした。そうではありません! 'SetHeader'が私のために働いた、ありがとう! – gpanda

関連する問題