CSS 规则,用于在 Go 中从命令行发送电子邮件时编写 html



我正在尝试用一些CSS编写HTML,以通过电子邮件发送。电子邮件通过 Go 命令行执行发送。但它在发送电子邮件时返回有关 CSS 属性的错误。

我收到属性错误,例如,background: rgb(255, 255, 255)padding的某些属性,它在终端中返回"未找到"错误。

<div style="margin: 0; padding: 0; background: #ffffff; font-family: Montserrat, sans-serif; font-size: 16px; color: #313131">

上面是我正在使用的一大块 html 和 css 属性。

以下是通过命令行发送电子邮件的代码:

package utils
import(
    "bytes"
    "html/template"
    "os/exec"
    "fmt"
)
type EmailRequest struct{
    EmailTo      string
    EmailSubject string
    EmailBody    string
}
func (request *EmailRequest) EmailSend(notificationTemplateData interface{}) (bool, error) {    
    subject, errParse := ParseTemplate(request.EmailSubject, notificationTemplateData)
    body, errParse    := ParseTemplate(request.EmailBody, notificationTemplateData)
    if errParse != nil{
        return false, errParse
    }
    err := ExecuteCommand("echo ""+body+" " | mail -s "$(echo " "+subject+" nMIME-version: 1.0;nContent-Type: text/html;charset="UTF-8";n")"  "+request.EmailTo)
    if err != nil {
        return false, err
    }
    return true, nil
}
func ParseTemplate(templateHtml string, data interface{}) (string, error) {
    var body string
    t, err := template.New("test").Parse(templateHtml)
    if err != nil {
        return body, err
    }
    buf := new(bytes.Buffer)
    if err = t.Execute(buf, data); err != nil {
        return body, err
    }
    body = buf.String()
    return body, nil
}
func ExecuteCommand(command string) error{
    cmd := exec.Command("sh", "-c",command)
    var out bytes.Buffer
    var stderr bytes.Buffer
    cmd.Stdout = &out
    cmd.Stderr = &stderr
    err := cmd.Run()
    if err != nil {
        fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
        return err
    }
    fmt.Println("Result: " + out.String())
    return nil
}

我有一个编辑器,客户可以在其中配置其自定义模板。显然,客户可以添加任何CSS属性。因此,对于随机属性,它会导致错误。

我从上面的错误中了解到的是,它为随机CSS属性抛出了错误,或者是否有任何CSS规则可以通过go命令行发送电子邮件?

编辑:

以下是我在运行 EmailSend(( 函数时在终端中遇到的错误。

sh: 
padding: not found
sh: 
background: not found 

正如Adrian在上面的评论中提到的,我使用go命令本身来解析html和css属性。下面是一个大大简化的解决方案,通过命令行使用 html 和 css 发送电子邮件。

func (request *EmailRequest) EmailSend(notificationTemplateData interface{}) (bool, error) {    
    subject, errParse := ParseTemplate(request.EmailSubject, notificationTemplateData)
    body, errParse    := ParseTemplate(request.EmailBody, notificationTemplateData)
    if errParse != nil{
        return false, errParse
    }
    err := ExecuteMailCommand("mail -s "$(echo " "+subject+" nMIME-version: 1.0;nContent-Type: text/html;charset="UTF-8";n")"  "+request.EmailTo, body)
    if err != nil {
        return false, err
    }
    return true, nil
}
func ExecuteMailCommand(command string, body string) error {
    cmd := exec.Command("sh", "-c", command)
    cmd.Stdin = bytes.NewBufferString(body)
    stdout, err := cmd.CombinedOutput()
    if err != nil {
        fmt.Printf("%vn", err)
        return err
    }
    fmt.Printf("%sn", stdout)
    return nil
}

在上面的代码中,函数 ParseTemplate 将保持不变。

谢谢!

最新更新