Robson, já estou com um projeto desses em mente, semi-estruturado e engatilhado inclusive, acho que dentro de alguns dias podemos começar a valer. Já tem eu, você e o Edgard Costas dispostos.
Mais gente? Davi --- Em zope-pt@yahoogrupos.com.br, ROBSON VIRINO - GEINF <[EMAIL PROTECTED]> escreveu > > Show de Bola, Davi, sua atitude. > > Acho que essa idéia já passou até por aqui, mas reforçando, seria > interessante até depois catalogarmos as dúvidas solucionadas na lista em > uma página, > como uma espécie de apostila Zope-pt, ou até uma revista virtual Zope-pt > com soluções em artigos. > Com certeza, aqui na lista, varrendo as mensagens antigas, tem truques > que não se encontram por aí em outros sites sobre Plone, inclusive no > Tchezope ou Plone.org; > > Isso seria ótimo pra quem é recém-chegado no Plone, visto que > catalogaríamos artigos em mutirão de forma coesa, um resumo de várias > threads em um só canto. > Pois o que acontece quando as pessoas procuram na lista, mesmo > pesquisando dúvidas já respondidas, perguntam novamente, pois há o > cansaço de juntar as idéias externalizadas em várias threads em torno de > uma solução... > > Eu posso dedicar uma hora por dia para fazer varredura de soluções > encontradas na lista. > Com a ajuda de todos, economizaríamos centenas de threads repetidas, > facilitando a difusão do desenvolvimento Plone. > Enfim, como faríamos isso? Colhamos idéias! > > [ ]s > > Robson Virino. > > Davi Medeiros escreveu: > > > > Compartilhando com a lista o sucesso obtido com a ajuda do Fabiano > > Weimar do João Bueno na minha missão de enviar um anexo por email > > junto a uma adaptação do /contact-info do Plone. Se alguém quiser > > melhorar algo, sugerir melhores práticas, só temos a agradecer. > > > > Customizei o CPT contact-info adicionando via HTML um campo do > > type="file" name="imagem", baseado nos campos já existentes. Como a > > imagem não era obrigatória não precisei atualizar a validação dos > > campos. Porém alterei a action de sucesso, customizando o > > portal_skins/plone_form_scripts/send_feedback_site para > > custom/send_seu_jeito que ficou assim: > > > > >> > > > > REQUEST=context.REQUEST > > > > from Products.CMFPlone.utils import transaction_note > > from Products.CMFCore.utils import getToolByName > > from Products.CMFPlone import PloneMessageFactory as _ > > from ZODB.POSException import ConflictError > > > > ## > > ## This may change depending on the called (portal_feedback or author) > > state_success = "success" > > state_failure = "failure" > > > > plone_utils = getToolByName(context, 'plone_utils') > > urltool = getToolByName(context, 'portal_url') > > portal = urltool.getPortalObject() > > url = urltool() > > > > ## make these arguments? > > subject = REQUEST.get('subject', '') > > message = REQUEST.get('message', '') > > sender_from_address = REQUEST.get('sender_from_address', '') > > sender_fullname = REQUEST.get('sender_fullname', '') > > imagem = REQUEST.get('imagem', '').read() > > > > send_to_address = portal.getProperty('email_from_address') > > envelope_from = portal.getProperty('email_from_address') > > > > state.set(status=state_success) ## until proven otherwise > > > > host = context.MailHost > > encoding = plone_utils.getSiteEncoding() > > > > variables = {'sender_from_address' : sender_from_address, > > 'sender_fullname' : sender_fullname, > > 'url' : url, > > 'subject' : subject, > > 'message' : message > > } > > > > try: > > message = context.seu_jeito_feedback_template(context, **variables) > > context.run_send_seu_jeito(sender_from_address, send_to_address, > > subject, message, imagem) > > except ConflictError: > > raise > > except: # TODO Too many things could possibly go wrong. So we catch all. > > exception = plone_utils.exceptionString() > > message = _(u'Unable to send mail: ${exception}', > > mapping={u'exception' : exception}) > > plone_utils.addPortalMessage(message) > > return state.set(status=state_failure) > > > > ## clear request variables so form is cleared as well > > REQUEST.set('message', None) > > REQUEST.set('subject', None) > > REQUEST.set('sender_from_address', None) > > REQUEST.set('sender_fullname', None) > > REQUEST.set('imagem', None) > > > > plone_utils.addPortalMessage(_(u'Mail sent.')) > > return state > > > > << > > > > E por fim criei um External Method chamado run_send_seu_jeito que lê o > > seguinte arquivo mailer.py (module: mailer, function: send) guardado > > dentro da pasta Extensions do meu Plone 2.5.3. > > > > >> > > > > import sys, smtplib, MimeWriter, base64, StringIO, os, string, time > > > > def send(self, sender_from_address, send_to_address, subject, > > message_text, imagem): > > context = self > > REQUEST = context.REQUEST > > message = StringIO.StringIO() > > writer = MimeWriter.MimeWriter(message) > > writer.addheader('MIME-Version', '1.0') > > writer.addheader('Subject', subject) > > writer.addheader('To', send_to_address ) > > > > # get ready to send attachment > > writer.startmultipartbody('mixed') > > > > # start off with a text/html part > > part = writer.nextpart() > > body = part.startbody('text/html') > > > > body.write(message_text) > > > > # ............................ > > # add Image attachment > > # ............................ > > if imagem: > > image_type = "JPG" > > part = writer.nextpart() > > part.addheader('Content-Transfer-Encoding', 'base64') > > body = part.startbody('image/%s; name=%s' % (image_type, > > "Imagem-Ilustrativa.jpg")) > > # image file > > body.write(base64.encodestring(imagem)) > > # finish off > > writer.lastpart() > > > > # .................................................. > > # send the mail > > # . if user supplied userid/password then deal w/it > > # .................................................. > > smtp = smtplib.SMTP(context.MailHost.smtp_host) > > if context.MailHost.smtp_userid: > > smtp.ehlo() > > smtp_userid64 = base64.encodestring(context.MailHost.smtp_userid) > > smtp.docmd("auth", "login " + smtp_userid64[:-1]) > > if context.MailHost.smtp_pass: > > smtp_pass64 = base64.encodestring(self.MailHost.smtp_pass) > > smtp.docmd(smtp_pass64[:-1]) > > smtp.sendmail(sender_from_address, send_to_address, > > message.getvalue()) > > smtp.quit() > > > > << > > > > Muito obrigado! O aprendizado ficou! > > > > Até mais, > > Davi Lima > > > > --- Em zope-pt@yahoogrupos.com.br > > <mailto:zope-pt%40yahoogrupos.com.br>, "Fabiano Weimar dos Santos" > > <xirumacanudo@> escreveu > > > > > > Oi Davi, > > > > > > da uma olhada nesse link: > > > > > > > > http://www.redcor.ch/web/intranet_zope_plone/tutorial/faq/SendingMailWithAttachmentsViaPython > > <http://www.redcor.ch/web/intranet_zope_plone/tutorial/faq/SendingMailWithAttachmentsViaPython> > > > > > > É um pouco chato de fazer, mas se você mandar uma mensagem como quer > > > para você, analisar o código fonte da mensagem e tentar gerar > > > cabeçalhos parecidos, não deve ser tão difícil. > > > > > > Um abraço, > > > > > > Fabiano Weimar > > > > > > > > > 2008/2/21 Davi Medeiros <davi@>: > > > > > > > > > > > > > > > > > > > > > > > > > > > > Ricardo, adicionar o campo é fácil, preciso saber é como enviar anexa > > > > a imagem por email. Encontrei o script que faz o envio do mail via > > > > MailHost: /portal_skins/plone_form_scripts/send_feedback_site > > > > > > > > Agora preciso saber como enviar a imagem anexa. Por exemplo, lá tem: > > > > message = REQUEST.get('message', '') > > > > > > > > Creio que eu precisaria de um: > > > > > > > > imagem = REQUEST.get('imagem', '') > > > > > > > > Mas e depois, como usar a sintaxe do /MailHost para incluir um anexo? > > > > É possível? > > > > > > > > Abraço! > > > > Davi Lima > > > > > > > > --- Em zope-pt@yahoogrupos.com.br > > <mailto:zope-pt%40yahoogrupos.com.br>, "Ricardo Dani" <gauchoo@> escreveu > > > > > > > > > > > > > > Procure pelo contact-info.pt , é lá que você deve fazer isso. > > > > > > > > > > 2008/2/19 Davi Medeiros <davi@>: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > O que eu preciso fazer para acrescentar um campo de imagem (input > > > > > > type=file) ao formulário de contact-info e ele ser enviado > > anexo para > > > > > > o email? Onde fica a classe que faz esse mailing? É o melhor > > jeito de > > > > > > obter esse resultado? > > > > > > > > > > > > Por favor, quem puder, me tire essa dúvida. > > > > > > > > > > > > Obrigado! > > > > > > Davi Lima > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > Ricardo Lapa Dani > > > > > http://www.paradigma.com.br <http://www.paradigma.com.br> > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > Fabiano Weimar dos Santos (xiru) > > > Weimar Consultoria > > > > > > Hospedagem Plone, Zope e Python > > > http://www.pytown.com <http://www.pytown.com> > > > > > > > >