我正在try 从服务器获取具有以下源代码的所有邮箱(此函数在主模块中调用):
package internal
import (
"fmt"
"io"
"io/ioutil"
"log"
"github.com/emersion/go-imap"
"github.com/emersion/go-imap/client"
"github.com/emersion/go-message"
)
func FetchEMail(server string, username string, password string) error {
//Connect to Server
log.Println("Connecting to server...")
c, err := client.DialTLS(server, nil)
log.Println("Connected to " + server)
defer c.Logout()
//check if connection successful
if err != nil {
log.Println("In connection Error")
return err
}
//err = nil
//Login
log.Println("Logging in...")
err = c.Login(username, password)
log.Println("Logged in as " + username)
//check if login successful
if err != nil {
log.Println("In login Error")
return err
}
//Select INBOX
log.Println("Selecting INBOX...")
mbox, err := c.Select("INBOX", false)
log.Println("Selected INBOX")
//check if select successful
if err != nil {
return err
}
//Fetch all messages
log.Println("Fetching all messages...")
seqset := new(imap.SeqSet)
seqset.AddRange(1, mbox.Messages)
items := []imap.FetchItem{imap.FetchRFC822}
messages := make(chan *imap.Message, 10)
done := make(chan error, 1)
go func() {
done <- c.Fetch(seqset, items, messages)
}()
//check if fetch successful
if err := <-done; err != nil {
log.Println("In fetch Error")
return err
}
log.Println("Run Successful - Terminating...")
return nil
}
这会导致以下错误:
死机:运行时错误:内存地址无效或无指针取消引用 [信号SIGSEGV:分段违规代码=0x1地址=0x18 PC=0x5ee505]
Goroutine 1[正在运行]:
我已经try 过imap.FetchEtaine(),它可以工作,但由于某种原因,imap.FetchRFC822不能工作.
我的主要目标是从所有邮箱中导出所有邮箱附件(.gz,.zip,...),这就是为什么我需要整个邮箱,而不仅仅是信封.