Вопрос по email, smtp, go – Как отправить письмо с вложениями в Go

13

Я нашел эту библиотеку и сумел отправить вложение в пустом электронном письме, но не смог объединить текст и вложения.

https://github.com/sloonz/go-mime-message

Как это можно сделать?

Ваш Ответ

4   ответа
7

Я предпочитаю использоватьhttps://github.com/jordan-wright/email для электронной почты. Он поддерживает вложения.

Email for humans

The email package is designed to be simple to use, but flexible enough so as not to be restrictive. The goal is to provide an email interface for humans.

The email package currently supports the following:

From, To, Bcc, and Cc fields Email addresses in both "[email protected]" and "First Last " format Text and HTML Message Body Attachments Read Receipts Custom headers More to come!
это наверное самое простое: 3
3

бщения MIME.

Поэтому я предлагаю вам просто

create a MultipartMessage

set your text in the fist part as a TextMessage (with "Content-Type", "text/plain")

add your attachements as parts using AddPart.

Это то, что я пытаюсь, но по какой-то причине я не могу заставить его работать. Я создал проблему, объясняя детали здесь:github.com/sloonz/go-mime-message/issues/1 Santiago Corredoira
Подскажите, пожалуйста, на какую библиотеку вы ссылаетесь?
8

GoMail для этого. Он поддерживает вложения, а также составные электронные письма и кодирование не-ASCII символов. Это хорошо документировано и проверено.

Вот пример:

package main

func main() {
    m := gomail.NewMessage()
    m.SetHeader("From", "[email protected]")
    m.SetHeader("To", "[email protected]", "[email protected]")
    m.SetAddressHeader("Cc", "[email protected]", "Dan")
    m.SetHeader("Subject", "Hello!")
    m.SetBody("text/html", "Hello <b>Bob</b> and <i>Cora</i>!")
    m.Attach("/home/Alex/lolcat.jpg")

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

    // Send the email to Bob, Cora and Dan.
    if err := d.DialAndSend(m); err != nil {
        panic(err)
    }
}
21

https://github.com/scorredoira/email

Использование очень просто:

m := email.NewMessage("Hi", "this is the body")
m.From = "[email protected]"
m.To = []string{"[email protected]"}

err := m.Attach("picture.png")
if err != nil {
    log.Println(err)
}

err = email.Send("smtp.gmail.com:587", smtp.PlainAuth("", "user", "password", "smtp.gmail.com"), m)
@Qed, я только что проверил с Gmail, и он работает нормально.
Gmail больше не позволяет этого.
m.From линия больше не работает, потому что m.From принимает только mail.Address. Сначала должен бытьmail.ParseAddress("[email protected]") чтобы вернуть * mail.Address, тогда он должен быть разыменован, чтобы быть переданнымm.From.
@qed вам нужно зайти в настройки своего аккаунта Google и в разделе приложения / безопасность включить небезопасный доступ к приложениям. Я настоятельно рекомендую для этой цели одноразовую учетную запись электронной почты. Если вы регистрируетесь на gmail, и вы моложе определенного возраста - мне кажется, 16 или 18 лет - вам не нужно указывать предыдущий адрес электронной почты при регистрации.

Похожие вопросы