Как отправить файл по smtp c помощью Golang?

Для отправки файла по протоколу SMTP в Go можно использовать пакет net/smtp. Вот пример кода, который демонстрирует, как это можно сделать:

package main

import (
	"fmt"
	"log"
	"net/mail"
	"net/smtp"
	"os"
)

func main() {
	// Создаем SMTP клиент
	client, err := smtp.Dial("smtp.example.com:25")
	if err != nil {
		log.Fatal(err)
	}

	// Определяем идентификатор отправителя и получателя
	from := mail.Address{"Sender Name", "[email protected]"}
	to := mail.Address{"Recipient Name", "[email protected]"}

	// Устанавливаем соединение с SMTP сервером
	err = client.Mail(from.Address)
	if err != nil {
		log.Fatal(err)
	}

	err = client.Rcpt(to.Address)
	if err != nil {
		log.Fatal(err)
	}

	// Открываем файл, который хотим отправить
	file, err := os.Open("path/to/file.ext")
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	// Создаем новое письмо
	w, err := client.Data()
	if err != nil {
		log.Fatal(err)
	}
	defer w.Close()

	// Заголовки письма
	headers := make(map[string]string)
	headers["From"] = from.String()
	headers["To"] = to.String()
	headers["Subject"] = "File Attachment"

	// Записываем заголовки письма
	for key, value := range headers {
		_, err = fmt.Fprintf(w, "%s: %srn", key, value)
		if err != nil {
			log.Fatal(err)
		}
	}

	_, err = fmt.Fprintln(w)
	if err != nil {
		log.Fatal(err)
	}

	// Копируем содержимое файла в письмо
	_, err = io.Copy(w, file)
	if err != nil {
		log.Fatal(err)
	}

	// Отправляем письмо
	err = client.Quit()
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("File sent successfully!")
}

Этот код создает нового SMTP клиента и устанавливает соединение с указанным сервером и портом (smtp.example.com:25). Затем он определяет отправителя и получателя письма, открывает файл, который нужно отправить (path/to/file.ext), создает новое письмо, записывает заголовки и содержимое файла в письмо, а затем отправляет его через вызов client.Quit(). Если все прошло успешно, выводится сообщение "File sent successfully!".

Убедитесь, что вы замените smtp.example.com на реальный адрес SMTP сервера, и path/to/file.ext на путь к файлу, который вы хотите отправить.