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

标签 html css email go

我正在尝试使用一些 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 属性抛出错误,或者是否存在通过 go 命令行发送电子邮件的任何 CSS 规则?

已编辑:

以下是我在运行 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("%v\n", err)
        return err
    }

    fmt.Printf("%s\n", stdout)
    return nil
}

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

谢谢!

关于html - 在 Go 中从命令行发送电子邮件时编写 html 的 CSS 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48208690/

相关文章:

php - 使用php从/usr/bin/mail读取邮件

javascript - jquery在android中点击滚动到div的顶部

javascript - Div Position : Fixed. 绝对距离一定长度时?

具有完整视口(viewport)高度的 CSS 流体网格布局

email - 为什么来 self 服务器的电子邮件被热门客户标记为垃圾邮件?

javascript - 从 HTML 复制的电子邮件在 Thunderbird 中不起作用

html - 可扩展/动态/可变 div 高度

html - CSS Pie - 减少到我需要的部分

jquery - 仅在桌面上将导航固定到顶部

html - 导航栏中药丸的样式