Email 如何从Go发送电子邮件
我想在Golang发一封电子邮件,但我有很多问题。我是围棋新手,所以可能这很简单,但我在医生上找不到答案 这就是我想做的: 1.从STDIN收到一封电子邮件 2.解析电子邮件(获取发件人、收件人、主题、附件等) 3.发送此电子邮件(将其再次放入本地后缀中的队列) 我做了1和2,但第3个有问题 这就是我现在拥有的:Email 如何从Go发送电子邮件,email,parsing,go,Email,Parsing,Go,我想在Golang发一封电子邮件,但我有很多问题。我是围棋新手,所以可能这很简单,但我在医生上找不到答案 这就是我想做的: 1.从STDIN收到一封电子邮件 2.解析电子邮件(获取发件人、收件人、主题、附件等) 3.发送此电子邮件(将其再次放入本地后缀中的队列) 我做了1和2,但第3个有问题 这就是我现在拥有的: package main import ( "fmt" "github.com/jhillyerd/go.enmime" //"github.com/sendgrid/
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做了一些测试。
我所要做的就是再次从服务器向队列发送一封电子邮件(不做任何更改)。这些模块中的大多数都需要有Auth,但我只想简单地使用sendmail发送,就像我可以在bash中这样做一样:
# echo "test" | mail {address}
使用
net/smtp
您可以相当轻松地完成此操作。。。假设您有一个正在运行的smtp服务器,您可以在不进行身份验证的情况下连接到该服务器。我猜你想要实现的目标其实要简单得多,比如你的gmail()
无论如何,这里有两个代码示例来涵盖这两种情况
c, err := smtp.Dial("mail.example.com:25")
if err != nil {
log.Fatal(err)
}
defer c.Close()
// Set the sender and recipient.
c.Mail("sender@example.org")
c.Rcpt("recipient@example.net")
// Send the email body.
wc, err := c.Data()
if err != nil {
log.Fatal(err)
}
defer wc.Close()
buf := bytes.NewBufferString("This is the email body.")
if _, err = buf.WriteTo(wc); err != nil {
log.Fatal(err)
}
或者,这里有一个使用简单auth的go操场示例;除非你已经有一个smtp服务器在你的开发设备上运行,否则下面类似的事情可能会容易得多。旁注:不要全部读取,然后使用
bytes.NewBuffer
来“获取io.Reader
”,而os.Stdin
已经是io.Reader
;不要在没有任何理由/反馈的情况下退出err!=nil
,至少执行类似于log.Fatal(err)
的操作。