2016-06-28 80 views
3

我通過gomail.v2發送電子郵件的唯一方法是使用Send()函數發送到for循環中的每封電子郵件。但我需要顯示其他電子郵件地址的那些相同的電子郵件已發送。golang多個收件人與gomail.v2

for _, recipient := range os.Args[3:] { 
    mail.SetAddressHeader("From", "[email protected]", "My Name") 
    mail.SetHeader("To", recipient) 
    mail.SetHeader("Subject", os.Args[2]) 
    mail.SetBody("text/html", os.Args[1]) 

    if err := dialer.DialAndSend(mail); err != nil { 
     log.Printf("Could not send email to %q: %v", recipient, err) 
     panic(err) 
    } 
} 

我發現是這樣的:

var emails bytes.Buffer 

mail.SetAddressHeader("From", "[email protected]", "My Name") 
mail.SetHeader("Subject", os.Args[2]) 
mail.SetBody("text/html", os.Args[1]) 

for _, recipient := range os.Args[3:] { 
    emails.WriteString(recipient + ",") 
} 

mail.SetHeader("To", emails.String()) 

if err := dialer.DialAndSend(mail); err != nil { 
    log.Printf("Could not send email to %q: %v", buffer, err) 
    panic(err) 
} 

它通過發送電子郵件只在字符串的首位獲得者。 而在像Gmail這樣的電子郵件管理器中,Outlook或任何其他收件人地址都顯示,但未發送。

我該如何正確地做到這一點?

回答

5

試試這個試試嗎?

recipients := os.Args[3:] 
addresses := make([]string, len(recipients)) 
for i, recipient := range recipients { 
    addresses[i] = mail.FormatAddress(recipient, "") 
} 

mail.SetHeader("To", addresses...) 

if err := dialer.DialAndSend(mail); err != nil { 
    log.Fatal(err) 
} 
+2

它的工作!非常感謝。 – Khazs

+0

什麼意思是「地址...」(3個點) – Khazs

+1

...是用於片擴展的Go語言結構: 如果地址有3個元素 '''mail.SetHeader(「To」,address ...)''' 將等於 '''mail.SetHeader(「To」,地址[0],地址[1],地址[2])''' –