1cdf0e10cSrcweir# Caolan McNamara caolanm@redhat.com 2cdf0e10cSrcweir# a simple email mailmerge component 3cdf0e10cSrcweir 4cdf0e10cSrcweir# manual installation for hackers, not necessary for users 5cdf0e10cSrcweir# cp mailmerge.py /usr/lib/openoffice.org2.0/program 6cdf0e10cSrcweir# cd /usr/lib/openoffice.org2.0/program 7cdf0e10cSrcweir# ./unopkg add --shared mailmerge.py 8cdf0e10cSrcweir# edit ~/.openoffice.org2/user/registry/data/org/openoffice/Office/Writer.xcu 9cdf0e10cSrcweir# and change EMailSupported to as follows... 10cdf0e10cSrcweir# <prop oor:name="EMailSupported" oor:type="xs:boolean"> 11cdf0e10cSrcweir# <value>true</value> 12cdf0e10cSrcweir# </prop> 13cdf0e10cSrcweir 14cdf0e10cSrcweirimport unohelper 15cdf0e10cSrcweirimport uno 16cdf0e10cSrcweirimport re 17cdf0e10cSrcweir 18cdf0e10cSrcweir#to implement com::sun::star::mail::XMailServiceProvider 19cdf0e10cSrcweir#and 20cdf0e10cSrcweir#to implement com.sun.star.mail.XMailMessage 21cdf0e10cSrcweir 22cdf0e10cSrcweirfrom com.sun.star.mail import XMailServiceProvider 23cdf0e10cSrcweirfrom com.sun.star.mail import XMailService 24cdf0e10cSrcweirfrom com.sun.star.mail import XSmtpService 25cdf0e10cSrcweirfrom com.sun.star.mail import XConnectionListener 26cdf0e10cSrcweirfrom com.sun.star.mail import XAuthenticator 27cdf0e10cSrcweirfrom com.sun.star.mail import XMailMessage 28cdf0e10cSrcweirfrom com.sun.star.mail.MailServiceType import SMTP 29cdf0e10cSrcweirfrom com.sun.star.mail.MailServiceType import POP3 30cdf0e10cSrcweirfrom com.sun.star.mail.MailServiceType import IMAP 31cdf0e10cSrcweirfrom com.sun.star.uno import XCurrentContext 32cdf0e10cSrcweirfrom com.sun.star.lang import IllegalArgumentException 33cdf0e10cSrcweirfrom com.sun.star.lang import EventObject 34cdf0e10cSrcweirfrom com.sun.star.mail import SendMailMessageFailedException 35cdf0e10cSrcweir 36cdf0e10cSrcweirfrom email.MIMEBase import MIMEBase 37cdf0e10cSrcweirfrom email.Message import Message 38cdf0e10cSrcweirfrom email import Encoders 39cdf0e10cSrcweirfrom email.Header import Header 40cdf0e10cSrcweirfrom email.MIMEMultipart import MIMEMultipart 41cdf0e10cSrcweirfrom email.Utils import formatdate 42cdf0e10cSrcweirfrom email.Utils import parseaddr 43cdf0e10cSrcweir 44cdf0e10cSrcweirimport sys, smtplib, imaplib, poplib 45cdf0e10cSrcweir 46cdf0e10cSrcweirdbg = False 47cdf0e10cSrcweir 48cdf0e10cSrcweirclass PyMailSMTPService(unohelper.Base, XSmtpService): 49cdf0e10cSrcweir def __init__( self, ctx ): 50cdf0e10cSrcweir self.ctx = ctx 51cdf0e10cSrcweir self.listeners = [] 52cdf0e10cSrcweir self.supportedtypes = ('Insecure', 'Ssl') 53cdf0e10cSrcweir self.server = None 54cdf0e10cSrcweir self.connectioncontext = None 55bb7facceSAriel Constenla-Haile self.notify = EventObject(self) 56cdf0e10cSrcweir if dbg: 57cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService init" 58cdf0e10cSrcweir def addConnectionListener(self, xListener): 59cdf0e10cSrcweir if dbg: 60cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService addConnectionListener" 61cdf0e10cSrcweir self.listeners.append(xListener) 62cdf0e10cSrcweir def removeConnectionListener(self, xListener): 63cdf0e10cSrcweir if dbg: 64cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService removeConnectionListener" 65cdf0e10cSrcweir self.listeners.remove(xListener) 66cdf0e10cSrcweir def getSupportedConnectionTypes(self): 67cdf0e10cSrcweir if dbg: 68cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService getSupportedConnectionTypes" 69cdf0e10cSrcweir return self.supportedtypes 70cdf0e10cSrcweir def connect(self, xConnectionContext, xAuthenticator): 71cdf0e10cSrcweir self.connectioncontext = xConnectionContext 72cdf0e10cSrcweir if dbg: 73cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService connect" 74cdf0e10cSrcweir server = xConnectionContext.getValueByName("ServerName") 75cdf0e10cSrcweir if dbg: 76cdf0e10cSrcweir print >> sys.stderr, server 77cdf0e10cSrcweir port = xConnectionContext.getValueByName("Port") 78cdf0e10cSrcweir if dbg: 79cdf0e10cSrcweir print >> sys.stderr, port 80cdf0e10cSrcweir self.server = smtplib.SMTP(server, port) 81cdf0e10cSrcweir if dbg: 82cdf0e10cSrcweir self.server.set_debuglevel(1) 83cdf0e10cSrcweir connectiontype = xConnectionContext.getValueByName("ConnectionType") 84cdf0e10cSrcweir if dbg: 85cdf0e10cSrcweir print >> sys.stderr, connectiontype 86bb7facceSAriel Constenla-Haile if connectiontype.upper() == 'SSL': 87cdf0e10cSrcweir self.server.ehlo() 88cdf0e10cSrcweir self.server.starttls() 89cdf0e10cSrcweir self.server.ehlo() 90cdf0e10cSrcweir 91cdf0e10cSrcweir user = xAuthenticator.getUserName().encode('ascii') 92cdf0e10cSrcweir password = xAuthenticator.getPassword().encode('ascii') 93cdf0e10cSrcweir if user != '': 94cdf0e10cSrcweir if dbg: 95cdf0e10cSrcweir print >> sys.stderr, 'Logging in, username of', user 96cdf0e10cSrcweir self.server.login(user, password) 97cdf0e10cSrcweir 98cdf0e10cSrcweir for listener in self.listeners: 99cdf0e10cSrcweir listener.connected(self.notify) 100cdf0e10cSrcweir def disconnect(self): 101cdf0e10cSrcweir if dbg: 102cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService disconnect" 103cdf0e10cSrcweir if self.server: 104cdf0e10cSrcweir self.server.quit() 105cdf0e10cSrcweir self.server = None 106cdf0e10cSrcweir for listener in self.listeners: 107cdf0e10cSrcweir listener.disconnected(self.notify) 108cdf0e10cSrcweir def isConnected(self): 109cdf0e10cSrcweir if dbg: 110cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService isConnected" 111cdf0e10cSrcweir return self.server != None 112cdf0e10cSrcweir def getCurrentConnectionContext(self): 113cdf0e10cSrcweir if dbg: 114cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService getCurrentConnectionContext" 115cdf0e10cSrcweir return self.connectioncontext 116cdf0e10cSrcweir def sendMailMessage(self, xMailMessage): 117cdf0e10cSrcweir COMMASPACE = ', ' 118cdf0e10cSrcweir 119cdf0e10cSrcweir if dbg: 120cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService sendMailMessage" 121cdf0e10cSrcweir recipients = xMailMessage.getRecipients() 122cdf0e10cSrcweir sendermail = xMailMessage.SenderAddress 123cdf0e10cSrcweir sendername = xMailMessage.SenderName 124cdf0e10cSrcweir subject = xMailMessage.Subject 125cdf0e10cSrcweir ccrecipients = xMailMessage.getCcRecipients() 126cdf0e10cSrcweir bccrecipients = xMailMessage.getBccRecipients() 127cdf0e10cSrcweir if dbg: 128cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService subject", subject 129cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService from", sendername.encode('utf-8') 130cdf0e10cSrcweir print >> sys.stderr, "PyMailSMTPService from", sendermail 131cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService send to", recipients 132cdf0e10cSrcweir 133cdf0e10cSrcweir attachments = xMailMessage.getAttachments() 134cdf0e10cSrcweir 135cdf0e10cSrcweir textmsg = Message() 136cdf0e10cSrcweir 137cdf0e10cSrcweir content = xMailMessage.Body 138cdf0e10cSrcweir flavors = content.getTransferDataFlavors() 139cdf0e10cSrcweir if dbg: 140cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService flavors len", len(flavors) 141cdf0e10cSrcweir 142cdf0e10cSrcweir #Use first flavor that's sane for an email body 143cdf0e10cSrcweir for flavor in flavors: 144cdf0e10cSrcweir if flavor.MimeType.find('text/html') != -1 or flavor.MimeType.find('text/plain') != -1: 145cdf0e10cSrcweir if dbg: 146cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService mimetype is", flavor.MimeType 147cdf0e10cSrcweir textbody = content.getTransferData(flavor) 148cdf0e10cSrcweir try: 149cdf0e10cSrcweir textbody = textbody.value 150cdf0e10cSrcweir except: 151cdf0e10cSrcweir pass 152cdf0e10cSrcweir textbody = textbody.encode('utf-8') 153cdf0e10cSrcweir 154cdf0e10cSrcweir if len(textbody): 155cdf0e10cSrcweir mimeEncoding = re.sub("charset=.*", "charset=UTF-8", flavor.MimeType) 156cdf0e10cSrcweir if mimeEncoding.find('charset=UTF-8') == -1: 157cdf0e10cSrcweir mimeEncoding = mimeEncoding + "; charset=UTF-8" 158cdf0e10cSrcweir textmsg['Content-Type'] = mimeEncoding 159cdf0e10cSrcweir textmsg['MIME-Version'] = '1.0' 160cdf0e10cSrcweir textmsg.set_payload(textbody) 161cdf0e10cSrcweir 162cdf0e10cSrcweir break 163cdf0e10cSrcweir 164cdf0e10cSrcweir if (len(attachments)): 165cdf0e10cSrcweir msg = MIMEMultipart() 166cdf0e10cSrcweir msg.epilogue = '' 167cdf0e10cSrcweir msg.attach(textmsg) 168cdf0e10cSrcweir else: 169cdf0e10cSrcweir msg = textmsg 170cdf0e10cSrcweir 171cdf0e10cSrcweir hdr = Header(sendername, 'utf-8') 172cdf0e10cSrcweir hdr.append('<'+sendermail+'>','us-ascii') 173cdf0e10cSrcweir msg['Subject'] = subject 174cdf0e10cSrcweir msg['From'] = hdr 175cdf0e10cSrcweir msg['To'] = COMMASPACE.join(recipients) 176cdf0e10cSrcweir if len(ccrecipients): 177cdf0e10cSrcweir msg['Cc'] = COMMASPACE.join(ccrecipients) 178cdf0e10cSrcweir if xMailMessage.ReplyToAddress != '': 179cdf0e10cSrcweir msg['Reply-To'] = xMailMessage.ReplyToAddress 180cdf0e10cSrcweir 181cdf0e10cSrcweir mailerstring = "OpenOffice.org 2.0 via Caolan's mailmerge component" 182cdf0e10cSrcweir try: 183cdf0e10cSrcweir ctx = uno.getComponentContext() 184cdf0e10cSrcweir aConfigProvider = ctx.ServiceManager.createInstance("com.sun.star.configuration.ConfigurationProvider") 185cdf0e10cSrcweir prop = uno.createUnoStruct('com.sun.star.beans.PropertyValue') 186cdf0e10cSrcweir prop.Name = "nodepath" 187cdf0e10cSrcweir prop.Value = "/org.openoffice.Setup/Product" 188cdf0e10cSrcweir aSettings = aConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", 189cdf0e10cSrcweir (prop,)) 190cdf0e10cSrcweir mailerstring = aSettings.getByName("ooName") + " " + \ 191cdf0e10cSrcweir aSettings.getByName("ooSetupVersion") + " via Caolan's mailmerge component" 192cdf0e10cSrcweir except: 193cdf0e10cSrcweir pass 194cdf0e10cSrcweir 195cdf0e10cSrcweir msg['X-Mailer'] = mailerstring 196cdf0e10cSrcweir msg['Date'] = formatdate(localtime=True) 197cdf0e10cSrcweir 198cdf0e10cSrcweir for attachment in attachments: 199cdf0e10cSrcweir content = attachment.Data 200cdf0e10cSrcweir flavors = content.getTransferDataFlavors() 201cdf0e10cSrcweir flavor = flavors[0] 202cdf0e10cSrcweir ctype = flavor.MimeType 203cdf0e10cSrcweir maintype, subtype = ctype.split('/', 1) 204cdf0e10cSrcweir msgattachment = MIMEBase(maintype, subtype) 205cdf0e10cSrcweir data = content.getTransferData(flavor) 206cdf0e10cSrcweir msgattachment.set_payload(data) 207cdf0e10cSrcweir Encoders.encode_base64(msgattachment) 208*a0292563SAriel Constenla-Haile fname = attachment.ReadableName 209*a0292563SAriel Constenla-Haile try: 210*a0292563SAriel Constenla-Haile fname.encode('ascii') 211*a0292563SAriel Constenla-Haile except: 212*a0292563SAriel Constenla-Haile fname = ('utf-8','',fname.encode('utf-8')) 213cdf0e10cSrcweir msgattachment.add_header('Content-Disposition', 'attachment', \ 214*a0292563SAriel Constenla-Haile filename=fname) 215cdf0e10cSrcweir msg.attach(msgattachment) 216cdf0e10cSrcweir 217bb7facceSAriel Constenla-Haile 218cdf0e10cSrcweir uniquer = {} 219cdf0e10cSrcweir for key in recipients: 220cdf0e10cSrcweir uniquer[key] = True 221cdf0e10cSrcweir if len(ccrecipients): 222cdf0e10cSrcweir for key in ccrecipients: 223cdf0e10cSrcweir uniquer[key] = True 224cdf0e10cSrcweir if len(bccrecipients): 225cdf0e10cSrcweir for key in bccrecipients: 226cdf0e10cSrcweir uniquer[key] = True 227cdf0e10cSrcweir truerecipients = uniquer.keys() 228cdf0e10cSrcweir 229cdf0e10cSrcweir if dbg: 230cdf0e10cSrcweir print >> sys.stderr, "PyMailSMPTService recipients are", truerecipients 231cdf0e10cSrcweir 232cdf0e10cSrcweir self.server.sendmail(sendermail, truerecipients, msg.as_string()) 233cdf0e10cSrcweir 234cdf0e10cSrcweirclass PyMailIMAPService(unohelper.Base, XMailService): 235cdf0e10cSrcweir def __init__( self, ctx ): 236cdf0e10cSrcweir self.ctx = ctx 237cdf0e10cSrcweir self.listeners = [] 238cdf0e10cSrcweir self.supportedtypes = ('Insecure', 'Ssl') 239cdf0e10cSrcweir self.server = None 240cdf0e10cSrcweir self.connectioncontext = None 241bb7facceSAriel Constenla-Haile self.notify = EventObject(self) 242cdf0e10cSrcweir if dbg: 243cdf0e10cSrcweir print >> sys.stderr, "PyMailIMAPService init" 244cdf0e10cSrcweir def addConnectionListener(self, xListener): 245cdf0e10cSrcweir if dbg: 246cdf0e10cSrcweir print >> sys.stderr, "PyMailIMAPService addConnectionListener" 247cdf0e10cSrcweir self.listeners.append(xListener) 248cdf0e10cSrcweir def removeConnectionListener(self, xListener): 249cdf0e10cSrcweir if dbg: 250cdf0e10cSrcweir print >> sys.stderr, "PyMailIMAPService removeConnectionListener" 251cdf0e10cSrcweir self.listeners.remove(xListener) 252cdf0e10cSrcweir def getSupportedConnectionTypes(self): 253cdf0e10cSrcweir if dbg: 254cdf0e10cSrcweir print >> sys.stderr, "PyMailIMAPService getSupportedConnectionTypes" 255cdf0e10cSrcweir return self.supportedtypes 256cdf0e10cSrcweir def connect(self, xConnectionContext, xAuthenticator): 257cdf0e10cSrcweir if dbg: 258cdf0e10cSrcweir print >> sys.stderr, "PyMailIMAPService connect" 259cdf0e10cSrcweir 260cdf0e10cSrcweir self.connectioncontext = xConnectionContext 261cdf0e10cSrcweir server = xConnectionContext.getValueByName("ServerName") 262cdf0e10cSrcweir if dbg: 263cdf0e10cSrcweir print >> sys.stderr, server 264cdf0e10cSrcweir port = xConnectionContext.getValueByName("Port") 265cdf0e10cSrcweir if dbg: 266cdf0e10cSrcweir print >> sys.stderr, port 267cdf0e10cSrcweir connectiontype = xConnectionContext.getValueByName("ConnectionType") 268cdf0e10cSrcweir if dbg: 269cdf0e10cSrcweir print >> sys.stderr, connectiontype 270cdf0e10cSrcweir print >> sys.stderr, "BEFORE" 271bb7facceSAriel Constenla-Haile if connectiontype.upper() == 'SSL': 272cdf0e10cSrcweir self.server = imaplib.IMAP4_SSL(server, port) 273cdf0e10cSrcweir else: 274cdf0e10cSrcweir self.server = imaplib.IMAP4(server, port) 275cdf0e10cSrcweir print >> sys.stderr, "AFTER" 276cdf0e10cSrcweir 277cdf0e10cSrcweir user = xAuthenticator.getUserName().encode('ascii') 278cdf0e10cSrcweir password = xAuthenticator.getPassword().encode('ascii') 279cdf0e10cSrcweir if user != '': 280cdf0e10cSrcweir if dbg: 281cdf0e10cSrcweir print >> sys.stderr, 'Logging in, username of', user 282cdf0e10cSrcweir self.server.login(user, password) 283cdf0e10cSrcweir 284cdf0e10cSrcweir for listener in self.listeners: 285cdf0e10cSrcweir listener.connected(self.notify) 286cdf0e10cSrcweir def disconnect(self): 287cdf0e10cSrcweir if dbg: 288cdf0e10cSrcweir print >> sys.stderr, "PyMailIMAPService disconnect" 289cdf0e10cSrcweir if self.server: 290cdf0e10cSrcweir self.server.logout() 291cdf0e10cSrcweir self.server = None 292cdf0e10cSrcweir for listener in self.listeners: 293cdf0e10cSrcweir listener.disconnected(self.notify) 294cdf0e10cSrcweir def isConnected(self): 295cdf0e10cSrcweir if dbg: 296cdf0e10cSrcweir print >> sys.stderr, "PyMailIMAPService isConnected" 297cdf0e10cSrcweir return self.server != None 298cdf0e10cSrcweir def getCurrentConnectionContext(self): 299cdf0e10cSrcweir if dbg: 300cdf0e10cSrcweir print >> sys.stderr, "PyMailIMAPService getCurrentConnectionContext" 301cdf0e10cSrcweir return self.connectioncontext 302cdf0e10cSrcweir 303cdf0e10cSrcweirclass PyMailPOP3Service(unohelper.Base, XMailService): 304cdf0e10cSrcweir def __init__( self, ctx ): 305cdf0e10cSrcweir self.ctx = ctx 306cdf0e10cSrcweir self.listeners = [] 307cdf0e10cSrcweir self.supportedtypes = ('Insecure', 'Ssl') 308cdf0e10cSrcweir self.server = None 309cdf0e10cSrcweir self.connectioncontext = None 310bb7facceSAriel Constenla-Haile self.notify = EventObject(self) 311cdf0e10cSrcweir if dbg: 312cdf0e10cSrcweir print >> sys.stderr, "PyMailPOP3Service init" 313cdf0e10cSrcweir def addConnectionListener(self, xListener): 314cdf0e10cSrcweir if dbg: 315cdf0e10cSrcweir print >> sys.stderr, "PyMailPOP3Service addConnectionListener" 316cdf0e10cSrcweir self.listeners.append(xListener) 317cdf0e10cSrcweir def removeConnectionListener(self, xListener): 318cdf0e10cSrcweir if dbg: 319cdf0e10cSrcweir print >> sys.stderr, "PyMailPOP3Service removeConnectionListener" 320cdf0e10cSrcweir self.listeners.remove(xListener) 321cdf0e10cSrcweir def getSupportedConnectionTypes(self): 322cdf0e10cSrcweir if dbg: 323cdf0e10cSrcweir print >> sys.stderr, "PyMailPOP3Service getSupportedConnectionTypes" 324cdf0e10cSrcweir return self.supportedtypes 325cdf0e10cSrcweir def connect(self, xConnectionContext, xAuthenticator): 326cdf0e10cSrcweir if dbg: 327cdf0e10cSrcweir print >> sys.stderr, "PyMailPOP3Service connect" 328cdf0e10cSrcweir 329cdf0e10cSrcweir self.connectioncontext = xConnectionContext 330cdf0e10cSrcweir server = xConnectionContext.getValueByName("ServerName") 331cdf0e10cSrcweir if dbg: 332cdf0e10cSrcweir print >> sys.stderr, server 333cdf0e10cSrcweir port = xConnectionContext.getValueByName("Port") 334cdf0e10cSrcweir if dbg: 335cdf0e10cSrcweir print >> sys.stderr, port 336cdf0e10cSrcweir connectiontype = xConnectionContext.getValueByName("ConnectionType") 337cdf0e10cSrcweir if dbg: 338cdf0e10cSrcweir print >> sys.stderr, connectiontype 339cdf0e10cSrcweir print >> sys.stderr, "BEFORE" 340bb7facceSAriel Constenla-Haile if connectiontype.upper() == 'SSL': 341cdf0e10cSrcweir self.server = poplib.POP3_SSL(server, port) 342cdf0e10cSrcweir else: 343cdf0e10cSrcweir self.server = poplib.POP3(server, port) 344cdf0e10cSrcweir print >> sys.stderr, "AFTER" 345cdf0e10cSrcweir 346cdf0e10cSrcweir user = xAuthenticator.getUserName().encode('ascii') 347cdf0e10cSrcweir password = xAuthenticator.getPassword().encode('ascii') 348cdf0e10cSrcweir if dbg: 349cdf0e10cSrcweir print >> sys.stderr, 'Logging in, username of', user 350cdf0e10cSrcweir self.server.user(user) 351bb7facceSAriel Constenla-Haile self.server.pass_(password) 352cdf0e10cSrcweir 353cdf0e10cSrcweir for listener in self.listeners: 354cdf0e10cSrcweir listener.connected(self.notify) 355cdf0e10cSrcweir def disconnect(self): 356cdf0e10cSrcweir if dbg: 357cdf0e10cSrcweir print >> sys.stderr, "PyMailPOP3Service disconnect" 358cdf0e10cSrcweir if self.server: 359cdf0e10cSrcweir self.server.quit() 360cdf0e10cSrcweir self.server = None 361cdf0e10cSrcweir for listener in self.listeners: 362cdf0e10cSrcweir listener.disconnected(self.notify) 363cdf0e10cSrcweir def isConnected(self): 364cdf0e10cSrcweir if dbg: 365cdf0e10cSrcweir print >> sys.stderr, "PyMailPOP3Service isConnected" 366cdf0e10cSrcweir return self.server != None 367cdf0e10cSrcweir def getCurrentConnectionContext(self): 368cdf0e10cSrcweir if dbg: 369cdf0e10cSrcweir print >> sys.stderr, "PyMailPOP3Service getCurrentConnectionContext" 370cdf0e10cSrcweir return self.connectioncontext 371cdf0e10cSrcweir 372cdf0e10cSrcweirclass PyMailServiceProvider(unohelper.Base, XMailServiceProvider): 373cdf0e10cSrcweir def __init__( self, ctx ): 374cdf0e10cSrcweir if dbg: 375cdf0e10cSrcweir print >> sys.stderr, "PyMailServiceProvider init" 376cdf0e10cSrcweir self.ctx = ctx 377cdf0e10cSrcweir def create(self, aType): 378cdf0e10cSrcweir if dbg: 379cdf0e10cSrcweir print >> sys.stderr, "PyMailServiceProvider create with", aType 380cdf0e10cSrcweir if aType == SMTP: 381cdf0e10cSrcweir return PyMailSMTPService(self.ctx); 382cdf0e10cSrcweir elif aType == POP3: 383cdf0e10cSrcweir return PyMailPOP3Service(self.ctx); 384cdf0e10cSrcweir elif aType == IMAP: 385cdf0e10cSrcweir return PyMailIMAPService(self.ctx); 386cdf0e10cSrcweir else: 387cdf0e10cSrcweir print >> sys.stderr, "PyMailServiceProvider, unknown TYPE", aType 388cdf0e10cSrcweir 389cdf0e10cSrcweirclass PyMailMessage(unohelper.Base, XMailMessage): 390cdf0e10cSrcweir def __init__( self, ctx, sTo='', sFrom='', Subject='', Body=None, aMailAttachment=None ): 391cdf0e10cSrcweir if dbg: 392cdf0e10cSrcweir print >> sys.stderr, "PyMailMessage init" 393cdf0e10cSrcweir self.ctx = ctx 394cdf0e10cSrcweir 395bb7facceSAriel Constenla-Haile self.recipients = [sTo] 396bb7facceSAriel Constenla-Haile self.ccrecipients = [] 397bb7facceSAriel Constenla-Haile self.bccrecipients = [] 398bb7facceSAriel Constenla-Haile self.aMailAttachments = [] 399cdf0e10cSrcweir if aMailAttachment != None: 400bb7facceSAriel Constenla-Haile self.aMailAttachments.append(aMailAttachment) 401cdf0e10cSrcweir 402cdf0e10cSrcweir self.SenderName, self.SenderAddress = parseaddr(sFrom) 403cdf0e10cSrcweir self.ReplyToAddress = sFrom 404cdf0e10cSrcweir self.Subject = Subject 405cdf0e10cSrcweir self.Body = Body 406cdf0e10cSrcweir if dbg: 407cdf0e10cSrcweir print >> sys.stderr, "post PyMailMessage init" 408cdf0e10cSrcweir def addRecipient( self, recipient ): 409cdf0e10cSrcweir if dbg: 410cdf0e10cSrcweir print >> sys.stderr, "PyMailMessage.addRecipient", recipient 411bb7facceSAriel Constenla-Haile self.recipients.append(recipient) 412cdf0e10cSrcweir def addCcRecipient( self, ccrecipient ): 413cdf0e10cSrcweir if dbg: 414cdf0e10cSrcweir print >> sys.stderr, "PyMailMessage.addCcRecipient", ccrecipient 415bb7facceSAriel Constenla-Haile self.ccrecipients.append(ccrecipient) 416cdf0e10cSrcweir def addBccRecipient( self, bccrecipient ): 417cdf0e10cSrcweir if dbg: 418cdf0e10cSrcweir print >> sys.stderr, "PyMailMessage.addBccRecipient", bccrecipient 419bb7facceSAriel Constenla-Haile self.bccrecipients.append(bccrecipient) 420cdf0e10cSrcweir def getRecipients( self ): 421cdf0e10cSrcweir if dbg: 422cdf0e10cSrcweir print >> sys.stderr, "PyMailMessage.getRecipients", self.recipients 423bb7facceSAriel Constenla-Haile return tuple(self.recipients) 424cdf0e10cSrcweir def getCcRecipients( self ): 425cdf0e10cSrcweir if dbg: 426cdf0e10cSrcweir print >> sys.stderr, "PyMailMessage.getCcRecipients", self.ccrecipients 427bb7facceSAriel Constenla-Haile return tuple(self.ccrecipients) 428cdf0e10cSrcweir def getBccRecipients( self ): 429cdf0e10cSrcweir if dbg: 430cdf0e10cSrcweir print >> sys.stderr, "PyMailMessage.getBccRecipients", self.bccrecipients 431bb7facceSAriel Constenla-Haile return tuple(self.bccrecipients) 432cdf0e10cSrcweir def addAttachment( self, aMailAttachment ): 433cdf0e10cSrcweir if dbg: 434cdf0e10cSrcweir print >> sys.stderr, "PyMailMessage.addAttachment" 435bb7facceSAriel Constenla-Haile self.aMailAttachments.append(aMailAttachment) 436cdf0e10cSrcweir def getAttachments( self ): 437cdf0e10cSrcweir if dbg: 438cdf0e10cSrcweir print >> sys.stderr, "PyMailMessage.getAttachments" 439bb7facceSAriel Constenla-Haile return tuple(self.aMailAttachments) 440bb7facceSAriel Constenla-Haile 441cdf0e10cSrcweir 442cdf0e10cSrcweir# pythonloader looks for a static g_ImplementationHelper variable 443cdf0e10cSrcweirg_ImplementationHelper = unohelper.ImplementationHelper() 444cdf0e10cSrcweirg_ImplementationHelper.addImplementation( \ 445cdf0e10cSrcweir PyMailServiceProvider, "org.openoffice.pyuno.MailServiceProvider", 446cdf0e10cSrcweir ("com.sun.star.mail.MailServiceProvider",),) 447cdf0e10cSrcweirg_ImplementationHelper.addImplementation( \ 448cdf0e10cSrcweir PyMailMessage, "org.openoffice.pyuno.MailMessage", 449cdf0e10cSrcweir ("com.sun.star.mail.MailMessage",),) 450