Как получать сообщения от всех людей, заполнивших контактную форму?

У меня есть контактная форма, через которую я получаю сообщения. Но он получен только с одного адреса электронной почты, потому что я указал только этот адрес электронной почты в abc.SetHeader("To", "email2@gmail.com").

Я хочу получать сообщения от всех людей, которые хотят со мной связаться, но я должен знать их пароль приложения, чтобы вставить его в код. Этого не произойдет.

Вот почему я дал свой другой адрес электронной почты в Reply-Toв моей учетной записи Gmail, чтобы он работал, но он все еще не работает. Что мне делать дальше, чтобы все заработало?

      package main

import (
    "log"

    "gopkg.in/gomail.v2"
)

func main() {
    abc := gomail.NewMessage()

    abc.SetHeader("From", "email1@gamil.com")
    abc.SetHeader("To", "email2@gmail.com")
    abc.SetHeader("Subject", "This is the subject")
    abc.SetBody("text/plain", "This is the message")

    a := gomail.NewDialer("smtp.gmail.com", 587, "email1@gmail.com", "app password") // Password for "email1@gmail.com"
    if err := a.DialAndSend(abc); err != nil {
        log.Fatal(err)
    }
}

1 ответ

Разберемся с понятием «контактные формы».

Веб-сайты обычно предоставляют функцию «Связаться с нами». На сайте представлена ​​контактная форма, которую заполняет пользователь. Пользователь обычно предоставляет свой адрес электронной почты и сообщение (и желательно тему / тему).

При отправке серверная часть сохраняет это сообщение в собственной базе данных веб-приложений.

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

Это электронное письмо будет содержать сообщение, введенное администратором в качестве тела. Тема должна содержать тему из контактной формы в качестве заголовка темы. Этот адрес электронной почты будет отправлено на адрес , указанный пользователем. Электронное письмо будет отправлено с адреса администратора (или любого адреса электронной почты, указанного в серверной части, но, конечно, не с адреса электронной почты, предоставленного пользователем).

Пример отправки ответного электронного письма администратором (из бэкэнда):

      m := gomail.NewMessage()
m.SetHeader("From", "admin@mywebapp.com")
m.SetHeader("To", "bob@gmail.com")
m.SetHeader("Subject", "Re: Issue with purchase")
m.SetBody("text/plain", "Hello Bob! We fixed the issue!")

d := gomail.NewDialer("smtp.mywebapp.com", 587, "admin", "admin's password")

if err := d.DialAndSend(m); err != nil {
    panic(err)
}

Обратите внимание, что когда контактная форма заполняется и отправляется пользователем, серверная часть может также уведомить администратора (администраторов) по электронной почте о сообщении. Серверная часть может отправить электронное письмо администратору (ам), включая сообщение, и заголовок «ответ на» этого электронного письма может быть установлен на адрес электронной почты, предоставленный пользователем. Это электронное письмо будет отправлено серверной частью с адреса электронной почты администратора (или любого другого адреса, установленного в серверной части, но, опять же, не с адреса электронной почты пользователя). Если это электронное письмо, отправленное администратору, имеет заголовок «Reply to», установленный на адрес электронной почты пользователя, администратор может просто ответить на электронное письмо, и ответ будет отправлен непосредственно на адрес электронной почты пользователя.

Пример письма, отправленного администратору об отправке "контактной формы" (отправленное сервером):

      m := gomail.NewMessage()
m.SetHeader("From", "admin@mywebapp.com")
m.SetHeader("To", "admin@mywebapp.com")
m.SetHeader("Reply-To", "bob@gmail.com")
m.SetHeader("Subject", "Issue with purchase")
m.SetBody("text/plain", "Hi, I'm bob. I have this XXX issue when purchasing.")

d := gomail.NewDialer("smtp.mywebapp.com", 587, "admin", "admin's password")

if err := d.DialAndSend(m); err != nil {
    panic(err)
}

Администратор читает это сообщение в своем почтовом клиенте и нажимает «Ответить». Ответное сообщение будет отправлено прямо на .

Другие вопросы по тегам