Skip to content

leeight/email

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

简介

EMail Client 基于 POP3SMTP 协议来实现邮件的收发功能,UI是基于在 er, esui, bat-ria 的基础上开发的,天生具有很好的扩展性和跨平台的特性。

如何使用

为了方便使用,提供了 Mac,Linux, Windows 下面的编译好的二进制文件,可以从这里下载:http://pan.baidu.com/s/1bnzYseN

下载解压之后,在终端里面直接执行即可,如果正常启动成功,然后打开浏览器,访问:http://localhost:8877 就可以看到设置页面。

user_settings.png

第一次访问的时候会自动跳转到设置页面,此时需要配置一些账户的信息,如果是 baidu.com 或者 126.com 的账户的话,只需要在基本设置里面填写邮箱地址和密码即可,下面的高级设置会自动补全。如果不是这两个域名下面的账户,可能就需要自己人肉去补全相应的信息了。

配置成功之后,点击确定,然后会跳转到邮件列表页面,稍微等一会儿就可以看到最新的邮件了。

关联网盘

在邮件列表页面,点击『网盘授权』的按钮,会打开授权页面,授权成功之后会,后续收到的邮件中如果还有附件,会自动同步到百度网盘。

需要注意的是,授权的时候,需要保证浏览器的地址是 http://localhost:8877,如果是其它地址,可能会失败。

系统预览

邮件列表

mail_inbox.png

邮件搜索

mail_search.png

发送邮件

mail_compose.png

邮件浏览

mail_view.png

查看附件

先进行网盘授权,授权之后邮件的附件是自动转存到百度云,方便预览。

view_attachment.png

view_attachment2.png

系统架构图

design.png

BACKEND

  1. 基于 POP3 协议跟邮件服务器交互,完成收取邮件的功能
  2. 收取邮件之后把解析出来的元信息(例如:标题,发件人,日期等等)存储到数据,原始的文件存储到 Raw 目录。

FRONTEND

  1. 基于 SMTP 协议跟邮件服务器交互,完成发送邮件的功能
  2. 实现了一个 Web Server,响应浏览器发送过来的请求,返回合适的 JSON 数据,从而在 ER App 里面展示邮件的信息。

环境搭建

基于上面的介绍,搭建环境之前需要有一些依赖的服务需要准备好:

  1. git
  2. sqlite 或者 mysql
  3. golang

注意事项

Windows编译需要额外安装tdm-gcc,其它平台下应该没有什么问题,不过还是推荐在 Linux 或者 Mac 下面尝试编译,会方便很多。

代码编译

调用go build之前,首先需要设置GOPATH环境变量,例如:

export GOPATH=$HOME/gocode
mkdir -p $HOME/gocode

下载所需要的依赖包(只需要下载一次即可,有些可能需要翻墙,请自行解决)

go install "github.com/alexcesaro/mail/quotedprintable"
go install "github.com/astaxie/beego"
go install "github.com/astaxie/beego/context"
go install "github.com/astaxie/beego/orm"
go install "github.com/dustin/go-humanize"
go install "github.com/microcosm-cc/bluemonday"
go install "github.com/saintfish/chardet"
go install "github.com/stretchr/testify/assert"
go install "github.com/go-sql-driver/mysql"
go install "github.com/mattn/go-sqlite3"
go install "github.com/bytbox/go-pop3"
go install "github.com/tealeg/xlsx"
go install "code.google.com/p/go.net/publicsuffix"
go install "code.google.com/p/go.text/encoding"

安装lessc

因为前端的一些样式代码是less写的,因此在开发的过程中需要用到lessc,安装的方式很简单,执行npm i -g less即可,安装之后,执行lessc --version看到正常的输出即可。

调用go build

go clone https://github.com/leeight/email.git
cd src/server/v2
ln -s ../../client static
make debug
go run main.go

如果需要发布最终的代码,执行make release即可,最终的产出就是一个独立的二进制文件,所有的资源全部打包进去了。

注意事项

执行make release之前,需要安装edp,执行的命令是npm i -g edp edp-build

过滤器

邮件的过滤器主要是通过filters.json来配置完成的,它放置的位置是data/${domain}/${account}目录下面。例如,假如我配置的账户是leeight@126.com,那么应该放到data/126.com/leeight这个目录下面(这个目录第一次使用的时候应该已经自动生成了)

常见的一个过滤器结构如下:

{
  "name": "邮件列表/w3.org",
  "stop": true,
  "condition": {
    "match": "Any",
    "rules": [
      [ "SentTo", "Contains", "@w3.org" ],
      [ "SentTo", "Contains", "@lists.css-discuss.org" ]
    ]
  },
  "action": {
    "Label": "邮件列表/w3.org"
  }
}
  1. filter.stop类型是bool,如果设置为true,当符合这个过滤器的时候,就不再执行后续的过滤器
  2. filter.condition.match取值范围是Any或者All,注意大小写。
  3. 现在可用的actionLabel, MarkAsRead, MarkAsDelete,后续如果想完善的话,可以直接在src/server/v2/models/action.go里面去实现。
  4. filter.rules里面定义的条件,可以用的 Operator 是Is, Contains, Exists,当然也可以用!Is, !Contains, !Exists表示 Negative 的情况。
  5. filter.rules里面定义的条件,第一个字段可以是Subject,From,To,Cc,SentTo,Body,SubjectOrBody,Date,其它Mail Header

FAQ

为什么不独立一个服务来访问,而是需要使用者自己来安装?

的确是的,独立服务访问会方便很多,但是因为收取和发送邮件都需要用户名和密码,独立服务之后必定要存储这些信息,很有可能会出安全隐患,所以不提供一个独立的服务。

跟 email.baidu.com 有啥区别?

本质功能是一样的,虽然有些功能还没有 email.baidu.com 完善,有些功能比 email.baidu.com 更易用(例如发送和浏览邮件的功能),而且定制性和扩展性更好,希望更多的童鞋参与进来。

为什么有些邮件收取不了呢?

这是因为 POP3 协议的限制,没有文件夹的概念。 如果在服务器上保存了 Outlook 的过滤器,可能会把一些邮件放到 非Inbox 文件夹下面,此时用 POP3 就无法收取了,建议停用所有的过滤器(非删除),这样子就能收取所有的有邮件了。

About

Yet Another Web Mail Client

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published