[zope-pt] Re: Imagem no contact-info
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
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
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
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
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 >