Aula 17 – Golang – Fiber – Enviando Emails
Aula 17 – Golang – Fiber – Enviando Emails
Voltar para página principal do site
Todas as aulas desse curso
Aula 16 Aula 18
Redes Sociais:
Link para a Digital Innovation
Quer aprender python3 de graça e com certificado? Acesse então:
workover
Meus link de afiliados:
Hostinger
Digital Ocean
One.com
Código da aula: Github
Melhore seu NETWORKING
Participe de comunidades de desenvolvedores:
Fiquem a vontade para me adicionar ao linkedin.
E também para me seguir no GITHUB.
Canais do Youtube
Toti
Lofi Music Zone Beats
Backing Track / Play-Along
Código Fluente
Putz!
Vocal Techniques and Exercises
PIX para doações
Aula 17 – Golang – Fiber – Enviando Emails
Agora vamos enviar um email para a redefinição da senha, para isso, vamos instalar o MailHog.
Ele é um servidor fake de email.
Acesse esse link abaixo para instalar ele de acordo com seu sistema operacional.
https://github.com/mailhog/MailHog/releases
Ele vai rodar localmente em 0.0.0.0:8025
o servidor SMTP começa na porta 1025
o servidor HTTP começa na porta 8025
Essa porta SMTP 1025 iremos usar no nosso código.
No forgotController.go iremos importar o pacote net/smtp.
Esse é o pacote que vamos usar para enviar emails.
No código abaixo, na parte: message := []byte("Clique <a href=\"" + url + "\">aqui</a> para redefinir sua senha!")
foi usado um array de bytes ([]byte) porque a função smtp.SendMail() espera um parâmetro do tipo []byte para o corpo da mensagem de email.
A assinatura da função é a seguinte:
func SendMail(addr string, a Auth, from string, to []string, msg []byte) error
Portanto, ao compor o corpo da mensagem de email, é necessário criar um []byte que contenha os dados da mensagem.
Nesse caso específico, o trecho de código está criando uma mensagem de email com um link HTML.
Ao utilizar []byte, o texto é convertido em um array de bytes, que é o formato esperado pela função smtp.SendMail().
Isso garante que os dados da mensagem sejam tratados corretamente durante o envio por email.
Em resumo, a escolha entre []byte e string depende do contexto e dos requisitos da função ou operação que você está realizando.
No caso de interações com funções ou bibliotecas que esperam []byte, é necessário fazer essa conversão para garantir que os dados sejam tratados corretamente.
fiber-project/controllers/forgotController.go
package controllers
import (
"fiber-project/database"
"fiber-project/models"
"math/rand"
"net/smtp"
"github.com/gofiber/fiber/v2"
)
func Forgot(c *fiber.Ctx) error {
var data map[string]string
if err := c.BodyParser(&data); err != nil {
return err
}
token := RandStringRunes(12)
passwordReset := models.PasswordReset{
Email: data["email"],
Token: token,
}
database.DB.Create(&passwordReset)
from := "fluentcode@exemple.com"
to := []string{
data["email"],
}
url := "http://localhost:3000/reset/" + token
message := []byte("Clique <a href=\"" + url + "\">aqui</a> para redefinir sua senha!")
err := smtp.SendMail("0.0.0.0:1025", nil, from, to, message)
if err != nil {
return err
}
return c.JSON(fiber.Map{
"message": "success",
})
}
func RandStringRunes(n int) string {
var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
b := make([]rune, n)
for i := range b {
b[i] = letterRunes[rand.Intn(len(letterRunes))]
}
return string(b)
}
Para testar, faça a request POST no postman ou qualquer outro software como esse no endpoint forgot.
http://localhost:8000/api/forgot
Agora, no browser, acesse o servidor do MailHog.
0.0.0.0:8025
Veja se o email foi recebido.