#clipboard #send-email #future #parser #async #web-page #page-content

bin+lib enqueue-email

通过电子邮件发送书签,将其加入 MSMTP 队列

1 个不稳定版本

0.1.0 2020 年 8 月 14 日

#1520解析实现

Apache-2.0 OR MIT

87KB
1.5K SLoC

Enqueue Email (ɪnˈkjuː)

test status security audit continuous integration test coverage linting license

目录

描述

这是一个 CLI 工具和库,它以各种方式接受 URL,检索 HTML 页面标题,并创建、排队和发送带有该 URL 和标题的电子邮件。

背景

为了将电子邮件地址(或邮件列表)用作“书签系统”,或者简单地满足一个强迫症档案管理员的渴望。

免责声明:该项目几乎对除了其作者以外的任何人都没有什么用处。因此,它应该被认为是一个玩具项目。

功能

  • 从命令行选项或读取当前剪贴板获取输入。
  • 可通过环境变量进行配置。
  • 可以排队电子邮件或触发每个调用的排队。

参考文献》文档对使用的库、技术文档和实现给出了适当的认可。

待办事项列表和计划

查看 TODO 文件以了解当前和未来的开发、想法和功能概述。

先决条件

  • 具有运行 X Window System 服务器的类 Unix 操作系统,用于读取系统剪贴板。
  • 网络连接打开,允许 HTTPS、DNS 和 SMTP 流量,以解析 URL、检索页面内容并发送电子邮件。
  • msmtp "msmtp - SMTP 客户端" (marlam.de/msmtp) 已安装并配置。
    msmtp version 1.8.3
    Platform: x86_64-pc-linux-gnu
    TLS/SSL library: GnuTLS
    Authentication library: GNU SASL
    Supported authentication methods:
    plain scram-sha-1 external gssapi cram-md5 digest-md5 login ntlm
    IDN support: enabled
    NLS: enabled, LOCALEDIR is /usr/share/locale
    Keyring support: none
    System configuration file name: /etc/msmtprc
    
  • msmtpqmsmtp-queue 都可在 $PATH 中使用。
    ##  msmtpq : queue funtions to both use & manage the msmtp queue,
    ##             as it was defined by Martin Lambers
    ##  Copyright (C) 2008 - 2015 Chris Gianniotis
    
    ## msmtp-queue : wrapper script for msmtpq
    ##               to expose the management functions
    ##               for the msmtp queue
    ##  Copyright (C) 2011 Chris Gianniotis
    
  • 对目录 $HOME/.msmtp.queue/ 的可写访问权限,以保存排队的电子邮件为生成的文件的配对
    $ file $HOME/.msmtp.queue/*
    /home/user/.msmtp.queue/1595792128.mail:  news or mail, ASCII text
    /home/user/.msmtp.queue/1595792128.msmtp: ASCII text
    
  • 构建项目:Rust 和 Cargo "2018" 版本。

使用方法

从 CLI --帮助

enqueue-email 0.1.0
EnqueueEmail

Pass an URL using one of the options available (clipboard, full URL or a
combination of the URL parts, and enqueue an email, ready to be spooled
by msmtp-queue.

SETUP:

The following environment variables are required:

ENQUEUE_MAIL_FROM, ENQUEUE_MAIL_TO, ENQUEUE_MAIL_CC [optional], ENQUEUE_MAIL_FCC [in the format "provider/folder"]

USAGE:
    enqueue-email [FLAGS] [OPTIONS]

FLAGS:
    -c, --clipboard
            Use the URL currently on the top of the Clipboard. This option disables all the other defined options

        --help
            Prints help information

    -r, --run
            Run msmt-queue and flush all mail currently in queue. This wraps the command 'msmtp-queue -r'

    -V, --version
            Prints version information


OPTIONS:
        --cafile <cafile>
            A file with a certificate authority chain, allows to connect to certificate authories not included in the
            default set
    -d, --domain <domain>
            The domain to connect to. This may be different from the host!

    -f, --fragment <fragment>
            An optional fragment component preceded by a hash (#)

    -h, --host <host>
            The host to connect to

    -t, --path <path>
            The path component in the URI. This follows the definitions of RFC2396 and RFC3986
            (https://en.wikipedia.org/wiki/Uniform_Resource_Identifier) [default: /]
    -p, --port <port>
            The port to connect to [default: 443]

    -q, --query <query>
            An optional query component preceded by a question mark (?), containing a query string of non-hierarchical
            data
    -s, --scheme <scheme>
            The scheme protocol of the URI [default: https]

    -u, --url <url>
            The URL to bookmark and enqueue. This excludes scheme, host, port and domain. This option has the priority
            over the Clipboard

示例

让我们展示一些示例,从空的 SMTP 队列开始

$ msmtp-queue

  no mail in queue

所有示例都是在环境变量 RUST_LOG 设置为 INFO 级别的情况下运行的,以便显示欣赏结果所需的最小输出。

让我们打印剪贴板的内容,并将具有相同内容和关联网页标题的电子邮件入队

$ echo "$(xclip -o --selection clipboard)"
https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol

$ RUST_LOG=INFO enqueue-email --clipboard
[2020-07-27T20:56:55Z INFO  enqueue_email] page title: Simple Mail Transfer Protocol - Wikipedia

还有两种其他选项可以用来保存和入队链接:明确地使用完整且格式良好的 URL (--url) 或使用其组件的组合(例如,--host--path)。

$ RUST_LOG=INFO enqueue-email --url https://wikipedia.org/wiki/Unix
[2020-07-27T20:57:58Z INFO  enqueue_email] page title: Unix - Wikipedia

$ RUST_LOG=INFO enqueue-email --host en.wikipedia.org --path /wiki/Free_and_open-source_software
[2020-07-27T20:59:49Z INFO  enqueue_email] page title: Free and open-source software - Wikipedia

此时期望的结果是在本地队列中有 3 条消息

$ msmtp-queue

  mail  num=[ 1 ]  id=[ 1595883415 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Simple Mail Transfer Protocol - Wikipedia

  mail  num=[ 2 ]  id=[ 1595883478 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Unix - Wikipedia

  mail  num=[ 3 ]  id=[ 1595883589 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Free and open-source software - Wikipedia

当我们将满意时,可以直接使用 msmtp-queue 工具发送特定电子邮件(-R)或发送所有(-r

$ msmtp-queue -R

  mail  num=[ 1 ]  id=[ 1595883415 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Simple Mail Transfer Protocol - Wikipedia

  mail  num=[ 2 ]  id=[ 1595883478 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Unix - Wikipedia

  mail  num=[ 3 ]  id=[ 1595883589 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Free and open-source software - Wikipedia

  enter mail number or id to send
    ( <cr> alone to exit ) ..: 1

  send :
    mail num=[ 1 ]
          id=[ 1595883415 ]

  ok [Y/n] ..:
  mail [ 1 ] [ 1595883415 ] from queue ; send was successful ; purged from queue

  --------------------------------------------------

  mail  num=[ 1 ]  id=[ 1595883478 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Unix - Wikipedia

  mail  num=[ 2 ]  id=[ 1595883589 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Free and open-source software - Wikipedia

  enter mail number or id to send
    ( <cr> alone to exit ) ..:
$ msmtp-queue -r
  mail [ 1 ] [ 1595883478 ] from queue ; send was successful ; purged from queue
  mail [ 2 ] [ 1595883589 ] from queue ; send was successful ; purged from queue

如果您想立即从 enqueue-email 触发投递,可以在其中添加 --run 选项来触发 msmtp-queue

  -r     run (flush) mail queue - all mail in queue

最后一个示例展示了 --run 选项。重要的是要注意,使用 --run 将触发邮件队列的刷新,包括所有等待的消息,而不仅仅是队列中的最后一条。

$ RUST_LOG=INFO enqueue-email --url https://en.wikipedia.org/wiki/Email --run
[2020-07-27T21:02:52Z INFO  enqueue_email] page title: Email - Wikipedia
  mail [ 1 ] [ 1595883772 ] from queue ; send was successful ; purged from queue

限制

  • 仅支持 HTTPS。
  • 标题提取仅在存在 HTML 标题标签(<title>...</title>)时才有效;动态生成的页面可能没有标题。
  • 主机解析将不超过 10 个 HTTP 重定向(3**)响应。

配置

所有配置都应从环境变量中获取。这些选项控制消息格式中的头部,如 消息格式 所定义,在 RFC-3864 中。

  • ENQUEUE_MAIL_FROM:From:电子邮件地址,以及作者(们)的姓名(可选)。
  • ENQUEUE_MAIL_TO:电子邮件地址(们),以及消息接收者(们)的姓名(可选)。指示主要接收者(允许多个),对于次要接收者,请参阅下面的 Cc:
  • ENQUEUE_MAIL_CC:抄送;许多电子邮件客户端根据它们是否在 To: 或 Cc: 列表中而以不同的方式标记收件箱中的电子邮件。
  • ENQUEUE_MAIL_FCC:要附加发送消息副本的文件名(来自 Emacs 邮件头)。
  • ENQUEUE_MAIL_ACCOUNT:格式为 "provider/folder"。

可选地,可以使用 RUST_LOG 调整在 STDOUT 中记录的消息。

构建和安装

项目分为库(enqueuemail)和二进制文件(enqueue-email)。

应该使用 Cargo 来方便地构建和安装;这里引用了 cargo-buildcargo-install

$ rustup toolchain install --profile default --allow-downgrade --component cargo,clippy,rustfmt,rust-docs,rust-src nightly
$ cargo build
$ cargo fmt
$ cargo clippy
...

Cargo 功能

  • live-tests:使用此功能启用测试套件的一个子集,该测试套件需要互联网连接(用于 URL 主机解析)并运行测试覆盖率的完整计算。它对 tests 模块之外没有其他影响。

开发

本项目的开发过程中应始终考虑的一些知名/最佳实践已在CONTRIBUTING文档中介绍。

许可

许可证为以下之一

您可自行选择。

贡献

除非您明确声明,否则您有意提交以包含在本作品中的任何贡献,根据Apache-2.0许可证定义,均应双许可如上,不附加任何额外条款或条件。

依赖关系

~23–35MB
~668K SLoC