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