def patchedSend(self, mfrom, mto, messageText, immediate=False): """ Send the message """ if IThemeSpecific in registered_layers(): patchedEmailAddress = getMailAddress() if patchedEmailAddress: mto = patchedEmailAddress if isinstance(messageText, Message): # We already have a message, make a copy to operate on mo = deepcopy(messageText) else: # Otherwise parse the input message mo = message_from_string(messageText) if mo.get('Bcc'): del mo['Bcc'] if mo.get('Cc'): del mo['Cc'] if mo.get('To'): del mo['To'] mo['To'] = mto messageText = mo.as_string() if immediate: self._makeMailer().send(mfrom, mto, messageText) else: if self.smtp_queue: # Start queue processor thread, if necessary self._startQueueProcessorThread() delivery = QueuedMailDelivery(self.smtp_queue_directory) else: delivery = DirectMailDelivery(self._makeMailer()) delivery.send(mfrom, mto, messageText)
def _send(self, mfrom, mto, messageText, immediate=False): """ Send the message """ if immediate: self._makeMailer().send(mfrom, mto, messageText) else: if self.smtp_queue: # Start queue processor thread, if necessary self._startQueueProcessorThread() delivery = QueuedMailDelivery(self.smtp_queue_directory) else: delivery = DirectMailDelivery(self._makeMailer()) delivery.send(mfrom, mto, messageText)
def testSend(self): from zope.sendmail.delivery import QueuedMailDelivery delivery = QueuedMailDelivery('/path/to/mailbox') fromaddr = '*****@*****.**' toaddrs = ('*****@*****.**', 'steve@examplecom') zope_headers = ('X-Zope-From: [email protected]\n' 'X-Zope-To: [email protected], steve@examplecom\n') opt_headers = ('From: Jim <*****@*****.**>\n' 'To: some-zope-coders:;\n' 'Date: Mon, 19 May 2003 10:17:36 -0400\n' 'Message-Id: <*****@*****.**>\n') message = ('Subject: example\n' '\n' 'This is just an example\n') msgid = delivery.send(fromaddr, toaddrs, opt_headers + message) self.assertEqual(msgid, '*****@*****.**') self.assertEqual(MaildirWriterStub.commited_messages, []) self.assertEqual(MaildirWriterStub.aborted_messages, []) transaction.commit() self.assertEqual(MaildirWriterStub.commited_messages, [zope_headers + opt_headers + message]) self.assertEqual(MaildirWriterStub.aborted_messages, []) MaildirWriterStub.commited_messages = [] msgid = delivery.send(fromaddr, toaddrs, message) self.assertIn('@', msgid) self.assertEqual(MaildirWriterStub.commited_messages, []) self.assertEqual(MaildirWriterStub.aborted_messages, []) transaction.commit() self.assertEqual(len(MaildirWriterStub.commited_messages), 1) self.assertTrue( MaildirWriterStub.commited_messages[0].endswith(message) ) new_headers = MaildirWriterStub.commited_messages[0][:-len(message)] self.assertIn('Message-Id: <%s>' % msgid, new_headers) self.assertIn('X-Zope-From: %s' % fromaddr, new_headers) self.assertIn('X-Zope-To: %s' % ", ".join(toaddrs), new_headers) self.assertEqual(MaildirWriterStub.aborted_messages, []) MaildirWriterStub.commited_messages = [] msgid = delivery.send(fromaddr, toaddrs, opt_headers + message) self.assertEqual(MaildirWriterStub.commited_messages, []) self.assertEqual(MaildirWriterStub.aborted_messages, []) transaction.abort() self.assertEqual(MaildirWriterStub.commited_messages, []) self.assertEqual(len(MaildirWriterStub.aborted_messages), 1)
def testSend(self): from zope.sendmail.delivery import QueuedMailDelivery delivery = QueuedMailDelivery('/path/to/mailbox') fromaddr = '*****@*****.**' toaddrs = ('*****@*****.**', 'steve@examplecom') zope_headers = ('X-Zope-From: [email protected]\n' 'X-Zope-To: [email protected], steve@examplecom\n') opt_headers = ('From: Jim <*****@*****.**>\n' 'To: some-zope-coders:;\n' 'Date: Mon, 19 May 2003 10:17:36 -0400\n' 'Message-Id: <*****@*****.**>\n') message = ('Subject: example\n' '\n' 'This is just an example\n') msgid = delivery.send(fromaddr, toaddrs, opt_headers + message) self.assertEquals(msgid, '*****@*****.**') self.assertEquals(MaildirWriterStub.commited_messages, []) self.assertEquals(MaildirWriterStub.aborted_messages, []) transaction.commit() self.assertEquals(MaildirWriterStub.commited_messages, [zope_headers + opt_headers + message]) self.assertEquals(MaildirWriterStub.aborted_messages, []) MaildirWriterStub.commited_messages = [] msgid = delivery.send(fromaddr, toaddrs, message) self.assert_('@' in msgid) self.assertEquals(MaildirWriterStub.commited_messages, []) self.assertEquals(MaildirWriterStub.aborted_messages, []) transaction.commit() self.assertEquals(len(MaildirWriterStub.commited_messages), 1) self.assert_(MaildirWriterStub.commited_messages[0].endswith(message)) new_headers = MaildirWriterStub.commited_messages[0][:-len(message)] self.assert_(new_headers.find('Message-Id: <%s>' % msgid) != -1) self.assert_(new_headers.find('X-Zope-From: %s' % fromaddr) != 1) self.assert_(new_headers.find('X-Zope-To: %s' % ", ".join(toaddrs)) != 1) self.assertEquals(MaildirWriterStub.aborted_messages, []) MaildirWriterStub.commited_messages = [] msgid = delivery.send(fromaddr, toaddrs, opt_headers + message) self.assertEquals(MaildirWriterStub.commited_messages, []) self.assertEquals(MaildirWriterStub.aborted_messages, []) transaction.abort() self.assertEquals(MaildirWriterStub.commited_messages, []) self.assertEquals(len(MaildirWriterStub.aborted_messages), 1)
def send_email(sender, recipient, subject, body, attachments=[]): """ Asynchronous mail delivery """ msg = email.MIMEMultipart.MIMEMultipart() msg["From"] = sender msg["To"] = recipient msg["Subject"] = email.Header.Header(subject, 'UTF-8') msg.attach(email.MIMEText.MIMEText(body.encode('UTF-8'), 'plain', 'UTF-8')) for att in attachments: part = email.MIMEBase.MIMEBase('application', "octet-stream") part.set_payload(file(att, 'rb').read()) Encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(att)) msg.attach(part) config = getMailConfiguration() delivery = QueuedMailDelivery(config['maildir']) delivery.send(sender, [recipient], msg.as_string()) transaction.commit()