2017-09-22 3 views
1

면책 조항 :이 스레드에서 비슷한 질문을 보았습니다. Golang multiple recipients with gomail.v2이 작업을 수행 할 수 없으며 도움을 청하는 데 의견이있는 주스가 아직 없습니다. 그 질문에서 op는 os.Args[]을 사용하는 반면, 설정 파일에 저장된 슬라이스를 사용하고 싶습니다. Gomail.v2 - 슬라이스의 여러 수령인

나는 나의 방법 Mail를 통해 구조체 Email의 예를 e에 조각 ToMail에 포함 여러 수신자 목록에 보낼 수있는 멋진 gomail.v2 패키지를 사용하려고 시도하고있다. 슬라이스 ToMail의 모든받는 사람에게 보낼 수 있도록 ...

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

어떻게 제대로 SetAddressHeader("To" 내 조각의 각받는 사람을 전달할 수있는 방법을 :

컴파일러는 라인 (37)에 불만?

나는 시도했다 :

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

관련 문제