Yes, using web2py's Mail() as you described probably works too. To be honest I just didn't bother trying but I suppose your Mail helper is likely just using smtplib in the background. The sending part is easy, it's building the multi-part MIME message that I suspect has been tricky for people.
I'll try to get this added to AlterEgo over the weekend. On Jul 16, 9:59 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > This is useful. > In principle you could just use: > > mail=Mail() > mail.send(to..., subject,..., message=message.as_string()) > > or am I missing something? > Would you post an entry in AlterEgo? > > Massimo > > On Jul 16, 9:53 pm, Brian M <bmere...@gmail.com> wrote: > > > 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 fromhttp://code.activestate.com/recipes/473810/withvery > > 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 -~----------~----~----~----~------~----~------~--~---