Hello, >>> main_msg['Content-type'] = 'Multipart/mixed' >> Would it be the 'Content-Type' header? I've no expertise in this, but >> doesn't 'multipart' mean 'has attachments'? > Brilliant, thank you. A swift test on the number of attachments and > changing the header suitably does the job.
That isn't quite all there is to it, the e-mail construction needs a slight change as well. Roughly working code below. Ta, Russell Code: def sendEmail(msg_to, msg_from, msg_subject, message, attachments=[]): main_msg = email.Message.Message() main_msg['To'] = ', '.join(msg_to) main_msg['From'] = msg_from main_msg['Subject'] = msg_subject main_msg['Date'] = email.Utils.formatdate(localtime=1) main_msg['Message-ID'] = email.Utils.make_msgid() main_msg['Mime-version'] = '1.0' main_msg.preamble = 'Mime message\n' main_msg.epilogue = '' body_encoded = quopri.encodestring(message, 1) if len(attachments) <> 0: main_msg['Content-type'] = 'Multipart/mixed' body_msg = email.Message.Message() body_msg.add_header('Content-type', 'text/plain') body_msg.add_header('Content-transfer-encoding', 'quoted-printable') body_msg.set_payload(body_encoded) main_msg.attach(body_msg) for attachment in attachments: content_type, ignored = mimetypes.guess_type(attachment) if content_type == None: content_type = 'application/octet-stream' contents_encoded = cStringIO.StringIO() attach_file = open(attachment, 'rb') main_type = content_type[:content_type.find('/')] if main_type == 'text': cte = 'quoted-printable' quopri.encode(attach_file, contents_encoded, 1) else: cte = 'base64' base64.encode(attach_file, contents_encoded) attach_file.close() sub_msg = email.Message.Message() sub_msg.add_header('Content-type', content_type, name=attachment) sub_msg.add_header('Content-transfer-encoding', cte) sub_msg.set_payload(contents_encoded.getvalue()) main_msg.attach(sub_msg) else: main_msg['Content-type'] = 'text/plain' main_msg['Content-transfer-encoding'] = 'quoted-printable' main_msg.set_payload(body_encoded) smtp = smtplib.SMTP('server') smtpfail = smtp.sendmail(msg_from, ', '.join(msg_to), main_msg.as_string()) smtp.quit() -- http://mail.python.org/mailman/listinfo/python-list