2014-12-02 4 views
4

Я отправляю электронные письма по smtp в golang, который отлично работает. Для того, чтобы установить отправителя электронной почты я использую Client.Mail Funtion:Отправить e-mail над smtp в golang и изменить имя отправителя

func (c *Client) Mail(from string) error 

Когда получатель получает по электронной почте он видит отправителя в качестве исходного текста электронной почты: [email protected]

Я хочу отправителя для отображения: Sandy Sender <[email protected]>.

Возможно ли это? Я попытался установить отправителя на Sandy Sender <[email protected]> или только Sandy Sender, но никто из них не работает. Я получаю ошибку 501 5.1.7 Invalid address

ответ

8

Вы должны установить From поле вашей почте Sandy Sender <[email protected]>:

... 
From: Sandy Sender <[email protected]> 
To: [email protected] 
Subject: Hello! 

This is the body of the message. 

И использовать только адрес ([email protected]) в Client.Mail.

В качестве альтернативы, вы можете использовать мой пакет Gomail:

package main 

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

func main() { 
    m := gomail.NewMessage() 
    m.SetAddressHeader("From", "[email protected]", "Sandy Sender") 
    m.SetAddressHeader("To", "[email protected]") 
    m.SetHeader("Subject", "Hello!") 
    m.SetBody("text/plain", "This is the body of the message.") 

    d := gomail.NewPlainDialer("smtp.example.com", 587, "user", "123456") 

    if err := d.DialAndSend(m); err != nil { 
     panic(err) 
    } 
} 
+0

Так с ходу я могу отправить несколько писем через одно соединение SMTP? – codepushr

+0

Вы можете использовать Gomail v2 (все еще нестабильно): https://github.com/go-gomail/gomail/issues/10#issuecomment-122090752 – Ale

+0

@codingrogue Gomail v2 теперь отключен и поддерживает отправку нескольких электронных писем с помощью одного SMTP-соединения , Взгляните на пример информационного бюллетеня: https://godoc.org/gopkg.in/gomail.v2#example-package--Newsletter – Ale

0

Я думаю, что вы можете использовать mail.Address и использовать Address.String функции форматирует адрес

func (a *Address) String() string 

Строка форматирует адреса в качестве действительного RFC 5322 адреса. Если имя-адрес содержит не-ASCII символы, имя будет вынесено в соответствии с RFC 2047.

и я пишу пример:

go_smtp.go