Тема письма в Go
Тема для получателя это отдельная строка в блоке заголовков сообщения. Она стоит рядом с адресами отправителя и получателя и отделяется от тела пустой строкой, как и остальные служебные поля.
Строка заголовка пишется в форме
"Subject: ...\r\n". После темы
идет еще одна пустая строка "\r\n",
и только затем видимый текст письма.
Отправим письмо с понятной темой на локальный порт:
package main
import (
"fmt"
"log"
"net/smtp"
)
func main() {
addr := "127.0.0.1:1025"
from := "news@example.com"
to := []string{"reader@example.com"}
subject := "weekly digest"
msg := []byte(
"From: news@example.com\r\n" +
"To: reader@example.com\r\n" +
"Subject: " + subject + "\r\n" +
"\r\n" +
"three items this week",
)
err := smtp.SendMail(addr, nil, from, to, msg)
if err != nil {
log.Fatal(err)
}
fmt.Println("sent")
}
Переменная с темой удобна, когда строку берут из настроек или формируют по шаблону. В приемнике тема показывается отдельно от тела, потому что сервер читает заголовки до пустой строки.
Тема может быть короче тела и не повторять его текст:
package main
import (
"fmt"
"log"
"net/smtp"
)
func main() {
addr := "127.0.0.1:1025"
from := "alert@example.com"
to := []string{"ops@example.com"}
msg := []byte(
"From: alert@example.com\r\n" +
"To: ops@example.com\r\n" +
"Subject: check logs\r\n" +
"\r\n" +
"disk usage above limit",
)
err := smtp.SendMail(addr, nil, from, to, msg)
if err != nil {
log.Fatal(err)
}
fmt.Println("sent")
}
Дан текст темы:
title := "invoice ready"
Вставьте title в заголовок темы,
добавьте From и To для
"billing@example.com" и
"pay@example.com", телом сделайте
"amount 10" и отправьте на
"127.0.0.1:1025".
Дано сообщение без строки темы:
raw := "From: a@example.com\r\n" +
"To: b@example.com\r\n" +
"\r\n" +
"body only"
Скажите, чего не хватает в raw
для привычного отображения темы у
получателя.
Дана тема "test" и тело "sample".
Опишите порядок строк в срезе байтов
от первого заголовка до текста тела.