Changeset 136:bfdb6e432cb8
- Timestamp:
- 07/05/07 15:23:03 (14 months ago)
- Author:
- Tarek Ziad?? <tarek@…>
- Message:
-
finalized v1
- Location:
- mailer
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r134
|
r136
|
|
| 19 | 19 | >>> from sender import send_mail |
| 20 | 20 | >>> mail_id = send_mail(sender='tarek@ziade.org', |
| 21 | | ... recipients=['tarek@ziade.org'], |
| | 21 | ... recipients=['ziade.tarek@gmail.com'], |
| 22 | 22 | ... subject='hello', |
| 23 | | ... msg='hello') |
| | 23 | ... msg='héllo') |
| 24 | 24 | |
| 25 | 25 | |
| … |
… |
|
| 31 | 31 | >>> from sender import mail_status |
| 32 | 32 | >>> mail_status(mail_id) |
| 33 | | 'processing' |
| | 33 | u'processing' |
| | 34 | |
| | 35 | When the id is not given, the whole mailed table is returned:: |
| | 36 | |
| | 37 | >>> mail_status() |
| | 38 | [] |
| | 39 | |
| | 40 | We can ask for the queue size as well:: |
| | 41 | |
| | 42 | >>> from sender import mail_queue_size |
| | 43 | >>> mail_queue_size() |
| | 44 | 1 |
| | 45 | |
| | 46 | |
| 34 | 47 | |
| 35 | 48 | sending mails, for real |
| … |
… |
|
| 46 | 59 | |
| 47 | 60 | >>> import time |
| 48 | | >>> while mail_status(mail_id) == 'processing': |
| | 61 | >>> while mail_status(mail_id) == u'processing': |
| 49 | 62 | ... time.sleep(0.2) |
| 50 | 63 | >>> mail_status(mail_id) |
| … |
… |
|
| 55 | 68 | >>> stop_server() |
| 56 | 69 | |
| | 70 | And see the status:: |
| 57 | 71 | |
| | 72 | >>> status = mail_status() |
| | 73 | >>> status[0]['subject'] |
| | 74 | u'hello' |
| | 75 | >>> status[0]['status'] |
| | 76 | u'processed' |
| 58 | 77 | |
-
|
r134
|
r136
|
|
| 23 | 23 | import os |
| 24 | 24 | import sys |
| | 25 | import smtplib |
| 25 | 26 | import logging |
| 26 | 27 | from threading import Thread |
| 27 | 28 | import time |
| | 29 | from base64 import b64decode |
| | 30 | from email.MIMEText import MIMEText |
| 28 | 31 | |
| 29 | 32 | from model import mailed_data, mail_data |
| | 33 | import settings |
| 30 | 34 | |
| 31 | 35 | class MailWorker(Thread): |
| … |
… |
|
| 41 | 45 | return mail_data.select().execute().fetchall() |
| 42 | 46 | |
| | 47 | def _get_message(self, mail): |
| | 48 | """returns a Mime""" |
| | 49 | msg = MIMEText(b64decode(mail.data)) |
| | 50 | msg['From'] = mail.sender |
| | 51 | msg['To'] = mail.recipients |
| | 52 | msg['Subject'] = mail.subject |
| | 53 | |
| | 54 | msg['Date'] = mail.date.isoformat() |
| | 55 | return msg |
| | 56 | |
| 43 | 57 | def _send_mail(self, mail): |
| 44 | 58 | """sends the mail""" |
| 45 | | pass |
| | 59 | server = smtplib.SMTP(settings.SMTP_SERVER) |
| | 60 | msg = self._get_message(mail) |
| | 61 | try: |
| | 62 | server.sendmail(msg['From'], msg['To'], msg.as_string()) |
| | 63 | finally: |
| | 64 | server.quit() |
| 46 | 65 | |
| 47 | 66 | def _store_mail(self, mail, error=None): |
| … |
… |
|
| 56 | 75 | |
| 57 | 76 | # removes from original table |
| 58 | | mailed_data.delete().execute(id=mail.id) |
| | 77 | mail_data.delete().execute(id=mail.id) |
| 59 | 78 | |
| 60 | 79 | def run(self): |
-
|
r134
|
r136
|
|
| 39 | 39 | Column('sender', String(300)), |
| 40 | 40 | Column('recipients', String(300)), |
| 41 | | Column('date', Date()), |
| | 41 | Column('date', DateTime()), |
| 42 | 42 | Column('data', TEXT())) |
| 43 | 43 | |
| … |
… |
|
| 56 | 56 | Column('error', String(300)), |
| 57 | 57 | Column('data', TEXT()), |
| 58 | | Column('date', Date()), |
| | 58 | Column('date', DateTime()), |
| 59 | 59 | Column('status', String(10)),) |
| 60 | 60 | |
-
|
r134
|
r136
|
|
| 34 | 34 | return res.last_inserted_ids()[0] |
| 35 | 35 | |
| 36 | | def mail_status(mail_id): |
| | 36 | def mail_status(mail_id=None): |
| 37 | 37 | """getting mail status""" |
| | 38 | def _small(mail): |
| | 39 | return {'subject': mail.subject, 'date': mail.date, |
| | 40 | 'status': mail.status} |
| | 41 | |
| | 42 | if mail_id is None: |
| | 43 | return [_small(mail) for mail in |
| | 44 | mailed_data.select().execute()] |
| | 45 | |
| 38 | 46 | res = mailed_data.select().execute(original_id=mail_id).fetchall() |
| 39 | 47 | if len(res) == 0: |
| 40 | 48 | # still in queue |
| 41 | | return 'processing' |
| | 49 | return u'processing' |
| 42 | 50 | return res[0].status |
| 43 | 51 | |
| | 52 | def mail_queue_size(): |
| | 53 | """return the queue size""" |
| | 54 | return len(mail_data.select().execute().fetchall()) |
| | 55 | |
-
|
r134
|
r136
|
|
| 1 | 1 | |
| 2 | 2 | DATABASE = 'postgres://chainon:chainon@localhost/chainon' |
| | 3 | SMTP_SERVER = 'smtp.neuf.fr' |
| 3 | 4 | |
-
|
r134
|
r136
|
|
| 55 | 55 | if current_dir == '': |
| 56 | 56 | current_dir = '.' |
| | 57 | current_dir = os.path.realpath(current_dir) |
| 57 | 58 | |
| 58 | 59 | def test_suite(): |
| 59 | 60 | globs = globals() |
| 60 | 61 | test_db = os.path.join(current_dir, 'test.db') |
| 61 | | globs['test_db'] = 'sqlite://%s' % test_db |
| | 62 | if os.path.exists(test_db): |
| | 63 | os.remove(test_db) |
| | 64 | |
| | 65 | globs['test_db'] = 'sqlite:////%s' % test_db |
| 62 | 66 | return doc_suite(current_dir, globs=globs) |
| 63 | 67 | |