Често може да се наложи да изпращате имейли до много акаунти, като използвате програми за удостоверяване и много други цели.
SMTP протоколът дефинира стандарти, които позволяват комуникация по имейл между пощенски сървъри и агенти за прехвърляне на поща, докато IMAP протоколът е за получаване на имейли.
Go предоставя функционалност за дейности, свързани с имейл, дефинирани от RFC в пакета net/smtp, който също съдържа разширения 8BITMIME, AUTH и STARTTLS.
Кодът, използван в този проект, е наличен в a GitHub хранилище и е безплатен за използване под лиценза на MIT.
Как да изпращате имейли в Go с помощта на пакета Net/SMTP
Пакетът net/smtp е част от стандартната библиотека Go, така че не е необходимо да инсталирате външен пакет. Трябва само да импортирате пакета, преди да го използвате.
импортиране (
"net/smtp"
"дневник"
"крипто/tls"
"fmt"
)
Ще трябва също да импортирате дневник пакет за регистриране на грешки в конзолата и крипто/tls пакет за конфигуриране на безопасна връзка.
След като импортирате пакета net/smtp, трябва да напишете a
Изпрати писмо() функция за изпращане на имейла и след това извикване на функцията в основната функция.функосновен() {
fmt. Печат (SendMail())
}
функИзпрати писмо()низ {
// Добавяне на код тук
}
The Изпрати писмо() ще съдържа кода, който изпраща имейла до получателите.
Как работи изпращането на имейли
SMTP протоколът определя параметрите, които трябва да има всяка поща. Тези параметри са имейл адресите на изпращача и получателя, порт, на който се изпраща пощата, хост сървър и съобщение.
Посочените по-горе параметри са важни за изпращане на имейли.
В този урок ще се научите да изпращате имейли на Yahoo. Процесът обаче е един и същ за всеки доставчик на пощенски сървър (MSP), който използвате.
Тъй като използвате Yahoo Mail, влезте във вашия Yahoo Mail сметка, насочете се към Информация за акаунта, и щракнете върху Сигурност на акаунта раздел. След това генерирайте парола за приложение. Ще трябва да наименувате приложението и след това Yahoo Mail ще създаде парола за приложението и можете да използвате паролата във вашия код заедно с вашия имейл адрес.
В Изпрати писмо() функция, ще декларирате три променливи; променлива, която съдържа низа на вашия имейл, една, която съдържа паролата ви за имейл, и низ, който съдържа имейл адреса, на който изпращате съобщения.
от := "[email protected]"
парола := "aSecurePasswordHere"
до := "[email protected]"
Можете да използвате резен и цикъл през елементите ако възнамерявате да ги изпратите на множество получатели.
Получаване и настройка на имейл хост и порт
SMTP протоколът използва номерата на хоста и порта, за да идентифицира източника на имейл. Тук идва вашият MSP. Трябва да знаете хоста и номера на порта, които вашият MSP позволява да използвате.
Проверете този ресурс за списък с MSP хостове и номера на портове ако използвате публични имейли като Gmail, Yahoo или Outlook. Google изключи „по-малко сигурни приложения“ за Gmail; може да искате да защитите приложението си, ако използвате Gmail.
След като получите номера на порта и адреса на хоста, присвоете ги на променливи като тази:
хост := "smtp.mail.yahoo.com"
порт := "465"
Номерата на хоста и порта по-горе са от Yahoo Mail за използване в обикновени акаунти. Сървърът се хоства на smtp.mail.yahoo.com и имате право да използвате порт 465 за изпращане на имейли.
Деклариране на съдържанието на имейла
Следващата стъпка е да декларирате съдържанието на имейла като променливи. Темата и основният текст съставят съобщението.
subject := "Хей, просто те проверявам."
тяло := „Надявам се, че се справяш добре! Как си днес. "
The предмет променлива е темата на имейла; на тяло променлива е тялото на имейла, който изпращате.
Настройка на заглавките на имейла
Ще трябва да направите карта от низове, за да обозначите заглавките на имейла.
заглавки := направи(карта[низ]низ)
заглавия ["От"] = от
заглавия["До"] = към
заглавия ["Тема"] = тема
съобщение := ""
за k, v := диапазон заглавия {
съобщение += fmt. Sprintf("%s: %s\r", k, v)
}
съобщение += "\r" + тяло
Първо създавате карта на ключове и стойности на низове и задавате заглавките на вашия адрес, адреса на получателя и темата, както е показано по-горе. Използване на диапазон for-цикъл на заглавки карта, а съобщение променливата е декларирана да съдържа заглавките и съобщението, използвайки форматиране на низ.
Удостоверяване на имейла
Имейлът се нуждае от удостоверяване, за да потвърди източника. Пакетът smtp предоставя функционалност за удостоверяване на имейл с помощта на PlainAuth. The PlainAuth методът приема самоличността, имейла на подателя, паролата и хоста като параметри и връща авт обект, който ще използвате за изпращане на имейла.
удостоверяване := smtp. PlainAuth("", от, парола, хост)
Самоличността е вашето потребителско име, което може да се остави празно, както се вижда в този случай.
Създаване на връзка за имейл
Някои доставчици на пощенски услуги изискват да изпратите имейла чрез връзка. В тази статия ще направим a TCP връзка към сървъра с TLS конфигурации.
tlsConfig := &tls. Конфигурация{
InsecureSkipVerify: вярно,
Име на сървъра: хост,
}
В кода по-горе вие сте направили TLS конфигурация, като се позовавате на Конфиг структура къде InsecureSkipVerify беше настроен на вярно, а името на сървъра беше присвоено на домакин променлива.
Трябва да създадете TCP връзка, като използвате Набиране метод на tls пакет. The набиране методът приема типа връзка (TCP), в този случай адреса на сървъра и конфигурациите на TLS връзката.
връзка, грешка := tls. Dial("tcp", serverAddress, tlsConfig) грешка!= нула {
дневник. Паника (грешка)
}
В горния код сте направили TCP връзка и сте обработили грешки; ще създадете нов smtp пакет с помощта на Нов клиент метод на net/smtp пакет. The Нов клиент методът приема съответно връзка и хост.
smtpClient, грешка := smtp. NewClient (връзка, хост)
ако грешка!= нула {
дневник. Паника (грешка)
}
Сега, след като сте създали smtp клиентски екземпляр, трябва да зададете параметрите на smtpClient и да обработва грешки.
ако грешка = smtpClient. Auth (удостоверяване); грешка!= нула {
дневник. Паника (грешка)
}
ако грешка = smtpClient. Поща (от); грешка!= нула {
дневник. Паника (грешка)
}
ако грешка = smtpClient. Rcpt (заглавки ["До"]); грешка!= нула {
дневник. Паника (грешка)
}
В примера по-горе сте предали параметрите за удостоверяване, адрес на подател и адрес на получател към съответните им методи и сте обработили грешки.
И накрая, трябва да пишете в екземпляра на връзката и можете да направите това, като създадете писател, използвайки Данни твой метод smtp клиент инстанция.
писател, грешка := smtpClient. Данни()
ако грешка!= нула {
дневник. Паника (грешка)
}
_, грешка = писател. Напиши([]байт(съобщение))
ако грешка!= нула {
дневник. Паника (грешка)
}
След като създадете писател, вие пишете байтов отрязък от съобщението, като използвате Пишете метод, както в примера по-горе.
грешка = писател. Близо()
ако грешка!= нула {
дневник. Паника (грешка)
}
грешка = smtpClient. Излезте ()
ако грешка!= нула {
връщане
}
връщане „Успешно, пощата беше изпратена!“
Затворете записващото устройство и излезте от екземпляра за връзка на smtp клиент, като използвате горния код. The Изпрати писмо() функцията връща съобщение за успех, както е показано по-горе.
При обаждане на Изпрати писмо() функция в основен функция, трябва да получите съобщението за успех, регистрирано на вашата конзола и имейла`, изпратен до вашия получател.
Има още нещо в пакета Net
Пакетът net съдържа много пакети за функционалности, свързани с мрежата, а smtp пакетът е само един от тях. Можете също да използвате TCP и HTTP пакетите за разработка, свързана с мрежи.
Може да намерите пакета net/smtp за непосилен, ако не сте backend разработчик. Има много други алтернативи за бързо изпращане на имейли с по-малко редове код. Можете да проверите компании за имейл маркетинг като SendGrid, Twilio и MailChimp и услуги за бюлетин като Substack и Revue, които ви позволяват да изпращате имейли до много потребители без стрес.