I've found a solution for sending multi-part emails (text & html) and even embedded images.
In your controller (or a custom module) from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText from email.MIMEImage import MIMEImage #helper function to build a multi-part mime email def _multipart_email(sender, recipient, subject, message_text, message_html, attach_image): #Taken from http://code.activestate.com/recipes/473810/ with very minor changes # Define these once; use them twice! strFrom = sender strTo = recipient # Create the root message and fill in the from, to, and subject headers msgRoot = MIMEMultipart('related') msgRoot['Subject'] = subject msgRoot['From'] = strFrom msgRoot['To'] = strTo msgRoot.preamble = 'This is a multi-part message in MIME format.' # Encapsulate the plain and HTML versions of the message body in an # 'alternative' part, so message agents can decide which they want to display. msgAlternative = MIMEMultipart('alternative') msgRoot.attach(msgAlternative) msgText = MIMEText(message_text) msgAlternative.attach(msgText) # We reference the image in the IMG SRC attribute by the ID we give it below msgText = MIMEText(message_html, 'html') msgAlternative.attach(msgText) if attach_image: # This example assumes the image is in the current directory or you've passed the full path fp = open(attach_image, 'rb') msgImage = MIMEImage(fp.read()) fp.close() #you can refer to this image as <img src="cid:image1"> in your html message. # Define the image's ID as referenced above msgImage.add_header('Content-ID', '<image1>') msgRoot.attach(msgImage) return msgRoot In your controller: #visit this page and you'll get an email def email(): host = 'smtp.gmail.com' #your mail server port = 587 #port if non-standard username = 'your_username' password = 'your_password' import smtplib server = smtplib.SMTP(host, port) server.ehlo() server.starttls() server.ehlo() server.login(username, password) context=dict(name='John Doe', ship_date='July 15, 2009',amount_owed=25.50,num_items=2) #use web2py views to get an html and plain text version of the message message_html=response.render('default/ email_template.html',context) #template for the html version message_text = response.render('default/ email_template.txt',context) #template for the text only version sender = 'y...@notspamming.com' recipient = 'custo...@host.com' subject = "We've shipped your order" #build the multi-part MIME message message = _multipart_email(sender, recipient, subject, message_text, message_html, 'image.jpg') #and send it server.sendmail(sender, recipient, message.as_string()) server.quit() print message return dict(status='email sent',to=recipient,subject=subject,message=message.as_string()) Perhaps someone else here can use this and maybe even integrate it into web2py in a more standard way. ~Brian On Jul 11, 3:22 am, kralin <andrea.pierle...@gmail.com> wrote: > yes, I've already tryed this way, after looking at tools.py > maybe I'm doing something wrong, I'm going to recheck... > > thanks > > On 11 Lug, 00:46, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > import smtplib > > server = smtplib.SMTP(host, port) > > server.ehlo() > > server.starttls() > > server.ehlo() > > server.login(username, password) > > server.sendmail(sender, to, msg) > > server.quit() > > > look into the docs for datils. Mind that the docs say .ehlo and .helo > > are the same. They are not. The latter does not work with starttls > > > On Jul 10, 4:46 pm, kralin <andrea.pierle...@gmail.com> wrote: > > > > ok, so smtplib should work instead of Mail? > > > > On 10 Lug, 23:39, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > > Here is the problem. The current implementation of Mail is designed to > > > > be cross platform, i.e. work on GAE. It has the same API as GAE. > > > > Unless we figure out how to send MIMEemailmessages on GAE, if you > > > > want to send MIME you should not use Mail native SMTP. > > > > > On Jul 10, 4:31 pm, kralin <andrea.pierle...@gmail.com> wrote: > > > > > > I've also tried to use MIME to encode both thehtml, and an > > > > > alternative text/htmlmessage, however all the encoding goes after > > > > > the double newline > > > > > and is not interpreted as an header. > > > > > > so Yarko are you saying that by doing send(message='hello message') > > > > > instead of send(to=['....@me.com'], message='hello message') > > > > > it should worrk by including the correct headers in the message? > > > > > > On 10 Lug, 22:15, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > > > > While this can be and something like this can be added it is my > > > > > > understanding that you do not need to change the header to sendhtml > > > > > > emails. You need to use the MIME encoding and that should be > > > > > > transparent to what mail.send does now. If I am wrong please provide > > > > > > an example of how to change the headers to send a MIME encoded > > > > > > message. > > > > > > > On Jul 10, 1:31 pm, kralin <andrea.pierle...@gmail.com> wrote: > > > > > > > > I spent the whole afternoon trying to send anHTMLformattedemail > > > > > > > with web2py. > > > > > > > while I cannote use smtplib directly, cause it seems not to work, > > > > > > > and > > > > > > > I think this should be "normal" in the framework. > > > > > > > however in the current release (Version 1.65.0 (2009-07-01 > > > > > > > 12:16:25)) > > > > > > > it is not possible to alter the content-type, or any other header > > > > > > > for > > > > > > > theemailusing the gluon.tools.Mail class. > > > > > > > this happens because anu message that is passed to the mail=Mail() > > > > > > > object is attached to this string before beeing sent: > > > > > > > > msg = '''From: %s\r > > > > > > > To: %s\r > > > > > > > Subject: %s\r > > > > > > > \r > > > > > > > %s'''\ > > > > > > > > and the double newlines close the headers. > > > > > > > > so it would be very useful to also set at least something link > > > > > > > this: > > > > > > > > def send( > > > > > > > self, > > > > > > > to, > > > > > > > subject='None', > > > > > > > message='None', > > > > > > > headers='\r\n' > > > > > > > ): > > > > > > > > msg = '''From: %s\r > > > > > > > To: %s\r > > > > > > > Subject: %s\r > > > > > > > \r > > > > > > > %s'''\ > > > > > > > % (self.settings.sender, ', '.join(to), > > > > > > > subject,headers, > > > > > > > message) > > > > > > > > so that it will be possible to pass directly some header strings > > > > > > > or > > > > > > > pass an empty string as headers, and put them in the message. > > > > > > > this way they can be correctly recognized. > > > > > > > > hope this helps > > > > > > > cheers > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---