Как оправить письмо с вложением на языке go?

Пользователь

от ian.heidenreich , в категории: Golang , год назад

Как оправить письмо с вложением на языке go?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от delphine_bartoletti , год назад

@ian.heidenreich 

Для отправки письма с вложением на языке Go вы можете использовать пакет "net/smtp" для установления соединения с почтовым сервером и отправки письма через протокол SMTP, а также пакет "mime/multipart" для создания многочастного сообщения (multipart message) с вложениями.


Пример кода для отправки письма с вложением:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package main

import (
    "net/smtp"
    "net/mail"
    "net/textproto"
    "mime/multipart"
    "mime"
    "os"
)

func main() {
    // Установление соединения с почтовым сервером
    auth := smtp.PlainAuth("", "ваш_email@домен.com", "ваш_пароль", "smtp.домен.com")
    conn, err := smtp.Dial("smtp.домен.com:587")
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    // Определение отправителя, получателя и темы письма
    from := mail.Address{Name: "Отправитель", Address: "ваш_email@домен.com"}
    to := mail.Address{Name: "Получатель", Address: "email_получателя@домен.com"}
    subject := "Тема письма"

    // Создание многочастного сообщения с вложениями
    msg := multipart.NewMixedWriter("
")
    msg.SetBoundary("myboundary")

    // Добавление текстовой части письма
    text := msg.CreatePart(textproto.MIMEHeader{})
    text.Set("Content-Type", "text/plain; charset=utf-8")
    text.Set("Content-Transfer-Encoding", "quoted-printable")
    text.Set("Content-Disposition", "inline")
    text.Write([]byte("Текст сообщения"))

    // Добавление вложения
    attachment, err := os.Open("путь_к_вложению")
    if err != nil {
        panic(err)
    }
    defer attachment.Close()

    fileInfo, err := attachment.Stat()
    if err != nil {
        panic(err)
    }

    attachmentWriter, err := msg.CreatePart(textproto.MIMEHeader{
        "Content-Disposition": {"attachment; filename=" + fileInfo.Name()},
        "Content-Type":        {mime.TypeByExtension(filepath.Ext(fileInfo.Name()))}})
    if err != nil {
        panic(err)
    }

    _, err = io.Copy(attachmentWriter, attachment)
    if err != nil {
        panic(err)
    }

    // Отправка письма
    body := msg.Bytes()
    err = smtp.SendMail("smtp.домен.com:587", auth, from.Address, []string{to.Address}, body)
    if err != nil {
        panic(err)
    }
}


Здесь вам нужно заменить следующие данные на свои:

  • ваш_email@домен.com и ваш_пароль - электронный адрес и пароль для входа на почтовый сервер;
  • smtp.домен.com - адрес почтового сервера;
  • Отправитель и Получатель - имя и адрес отправителя и получателя;
  • Текст сообщения - текст вашего сообщения;
  • путь_к_влож