title: How to attach generated PDF with Reportlab to Email in App Engine Python
body: <p>I have a method that generates a PDF file using Reportlab library:</p>
  
  <pre><code>def obtenerPDFNuevoPedido(self, handler,rsUsuarioPedido, rsPedido):
      handler.response.headers['Content-Type'] = 'application/pdf'
      handler.response.headers['Content-Disposition'] = 'attachment; filename=output.pdf'
      story = []
      story.append(Paragraph('CHIPAS', ParagraphStyle(name="centeredStyle", alignment=TA_CENTER, fontSize=20)))
      story.append(Paragraph('____________ENLANUBE', ParagraphStyle(name="centeredStyle", alignment=TA_CENTER, fontSize=20)))
      story.append(Spacer(6, 22))
      story.append(Table([[Paragraph(str(strftime("%Y-%m-%d", gmtime())), ParagraphStyle(name="centeredStyle", alignment=TA_LEFT, fontSize=7)), 
      Paragraph(str(strftime("%H:%M:%S", gmtime())), ParagraphStyle(name="centeredStyle", alignment=TA_RIGHT, fontSize=7))]],colWidths=[5.05 * cm, 3.1 * cm]))
      story.append(Paragraph("DEVELOPED AT ROSHKA-LABS", ParagraphStyle(name="centeredStyle", alignment=TA_CENTER, fontSize=6)))
      story.append(Paragraph('-'*50, styleCentered))
      #...
      #...
      doc = SimpleDocTemplate(handler.response.out, pagesize=letter)
      doc.build(story) 
  </code></pre>
  
  <p>when I call that method, it opens a save dialog, where I can specify where the file should be saved.</p>
  
  <p>How should I do to attach the generated pdf in email?</p>
  
  <p>I have seen this example:</p>
  
  <pre><code>from google.appengine.api import urlfetch
  from google.appengine.api import mail  
  
  url = "http://www.abc.com/files/file.pdf" 
  result = urlfetch.fetch(url)
  
  if result.status_code == 200: 
    document = result.content
  
  mail.send_mail(sender="youremail@yourdomain.com",
                 to="receiver@hisdomain.com",
                 subject="The file you wanted",
                 body="Here is the file you wanted",
                 attachments=[("The file name.pdf", document)])
  </code></pre>
  
  <p>But I don't know how to apply it in this particular case.</p>
  
  <p>Thanks in advance!</p>
  
  <p><strong>SOLUTION:</strong></p>
  
  <p>Based on the suggestion given by @Jesús, this is how I solved the problem:</p>
  
  <pre><code>class PdfTable(db.Model):
      fecha = db.DateTimeProperty(auto_now_add=True)
      archivoBlob = db.BlobProperty()
  
  def obtenerPDFNuevoPedido(self, handler,rsUsuarioPedido, rsPedido):
  #1)I generated the PDF this way:
          styleCentered = ParagraphStyle(name="centeredStyle", alignment=TA_CENTER)
          styleCenteredLeft = ParagraphStyle(name="centeredStyle", alignment=TA_LEFT)
          styleCenteredRight = ParagraphStyle(name="centeredStyle", alignment=TA_RIGHT)
  
          story = []
          story.append(Paragraph('CHIPAS', ParagraphStyle(name="centeredStyle", alignment=TA_CENTER, fontSize=20)))
          story.append(Paragraph('____________ENLANUBE', ParagraphStyle(name="centeredStyle", alignment=TA_CENTER, fontSize=20)))
          story.append(Spacer(6, 22))
          story.append(Table([[Paragraph(str(strftime("%Y-%m-%d", gmtime())), ParagraphStyle(name="centeredStyle", alignment=TA_LEFT, fontSize=7)), Paragraph(str(strftime("%H:%M:%S", gmtime())), ParagraphStyle(name="centeredStyle", alignment=TA_RIGHT, fontSize=7))]],colWidths=[5.05 * cm, 3.1 * cm]))
          story.append(Paragraph("DEVELOPED AT ROSHKA-LABS", ParagraphStyle(name="centeredStyle", alignment=TA_CENTER, fontSize=6)))
          story.append(Paragraph('-'*50, styleCentered))
          data = [[Paragraph("Usuario",ParagraphStyle(name="centeredStyle", alignment=TA_LEFT, fontSize=7)), Paragraph("Producto/Precio/Cantidad",ParagraphStyle(name="centeredStyle", alignment=TA_LEFT, fontSize=7)),Paragraph("Total", ParagraphStyle(name="centeredStyle", alignment=TA_RIGHT, fontSize=7))]]
          #
          #
          #
  #2)Inside the same method, I saved the PDF file in the Datastore       
          pdf = StringIO.StringIO()
  
          doc = SimpleDocTemplate(pdf, pagesize=letter)
          doc.build(story)
  
          content = pdf.getvalue()
  
          blob = model.PdfTable()
          blob.archivoBlob = db.Blob(content)
          blob.put()
  #3)The file recently stored  in the datastore was attached like this:        
          mail.send_mail(sender="youremail@yourdomain.com",
                 to="receiver@hisdomain.com",
                 subject="The file you wanted",
                 body="Here is the file you wanted",
                 attachments=[('resumen_pedido.pdf'), blob.archivoBlob)])
  </code></pre>
  
  <p>Although I don't know if this is the more efficient way to solve the problem...but it works</p>