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