All Projects → TheFox → smtpd

TheFox / smtpd

Licence: MIT license
SMTP server (library) for receiving emails, written in pure PHP.

Programming Languages

PHP
23972 projects - #3 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to smtpd

blackhole
Blackhole is an MTA written on top of asyncio, utilising async and await statements that dumps all mail it receives to /dev/null.
Stars: ✭ 61 (-35.11%)
Mutual labels:  smtp, smtp-server, smtpd
Aiosmtpd
A reimplementation of the Python stdlib smtpd.py based on asyncio.
Stars: ✭ 195 (+107.45%)
Mutual labels:  smtp, smtp-server
Smtpd
A Lightweight High Performance ESMTP email server
Stars: ✭ 175 (+86.17%)
Mutual labels:  smtp, smtp-server
go-smtp-mock
SMTP mock server written on Golang. Mimic any 📤 SMTP server behavior for your test environment with fake SMTP server.
Stars: ✭ 76 (-19.15%)
Mutual labels:  smtp, smtp-server
Go Guerrilla
Mini SMTP server written in golang
Stars: ✭ 2,173 (+2211.7%)
Mutual labels:  smtp, smtp-server
Docker Postfix
Simple SMTP server / postfix null relay host for your Docker and Kubernetes containers. Based on Alpine Linux.
Stars: ✭ 163 (+73.4%)
Mutual labels:  smtp, smtp-server
Tmail
Golang SMTP server
Stars: ✭ 251 (+167.02%)
Mutual labels:  smtp, smtp-server
Mailslurper
Local, web-based mail server application. Slurp mails into oblivion!
Stars: ✭ 920 (+878.72%)
Mutual labels:  smtp, smtp-server
MailDemon
Smtp server for mass emailing, managing email lists and more. Built on .NET Core. Linux, MAC and Windows compatible.
Stars: ✭ 113 (+20.21%)
Mutual labels:  smtp, smtp-server
enough mail
IMAP, POP3 and SMTP clients for Dart developers. Contains both low level as well as a high level API.
Stars: ✭ 78 (-17.02%)
Mutual labels:  smtp, smtp-library
SimpleKotlinMail
A simple, coroutine based Kotlin Email API for both client- and server-side projects
Stars: ✭ 56 (-40.43%)
Mutual labels:  smtp, smtp-server
Papercut Smtp
Papercut SMTP -- The Simple Desktop Email Server
Stars: ✭ 2,094 (+2127.66%)
Mutual labels:  smtp, smtp-server
Netdumbster
netDumbster is a .Net Fake SMTP Server clone of the popular Dumbster
Stars: ✭ 88 (-6.38%)
Mutual labels:  smtp, smtp-server
Mailproxy
mailproxy is a simple SMTP proxy. It receives emails through an unencrypted, unauthenticated SMTP interface and retransmits them through a remote SMTP server that requires modern features such as encryption and/or authentication. mailproxy is primarily useful for enabling email functionality in legacy software that only supports plain SMTP.
Stars: ✭ 170 (+80.85%)
Mutual labels:  smtp, smtp-server
Sendria
Sendria (formerly MailTrap) is a SMTP server designed to run in your dev/test environment, that is designed to catch any email you or your application is sending, and display it in a web interface instead of sending to real world.
Stars: ✭ 30 (-68.09%)
Mutual labels:  smtp, smtp-server
Magento 2 Smtp
Magento 2 SMTP Extension helps the owner of store simply install SMTP (Simple Mail Transfer Protocol) server which transmits the messages into codes or numbers.
Stars: ✭ 228 (+142.55%)
Mutual labels:  smtp, smtp-server
Smtp Server
Create custom SMTP servers on the fly
Stars: ✭ 655 (+596.81%)
Mutual labels:  smtp, smtp-server
Inbucket
Disposable webmail server (similar to Mailinator) with built in SMTP, POP3, RESTful servers; no DB required.
Stars: ✭ 685 (+628.72%)
Mutual labels:  smtp, smtp-server
ControlCenter
Mirrored from GitLab! Monitoring and automation for Open Source email servers, starting with Postfix. Please do not submit issues or PRs here - join us at: https://gitlab.com/lightmeter
Stars: ✭ 88 (-6.38%)
Mutual labels:  smtp, smtp-server
Perfect-SMTP
SMTP Client for Perfect.
Stars: ✭ 19 (-79.79%)
Mutual labels:  smtp, smtp-library

SMTPd

SMTP server (library) for receiving emails, written in pure PHP. This library provides an interface to the SMTP server-side protocol with PHP. It creates a \Zend\Mail\Message Class object for every incoming email and hands this object to a custom PHP function for further processing. The project is in Beta status, so it's not recommended for production use.

The d in SMTPd stands for Daemon. This script can run in background like any other daemon process. It's not meant for running as a webapplication.

Why this project?

Believe it or not, email is still the killer feature of the Internet. There are tons of projects like PHPMailer: to send emails programmatically (with PHP). But there are not so many to receive emails from SMTP.

With this interface you can do something like this for your app users:

+------+     +------------------------+     +-------+     +--------------+
| User +---> | MUA (like Thunderbird) +---> | SMTPd +---> | Your PHP App |
+------+     +------------------------+     +-------+     +--------------+

This is useful when you have a messaging application written in PHP but no graphical user interface for it. So your graphical user interface can be any email client. Thunderbird for instance.

Project Outlines

The project outlines as described in my blog post about Open Source Software Collaboration.

  • The main purpose of this software is to provide a server-side SMTP API for PHP scripts.
  • Although the RFC implementations are not completed yet, they must be strict.
  • More features can be possible in the future. In perspective of the protocols the features must be a RFC implementation.
  • This list is open. Feel free to request features.

Planned Features

  • Full RFC 821 implementation.
  • Full RFC 1651 implementation.
  • Full RFC 1869 implementation.
  • Replace Zend\Mail with a better solution.

Installation

The preferred method of installation is via Packagist and Composer. Run the following command to install the package and add it as a requirement to composer.json:

composer require thefox/smtpd

Delivery

At the moment the server accepts all incoming emails. You decide what happens with incoming emails by adding Events to the Server object ($server->eventAdd($event)). The server can handle certain events. Each event will be executed on a certain trigger. Even if you don't add any Events to the Server it accepts all incoming emails.

Events

At the moment there are two Event Triggers.

  • TRIGGER_NEW_MAIL: will be triggered when a Client has finished transmitting a new email.
  • TRIGGER_AUTH_ATTEMPT: will be triggered when a Client wants to authenticate. Return a boolean from the callback function whether the authentication was successful or not.

Examples

See also example.php file for full examples.

Trigger New Mail Example

$server = new Server(...);

$event = new Event(Event::TRIGGER_NEW_MAIL, null, function(Event $event, $from, $rcpts, $mail){
	// Do stuff: handle email, ...
});
$server->addEvent($event);
$server->loop();

Trigger Auth Example

$server = new Server(...);

$event = new Event(Event::TRIGGER_AUTH_ATTEMPT, null, function(Event $event, $type, $credentials): bool{
	// Do stuff: Check credentials against database, ...
	return true;
});
$server->addEvent($event);
$server->loop();

Use SMTP Server with own loop

$server = new Server(...);

// Set up server here.
// Add Events, etc, ...

while(myApplicationRuns()){
	// Do stuff your application needs.
	// ...
	
	// Run main SMTPd loop, once.
	$server->run();
	usleep(10000); // Never run a main thread loop without sleep. Never!
}

RFC 821 Implementation

Complete implementation

  • 3.5 OPENING AND CLOSING

Incomplete implementation

  • 3.1 MAIL
  • 4.1.1 COMMAND SEMANTICS
    • HELO
    • MAIL
    • RCPT
    • DATA
    • NOOP
    • QUIT

RFC 1651 Implementation

Complete implementation

  • 4.1.1 First command
  • 4.5 Error responses from extended servers

RFC 3207 Implementation

RFC 4954 Implementation

    1. The AUTH Command

Related Links

Related Projects

Project Links

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].