iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >Node如何接收电子邮件
  • 308
分享到

Node如何接收电子邮件

2024-04-02 19:04:59 308人浏览 安东尼
摘要

这篇文章主要介绍node如何接收电子邮件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!邮件协议在开始这篇文章之前我们首先了解三个协议smtp(Simple Mail Transfer

这篇文章主要介绍node如何接收电子邮件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

邮件协议

在开始这篇文章之前我们首先了解三个协议smtp(Simple Mail Transfer Protocol)简单邮件传输协议,pop3(Post Office Protocol 3)邮局协议第三版本,imap(Internet Mail Access Protocol)internet消息访问协议。

smtp协议

简单邮件传输协议:是一种基于文本的电子邮件传输协议,用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式,是因特网中用于在邮件服务器之间交换邮件的协议。SMTP是一个“推”的协议,它不允许根据需要从远程服务器上“拉”来消息。要做到这点,邮件客户端必须使用POP3或IMAP。所以发送邮件的时候我们需要简单的了解下面的这两种协议。

pop3协议

POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、删除邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的。也就是说POP3协议实际上是下载了一份邮件的副本到本地邮件客户端,而且对本地邮件副本的操作只会影响本地数据。多个邮件客户端里面的邮件的状态可能会不一致。

imap协议

IMAP(Internet消息访问协议)也是提供面向用户的邮件收取服务。常用的版本是IMAP4。与POP3协议类似允许电子邮件客户端下载服务器上的邮件,不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。换句话说,IMAP把远程文件夹当成本地文件夹来操作,它们之间类似于双向同步。这样的好处是,当你在多个邮件客户端看见的邮件的状态是一致的。本次接收邮件我们也使用此协议来实现。

接收邮件测试过程

接收邮件实际上做的是一个邮件客户端的东西,对于底层的实现在npm上有一个写好的第三的库node-imap(node.js的imap客户端模块)这个模块帮助我们封装了很多的底层操作,但是这个模块返回的数据像附件、消息、邮件头等都是未解码的原始数据,所以还需要对数据进行解码,解码的模块在npm上也找到了一个写好的库Mailparser它是一个node高级电子邮件解析器,能够解析即使非常大的数据(100MB+),而且开销相对比较低。

使用imap接收邮件的过程可以用下面一张图表示

Node如何接收电子邮件

 imap接收邮件测试过程

本次测试的大概过程如下

  1. 在pc上登录qq邮箱

  2. 通过qq邮箱发邮件到gamil(不同邮件服务器之间发邮件过程比较复杂,过程略)

  3. 在pc上通过写好的基于imap的程序去拉取gmail的邮件,同时本地的修改(标记邮件,删除邮件)会同步到gmail服务器

安装node第三方包

npm install --save imap mailparser

邮件接收服务器我选择Gmail,发送邮件的服务器使用qq邮箱。

使用qq邮箱发送一封带有附件的邮件

Node如何接收电子邮件

通过程序接收邮件

Node如何接收电子邮件

查看附件保存时否正确

Node如何接收电子邮件

核心代码

var Imap = require('imap')
var MailParser = require("mailparser").MailParser
var fs = require("fs")

var imap = new Imap({
  user: 'yourname@gmail.com', //你的邮箱账号
  passWord: 'yourpassword', //你的邮箱密码
  host: 'imap.gmail.com', //邮箱服务器的主机地址
  port: 993, //邮箱服务器的端口地址
  tls: true, //使用安全传输协议
  tlsOptions: { rejectUnauthorized: false } //禁用对证书有效性的检查
});

function openInbox(cb) {
  imap.openBox('INBOX', true, cb);
}

imap.once('ready', function() {

  openInbox(function(err, box) {

    console.log("打开邮箱")

    if (err) throw err;

    imap.search(['UNSEEN', ['SINCE', 'May 20, 2017']], function(err, results) {//搜寻2017-05-20以后未读的邮件

      if (err) throw err;

      var f = imap.fetch(results, { bodies: '' });//抓取邮件(默认情况下邮件服务器的邮件是未读状态)

      f.on('message', function(msg, seqno) {

        var mailparser = new MailParser();

        msg.on('body', function(stream, info) {

          stream.pipe(mailparser);//将为解析的数据流pipe到mailparser

          //邮件头内容
          mailparser.on("headers", function(headers) {
            console.log("邮件头信息>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
            console.log("邮件主题: " + headers.get('subject'));
            console.log("发件人: " + headers.get('from').text);
            console.log("收件人: " + headers.get('to').text);
          });

          //邮件内容

          mailparser.on("data", function(data) {
            if (data.type === 'text') {//邮件正文
              console.log("邮件内容信息>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
              console.log("邮件内容: " + data.html);
            }
            if (data.type === 'attachment') {//附件
              console.log("邮件附件信息>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
              console.log("附件名称:"+data.filename);//打印附件的名称
              data.content.pipe(fs.createWriteStream(data.filename));//保存附件到当前目录下
              data.release();
            }
          });

        });
        msg.once('end', function() {
          console.log(seqno + '完成');
        });
      });
      f.once('error', function(err) {
        console.log('抓取出现错误: ' + err);
      });
      f.once('end', function() {
        console.log('所有邮件抓取完成!');
        imap.end();
      });
    });
  });
});

imap.once('error', function(err) {
  console.log(err);
});

imap.once('end', function() {
  console.log('关闭邮箱');
});

imap.connect();

默认情况下抓取邮件后邮件服务器的邮件状态为未读,如果要在抓取后让邮箱服务器中的邮件状态变为已读,可以修改

var f = imap.fetch(results, { bodies: '' });

var f = imap.fetch(results, { bodies: '', markSeen: true });

以上是“Node如何接收电子邮件”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网html频道!

--结束END--

本文标题: Node如何接收电子邮件

本文链接: https://www.lsjlt.com/news/74043.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Node如何接收电子邮件
    这篇文章主要介绍Node如何接收电子邮件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!邮件协议在开始这篇文章之前我们首先了解三个协议smtp(Simple Mail Transfer...
    99+
    2024-04-02
  • 用Python实现电子邮件接收程序(PO
    从网络上摘抄的代码: import poplib # 输入邮件地址, 口令和POP3服务器地址: email = raw_input('Email: ') password = raw_input('Password: ') p...
    99+
    2023-01-31
    电子邮件 程序 Python
  • 如何使用 PHP 内置函数发送和接收电子邮件?
    php 内置函数提供了发送和接收电子邮件的功能。发送电子邮件需指定收件人、邮件主题、邮件内容和首部信息,使用 mail() 函数发送。接收电子邮件需打开邮箱连接,获取消息,并使用 pop...
    99+
    2024-04-22
    php 电子邮件
  • 基于Java实现收发电子邮件功能
    目录前言邮件协议1.首先在邮箱中开启此服务2.在Java中进行邮件的发送(邮件只包含文本)3.在Java中进行邮件的发送(邮件包含文本和附件(图片))前言 Email就是电子邮件,我...
    99+
    2024-04-02
  • 如何使用 PHP 发送电子邮件?
    在 php 中使用 swift mailer 发送电子邮件,需要安装 swift mailer、配置 smtp 服务器、创建邮件消息、创建邮件发送器,最后发送邮件。具体步骤包括:安装 s...
    99+
    2024-04-20
    php 发送电子邮件 composer
  • 如何使用 PHP 发送电子邮件?
    在 php 中使用 swift mailer 发送电子邮件,需要安装 swift mailer、配置 smtp 服务器、创建邮件消息、创建邮件发送器,最后发送邮件。具体步骤包括:安装 s...
    99+
    2024-04-20
    php 发送电子邮件 composer
  • 如何在 Seleniumbase 中点击 gmail 收件箱中的第一封电子邮件?
    问题内容 我试图从html中获取id以便像xpath一样传递它,但是这个id与chrome中的不一样 绝对路径不合适,因为它总是不同的。请帮忙:( 正确答案 据我所知,只有一个 元...
    99+
    2024-02-08
  • win7如何关联电子邮件程序
    为了关联电子邮件程序,你可以按照以下步骤进行操作:1. 打开控制面板:点击Windows开始按钮,然后选择“控制面板”。2. 在控制...
    99+
    2023-09-11
    win7
  • Linux下如何给电子邮件加密
    这篇文章主要介绍“Linux下如何给电子邮件加密”,在日常操作中,相信很多人在Linux下如何给电子邮件加密问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux下如何给电子邮件加密”的疑惑有所帮助!接下来...
    99+
    2023-06-13
  • 在MacOSX邮件中设置电子邮件
    在MacOSX上设置电子邮件账户非常简单。下面是一些步骤可以帮助你完成设置:1. 打开"邮件"应用程序。它通常位于你的"应用程序"文...
    99+
    2023-09-13
    Mac
  • 在Windows中如何创建电子邮件别名发送邮件
    第1步 打开Windows Mail和点击“工具”命令。点击“电子邮件地址要使用到的地址框中,点击“确定”,然后点击“关闭”以完成。 ...
    99+
    2023-05-31
    Windows 电子邮件别名 发送邮件 邮件 电子邮件
  • html5如何实现电子邮件输入框
    这篇文章主要介绍了html5如何实现电子邮件输入框,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。电子邮件输入框HMTL 5中新增了一个输入框的电子邮件属性,可以检测输入的内容...
    99+
    2023-06-27
  • 用 Python 发电子邮件
    本文首发于【红叶枫啦】微信公号,未经允许,不得转载。 这个程序涉及两个库:smtplib 和 email。 这两个库都是Python自带的,所以不需要额外的下载安装,此外,这次使用的Python版本为2.7。 总体思路很简...
    99+
    2023-01-31
    电子邮件 Python
  • python3 发送电子邮件
    使用python3发送电子邮件,我之前在网上找了好几篇文章不论是都不行,最后在网上找到这篇文章了!首先在163邮箱开启授权码记住这个授权密码,我们在python代码里面用的就是这个密码不然会出现这个报错#!/usr/bin/env pyth...
    99+
    2023-01-31
    发送电子邮件
  • Dreamweaver网页中如何添加电子邮箱链接
    这篇文章将为大家详细讲解有关Dreamweaver网页中如何添加电子邮箱链接,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。方法如下点击桌面上的程序图标,进入程序。在创建新项目上,选择【html】选中文本,...
    99+
    2023-06-08
  • Java Mail电子邮件安全实践:保护电子邮件免受威胁
    Java Mail电子邮件安全实践 加密电子邮件 加密电子邮件是保护电子邮件安全的最有效方法之一。Java Mail提供了多种加密算法,我们可以使用这些算法对电子邮件进行加密。例如,我们可以使用以下代码对电子邮件进行加密: import ...
    99+
    2024-02-05
    电子邮件安全 实践 网络安全 网络钓鱼 垃圾邮件 病毒
  • Java Mail电子邮件自动处理:实现电子邮件自动化管理
    Java Mail电子邮件自动处理概述 Java Mail电子邮件自动处理是一个强大且灵活的框架,可用于处理和管理电子邮件。它提供了对电子邮件协议(如SMTP、POP3和IMAP)的访问,以及丰富的功能,例如电子邮件解析、附件处理和错误...
    99+
    2024-02-05
    Java Mail 电子邮件自动化 SMTP POP3 IMAP
  • 如何使用asp.net c#向outlook发送电子邮件
    您可以使用以下代码片段来使用ASP.NET C#向Outlook发送电子邮件:```csharpusing Microsoft.Of...
    99+
    2023-09-27
    ASP.NET
  • 如何利用yii 2框架发送电子邮件
    小编给大家分享一下如何利用yii 2框架发送电子邮件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!利用yii 2框架发送电子邮件,具体步骤如下所示:config/...
    99+
    2023-06-06
  • PHP学习笔记:电子邮件与邮件系统
    在当今的互联网时代,电子邮件是人们交流、传递信息的一种重要方式。而在网站开发中,也经常会遇到需要使用电子邮件功能的情况,例如用户注册、找回密码等。本篇文章将通过具体的代码示例,介绍如何利用PHP实现电子邮件功能以及常见的邮件系统操作。一、发...
    99+
    2023-10-21
    系统 PHP 邮件
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作