Gomail.v2 - несколько получателей из Slice

Отказ от ответственности: я видел похожий вопрос в этой теме: Golang несколько получателей с gomail.v2, но не может заставить это работать, и еще не хватает сока, чтобы комментировать там с просьбой о помощи. ОП в этом вопросе использует os.Args[]в то время как я хочу использовать фрагмент, хранящийся в файле конфигурации.

Я пытаюсь использовать пакет gomail.v2 для отправки списка нескольких получателей, содержащихся в срезе. ToMail в случае e структуры Email через мой метод Mail,

Компилятор жалуется на строку 37:

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

Как правильно передать каждого получателя в моем срезе SetAddressHeader("To"... метод для отправки всем получателям в срез ToMail?

Что я пробовал:

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: "fromuser@foo.com",
                FromFirstLast: "From User",
                ToMail: []string{"user1@foo.com", "user2@foo.com"},
                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 ответ

Решение

пакет gomail

import "gopkg.in/gomail.v2"

func (* Сообщение) SetAddressHeader

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

SetAddressHeader устанавливает адрес для данного поля заголовка.

func (* Сообщение) SetHeader

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

SetHeader устанавливает значение для данного поля заголовка.

Пример, на который вы ссылались, и документация для нескольких адресов:

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)
Другие вопросы по тегам