This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description
==============================
Lovely.Mail and Mail Testing
==============================

This package mainly provides a simple way to test the mail delivery using the
current configuration. There is no need to change the mailing configuration
for the functional tests.

>>> from lovely.mail import testing

Before we can set up the mail testing we need to register the mailer
utilities.

>>> from zope import component
>>> from zope.sendmail.mailer import SMTPMailer
>>> component.provideUtility(SMTPMailer(),
... name='lovely-mailer')

>>> from zope.sendmail.delivery import QueuedMailDelivery
>>> component.provideUtility(QueuedMailDelivery('some_path'),
... name='lovely-mail-delivery')

Now we set up testing. This is the code which should go into you
setUp-function for your tests.

>>> testing.setUpSMTPTesting('lovely-mailer', 'lovely-mail-delivery', unit_test=True)

Testing simply replaces the smtp mailer of the utility to a test smtp mailer.

>>> from zope.sendmail.interfaces import IMailer, IMailDelivery
>>> mailer = component.getUtility(IMailer, 'lovely-mailer')
>>> mailer.smtp
<class 'lovely.mail.testing.testmailerconnection'="">

And the mail delivery gets a temporary directory.

>>> delivery = component.getUtility(IMailDelivery, 'lovely-mail-delivery')
>>> delivery._queuePath != 'some_path'
True

Testing provides a list with already sent mails.

>>> testing.sentMails
[]

Now we send a mail.

>>> messageId = delivery.send('README', ['MAILQUEUE',], 'I am a testing mail')
>>> testing.sentMails
[]

The mail is not sent yet because we need to trigger mail delivery.

>>> testing.triggerMail()
>>> from pprint import pprint
>>> pprint(testing.sentMails)
[('README',
('MAILQUEUE',),
'Message-Id: <...>\nI am a testing mail')]


We also provide a simple function to send mails.

>>> from lovely.mail import sendmail
>>> sendmail('subject', 'me@gmail.org', ['you@gmail.org'], 'my mail body')
>>> testing.sentMails = []
>>> testing.triggerMail()
>>> pprint(testing.sentMails)
[('me@gmail.org',
('you@gmail.org',),
'Message-Id: ...\nFrom: me@gmail.org\nTo: you@gmail.org\n...\nmy mail body')]

If we provide tuples for the addresses we get this :

>>> sendmail('subject', ('ich', 'me@gmail.org'), [('du','you@gmail.org',)], 'my mail body')
>>> testing.sentMails = []
>>> testing.triggerMail()
>>> pprint(testing.sentMails)
[('ich <me@gmail.org>',
('du <you@gmail.org>',),
'Message-Id: ...\nFrom: ich <me@gmail.org>\nTo: du <you@gmail.org>\n...\nmy mail body')]


Attachments
-----------

Attachments must be provided as a list of tuples containing a file like object
providing "read", the filename and the mime type of the attachment (if known).

>>> from StringIO import StringIO
>>> f1 = StringIO("I am the content of file 1")
>>> sendmail('subject', ('ich', 'me@gmail.org'), [('du','you@gmail.org',)],
... 'my mail body', attachments=[(f1, 'f1.txt', None)])
>>> testing.sentMails = []
>>> testing.triggerMail()
>>> pprint(testing.sentMails)
[('ich <me@gmail.org>',
('du <you@gmail.org>',),
'Message-Id: ...')]
>>> pprint(testing.sentMails[0][2].split('\n'))
['Message-Id: <...>',
'Content-Type: multipart/mixed; boundary="===============...=="',
'MIME-Version: 1.0',
'Subject: subject',
'From: ich <me@gmail.org>',
'To: du <you@gmail.org>',
'Date: ...',
'',
'--===============...==',
'Content-Type: text/plain; charset="utf-8"',
'MIME-Version: 1.0',
'Content-Transfer-Encoding: 7bit',
'',
'my mail body',
'--===============...==',
'Content-Type: application/octet-stream',
'MIME-Version: 1.0',
'Content-Transfer-Encoding: base64',
'Content-Disposition: attachment; filename="f1.txt"',
'',
'SS...',
'--===============...==--']


>>> f1.seek(0)
>>> sendmail('subject', ('ich', 'me@gmail.org'), [('du','you@gmail.org',)],
... 'my mail body', attachments=[(f1, 'f1.txt', ('text','plain'))])
>>> testing.sentMails = []
>>> testing.triggerMail()
>>> pprint(testing.sentMails)
[('ich <me@gmail.org>',
('du <you@gmail.org>',),
'Message-Id: ...')]
>>> pprint(testing.sentMails[0][2].split('\n'))
['Message-Id: <...>',
'Content-Type: multipart/mixed; boundary="===============...=="',
'MIME-Version: 1.0',
'Subject: subject',
'From: ich <me@gmail.org>',
'To: du <you@gmail.org>',
'Date: ...',
'',
'--===============...==',
'Content-Type: text/plain; charset="utf-8"',
'MIME-Version: 1.0',
'Content-Transfer-Encoding: 7bit',
'',
'my mail body',
'--===============...==',
'Content-Type: text/plain; charset="us-ascii"',
'MIME-Version: 1.0',
'Content-Transfer-Encoding: 7bit',
'Content-Disposition: attachment; filename="f1.txt"',
'',
'I am the content of file 1',
'--===============...==--']

And clean up.

>>> testing.tearDownSMTPTesting()
>>> mailer.smtp
<class smtplib.smtp="" at="" ...="">
>>> delivery._queuePath == 'some_path'
True
>>> testing.sentMails
[]


=======================
Changes for lovely.mail
=======================

After
=====

2009/09/08 0.3.1
================

- allow the use of directMailDelivery for testing
- handle attachments according to their type

2009/07/30 0.3.0
================

- added attachments

2009/04/22 0.2.0
================

- stop remaining QueueProcessThread on tearDown because python 2.5 doesn't
terminate.

2008/04/22 0.1.3
================

- make the testmailer compatible to the latest zope.sendmail package

2007/12/10 0.1.2
================

- move stuff to zope.org and pypi

2007/08/23 0.1.1
================

- added remotemail.py for remote sendmail tasks

2007/06/20 0.1.0a1
==================

- added TestMailDelivery utility implementation

- changed to current bootstrap.py

- added this file

- cleaned imports


Download
========
Release History

Release History

0.3.1

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.1.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
lovely.mail-0.3.1.tar.gz (9.5 kB) Copy SHA256 Checksum SHA256 Source Sep 8, 2009

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting