Golang Envie email

Golang Envie email
O protocolo SMTP é um dos blocos de construção da Internet moderna. O protocolo atua como o padrão para transmissões de e-mail. Ele compreende um servidor de correio e um cliente de email para facilitar a transferência de e -mails.

Neste guia, discutiremos como você pode enviar e -mails usando o pacote SMTP em Go. Para testes, usaremos um servidor SMTP hospedado localmente usando o correio.

Golang Smtp

O pacote SMTP é uma sub-pacote do pacote de NET GOLANG. Ele implementa funcionalidades de alto nível para trabalhar com o protocolo SMTP.

Vamos aprender a enviar email usando o pacote SMTP.

O pacote SMTP fornece um método sendmail () que permite enviar email para o endereço especificado.

A sintaxe da função é como mostrado:

Func Sendmail (string addr, uma autenticação, de string a [] string, msg [] byte) Erro

A função aceita o endereço do servidor SMTP como uma string, um mecanismo de autenticação, endereço de email para enviar, o endereço de email para enviar e a mensagem de email como parâmetros.

A mensagem de email deve começar com o cabeçalho, uma linha em branco e o corpo de e -mail. Você deve encerrar cada linha da mensagem com caracteres CRLF, permitindo a conformidade com o estilo de e -mail RFC 822.

O código a seguir mostra um exemplo simples de usar a função Sendmail para enviar um email.

Pacote principal
importação (
"FMT"
"registro"
"NET/SMTP"
)
const (
Nome de usuário = "Linuxhint"
Passwd = "senha"
Host = "localhost"
)
func main ()
de: = "[email protected] "
para: = [] string
"[email protected] ",

msg: = [] byte ("de: [email protected] \ r \ n " +
"Para: [email protected] " +
"Assunto: Golang Testing Mail \ r \ n" +
"Corpo de e -mail: bem -vindo para ir!\ r \ n ")
Auth: = SMTP.PlainAuth ("", nome de usuário, Passwd, host)
err: = smtp.Sendmail (host+": 25", auth, de, para, msg)
se err != nil
registro.Fatal (ERR)

fmt.Println ("Mail enviado com sucesso!")

No exemplo acima, começamos importando os pacotes necessários. Em seguida, especificamos as variáveis ​​necessárias. Em nosso exemplo, definimos o nome de usuário, a senha e o host.

Na função principal, definimos o remetente do email e do receptor usando o de e para variáveis, respectivamente.

Em seguida, vem o corpo de e -mail, usamos o estilo RFC 822 para construir a mensagem. Observe que cada linha é separada com caracteres CRLF.

Em seguida, construímos a autenticação usando o método PlainAuth. A função leva a identidade, o nome de usuário, a senha e o host e organiza um mecanismo de autenticação simples com o servidor. A função então retorna a um objeto de autenticação.

Por fim, enviamos o email usando a função Sendmail que passava o endereço, objeto de autenticação, remetente, destinatário e a mensagem como argumentos.

Método de autenticação de correio

Se você executar o código acima no correio, o servidor retornará um erro como abaixo e fechará a conexão.

$ GO Run E -mails.ir
2022/02/02 02:52:39 SMTP: O servidor não suporta autenticação
status de saída 1

Você pode resolver isso usando uma função de sendmail personalizada. Um código de exemplo é como mostrado abaixo:

Pacote principal
importação (
"Encoding/base64"
"FMT"
"registro"
"NET/SMTP"
"cordas"
)
const (
Nome de usuário = "Linuxhint"
Passwd = "senha"
Host = "localhost"
)
func main ()
de: = "[email protected] "
para: = [] string
"[email protected] ",

msg: = [] byte ("Corpo de e -mail: bem -vindo para ir!\ r \ n ")
err: = sendmail (host+": 2500", de, "Golang Testing Email", String (msg), para)
se err != nil
registro.Fatal (ERR)

fmt.Println ("Mail enviado com sucesso!")

func Sendmail (addr, de, sujeito, string corporal, para [] string) erro
R: = Strings.NewReplacer ("\ r \ n", "", "\ r", "", "\ n", "", "%0a", "", "%0d", "")
c, err: = smtp.Dial (addr)
se err != nil
retornar err

adiar c.Fechar()
se err = c.Mail (r.Substituir (de)); errar != nil
retornar err

para i: = alcance para
para [i] = r.Substitua (para [i])
se err = c.RCPT (para [i]); errar != nil
retornar err


w, err: = c.Dados()
se err != nil
retornar err

msg: = "para:" + strings.Junte -se (para, ",") + "\ r \ n" +
"De:" + de + "\ r \ n" +
"Assunto:" + sujeito + "\ r \ n" +
"Tipo de conteúdo: texto/html; charset =" utf-8 "\ r \ n" +
"Content-transfer-coding: base64 \ r \ n" +
"\ r \ n" + base64.Stdencoding.CodetoString ([] byte (corpo))
_, err = w.Escreva ([] byte (msg))
se err != nil
retornar err

err = w.Fechar()
se err != nil
retornar err

retornar c.Desistir()

Golang Enviar Correio - Cópia de Carbono

Você também pode enviar e -mails para vários usuários usando cópia de carbono e cópia de carbono cego. Os destinatários do CC serão visíveis a todos.

Podemos fazer isso usando o código como abaixo:

Pacote principal
importação (
"FMT"
"registro"
"NET/SMTP"
"cordas"
)
Tipo de estrutura de correio
String de remetente
Para sequenciar
String cc []
String bcc []
String de assunto
Corda do corpo

func main ()
remetente: = "[email protected]"
para: = [] string
"Olá@exemplo.com ",
"[email protected] ",
"[email protected]ão",

cc: = [] string
"[email protected] ",
"[email protected] ",

Nome de usuário: = "Linuxhint"
Passwd: = "Senha"
Host: = "localhost"
Assunto: = "Teste de correio de Golang"
corpo: = "corpo da mensagem"
req: = e -mail
Remetente: remetente,
Para: para,
CC: CC,
Assunto: Assunto,
Corpo: corpo,

msg: = composemsg (req)
Auth: = SMTP.PlainAuth ("", nome de usuário, Passwd, host)
err: = smtp.Sendmail (host+": 2500", auth, remetente, para, [] byte (msg))
se err != nil
registro.Fatal (ERR)

fmt.Println ("mensagem enviada com sucesso!")

// Construa mensagem com base no CC
Func Composemsg (Mail Mail) String
// string vazia
msg: = ""
// Defina o remetente
msg += fmt.Sprintf ("de: %s \ r \ n", e -mail.Remetente)
// se mais de 1 destinatário
Se Len (Mail.Para)> 0
msg += fmt.Sprintf ("cc: %s \ r \ n", strings.Junte -se (correio.Cc, ";")))

// adicionar assunto
msg += fmt.Sprintf ("sujeito: %s \ r \ n", e -mail.Assunto)
// Adicione o corpo de correio
msg += fmt.Sprintf ("corpo: %s \ r \ n", e -mail.Corpo)
retornar msg

O código acima enviará os emails para os destinatários especificados usando o protocolo SMTP.

Fechamento

Neste guia, exploramos o básico do uso do pacote SMTP em Ir para enviar e -mails para um ou mais usuários. Verifique a documentação para saber mais.