Yes it blocks. It is better to use the scheduler to send emails in background.
On Saturday, 25 October 2014 03:32:36 UTC-5, Tim Richardson wrote: > > I haven't had a good experience with mail.send > It seems to block python which is a problem if you have a single process > webserver (like Rocket, or apache on windows) . > You should probably use the scheduler for sending mail (since this means > the process which gets blocked is not the webserver). > > gmail has a REST API which I assume is non blocking; I'm going to learn > how to use that in the next couple of weeks for a client which has migrated > to Google Apps. This is I hope a good, reusable solution for sending single > emails without needing a mail processing queue via the scheduler. > > > > > On Friday, 24 October 2014 01:16:46 UTC+11, Massimo Di Pierro wrote: >> >> This should help: >> >> def index(): >> form = FORM(INPUT(_type='file', _id="files", _name="files", >> _multiple=True, _value='File test'), >> INPUT(_type="submit")).process() >> if form.accepted: >> for item in form.vars.files: >> print item.filename, item.file.read() >> return dict(form=form) >> >> On Wednesday, 22 October 2014 00:01:06 UTC-5, PRACHI VAKHARIA wrote: >>> >>> >>> >>> >>> >>> >>> Dear Alan and Massimo, >>> >>> First, please look at this site: >>> >>> *http://www.html5rocks.com/en/tutorials/file/dndfiles/ >>> <http://www.html5rocks.com/en/tutorials/file/dndfiles/>* >>> >>> >>> It shows how to upload and read multiple files directly using HTML5 *(and >>> JavaScript)*. >>> It uses the *File API specification* from W3: >>> >>> http://www.w3.org/TR/file-upload/ >>> >>> >>> >>> How to implement that in Web2Py for Email Composing with File >>> Attachments? >>> >>> >>> *Controller* >>> >>> >>> def Composer(): >>> form = FORM <http://localhost:8000/examples/global/vars/FORM>(TABLE >>> <http://localhost:8000/examples/global/vars/TABLE>( >>> TR <http://localhost:8000/examples/global/vars/TR>('Subject:', >>> INPUT <http://localhost:8000/examples/global/vars/INPUT>(_type='text', >>> _name='subject', >>> requires=IS_NOT_EMPTY >>> <http://localhost:8000/examples/global/vars/IS_NOT_EMPTY>())), >>> TR <http://localhost:8000/examples/global/vars/TR>('Email To:', >>> INPUT <http://localhost:8000/examples/global/vars/INPUT>(_type='text', >>> _name='emailto', _multiple="", >>> requires=IS_EMAIL >>> <http://localhost:8000/examples/global/vars/IS_EMAIL>())), >>> TR <http://localhost:8000/examples/global/vars/TR>('Save Draft?', >>> SELECT <http://localhost:8000/examples/global/vars/SELECT>('yes', 'no', >>> _name='savedraft', >>> requires=IS_IN_SET >>> <http://localhost:8000/examples/global/vars/IS_IN_SET>(['yes', 'no']))), >>> TR <http://localhost:8000/examples/global/vars/TR>('Body', TEXTAREA >>> <http://localhost:8000/examples/global/vars/TEXTAREA>(_name='body', >>> value='Body of email')), >>> *TR <http://localhost:8000/examples/global/vars/TR>( 'File', INPUT >>> <http://localhost:8000/examples/global/vars/INPUT>(_type='file', >>> _id="files", _name="files[]", _multiple="", _value='File test')* >>> * ), *TR <http://localhost:8000/examples/global/vars/TR>('', INPUT >>> <http://localhost:8000/examples/global/vars/INPUT>(_type='submit', >>> _value='EMAIL')) >>> )) >>> >>> if form.process().accepted: >>> response >>> <http://localhost:8000/examples/global/vars/response>.flash = 'Form >>> accepted' >>> >>> if form.vars.savedraft: >>> *## SAVE DRAFT on IMAP ##* >>> draft_id = imapdb.Gmail_Drafts.insert( >>> to=form.vars.emailto, subject=form.vars.subject, >>> content=form.vars.body, draft=True, >>> *attachments = [ mail.Attachment( >>> form.vars.FILE.file.read(), filename=form.vars.FILE.filename ) ]* >>> ) >>> response.flash = 'Email Saved' >>> else: >>> *## SEND Email by SMTP ##* >>> mail.send( >>> to = form.vars.emailto, >>> subject = form.vars.subject, >>> message = (form.vars.body, '<html>' + form.vars.body + >>> '</html>'), >>> *attachments = [ mail.Attachment( >>> form.vars.FILE.file.read(), filename=form.vars.FILE.filename ) ]* >>> ) >>> response.flash = 'Email Sent' >>> >>> elif form.errors: >>> response >>> <http://localhost:8000/examples/global/vars/response>.flash = 'Errors in >>> form' >>> else: >>> response >>> <http://localhost:8000/examples/global/vars/response>.flash = 'Compose >>> Email' >>> >>> return dict(form=form) >>> >>> >>> >>> >>> >>> *Questions* >>> >>> - How to use *<input type='file', name="files[]", multiple="">* >>> to input files for Attachment to email? >>> - How to extract the required file attributes and append them >>> directly into the mail message and attachment? >>> - If the HTML5 provides a means to input, read and upload files, why >>> cannot we use that directly in web2py Email to read and attach multiple >>> files? >>> >>> >>> >>> Please look into this and help implementing this. >>> >>> >>> Thank you, very much. >>> >>> Gratefully, >>> >>> *PRACHI V* >>> >>> >>> >>> >>> >>> >>> _ >>> >>> >>> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

