gpt4 book ai didi

email - 如何从 Go 发送电子邮件

转载 作者:IT王子 更新时间:2023-10-29 01:48:10 34 4
gpt4 key购买 nike

我正在尝试用 Golang 发送电子邮件,但遇到了很多问题。我是 Go 的新手,所以也许这很简单,但我无法在文档中找到答案。

这是我想做的:1. 从 STDIN 收到一封电子邮件2. 解析邮件(getting from, to, subject, attachments等)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 做了一些测试。我想要做的就是再次从服务器向队列发送一封电子邮件(不做任何更改)。这些模块中的大多数都需要 Auth,但我只想简单地使用 sendmail 发送,就像我在 bash 中执行此操作一样:

# echo "test" | mail {address}

最佳答案

使用 net/smtp 你可以很容易地做到这一点......假设你有一个运行的 smtp 服务器,你可以在没有身份验证的情况下连接到它。我猜想对于你想要完成的事情,通过像你的 gmail ( https://www.digitalocean.com/community/tutorials/how-to-use-google-s-smtp-server ) 这样简单的东西实际上要容易得多

无论如何,这里有几个代码示例可以涵盖这两种情况;

    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)
}

或者,这里有一个使用简单例份验证的 go playground 示例; http://play.golang.org/p/ATDCgJGKZ3除非你已经在你的开发箱上运行了一个 smtp 服务器,否则遵循类似的东西可能会容易得多。

关于email - 如何从 Go 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31272725/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com