]>
src.bluestatic.org Git - mailpopbox.git/blob - pop3.go
10 "src.bluestatic.org/mailpopbox/pop3"
13 func runPOP3Server(config Config
) <-chan error
{
22 type pop3Server
struct {
27 func (server
*pop3Server
) run() {
28 for _
, s
:= range server
.config
.Servers
{
29 if err
:= os
.Mkdir(s
.MaildropPath
, 0700); err
!= nil && !os
.IsExist(err
) {
34 l
, err
:= net
.Listen("tcp", fmt
.Sprintf(":%d", server
.config
.POP3Port
))
41 conn
, err
:= l
.Accept()
47 go pop3
.AcceptConnection(conn
, server
)
51 func (server
*pop3Server
) Name() string {
52 return server
.config
.Hostname
55 func (server
*pop3Server
) OpenMailbox(user
, pass
string) (pop3
.Mailbox
, error
) {
56 for _
, s
:= range server
.config
.Servers
{
57 if user
== "mailbox@"+s
.Domain
&& pass
== s
.MailboxPassword
{
58 return server
.openMailbox(s
.MaildropPath
)
61 return nil, errors
.New("permission denied")
64 func (server
*pop3Server
) openMailbox(maildrop
string) (*mailbox
, error
) {
66 messages
: make([]message
, 0),
82 func (m message
) ID() int {
86 func (m message
) Size() int {
90 func (mb
*mailbox
) ListMessages() ([]pop3
.Message
, error
) {
91 msgs
:= make([]pop3
.Message
, len(mb
.messages
))
92 for i
:= 0; i
< len(mb
.messages
); i
++ {
93 msgs
[i
] = &mb
.messages
[i
]
98 func (mb
*mailbox
) Retrieve(msg pop3
.Message
) (io
.ReadCloser
, error
) {
99 filename
:= msg
.(*message
).filename
100 return os
.Open(filename
)
103 func (mb
*mailbox
) Delete(msg pop3
.Message
) error
{
104 message
:= msg
.(*message
)
106 return errors
.New("already deleted")
108 message
.deleted
= true
112 func (mb
*mailbox
) Close() error
{
113 for _
, message
:= range mb
.messages
{
115 os
.Remove(message
.filename
)
121 func (mb
*mailbox
) Reset() {
122 for _
, message
:= range mb
.messages
{
123 message
.deleted
= false