DevGang
Авторизоваться

Создавайте электронные письма для новостных рассылок в Golang

Вы когда-нибудь задумывались, как работают информационные бюллетени от разных компаний и организаций? Некоторые компании используют такие платформы, как Mailchimp, но если вы хотите понять, что происходит и как создать свою собственную платформу, чтобы иметь полный контроль, тогда следуйте инструкциям, когда мы отправим нашим подписчикам несколько специальных информационных бюллетеней.

Шаблоны

Прежде чем мы начнем писать какой-либо код, давайте разберем, что происходит, когда вы получаете новое электронное письмо, и что может произойти. Когда вы получаете информационный бюллетень с любой платформы, на которую вы подписаны, вы замечаете, что каждая из них имеет свой дизайн, логотип и шрифт. Вы можете увидеть тему и жирный заголовок, а затем тело и иногда изображения. Все они содержатся в Templates.

В большинстве случаев они создаются с использованием HTML, CSS и Javascript. HTML-файлы могут быть как в формате .html, так и в формате .tmpl. Пример шаблона обычно начинается с обычного <!DOCTYPE html>. Вот пример шаблона:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My Newsletter</title>
    <style>
        /* Add CSS styles here */
    </style>
</head>
<body>
    <header>
        <h1>Welcome to My Newsletter</h1>
    </header>
    <main>
        <!-- Newsletter content goes here -->
    </main>
    <footer>
        <p>&copy; 2024 My Company. All rights reserved.</p>
    </footer>
</body>
</html>

Динамические шаблоны

Было бы хлопотно, если бы нам приходилось постоянно редактировать html-файл каждый раз, когда мы хотим отправить новый контент нашим подписчикам, но, к счастью, есть способ сохранить базовое ощущение нашего информационного бюллетеня, динамически изменяя то, что наши пользователи видят всякий раз, когда они получают письмо от нас.

В Go пакет html/template позволяет нам создавать динамический HTML-контент с использованием файлов шаблонов. Эти шаблоны могут включать заполнители или переменные, которые заменяются фактическими данными при визуализации шаблона.

Давайте посмотрим на пример файла шаблона newsletter_template.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{.Title}}</title>
    <style>
        /* Add CSS styles here */
    </style>
</head>
<body>
    <header>
        <h1>{{.Header}}</h1>
    </header>
    <main>
        <p>{{.Content}}</p>
    </main>
    <footer>
        <p>&copy; {{.Year}} My Company. All rights reserved.</p>
    </footer>
</body>
</html>

В этом шаблоне мы определили placeholder, такие как {{.Title}}{{.Header}}{{.Content}}, и {{.Year}}. Они будут динамически заменяться фактическими данными при отрисовке шаблона.

Теперь давайте посмотрим, как мы можем визуализировать этот шаблон в программе Go:

package main

import (
    "html/template"
    "os"
)

func main() {
    // Read template file
    tmpl, err := template.ParseFiles("newsletter_template.html")
    if err != nil {
        panic(err)
    }

    // Define data for template
    data := struct {
        Title   string
        Header  string
        Content string
        Year    int
    }{
        Title:   "My Newsletter",
        Header:  "Welcome to My Newsletter",
        Content: "This is a test newsletter. Enjoy!",
        Year:    2024,
    }

    // Execute template
    if err := tmpl.Execute(os.Stdout, data); err != nil {
        panic(err)
    }
}

В этой программе Go мы анализируем файл шаблона newsletter_template.html и определяем данные, которые будут использоваться при рендеринге шаблона. Затем мы выполняем шаблон, передавая данные, и визуализированный HTML записывается в стандартный вывод os.Stdout.

Преимущества динамических шаблонов

Использование динамических шаблонов дает несколько преимуществ:

  • Гибкость: с помощью динамических шаблонов мы можем легко обновлять содержимое наших информационных бюллетеней, не изменяя базовую структуру HTML. Это позволяет быстро повторять и экспериментировать с различными макетами контента.
  • Персонализация: динамические шаблоны позволяют нам персонализировать содержание каждого информационного бюллетеня на основе предпочтений пользователя, демографических данных или поведения. Мы можем адаптировать сообщение так, чтобы оно нашло отклик у каждого подписчика, увеличивая уровень вовлеченности и конверсии.
  • Автоматизация: интегрируя динамические шаблоны с нашей системой доставки информационных бюллетеней, мы можем автоматизировать процесс отправки персонализированных электронных писем подписчикам. Это экономит время и усилия, обеспечивая при этом постоянное восприятие бренда получателями.

Подготовка настройки электронной почты

Теперь, когда у нас есть шаблон электронного письма со всеми данными, которые мы хотим отправить, следующим шагом будет его рассылка нашим подписчикам. В этом разделе мы рассмотрим, как это сделать с помощью Go и пакета gomail.

Использование пакета gomail

Gomail — это разработанный мною пакет, который обеспечивает простой и эффективный способ отправки электронной почты в Go. Мы будем использовать его для составления нашего электронного сообщения, включая HTML-контент из нашего шаблона, и отправки его нашим подписчикам. Для использования пакета нам потребуются определенные требования:

  • Каталог шаблонов: для поддержания организации и простоты управления полезно хранить все наши шаблоны электронной почты в специальном каталоге. В этом каталоге будут храниться HTML-шаблоны, которые мы создали для наших информационных бюллетеней. Например, мы можем создать каталог с именем templates в каталоге нашего проекта и хранить там все файлы шаблонов.
project_directory/
├── templates/
│   ├── newsletter_template.html
│   └── other_templates...
  • Почтовые учетные данные: нам нужны учетные данные почтового клиента. Вы можете получить их у своих любимых поставщиков. Вот как их получить для Google Gmail SMTP. Используя Gomail, мы можем добавить учетные данные с помощью структуры:
  package main

    import (
        "log"
        "github.com/rhaqim/gomail"
    )

    func main() {
        auth := gomail.EmailAuthConfig{
            Host:     "smtp.gmail.com",
            Port:     587,
            Username: "user",
            Password: "password",
            From:     "me@gmail.com",
        }

        templateDir := "templates"

        g := gomail.NewGoemail(auth, templatesDir)
    }
Примечание: я включил каталог шаблона, а также создал новый экземпляр с помощью auth и templateDir.

Отправка электронного письма

Теперь, когда у нас есть настройка отправителя электронной почты, нам нужно отправить само письмо. Gomail должен знать, кому вы отправляете электронное письмо (это может быть один или несколько человек), указать тему, какой шаблон в каталоге шаблонов вы хотите использовать, а затем тело сообщения. Собрав все это вместе, мы имеем следующее:

   package main

    import (
        "log"
        "github.com/rhaqim/gomail"
    )

    func main() {
        auth := gomail.EmailAuthConfig{
            Host:     "smtp.gmail.com",
            Port:     587,
            Username: "user",
            Password: "password",
            From:     "me@gmail.com",
        }

        templateDir := "templates"

        g := gomail.NewGoemail(auth, templatesDir)

        NewsletterApp(g)

    }

    func NewsletterApp(mail gomail.Gomail) {

        email := &gomail.Email{
            Recipients:       []string{"recipient1e@gmail.com", "recipiente2@gmail.com"},
            Subject:          "Hello",
            Body:             "Hello, this is a test email",
            TemplateFileName: "newsletter_template.html",
        }

        err := mail.SendEmail(email)
        if err != nil {
            log.Fatal(err)
        }
    }

Заключение

Это абстракция, и код Gomail общедоступен. Не стесняйтесь создавать форки и модифицировать их для своих нужд.

Источник:

#Golang #HTML
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу