Skip to content

e2a: add E2A Email plugin 0.0.1 - #2846

Merged
crazywoola merged 4 commits into
langgenius:mainfrom
jiashuoz:codex/add-e2a-email-plugin
Aug 10, 2026
Merged

e2a: add E2A Email plugin 0.0.1#2846
crazywoola merged 4 commits into
langgenius:mainfrom
jiashuoz:codex/add-e2a-email-plugin

Conversation

@jiashuoz

@jiashuoz jiashuoz commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Plugin Submission

Plugin information

Submission type

  • New plugin
  • Version update

What changed

Adds an E2A Email tool plugin for Dify. An agent-scoped API key binds the
plugin to one authenticated inbox and exposes five bounded operations:
whoami, list_messages, get_message, send_message, and
reply_to_message. Replies use the source message endpoint to preserve
email threading, and human-review holds are returned as successful held
outcomes that must not be resent.

Risk level

  • Low risk
  • Medium risk
  • High risk

The plugin processes email addresses and message content and can send or reply
to email through the fixed https://api.e2a.dev API.

Required checks

  • I have read and followed the Marketplace submission requirements.
  • I have read and comply with the Plugin Developer Agreement.
  • I tested this plugin on Dify Community Edition and Dify Cloud, or documented any limitation below.
  • The package contains only files needed at runtime.
  • The package does not contain secrets, local credentials, .env files, .git directories, virtual environments, caches, logs, or IDE files.
  • The package does not contain executables or bundled binaries, or I explained why they are required below.
  • The plugin README includes setup steps, usage instructions, required APIs or credentials, connection requirements, and the source repository link.
  • The plugin includes PRIVACY.md or a hosted privacy policy, and manifest.yaml references it.
  • All user-facing text is primarily in English, with any localized README files following the i18n guidance.

Security and privacy notes

The plugin handles email addresses, message content, and an agent-scoped API
credential. It can send new email and threaded replies. It sends data only to
the fixed documented E2A HTTPS API, accepts no arbitrary URL, executes no code
or commands, performs no filesystem operations, and stores no plugin data.
Credentials and server response bodies are excluded from error messages.

Local validation

  • pytest -q: 36 passed.
  • Dify Marketplace local DIFYPKG validator: zero blocking or environment
    failures. It reports one non-blocking static-analysis warning category from
    generic keyword checks; review found those matches to be false positives in
    declarative plugin metadata and bounded request code.
  • Package contents, secrets, binaries, manifest, README, dependencies, Python
    compilation, safety, and prohibited-financial-activity checks passed.

Reviewer notes

The plugin was not installed against Dify Community Edition or Dify Cloud in
this environment. Tool/provider wiring is covered with the official
dify-plugin runtime package and mocked HTTP-boundary tests. No live E2A send
was attempted because that would require production credentials and external
side effects.

The Plugin Developer Agreement checkbox remains open for the human contributor
to confirm before this draft is marked ready for review.

@github-actions github-actions Bot added the risk: medium Medium-risk Marketplace submission label Aug 9, 2026
crazywoola
crazywoola previously approved these changes Aug 10, 2026

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM

Decision: Approve

Local Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=2675, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ✅ Pass icon exists: _assets/icon.svg None.
Version check ✅ Pass version 0.0.1 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=2054, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ✅ Pass dify_plugin version 0.10.1 satisfies >= 0.9.0. None.
Install test ✅ Pass plugin install test passed. None.
Packaging test ✅ Pass packaging check passed. None.

@jiashuoz
jiashuoz marked this pull request as ready for review August 10, 2026 03:23
@crazywoola
crazywoola dismissed their stale review August 10, 2026 09:56

Superseded by a fresh full review of all open PRs on 2026-08-10.

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM

Decision: Approve

Local Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=2675, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ✅ Pass icon exists: _assets/icon.svg None.
Version check ✅ Pass version 0.0.1 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=2054, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ✅ Pass dify_plugin version 0.10.2 satisfies >= 0.9.0. None.
Install test ✅ Pass plugin install test passed. None.
Packaging test ✅ Pass packaging check passed. None.

@crazywoola
crazywoola merged commit f04c5e6 into langgenius:main Aug 10, 2026
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk: medium Medium-risk Marketplace submission

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants