• Stars
    star
    728
  • Rank 62,237 (Top 2 %)
  • Language
    Python
  • License
    Other
  • Created over 13 years ago
  • Updated about 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Pythonic SMTP Application Server

The Lamson Mail Server(TM)

======================

Lamson is a pure Python SMTP server designed to create robust and complex mail applications in the style of modern web frameworks such as Django. Unlike traditional SMTP servers like Postfix or Sendmail, Lamson has all the features of a web application stack (ORM, templates, routing, handlers, state machines, Python) without needing to configure alias files, run newaliases, or juggle tons of tiny fragile processes. Lamson also plays well with other web frameworks and Python libraries.

Features

Lamson supports running in many contexts for processing mail using the best technology currently available. Since Lamson is aiming to be a modern SMTP server and Mail processing framework, it has some features you don't find in any other Mail server.

  • Written in portable Python that should run on almost any Unix server.
  • Handles mail in almost any encoding and format, including attachments, and canonicalizes them for easier processing.
  • Sends nearly pristine clean mail that is easier to process by other receiving servers.
  • Properly decodes internationalized mail into Python unicode, and translates Python unicode back into nice clean ascii and/or UTF-8 mail.
  • Lamson can use SQLAlchemy, TokyoCabinet, or any other database abstraction layer or technology you can get libraries for. It supports SQLAlchemy by default.
  • It uses Jinja2 by default, but you can swap in Mako if you like, or any other template framework with a similar API.
  • Supports working with Maildir queues to defer work and distribute it to multiple machines.
  • Can run as an non-root user on port 25 to reduce the risk of intrusion.
  • Lamson can also run in a completely separate virtualenv for easy deployment.
  • Spam filtering is baked into Lamson using the SpamBayes library.
  • A flexible and easy to use routing system lets you write stateful or stateLESS handlers of your email.
  • Helpful tools for unit testing your email applications with nose, including spell checking with PyEnchant.
  • Ability to use Jinja2 or Mako templates to craft emails including the headers.
  • A full alternative to the default optparse library for doing commands easily.
  • Easily configurable to use alternative sending and receiving systems, database libraries, or any other systems you need to talk to.
  • Yet, you don't have to configure everything to get stated. A simple lamson gen command lets you get an application up and running quick.
  • Finally, many helpful commands for general SMTP server debugging and cleaning.

Installing

If you want to install Lamson then the best source of information is the documentation available at the site, particularly the following documents:

http://lamsonproject.org/docs/getting_started.html

http://lamsonproject.org/docs/deploying_lamson.html

Project Information

You can get documentation, track news, watch screencasts (using actual GNU screen) and other information at:

http://lamsonproject.org/

Source

The source is here http://github.com/zedshaw/lamson so figure it out.

Status

Lamson is 1.1 right now.

License

Lamson is licensed under the license in the https://github.com/zedshaw/lamson/blob/master/LICENSE file. It's a variant of the BSD license that is revokeable and makes contributor's rights clear up front.

Contributing

Most of the features for 1.0 are already being planned, but if you have suggestions for improvements or bug fixes then feel free to join the mailing lists and discuss them:

http://lamsonproject.org/lists/

There is also an IRC channel #lamson on irc.freenode.org you can join to chat, it has low volume and you usually get a fast response.

Testing

The Lamson project uses unit tests, code reviews, coverage information, source analysis, and security reviews to maintain quality. If you find a bug, please take the time to write a test case that fails or provide a piece of mail that causes the failure.

If you contribute new code then your code should have as much coverage as possible, with a minimal amount of mocking.

Security

Lamson follows the same security reporting model that has worked for other open source projects: If you report a security vulnerability, it will be acted on immediately and a fix with complete full disclosure will go out to everyone at the same time. It's the job of the people using Lamson to keep track of security relate problems.

Additionally, Lamson is written in as secure a manner as possible and assumes that it is operating in a hostile environment. If you find Lamson doesn't behave correctly given that constraint then please voice your concerns.

Development

Lamson is written entirely in Python and runs on Python 2.5 or 2.6 but not 3k yet. It uses only pure Python except where some libraries have compiled extensions (such as Jinja2). It should hopefully run on any platform that supports Python and has Unix semantics.

The code is consistently documented and written to be read in an instructional manner where possible. If a piece of code does not make sense, then ask for help and it will be clarified. The code is also small and has a full test suite with about 95% coverage, so you should be able to find out just about anything you need to hack on Lamson in the Lamson source. Particularly you can find online API documentation here:

http://lamsonproject.org/docs/api/

Given the above statements, it should be possible for anyone to take the Lamson source and read through it in an evening or two. You should also be able to understand what's going on, and learn anything you don't by asking questions.

If this isn't the case, then feel free to ask for help understanding it.

More Repositories

1

learn-c-the-hard-way-lectures

All of the code from Learn C The Hard Way, each project, plus the presentation slides used in the videos.
C
1,110
star
2

python-lust

Python Little Unix Server Toolkit
Python
543
star
3

learn-more-python-the-hard-way-solutions

Python
532
star
4

fuqit

The FuqIt Web Framework. Shit files into a dir, get some web.
Python
457
star
5

liblcthw

The library you create when you are done with Learn C The Hard Way
C
346
star
6

jzed

Functional Javascript alternative to JQuery.
JavaScript
329
star
7

learn-python3-thw-code

The code to Learn Python3 The Hard Way
Python
311
star
8

librelist

The code for the librelist.com free email service.
Python
73
star
9

zadm4py

Zed's Awesome Debug Macros for Python
Python
50
star
10

learn-painting-the-hard-way

A Simple Introduction To The Application Of Pigment To A Surface To Look Like A Thing
Python
48
star
11

orkestrix

A set of small tools for easily publishing words about music.
JavaScript
26
star
12

earing

A joke dynamic assembler that had a REPL and is fast.
C
17
star
13

botnot

What if monit was a botnet?
Python
16
star
14

isburningmanstillwhite

Checks to see if the Burning Man board of directors is still mostly white.
Python
15
star
15

utu

(DEAD) An attempt to create a strong identity chat system with cryptographic hate as a troll voting system.
C
12
star
16

rfuzz

(DEAD) Old code I used to fuzz attack the original Mongrel.
Ruby
12
star
17

srpmin

The minimum SRP files needed to use SRP in your software.
Shell
10
star
18

poc-uploader

A proof-of-concept uploader for websites.
Python
6
star
19

lcthw-statserve

A simple example project from my book, Learn C The Hard Way.
C
3
star
20

zapps

(DEAD) A fork of Yapps I made to work around a bug because the author refused to fix it or put the project into PyPI.
Python
3
star
21

mulletdb

(DEAD) A joke project that made a working database server to server SQL and NoSQL data types at the same time.
C++
3
star
22

vellum

(DEAD) A simple make replacement that I hacked on. One of my first python projects.
Python
3
star
23

idiopidae

(DEAD) A simple literate programming system written in python.
Python
3
star
24

mongrel2

Mongrel2 Has Moved!
2
star
25

profligacy

(DEAD) A layout engine that predates Apple's use of format strings to layout elements by about five years or more.
Ruby
2
star
26

fcst

(DEAD) Fast Change Set Tool was a RCS I was toying with as my first Ruby project.
C
1
star