[zope-pt] Re: Imagem no contact-info

2008-04-18 Por tôpico Davi Medeiros
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

[zope-pt] Re: Imagem no contact-info

2008-04-18 Por tôpico ROBSON VIRINO - GEINF
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

[zope-pt] Re: Imagem no contact-info

2008-04-18 Por tôpico Davi Medeiros
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, "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
> 
> É um pouco chato de fazer, mas se você mandar uma mensagem como quer
> para você, analisa

Re: [zope-pt] Re: Imagem no contact-info

2008-02-23 Por tôpico Fabiano Weimar dos Santos
Oi Davi,

da uma olhada nesse link:

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, "Ricardo Dani" <[EMAIL PROTECTED]> 
> escreveu
>
>  >
>  > Procure pelo contact-info.pt , é lá que você deve fazer isso.
>  >
>  > 2008/2/19 Davi Medeiros <[EMAIL PROTECTED]>:
>
>  > >
>  > >
>  > >
>  > >
>  > >
>  > >
>  > > 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
>  >
>
>  



-- 
Fabiano Weimar dos Santos (xiru)
Weimar Consultoria

Hospedagem Plone, Zope e Python
http://www.pytown.com


[zope-pt] Re: Imagem no contact-info

2008-02-21 Por tôpico Davi Medeiros
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, "Ricardo Dani" <[EMAIL PROTECTED]> escreveu
>
> Procure pelo contact-info.pt , é lá que você deve fazer isso.
> 
> 2008/2/19 Davi Medeiros <[EMAIL PROTECTED]>:
> >
> >
> >
> >
> >
> >
> > 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
>