我正在尝试在Golang中发送电子邮件,但遇到了很多问题。我是Go的新手,也许这很简单,但我在文档中找不到答案。
这是我想做的事情: 1.从STDIN获取电子邮件 2.解析电子邮件(获取发件人、收件人、主题、附件等) 3.发送此电子邮件(将其再次放入本地postfix队列)
我完成了1和2,但在第3步遇到了问题。
以下是我现在拥有的内容:
这是我想做的事情: 1.从STDIN获取电子邮件 2.解析电子邮件(获取发件人、收件人、主题、附件等) 3.发送此电子邮件(将其再次放入本地postfix队列)
我完成了1和2,但在第3步遇到了问题。
以下是我现在拥有的内容:
package main
import (
"fmt"
"github.com/jhillyerd/go.enmime"
//"github.com/sendgrid/sendgrid-go"
"net/smtp"
"github.com/jordan-wright/email"
"os"
"net/mail"
"io/ioutil"
"bytes"
)
func main() {
mail_stdin, err := ioutil.ReadAll(os.Stdin)
if err != nil {
return
}
// Convert type to io.Reader
buf := bytes.NewBuffer(mail_stdin)
msg, err := mail.ReadMessage(buf)
if err != nil {
return
}
mime, err := enmime.ParseMIMEBody(msg)
if err != nil {
return
}
# saving attachments
for _, value := range mime.Attachments {
fmt.Println(value.FileName())
err := ioutil.WriteFile(value.FileName(), value.Content(), 0664)
if err != nil {
//panic(err)
return
}
fmt.Printf("From: %v\n", msg.Header.Get("From"))
fmt.Printf("Subject: %v\n", mime.GetHeader("Subject"))
fmt.Printf("Text Body: %v chars\n", len(mime.Text))
fmt.Printf("HTML Body: %v chars\n", len(mime.Html))
fmt.Printf("Inlines: %v\n", len(mime.Inlines))
fmt.Printf("Attachments: %v\n", len(mime.Attachments))
fmt.Println(mime.Attachments)
fmt.Println(mime.OtherParts)
fmt.Printf("Attachments: %v\n", mime.Attachments)
}
我已经使用了net/smtp、sendgrid-go和jordan-wright/email进行了一些测试。
我想要做的就是将邮件(不更改任何内容)从服务器发送到队列中。大多数模块需要进行身份验证,但我只想简单地使用sendmail发送邮件,就像我可以从bash中执行的那样:
# echo "test" | mail {address}
os.Stdin
已经是一个io.Reader
时,不要读取所有内容然后使用bytes.NewBuffer
来“获取一个io.Reader
”;不要在err != nil
的情况下无任何原因/反馈地退出,至少做一些像log.Fatal(err)
这样的事情。 - Dave C