• [转]emailjs-smtp-client


    本文转自:https://github.com/emailjs/emailjs-smtp-client/blob/master/README.md

    SMTP Client

    SMTP Client allows you to connect to and stream data to a SMTP server in the browser.

    Build Status

    StringEncoding API

    This module requires TextEncoder and TextDecoder to exist as part of the StringEncoding API (see: MDN whatwg.org). Firefox 19+ is basically the only browser that supports this at the time of writing, while Chromium in canary, not stable. Luckily, there is a polyfill!

    Depending on your browser, you might need this polyfill for ArrayBuffer #slice, e.g. phantomjs.

    TCPSocket API

    There is a shim that brings Mozilla-flavored version of the Raw Socket API to other platforms.

    If you are on a platform that uses forge instead of a native TLS implementation (e.g. chrome.socket), you have to set the .oncert(pemEncodedCertificate) handler that passes the TLS certificate that the server presents. It can be used on a trust-on-first-use basis for subsequent connection.

    If forge is used to handle TLS traffic, you may choose to handle the TLS-related load in a Web Worker. Please use tlsWorkerPath to point to tcp-socket-tls-worker.js!

    Please take a look at the tcp-socket documentation for more information!

    Installation

    npm:

    npm install --save emailjs-smtp-client
    

    Quirks

    • STARTTLS is currently not supported
    • Only PLAINUSER and XOAUTH2 authentication mechanisms are supported. XOAUTH2 expects a ready to use access token, no tokens are generated automatically.

    Usage

    AMD

    Require emailjs-smtp-client.js as emailjs-smtp-client

    Global context

    Include files emailjs-smtp-client-response-parser.js and emailjs-smtp-client.js on the page.

    <script src="emailjs-smtp-client-response-parser.js"></script>
    <script src="emailjs-smtp-client.js"></script>

    This exposes global variable emailjs-smtp-client

    API

    Create SmtpClient object with:

    var client = new SmtpClient(host, port, options)

    where

    • host is the hostname to connect to (defaults to "localhost")
    • port is the port to connect to
    • options is an optional options object (see below)

    Connection options

    The following connection options can be used with simplesmtp.connect:

    • useSecureTransport Boolean Set to true, to use encrypted connection
    • name String Client hostname for introducing itself to the server
    • auth Object Authentication options. Depends on the preferred authentication method
      • user is the username for the user (also applies to OAuth2)
      • pass is the password for the user if plain auth is used
      • xoauth2 is the OAuth2 access token to be used instead of password. If both password and xoauth2 token are set, the token is preferred.
    • authMethod String Force specific authentication method (eg. "PLAIN" for using AUTH PLAIN or "XOAUTH2" for AUTH XOAUTH2)
    • ca (optional) (only in conjunction with this TCPSocket shim) if you use TLS with forge, pin a PEM-encoded certificate as a string. Please refer to the tcp-socket documentation for more information!
    • tlsWorkerPath (optional) (only in conjunction with this TCPSocket shim) if you use TLS with forge, this path indicates where the file for the TLS Web Worker is located. Please refer to the tcp-socket documentation for more information!
    • disableEscaping Boolean If set to true, do not escape dots on the beginning of the lines
    • logLength Number How many messages between the client and the server to log. Set to false to disable logging. Defaults to 6
    • ignoreTLS – if set to true, do not issue STARTTLS even if the server supports it
    • requireTLS – if set to true, always use STARTTLS before authentication even if the host does not advertise it. If STARTTLS fails, do not try to authenticate the user
    • lmtp - if set to true use LMTP commands instead of SMTP commands

    Default STARTTLS support is opportunistic – if the server advertises STARTTLS in EHLO response, the client tries to use it. If STARTTLS is not advertised, the clients sends passwords in the plain. You can use ignoreTLS and requireTLS to change this behavior by explicitly enabling or disabling STARTTLS usage.

    XOAUTH2

    To authenticate using XOAUTH2, use the following authentication config

    var config = {
        auth: {
          user: 'username',
          xoauth2: 'access_token'
      }
    };

    See XOAUTH2 docs for more info.

    Connection events

    Once a connection is set up the following events can be listened to:

    • onidle - the connection to the SMTP server has been successfully set up and the client is waiting for an envelope. NB! this event is emitted multiple times - if an e-mail has been sent and the client has nothing to do, onidle is emitted again.
    • onready (failedRecipients) - the envelope is passed successfully to the server and a message stream can be started. The argument is an array of e-mail addresses not accepted as recipients by the server. If none of the recipient addresses is accepted, onerror is emitted instead.
    • ondone (success) - the message was sent
    • onerror (err) - An error occurred. The connection will be closed shortly afterwards, so expect an onclose event as well
    • onclose (isError) - connection to the client is closed. If isError is true, the connection is closed because of an error

    Example:

    client.onidle = function(){
        console.log("Connection has been established");
        // this event will be called again once a message has been sent
        // so do not just initiate a new message here, as infinite loops might occur
    }

    Sending an envelope

    When an onidle event is emitted, an envelope object can be sent to the server. This includes a string from and a single string or an array of strings for to property.

    Envelope can be sent with client.useEnvelope(envelope)

    // run only once as 'idle' is emitted again after message delivery
    var alreadySending = false;
    
    client.onidle = function(){
        if(alreadySending){
            return;
        }
        alreadySending = true;
        client.useEnvelope({
            from: "me@example.com",
            to: ["receiver1@example.com", "receiver2@example.com"]
        });
    }

    The to part of the envelope must include all recipients from To:Cc: and Bcc: fields.

    If envelope setup up fails, an error is emitted. If only some (not all) recipients are not accepted, the mail can still be sent. An onready event is emitted when the server has accepted the from and at least one to address.

    client.onready = function(failedRecipients){
        if(failedRecipients.length){
            console.log("The following addresses were rejected: ", failedRecipients);
        }
        // start transfering the e-mail
    }

    Sending a message

    When onready event is emitted, it is possible to start sending mail. To do this you can send the message with client.sendcalls (you also need to call client.end() once the message is completed).

    send method returns the state of the downstream buffer - if it returns true, it is safe to send more data, otherwise you should (but don't have to) wait for the ondrain event before you send more data.

    NB! you do not have to escape the dots in the beginning of the lines by yourself (unless you specificly define so with disableEscaping option).

    client.onready = function(){
        client.send("Subject: test
    ");
        client.send("
    ");
        client.send("Message body");
        client.end();
    }

    Once the message is delivered an ondone event is emitted. The event has an parameter which indicates if the message was accepted by the server (true) or not (false).

    client.ondone = function(success){
        if(success){
            console.log("The message was transmitted successfully with "+response);
        }
    }
    

    Logging

    At any time you can access the traffic log between the client and the server from the client.log array.

    client.ondone = function(success){
        // show the last message
        console.log(client.log.slice(-1));
    }

    Closing the connection

    Once you have done sending messages and do not want to keep the connection open, you can gracefully close the connection with client.quit() or non-gracefully (if you just want to shut down the connection and do not care for the server) with client.close().

    If you run quit or close in the ondone event, then the next onidle is never called.

    Get your hands dirty

    git clone git@github.com:whiteout-io/smtpclient.git
    cd smtpclient
    npm install && npm test
    

    To run the integration tests against a local smtp server

    grunt smtp
    add the test folder as a chrome app (chrome settings -> extensions -> check 'developer mode' -> load unpacked extension)
  • 相关阅读:
    使用360安全卫士在线对本机电脑进行重装系统
    分享个人电脑上的文件
    Docker初探之运行RabbitMQ消息队列服务
    Docker初探之运行MySQL
    Docker初探之常用命令实践
    Docker初探之Windows篇
    SignalR入门之多平台SignalR服务端
    SignalR入门之从外部访问持久性连接或Hub
    SignalR入门之Hub
    SignalR入门之小试身手
  • 原文地址:https://www.cnblogs.com/freeliver54/p/7068919.html
Copyright © 2020-2023  润新知