Kaydet (Commit) e48a060e authored tarafından Caolán McNamara's avatar Caolán McNamara

make emailmerge work for me with python3

Change-Id: I4f79aa69b39d2be8fcceacc90b858f116f875385
üst a5dc0463
Easiest way I find to test this is to...
1)
a) install fakemail and run it
b) tools->options->writer->mail merge email
c) localhost 8025
2)
a) type some text into writer that will exercise utf-8, e.g. "Caolán's test"
b) tools->mail merge wizard->next->email message->select address book
c) create, add one user with your own email address, ok
d) next, next, text, send merged document as email
e) and test all of plain text, html and the various attachment options
fake mail will dump the mail it gets into its pwd, if all that works, you can
then try with your own normal mail server.
...@@ -36,6 +36,8 @@ from com.sun.star.mail import SendMailMessageFailedException ...@@ -36,6 +36,8 @@ from com.sun.star.mail import SendMailMessageFailedException
from email.mime.base import MIMEBase from email.mime.base import MIMEBase
from email.message import Message from email.message import Message
from email.charset import Charset
from email.charset import QP
from email.encoders import encode_base64 from email.encoders import encode_base64
from email.header import Header from email.header import Header
from email.mime.multipart import MIMEMultipart from email.mime.multipart import MIMEMultipart
...@@ -152,7 +154,7 @@ class PyMailSMTPService(unohelper.Base, XSmtpService): ...@@ -152,7 +154,7 @@ class PyMailSMTPService(unohelper.Base, XSmtpService):
print("PyMailSMTPService subject " + subject, file=dbgout) print("PyMailSMTPService subject " + subject, file=dbgout)
print("PyMailSMTPService from " + sendername, file=dbgout) print("PyMailSMTPService from " + sendername, file=dbgout)
print("PyMailSMTPService from " + sendermail, file=dbgout) print("PyMailSMTPService from " + sendermail, file=dbgout)
print("PyMailSMTPService send to " + recipients, file=dbgout) print("PyMailSMTPService send to %s" % (recipients,), file=dbgout)
attachments = xMailMessage.getAttachments() attachments = xMailMessage.getAttachments()
...@@ -161,7 +163,7 @@ class PyMailSMTPService(unohelper.Base, XSmtpService): ...@@ -161,7 +163,7 @@ class PyMailSMTPService(unohelper.Base, XSmtpService):
content = xMailMessage.Body content = xMailMessage.Body
flavors = content.getTransferDataFlavors() flavors = content.getTransferDataFlavors()
if dbg: if dbg:
print("PyMailSMTPService flavors len " + len(flavors), file=dbgout) print("PyMailSMTPService flavors len %d" % (len(flavors),), file=dbgout)
#Use first flavor that's sane for an email body #Use first flavor that's sane for an email body
for flavor in flavors: for flavor in flavors:
...@@ -169,11 +171,8 @@ class PyMailSMTPService(unohelper.Base, XSmtpService): ...@@ -169,11 +171,8 @@ class PyMailSMTPService(unohelper.Base, XSmtpService):
if dbg: if dbg:
print("PyMailSMTPService mimetype is " + flavor.MimeType, file=dbgout) print("PyMailSMTPService mimetype is " + flavor.MimeType, file=dbgout)
textbody = content.getTransferData(flavor) textbody = content.getTransferData(flavor)
try: #http://stackoverflow.com/questions/9403265/how-do-i-use-python-3-2-email-module-to-send-unicode-messages-encoded-in-utf-8-w
textbody = textbody.value textbody = textbody.encode('utf-8').decode('iso8859-1')
except:
pass
textbody = textbody.encode('utf-8')
if len(textbody): if len(textbody):
mimeEncoding = re.sub("charset=.*", "charset=UTF-8", flavor.MimeType) mimeEncoding = re.sub("charset=.*", "charset=UTF-8", flavor.MimeType)
...@@ -181,7 +180,9 @@ class PyMailSMTPService(unohelper.Base, XSmtpService): ...@@ -181,7 +180,9 @@ class PyMailSMTPService(unohelper.Base, XSmtpService):
mimeEncoding = mimeEncoding + "; charset=UTF-8" mimeEncoding = mimeEncoding + "; charset=UTF-8"
textmsg['Content-Type'] = mimeEncoding textmsg['Content-Type'] = mimeEncoding
textmsg['MIME-Version'] = '1.0' textmsg['MIME-Version'] = '1.0'
textmsg.set_payload(textbody) c = Charset('utf-8')
c.body_encoding = QP
textmsg.set_payload(textbody, c)
break break
...@@ -227,7 +228,7 @@ class PyMailSMTPService(unohelper.Base, XSmtpService): ...@@ -227,7 +228,7 @@ class PyMailSMTPService(unohelper.Base, XSmtpService):
maintype, subtype = ctype.split('/', 1) maintype, subtype = ctype.split('/', 1)
msgattachment = MIMEBase(maintype, subtype) msgattachment = MIMEBase(maintype, subtype)
data = content.getTransferData(flavor) data = content.getTransferData(flavor)
msgattachment.set_payload(data) msgattachment.set_payload(data.value)
encode_base64(msgattachment) encode_base64(msgattachment)
fname = attachment.ReadableName fname = attachment.ReadableName
try: try:
...@@ -250,7 +251,7 @@ class PyMailSMTPService(unohelper.Base, XSmtpService): ...@@ -250,7 +251,7 @@ class PyMailSMTPService(unohelper.Base, XSmtpService):
truerecipients = uniquer.keys() truerecipients = uniquer.keys()
if dbg: if dbg:
print("PyMailSMTPService recipients are " + truerecipients, file=dbgout) print(("PyMailSMTPService recipients are ", truerecipients), file=dbgout)
self.server.sendmail(sendermail, truerecipients, msg.as_string()) self.server.sendmail(sendermail, truerecipients, msg.as_string())
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment