xref: /trunk/main/scripting/source/pyprov/mailmerge.py (revision bb7facce3c24801afab8efad01a6b4ffd31c7b49)
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
55*bb7facceSAriel 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
86*bb7facceSAriel 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)
208cdf0e10cSrcweir            msgattachment.add_header('Content-Disposition', 'attachment', \
209*bb7facceSAriel Constenla-Haile                filename=('utf-8','',attachment.ReadableName.encode('utf-8')))
210cdf0e10cSrcweir            msg.attach(msgattachment)
211cdf0e10cSrcweir
212*bb7facceSAriel Constenla-Haile
213cdf0e10cSrcweir        uniquer = {}
214cdf0e10cSrcweir        for key in recipients:
215cdf0e10cSrcweir            uniquer[key] = True
216cdf0e10cSrcweir        if len(ccrecipients):
217cdf0e10cSrcweir            for key in ccrecipients:
218cdf0e10cSrcweir                uniquer[key] = True
219cdf0e10cSrcweir        if len(bccrecipients):
220cdf0e10cSrcweir            for key in bccrecipients:
221cdf0e10cSrcweir                uniquer[key] = True
222cdf0e10cSrcweir        truerecipients = uniquer.keys()
223cdf0e10cSrcweir
224cdf0e10cSrcweir        if dbg:
225cdf0e10cSrcweir            print >> sys.stderr, "PyMailSMPTService recipients are", truerecipients
226cdf0e10cSrcweir
227cdf0e10cSrcweir        self.server.sendmail(sendermail, truerecipients, msg.as_string())
228cdf0e10cSrcweir
229cdf0e10cSrcweirclass PyMailIMAPService(unohelper.Base, XMailService):
230cdf0e10cSrcweir    def __init__( self, ctx ):
231cdf0e10cSrcweir        self.ctx = ctx
232cdf0e10cSrcweir        self.listeners = []
233cdf0e10cSrcweir        self.supportedtypes = ('Insecure', 'Ssl')
234cdf0e10cSrcweir        self.server = None
235cdf0e10cSrcweir        self.connectioncontext = None
236*bb7facceSAriel Constenla-Haile        self.notify = EventObject(self)
237cdf0e10cSrcweir        if dbg:
238cdf0e10cSrcweir            print >> sys.stderr, "PyMailIMAPService init"
239cdf0e10cSrcweir    def addConnectionListener(self, xListener):
240cdf0e10cSrcweir        if dbg:
241cdf0e10cSrcweir            print >> sys.stderr, "PyMailIMAPService addConnectionListener"
242cdf0e10cSrcweir        self.listeners.append(xListener)
243cdf0e10cSrcweir    def removeConnectionListener(self, xListener):
244cdf0e10cSrcweir        if dbg:
245cdf0e10cSrcweir            print >> sys.stderr, "PyMailIMAPService removeConnectionListener"
246cdf0e10cSrcweir        self.listeners.remove(xListener)
247cdf0e10cSrcweir    def getSupportedConnectionTypes(self):
248cdf0e10cSrcweir        if dbg:
249cdf0e10cSrcweir            print >> sys.stderr, "PyMailIMAPService getSupportedConnectionTypes"
250cdf0e10cSrcweir        return self.supportedtypes
251cdf0e10cSrcweir    def connect(self, xConnectionContext, xAuthenticator):
252cdf0e10cSrcweir        if dbg:
253cdf0e10cSrcweir            print >> sys.stderr, "PyMailIMAPService connect"
254cdf0e10cSrcweir
255cdf0e10cSrcweir        self.connectioncontext = xConnectionContext
256cdf0e10cSrcweir        server = xConnectionContext.getValueByName("ServerName")
257cdf0e10cSrcweir        if dbg:
258cdf0e10cSrcweir            print >> sys.stderr, server
259cdf0e10cSrcweir        port = xConnectionContext.getValueByName("Port")
260cdf0e10cSrcweir        if dbg:
261cdf0e10cSrcweir            print >> sys.stderr, port
262cdf0e10cSrcweir        connectiontype = xConnectionContext.getValueByName("ConnectionType")
263cdf0e10cSrcweir        if dbg:
264cdf0e10cSrcweir            print >> sys.stderr, connectiontype
265cdf0e10cSrcweir        print >> sys.stderr, "BEFORE"
266*bb7facceSAriel Constenla-Haile        if connectiontype.upper() == 'SSL':
267cdf0e10cSrcweir            self.server = imaplib.IMAP4_SSL(server, port)
268cdf0e10cSrcweir        else:
269cdf0e10cSrcweir            self.server = imaplib.IMAP4(server, port)
270cdf0e10cSrcweir        print >> sys.stderr, "AFTER"
271cdf0e10cSrcweir
272cdf0e10cSrcweir        user = xAuthenticator.getUserName().encode('ascii')
273cdf0e10cSrcweir        password = xAuthenticator.getPassword().encode('ascii')
274cdf0e10cSrcweir        if user != '':
275cdf0e10cSrcweir            if dbg:
276cdf0e10cSrcweir                print >> sys.stderr, 'Logging in, username of', user
277cdf0e10cSrcweir            self.server.login(user, password)
278cdf0e10cSrcweir
279cdf0e10cSrcweir        for listener in self.listeners:
280cdf0e10cSrcweir            listener.connected(self.notify)
281cdf0e10cSrcweir    def disconnect(self):
282cdf0e10cSrcweir        if dbg:
283cdf0e10cSrcweir            print >> sys.stderr, "PyMailIMAPService disconnect"
284cdf0e10cSrcweir        if self.server:
285cdf0e10cSrcweir            self.server.logout()
286cdf0e10cSrcweir            self.server = None
287cdf0e10cSrcweir        for listener in self.listeners:
288cdf0e10cSrcweir            listener.disconnected(self.notify)
289cdf0e10cSrcweir    def isConnected(self):
290cdf0e10cSrcweir        if dbg:
291cdf0e10cSrcweir            print >> sys.stderr, "PyMailIMAPService isConnected"
292cdf0e10cSrcweir        return self.server != None
293cdf0e10cSrcweir    def getCurrentConnectionContext(self):
294cdf0e10cSrcweir        if dbg:
295cdf0e10cSrcweir            print >> sys.stderr, "PyMailIMAPService getCurrentConnectionContext"
296cdf0e10cSrcweir        return self.connectioncontext
297cdf0e10cSrcweir
298cdf0e10cSrcweirclass PyMailPOP3Service(unohelper.Base, XMailService):
299cdf0e10cSrcweir    def __init__( self, ctx ):
300cdf0e10cSrcweir        self.ctx = ctx
301cdf0e10cSrcweir        self.listeners = []
302cdf0e10cSrcweir        self.supportedtypes = ('Insecure', 'Ssl')
303cdf0e10cSrcweir        self.server = None
304cdf0e10cSrcweir        self.connectioncontext = None
305*bb7facceSAriel Constenla-Haile        self.notify = EventObject(self)
306cdf0e10cSrcweir        if dbg:
307cdf0e10cSrcweir            print >> sys.stderr, "PyMailPOP3Service init"
308cdf0e10cSrcweir    def addConnectionListener(self, xListener):
309cdf0e10cSrcweir        if dbg:
310cdf0e10cSrcweir            print >> sys.stderr, "PyMailPOP3Service addConnectionListener"
311cdf0e10cSrcweir        self.listeners.append(xListener)
312cdf0e10cSrcweir    def removeConnectionListener(self, xListener):
313cdf0e10cSrcweir        if dbg:
314cdf0e10cSrcweir            print >> sys.stderr, "PyMailPOP3Service removeConnectionListener"
315cdf0e10cSrcweir        self.listeners.remove(xListener)
316cdf0e10cSrcweir    def getSupportedConnectionTypes(self):
317cdf0e10cSrcweir        if dbg:
318cdf0e10cSrcweir            print >> sys.stderr, "PyMailPOP3Service getSupportedConnectionTypes"
319cdf0e10cSrcweir        return self.supportedtypes
320cdf0e10cSrcweir    def connect(self, xConnectionContext, xAuthenticator):
321cdf0e10cSrcweir        if dbg:
322cdf0e10cSrcweir            print >> sys.stderr, "PyMailPOP3Service connect"
323cdf0e10cSrcweir
324cdf0e10cSrcweir        self.connectioncontext = xConnectionContext
325cdf0e10cSrcweir        server = xConnectionContext.getValueByName("ServerName")
326cdf0e10cSrcweir        if dbg:
327cdf0e10cSrcweir            print >> sys.stderr, server
328cdf0e10cSrcweir        port = xConnectionContext.getValueByName("Port")
329cdf0e10cSrcweir        if dbg:
330cdf0e10cSrcweir            print >> sys.stderr, port
331cdf0e10cSrcweir        connectiontype = xConnectionContext.getValueByName("ConnectionType")
332cdf0e10cSrcweir        if dbg:
333cdf0e10cSrcweir            print >> sys.stderr, connectiontype
334cdf0e10cSrcweir        print >> sys.stderr, "BEFORE"
335*bb7facceSAriel Constenla-Haile        if connectiontype.upper() == 'SSL':
336cdf0e10cSrcweir            self.server = poplib.POP3_SSL(server, port)
337cdf0e10cSrcweir        else:
338cdf0e10cSrcweir            self.server = poplib.POP3(server, port)
339cdf0e10cSrcweir        print >> sys.stderr, "AFTER"
340cdf0e10cSrcweir
341cdf0e10cSrcweir        user = xAuthenticator.getUserName().encode('ascii')
342cdf0e10cSrcweir        password = xAuthenticator.getPassword().encode('ascii')
343cdf0e10cSrcweir        if dbg:
344cdf0e10cSrcweir            print >> sys.stderr, 'Logging in, username of', user
345cdf0e10cSrcweir        self.server.user(user)
346*bb7facceSAriel Constenla-Haile        self.server.pass_(password)
347cdf0e10cSrcweir
348cdf0e10cSrcweir        for listener in self.listeners:
349cdf0e10cSrcweir            listener.connected(self.notify)
350cdf0e10cSrcweir    def disconnect(self):
351cdf0e10cSrcweir        if dbg:
352cdf0e10cSrcweir            print >> sys.stderr, "PyMailPOP3Service disconnect"
353cdf0e10cSrcweir        if self.server:
354cdf0e10cSrcweir            self.server.quit()
355cdf0e10cSrcweir            self.server = None
356cdf0e10cSrcweir        for listener in self.listeners:
357cdf0e10cSrcweir            listener.disconnected(self.notify)
358cdf0e10cSrcweir    def isConnected(self):
359cdf0e10cSrcweir        if dbg:
360cdf0e10cSrcweir            print >> sys.stderr, "PyMailPOP3Service isConnected"
361cdf0e10cSrcweir        return self.server != None
362cdf0e10cSrcweir    def getCurrentConnectionContext(self):
363cdf0e10cSrcweir        if dbg:
364cdf0e10cSrcweir            print >> sys.stderr, "PyMailPOP3Service getCurrentConnectionContext"
365cdf0e10cSrcweir        return self.connectioncontext
366cdf0e10cSrcweir
367cdf0e10cSrcweirclass PyMailServiceProvider(unohelper.Base, XMailServiceProvider):
368cdf0e10cSrcweir    def __init__( self, ctx ):
369cdf0e10cSrcweir        if dbg:
370cdf0e10cSrcweir            print >> sys.stderr, "PyMailServiceProvider init"
371cdf0e10cSrcweir        self.ctx = ctx
372cdf0e10cSrcweir    def create(self, aType):
373cdf0e10cSrcweir        if dbg:
374cdf0e10cSrcweir            print >> sys.stderr, "PyMailServiceProvider create with", aType
375cdf0e10cSrcweir        if aType == SMTP:
376cdf0e10cSrcweir            return PyMailSMTPService(self.ctx);
377cdf0e10cSrcweir        elif aType == POP3:
378cdf0e10cSrcweir            return PyMailPOP3Service(self.ctx);
379cdf0e10cSrcweir        elif aType == IMAP:
380cdf0e10cSrcweir            return PyMailIMAPService(self.ctx);
381cdf0e10cSrcweir        else:
382cdf0e10cSrcweir            print >> sys.stderr, "PyMailServiceProvider, unknown TYPE", aType
383cdf0e10cSrcweir
384cdf0e10cSrcweirclass PyMailMessage(unohelper.Base, XMailMessage):
385cdf0e10cSrcweir    def __init__( self, ctx, sTo='', sFrom='', Subject='', Body=None, aMailAttachment=None ):
386cdf0e10cSrcweir        if dbg:
387cdf0e10cSrcweir            print >> sys.stderr, "PyMailMessage init"
388cdf0e10cSrcweir        self.ctx = ctx
389cdf0e10cSrcweir
390*bb7facceSAriel Constenla-Haile        self.recipients = [sTo]
391*bb7facceSAriel Constenla-Haile        self.ccrecipients = []
392*bb7facceSAriel Constenla-Haile        self.bccrecipients = []
393*bb7facceSAriel Constenla-Haile        self.aMailAttachments = []
394cdf0e10cSrcweir        if aMailAttachment != None:
395*bb7facceSAriel Constenla-Haile            self.aMailAttachments.append(aMailAttachment)
396cdf0e10cSrcweir
397cdf0e10cSrcweir        self.SenderName, self.SenderAddress = parseaddr(sFrom)
398cdf0e10cSrcweir        self.ReplyToAddress = sFrom
399cdf0e10cSrcweir        self.Subject = Subject
400cdf0e10cSrcweir        self.Body = Body
401cdf0e10cSrcweir        if dbg:
402cdf0e10cSrcweir            print >> sys.stderr, "post PyMailMessage init"
403cdf0e10cSrcweir    def addRecipient( self, recipient ):
404cdf0e10cSrcweir        if dbg:
405cdf0e10cSrcweir            print >> sys.stderr, "PyMailMessage.addRecipient", recipient
406*bb7facceSAriel Constenla-Haile        self.recipients.append(recipient)
407cdf0e10cSrcweir    def addCcRecipient( self, ccrecipient ):
408cdf0e10cSrcweir        if dbg:
409cdf0e10cSrcweir            print >> sys.stderr, "PyMailMessage.addCcRecipient", ccrecipient
410*bb7facceSAriel Constenla-Haile        self.ccrecipients.append(ccrecipient)
411cdf0e10cSrcweir    def addBccRecipient( self, bccrecipient ):
412cdf0e10cSrcweir        if dbg:
413cdf0e10cSrcweir            print >> sys.stderr, "PyMailMessage.addBccRecipient", bccrecipient
414*bb7facceSAriel Constenla-Haile        self.bccrecipients.append(bccrecipient)
415cdf0e10cSrcweir    def getRecipients( self ):
416cdf0e10cSrcweir        if dbg:
417cdf0e10cSrcweir            print >> sys.stderr, "PyMailMessage.getRecipients", self.recipients
418*bb7facceSAriel Constenla-Haile        return tuple(self.recipients)
419cdf0e10cSrcweir    def getCcRecipients( self ):
420cdf0e10cSrcweir        if dbg:
421cdf0e10cSrcweir            print >> sys.stderr, "PyMailMessage.getCcRecipients", self.ccrecipients
422*bb7facceSAriel Constenla-Haile        return tuple(self.ccrecipients)
423cdf0e10cSrcweir    def getBccRecipients( self ):
424cdf0e10cSrcweir        if dbg:
425cdf0e10cSrcweir            print >> sys.stderr, "PyMailMessage.getBccRecipients", self.bccrecipients
426*bb7facceSAriel Constenla-Haile        return tuple(self.bccrecipients)
427cdf0e10cSrcweir    def addAttachment( self, aMailAttachment ):
428cdf0e10cSrcweir        if dbg:
429cdf0e10cSrcweir            print >> sys.stderr, "PyMailMessage.addAttachment"
430*bb7facceSAriel Constenla-Haile        self.aMailAttachments.append(aMailAttachment)
431cdf0e10cSrcweir    def getAttachments( self ):
432cdf0e10cSrcweir        if dbg:
433cdf0e10cSrcweir            print >> sys.stderr, "PyMailMessage.getAttachments"
434*bb7facceSAriel Constenla-Haile        return tuple(self.aMailAttachments)
435*bb7facceSAriel Constenla-Haile
436cdf0e10cSrcweir
437cdf0e10cSrcweir# pythonloader looks for a static g_ImplementationHelper variable
438cdf0e10cSrcweirg_ImplementationHelper = unohelper.ImplementationHelper()
439cdf0e10cSrcweirg_ImplementationHelper.addImplementation( \
440cdf0e10cSrcweir    PyMailServiceProvider, "org.openoffice.pyuno.MailServiceProvider",
441cdf0e10cSrcweir        ("com.sun.star.mail.MailServiceProvider",),)
442cdf0e10cSrcweirg_ImplementationHelper.addImplementation( \
443cdf0e10cSrcweir    PyMailMessage, "org.openoffice.pyuno.MailMessage",
444cdf0e10cSrcweir        ("com.sun.star.mail.MailMessage",),)
445