Как отправить текст с шаблоном html в виде электронного письма через Gmail Go SDK?

#go #google-api #gmail #gmail-api

#Вперед #google-api #gmail #gmail-api

Вопрос:

Я создал HTML-файл (т. Е. email.html ) который, наконец, послужил бы мне шаблоном тела моего электронного письма. Я попробовал следующий код, но тело моего электронного письма представляет собой обычный текст со всем html, который я написал в (email.html ).

Можете ли вы предложить, заглянув в код. Что происходит не так??

Примечание: Синтаксический анализ шаблона и выполнение работают нормально.

Код:

 package main

import (
    "encoding/base64"
    "fmt"
    "html/template"
)

func getMessageString(fromEmail, To, ReplyTo, CC, BCC, Subject, emailBody string) []byte {
    return []byte("Reply-To: "   ReplyTo   "rn"   "From: "   fromEmail   "rn"   "To: "   To   "rn"   "Cc: "   CC   "rn"   "Bcc: "   BCC   "rn"   "Subject: "   Subject   "rnrn"   "MIME-Version: 1.0rn"   "Content-Type: text/html; charset="utf-8"rn"   emailBody   "rnrn")
}

func main() {
    t, tempErr := template.New("template.html").ParseFiles("template.html")
    if tempErr != nil {
        fmt.Println(tempErr.Error())
        return
    }

    execErr := t.Execute(buf, data)
    if execErr != nil {
        fmt.Println(execErr.Error())
    } else {
        messageStr := getMessageString("xyz@gmail.com", "abc@ionosnetworks.com", "pqr@gmail.com", "", "", "Test Subject", buf.String())

        var message gmail.Message
        message.Raw = base64.URLEncoding.EncodeToString(messageStr)

        _, err = svc.Users.Messages.Send("me", amp;message).Do()
        if err != nil {
            fmt.Println(err.Error())
        }
    }
}
  

Ответ №1:

Ошибка в getMessageString функции:

 "Subject: "   Subject   "rnrn"
  

Обратите внимание на двойную rn последовательность, почтовый сервер анализирует все после double rn как содержимое электронной почты. В вашем случае был пропущен Content-Type заголовок. Итак, просто удалите один из них rn , и результирующий код должен выглядеть следующим образом:

 func getMessageString(fromEmail, To, ReplyTo, CC, BCC, Subject, emailBody string) []byte {
    return []byte("Reply-To: "   ReplyTo   "rn"   "From: "   fromEmail   "rn"   "To: "   To   "rn"   "Cc: "   CC   "rn"   "Bcc: "   BCC   "rn"   "Subject: "   Subject   "rn"   "MIME-Version: 1.0rn"   "Content-Type: text/html; charset="utf-8"rnrn"   emailBody   "rn")
}