1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
|
from emailAnnouncementBA import EmailAnnouncementBA
from constants import *
from qt import *
import logging
import smtplib
import time
from workerThread import WorkerThread
from help import Help
from utf8 import from_utf8, to_utf8
debug = logging.getLogger("emailAnnouncement").debug
error = logging.getLogger("emailAnnouncement").error
class EmailAnnouncement(EmailAnnouncementBA):
def __init__(self, parent, settings, address_book, projectVO):
EmailAnnouncementBA.__init__(self, parent)
self.settings = settings
self.address_book = address_book
self.projectVO = projectVO
self.project_name = projectVO.getProjectName()
self.email_address = settings['email_address']
self.smtp_server = settings['smtp_server']
self.recipient_index = 0
self.recipients = []
self.populateAddresses()
self.fromTextLabel.setText(self.email_address)
self.timer = QTimer(self)
self.connect(self.timer, SIGNAL("timeout()"),
self.addressSelected)
self.timer.start(500, False)
self.eventDict = {EVENT_SEND_EMAIL: self.send_email}
self.setNextEnabled(self.page(EMAIL_PAGE_SELECT), False)
self.setNextEnabled(self.page(EMAIL_PAGE_CONFIRM), True)
self.addressListBox.setFocus()
def customEvent(self, event):
data = event.data()
etype = event.type()
#print etype
event_action = self.eventDict.get(etype)
if event_action: event_action(data)
def populateAddresses(self):
addresses = self.address_book.get(self.project_name)
for address in addresses:
self.addressListBox.insertItem(address)
def selectAll(self):
self.addressListBox.selectAll(True)
self.setNextEnabled(self.page(EMAIL_PAGE_SELECT), True)
def addressSelected(self, qitem=None):
enable = False
if qitem and self.addressListBox.isSelected(qitem):
enable = True
if not enable:
for i in range(self.addressListBox.numRows()):
if self.addressListBox.isSelected(i):
enable = True
break
#debug("enable next: %s", enable)
self.setNextEnabled(self.page(EMAIL_PAGE_SELECT), enable)
def back(self):
EmailAnnouncementBA.back(self)
self.nextButton().setText("Next")
if self.indexOf(self.currentPage()) == EMAIL_PAGE_SELECT:
self.timer.start(500, False)
else:
self.timer.stop()
if self.indexOf(self.currentPage()) == EMAIL_PAGE_CONFIRM:
self.nextButton().setText("Send")
def next(self):
self.timer.stop()
EmailAnnouncementBA.next(self)
pageno = self.indexOf(self.currentPage())
#debug("pageno: %d", pageno)
self.nextButton().setText("Next")
if pageno == EMAIL_PAGE_CONFIRM:
self.nextButton().setText("Send")
self.populateConfirmPage()
elif pageno == EMAIL_PAGE_COMPOSE:
self.messageEdited()
elif pageno == EMAIL_PAGE_PROGRESS:
self.start_delivery()
def start_delivery(self):
self.progressBar.setProgress(-1)
try:
self.server = smtplib.SMTP(self.smtp_server)
except Exception, e:
QMessageBox.warning(None,
"An exception occurred connecting to smtp server",
str(e))
return
self.recipients = self.get_addresses()
self.progressBar.setTotalSteps(len(self.recipients))
self.send_email()
def end_delivery(self):
self.recipient_index = 0
self.setFinishEnabled(self.page(EMAIL_PAGE_PROGRESS), True)
try:
self.server.quit()
except:
pass
def messageEdited(self, qtext=None):
message = to_utf8(self.messageTextEdit.text())
subject = to_utf8(self.subjectLineEdit.text())
if message and subject:
enable = True
else:
enable = False
self.setNextEnabled(self.page(EMAIL_PAGE_COMPOSE), enable)
def populateConfirmPage(self):
self.confirmTextEdit.setText(self.messageTextEdit.text())
self.confirmSubjectLineEdit.setText(self.subjectLineEdit.text())
self.confirmListBox.clear()
for i in range(self.addressListBox.numRows()):
if self.addressListBox.isSelected(i):
self.confirmListBox.insertItem(self.addressListBox.text(i))
self.backButton().setFocus()
def get_addresses(self):
addresses = []
for i in range(self.confirmListBox.numRows()):
addresses.append(to_utf8(self.confirmListBox.text(i)))
return addresses
def email_thread(self, index):
to_address = self.recipients[index]
msg = "From: %s\nTo: %s\nDate: %s\nSubject: %s\n\n%s\n" % (
self.email_address,
to_address,
time.strftime("%a, %d %b %Y %H:%M:%S %Z"),
to_utf8(self.subjectLineEdit.text()),
to_utf8(self.messageTextEdit.text()))
try:
self.server.sendmail(self.email_address, [to_address], msg)
except Exception, e:
QMessageBox.warning(None,
"An exception occurred sending email message",
str(e))
return index + 1
def send_email(self, index=0):
self.recipient_index = index
if self.recipient_index >= len(self.recipients):
self.end_delivery()
return
self.recipientTextLabel.setText(self.recipients[self.recipient_index])
self.progressBar.setProgress(self.recipient_index + 1)
self.thread = WorkerThread(self,
EVENT_SEND_EMAIL,
self.email_thread,
self.recipient_index)
self.thread.start()
def accept(self):
EmailAnnouncementBA.accept(self)
def help(self):
self._help = Help(self, "email_announcement.html")
|