英文:
Golang emersion go-imap how to get the name that did the reply
问题
我正在使用Golang的Emersion包通过IMAP获取传入的电子邮件,在这里我正在尝试使用InReplyTo函数,但我得到的是发件人的ID,例如:CABkN-Fgn2o7L9Rqep2WDE70tfmk07O35+Ta2Snr+CoDdHcAD6rg@mail.gmail.com。我该如何将ID更改为回复名称?
这是我的代码:
mbox, err := c.Select("INBOX", false)
if err != nil {
log.Fatal(err)
}
log.Println("Flags for INBOX:", mbox.Flags)
// 获取最后4条消息
from := uint32(1)
to := mbox.Messages
if mbox.Messages > 1 {
// 这里使用无符号整数,只有在结果大于0时才进行减法运算
from = mbox.Messages - 1
}
seqset := new(imap.SeqSet)
seqset.AddRange(from, to)
messages := make(chan *imap.Message, 10)
done = make(chan error, 1)
go func() {
done <- c.Fetch(seqset, []imap.FetchItem{imap.FetchEnvelope}, messages)
}()
log.Println("Last 4 messages:")
for msg := range messages {
log.Println("=====================================")
tes := msg.Envelope.From
for i, v := range tes {
log.Println("#########################")
fmt.Println(i)
fmt.Println(v.PersonalName)
log.Println("#########################")
}
// fmt.Println(tes)
// log.Println("Subject " + msg.Envelope.From)
log.Println("In REply" + msg.Envelope.InReplyTo)
log.Println("=====================================")
}
if err := <-done; err != nil {
log.Fatal(err)
}
log.Println("Done!")
希望对你有帮助!
英文:
I'm here using the Golang Emersion package to get incoming email via IMAP, here I'm trying to use the InReplyTo function, but what I get is the ID of the sender, for example:
<CABkN-Fgn2o7L9Rqep2WDE70tfmk07O35+Ta2Snr+CoDdHcAD6rg@mail.gmail.com>
how do i change the ID to reply name,
this is my code
mbox, err := c.Select("INBOX", false)
if err != nil {
log.Fatal(err)
}
log.Println("Flags for INBOX:", mbox.Flags)
// Get the last 4 messages
from := uint32(1)
to := mbox.Messages
if mbox.Messages > 1 {
// We're using unsigned integers here, only subtract if the result is > 0
from = mbox.Messages - 1
}
seqset := new(imap.SeqSet)
seqset.AddRange(from, to)
messages := make(chan *imap.Message, 10)
done = make(chan error, 1)
go func() {
done <- c.Fetch(seqset, []imap.FetchItem{imap.FetchEnvelope}, messages)
}()
log.Println("Last 4 messages:")
for msg := range messages {
log.Println("=====================================")
tes := msg.Envelope.From
for i, v := range tes {
log.Println("#########################")
fmt.Println(i)
fmt.Println(v.PersonalName)
log.Println("#########################")
}
// fmt.Println(tes)
// log.Println("Subject " + msg.Envelope.From)
log.Println("In REply" + msg.Envelope.InReplyTo)
log.Println("=====================================")
}
if err := <-done; err != nil {
log.Fatal(err)
}
log.Println("Done!")
答案1
得分: 1
InReplyTo:In-Reply-To头部。包含父级Message-Id。这就是你获取到Id的原因。
使用ReplyTo
代替InReplyTo
。
log.Println("In REply" + msg.Envelope.ReplyTo)
请检查以下内容:
type Envelope struct {
// 消息日期。
Date time.Time
// 消息主题。
Subject string
// 发件人头部地址。
From []*Address
// 消息发送者。
Sender []*Address
// 回复地址头部地址。
ReplyTo []*Address
// 收件人头部地址。
To []*Address
// 抄送头部地址。
Cc []*Address
// 密送头部地址。
Bcc []*Address
// In-Reply-To头部。包含父级Message-Id。
InReplyTo string
// Message-Id头部。
MessageId string
}
英文:
InReplyTo :- The In-Reply-To header. Contains the parent Message-Id. This is why you are getting the Id.
Use ReplyTo
instead of InReplyTo
.
log.Println("In REply" + msg.Envelope.ReplyTo)
Check this :
type Envelope struct {
// The message date.
Date time.Time
// The message subject.
Subject string
// The From header addresses.
From []*Address
// The message senders.
Sender []*Address
// The Reply-To header addresses.
ReplyTo []*Address
// The To header addresses.
To []*Address
// The Cc header addresses.
Cc []*Address
// The Bcc header addresses.
Bcc []*Address
// The In-Reply-To header. Contains the parent Message-Id.
InReplyTo string
// The Message-Id header.
MessageId string
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论