Для отправки файла по протоколу 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
на путь к файлу, который вы хотите отправить.