Подтвердить что ты не робот

Как отправить электронное письмо с помощью Go с HTML-форматированным телом?

Это кажется очень распространенной потребностью, но я не нашел хороших руководств, когда искал его.

4b9b3361

Ответ 1

Предполагая, что вы используете пакет net/smtp и, следовательно, функцию smtp.SendMail, вам просто нужно объявить тип MIME в своем сообщении.

mime := "MIME-version: 1.0;\nContent-Type: text/html; charset=\"UTF-8\";\n\n";
subject := "Subject: Test email from Go!\n"
msg := []byte(subject + mime + "<html><body><h1>Hello World!</h1></body></html>")

smtp.SendMail(server, auth, from, to, msg)

Надеюсь, что это поможет =)

Ответ 2

Я являюсь автором gomail. С помощью этого пакета вы можете легко отправлять электронные письма HTML:

package main

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

func main() {
    m := gomail.NewMessage()
    m.SetHeader("From", "[email protected]")
    m.SetHeader("To", "[email protected]")
    m.SetHeader("Subject", "Hello!")
    m.SetBody("text/html", "Hello <b>Bob</b>!")

    // Send the email to Bob
    d := gomail.NewPlainDialer("smtp.example.com", 587, "user", "123456")
    if err := d.DialAndSend(m); err != nil {
        panic(err)
    }
}

Вы также можете добавить текстовую версию тела в свой адрес электронной почты для клиента, который не поддерживает HTML, используя метод AddAlternative.

Ответ 3

Это добавление к ответу @GreyHands:

У меня возникла проблема, когда даже после установки MIME/Content Type теги html отображались как обычный текст.

Оказывается, я импортировал html/template, и экранирование привело к тому, что html появился как обычный текст. Вместо импорта text/template исправлена ​​проблема.