node开发邮件系统总结

2020-12-07 15:04:03

node 开发一个邮件系统需要用到的东西

参考连接 利用electron-vue技术实现一个邮箱客户端应用的项目总结


1.electron-vue是利用Chromium浏览器、vue-cli脚手架和nodejs来实现跨平台的桌面应用程序
    使用electron-packager或electron-builder打包应用程序,electron-packager打包方式比较简单,想为哪个平台打包,
    执行相应命令即可;electron-builder,自动化部署,持续集成,只要监测github上绑定的代码仓库发生了变化,即可打包发布。

2.读取邮件的方式

    smtp协议:是一种基于文本的电子邮件传输协议,只能用于邮件服务器之间交换邮件。
    pop3协议:允许电子邮件客户端下载服务器上的邮件,但不是一个同步的操作,它只是下载了服务器邮件的一个副本,因此服务器上邮件有其他操作时,不会同步到客户端。
    imap协议:与pop3协议类似,都允许客户端来下载,但它是一个同步的过程,服务器端有了更改,同时客户端也会有相应的改变。
   smtp用来发送邮件,pop3和imap都用来接收邮件

3.接收邮件 --- node-imap是一个 node.js版本的IMAP客户端模块

    详情请查看网址:http://www.8dou5che.com/2018/03/23/node-imap/

4.解析邮件的编码方式:

   (1)、iconv-lite实现编码的转换,因为node只支持utf-8,没有提供原生转码的方式,故必须利用该模块,
           转换为GBK编码
 (2)、content-type的分类:
       i、text,主要有text/html和text/plain,内容需要用Content-Transfer-Encoding解码,常见传输编码为base64和quoted-printable
       ii、multipart,又分为mixed、alternative和related。
             mixed是有附件的类型
             alternative是纯文本和超文本同时存在的类型
             related是资源内嵌类型,如内容为html,但html里有图片,把图片提取出来以附件形式发送

          因为multipart这种形式比较复杂,因此要利用boundary分割符,将邮件体分割成不同段来进行解析,boundary分为父段和子段,父段一般出现0次或1次,出现在末尾,每个子段中也有content-type和boundary,需要在进行解析,如果遇到i,iii里面的情况可直接解析,如果遇到ii中的情况,再按ii中的步骤进行解析
        iii、image、application,一般是出现在附件中的格式
    (3)、quoted-printable可译为"可打印字符引用编码",其编码方法为:
          i、任何一个8位的字节值都可以编码为3个字符:=后跟随两个十六进制数字(0-9或A-F)
          ii、所有可打印ASCII字符(十进制范围为33到126)都可用ASCII字符编码来直接表示,但'='只能表示为'=3D'
          iii、tab与空格符的十进制为9和32,如果不出现在行尾则可以用其ASCII编码直接表示,如果这两个字符出现在行尾,则必须按照QP的编码要求,表示为'=09'和'=20'
          iv、QP的编码数据每行长度不能超过76个字符,因此在每行末尾加上一个'='表示结束
     (4)、base64编码方式:
         i、base64利用64个可打印字符来表示二进制数据(A-Za-z0-9+/)
         ii、将索引转换为对应的二进制数据需要6个bit,而ASCII码需要8个bit来表示,但是4*6个bit可以存储3*8个bit,将其转换为对应的6个bit
         iii、在6个bit的高位补0,变成8个bit,转换成对应的base64字符
         iv、如果不是对应的倍数时,就用0补齐,变成8个bit,表示成对应的base64编码,如果8个bit都为0则表示为=

5.发送邮件 --- nodemailer

   详情请查看网址:https://segmentfault.com/a/1190000011045384

6.注意事项

  在登录时必须在邮箱中开启pop3或imap服务,使用授权码登录,而不是使用你的邮箱密码登录

  使用qq邮箱时直接使用授权码登录即可,但是用网易邮箱有限制。使用网易邮箱登录第三方客户端时,由于网易邮箱的限制,无法登录第三方客户端,只能使用如下网址:http://config.mail.163.com/settings/imap/login.jsp?uid=lw140912@163.com,且使用该网址时要先先注册一个带字母的163邮箱,不能使用手机号注册的163邮箱,否则该网站对这个邮箱不识别


  • 2018-11-18 09:06:06

    Android子线程中更新UI的3种方法

    UI的更新必须在主线程中完成,所以不管上述那种方法,都是将更新UI的消息发送到了主线程的消息对象,让主线程做处理。

  • 2018-11-19 15:10:23

    nodemailer的使用,nodejs发送邮件

    前段时间有个很普通的项目需要发邮件的功能,而且是刚开始学nodejs,所以只是搜索了下用什么好的库能实现,就找到了nodemailer了。这篇文章主要是记录一下使用的过程和经验。

  • 2018-11-21 09:07:37

    Android为每个应用分配多少内存?

    熟悉Android内存分配机制的朋友都知道,Android为每个进程分配内存时,采用弹性的分配方式,即刚开始并不会给应用分配很多的内存,而是给每一个进程分配一个“够用”的内存大小。

  • 2018-11-22 21:13:28

    webview之独立进程

    app内存占用大,被系统回收的概率就高,当每次把app切到后台再回到app时,可能每次app都会重启,最常见的是activity或fragment被回收了,导致fragment使用activity的数据时,出现NullPointerException。内存占用大,app越不稳定。运行性能差。webview加载页面后会占用更多的内存,从而导致app内存占用大,最终导致出现以上问题。

  • 2018-11-22 21:14:34

    为什么要采用WebView独立进程

    App中大量Web页面的使用容易导致App内存占用巨大,存在内存泄露,崩溃率高等问题,WebView独立进程的使用是解决Android WebView相关问题的一个合理的方案。

  • 2018-11-22 21:15:45

    Android WebView: 性能优化不得不说的事

    Mo说:大家通过前两篇文章想必都能顺利的 get 到 WebView 与 JavaScript 交互的技能了。现在 App 嵌入 H5 页面已经是稀松平常的事情了,开发者要面对 WebView 也越来越多的爆发出来,比如页面加载慢,内存泄露,不同 Android 系统版本采用了不同内核的兼容问题等等。 所以当我们使用了 WebView 这个组件的时候,性能优化的事情就不能不提上议程了。这篇文章我们就针对上述问题来总结下 Android WebView 性能优化的常见方法。 作者:MoTalksCn_林墨 链接:https://www.jianshu.com/p/95d4d73be3d1 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 2018-11-22 21:20:04

    WebView内存泄漏--解决方法小结

    Android混合开发时经常用到WebView加载html等页面,而WebView的内存泄漏就是最经常遇到的问题,尤其是当项目中需要用webview加载的页面比较多时。 即使当我退出页面时在我的BrowserActivity的onDestroy()方法中进行内存占用回收(如下图)但并没有效果:

  • 2018-11-23 09:19:27

    论索引的重要性

    我还有什么能说的呢,看来索引基本能解决一切慢sql。好开心。