~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/services/mail/sendmail.py

  • Committer: Jelmer Vernooij
  • Date: 2011-09-21 14:28:02 UTC
  • mfrom: (14006 devel)
  • mto: This revision was merged to the branch mainline in revision 14010.
  • Revision ID: jelmer@canonical.com-20110921142802-7ggkc204igsy532w
MergeĀ lp:launchpad

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2009 Canonical Ltd.  This software is licensed under the
 
1
# Copyright 2009-2011 Canonical Ltd.  This software is licensed under the
2
2
# GNU Affero General Public License version 3 (see the file LICENSE).
3
3
 
4
4
"""The One True Way to send mail from the Launchpad application.
42
42
    )
43
43
import hashlib
44
44
from smtplib import SMTP
 
45
import sys
45
46
 
46
47
from lazr.restful.utils import get_current_browser_request
47
48
from zope.app import zapi
50
51
from zope.sendmail.interfaces import IMailDelivery
51
52
 
52
53
from canonical.config import config
53
 
from canonical.lp import isZopeless
 
54
from canonical.database.sqlbase import ZopelessTransactionManager
54
55
from lp.app import versioninfo
55
56
from lp.services.encoding import is_ascii_only
56
57
from lp.services.mail.stub import TestMailer
355
356
    Uses zope.sendmail.interfaces.IMailer, so you can subscribe to
356
357
    IMailSentEvent or IMailErrorEvent to record status.
357
358
 
 
359
    This function looks at the `config` singleton for configuration as to
 
360
    where to send the mail; in particular for whether this code is running in
 
361
    zopeless mode, and for a `sendmail_to_stdout` attribute for testing.
 
362
 
358
363
    :param bulk: By default, a Precedence: bulk header is added to the
359
364
        message. Pass False to disable this.
360
365
 
417
422
 
418
423
    raw_message = message.as_string()
419
424
    message_detail = message['Subject']
420
 
    if isZopeless():
 
425
    if ZopelessTransactionManager._installed is not None:
421
426
        # Zopeless email sending is not unit tested, and won't be.
422
427
        # The zopeless specific stuff is pretty simple though so this
423
428
        # should be fine.
427
432
            # when running in the testing environment, store emails
428
433
            TestMailer().send(
429
434
                config.canonical.bounce_address, to_addrs, raw_message)
 
435
        elif getattr(config, 'sendmail_to_stdout', False):
 
436
            # For debugging, from process-one-mail, just print it.
 
437
            sys.stdout.write(raw_message)
430
438
        else:
431
439
            if config.zopeless.send_email:
432
440
                # Note that we simply throw away dud recipients. This is fine,
483
491
        return mailer.send(from_addr, to_addrs, raw_message)
484
492
    finally:
485
493
        action.finish()
486
 
 
487
 
 
488
 
if __name__ == '__main__':
489
 
    from canonical.lp import initZopeless
490
 
    tm = initZopeless()
491
 
    simple_sendmail(
492
 
            'stuart.bishop@canonical.com', ['stuart@stuartbishop.net'],
493
 
            'Testing Zopeless', 'This is the body')
494
 
    tm.uninstall()