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"
> <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]>:
> > >
> > >
> > >
> > >
> > >
> > >
> > > 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>
> >
>
>  

Responder a