Email with Python attachment

Asked

Viewed 2,191 times

1

I have a script that sends an e-mail request mirror. However, it sends the attached mirror of type . htm

I would like it to send in pdf.

Below is the script

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import psycopg2
    import psycopg2.extras
    import sys
    import os
    import subprocess
    import re
    import base64
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.header import Header
    from validate_email import validate_email

    bin_path = os.path.dirname(os.path.realpath(__file__))
    general_path = os.path.split(bin_path)[0]
    geral_conf = general_path + "/geral.conf"
    geral_conf_cmd = ". " + geral_conf
    error_message = "None"

    conn_pg_string = os.getenv('v_qry')

    try:
        conn_pg = psycopg2.connect(conn_pg_string)
        print "Database connected..."
    except Exception as e:
        error_message = "Erro ao tentar conectar ao banco de dados: ", e
        sys.exit(error_message)

    cursor_pg = conn_pg.cursor(cursor_factory=psycopg2.extras.DictCursor)

    cursor_pg = conn_pg.cursor(cursor_factory=psycopg2.extras.DictCursor)
    cursor_pg.execute("""SELECT s_valor FROM t_parametro_cliente WHERE s_campo = 'smtp'""")
    pg_result = cursor_pg.fetchone()
    stamp_configs = pg_result[0].split(',')

    mailserver_smtp = stamp_configs[0]
    mailserver_login = stamp_configs[1]
    mailserver_password = base64.b64decode(stamp_configs[2])
    mailserver_ssl = stamp_configs[3]
    mailserver_port = stamp_configs[4]

    origem = stamp_configs[1]

    if mailserver_ssl == '0':
        s = smtplib.SMTP(mailserver_smtp, mailserver_port, timeout=15)
        s.starttls()
        s.login(mailserver_login, mailserver_password)
    else:
        s = smtplib.SMTP_SSL(mailserver_smtp, mailserver_port, timeout=15)
        s.login(mailserver_login, mailserver_password)

    cursor_pg.execute("""SELECT v3 AS s_query1 FROM t_vars WHERE grp = 'PEDI' AND id = emp2long('MAIL') AND ord = emp2long('QRY1') AND ((v1 & 1) = 1);""")
    rs1 = cursor_pg.fetchone()
    cursor_pg.execute("""SELECT v3 AS s_query2 FROM t_vars WHERE grp = 'PEDI' AND id = emp2long('MAIL') AND ord = emp2long('QRY2') AND ((v1 & 1) = 1);""")
    rs2 = cursor_pg.fetchone()
    cursor_pg.execute("""SELECT v3 AS s_query3 FROM t_vars WHERE grp = 'PEDI' AND id = emp2long('MAIL') AND ord = emp2long('QRY3') AND ((v1 & 1) = 1);""")
    rs3 = cursor_pg.fetchone()

    if len(rs1) < 1 or len(rs2) < 1 or len(rs3) < 1:
        sys.exit(2)

    query1 = rs1[0]
    query2 = rs2[0]
    query3 = rs3[0]

    cursor_pg.execute("""SELECT unnest(string_to_array(v3, '|')) AS s_valor FROM  t_vars WHERE codmaq = 0 AND grp = 'PEDI' AND id = emp2long('MAIL') AND ord = emp2long('VAR3');""")
    rsvar3 = cursor_pg.fetchall()
    cursor_pg.execute("""SELECT unnest(string_to_array(v3, '|')) AS s_valor FROM  t_vars WHERE codmaq = 0 AND grp = 'PEDI' AND id = emp2long('MAIL') AND ord = emp2long('VAR2');""")
    rsvar2 = cursor_pg.fetchall()
    cursor_pg.execute("SELECT unnest(string_to_array(v3, '|')) AS s_valor FROM  t_vars WHERE codmaq = 0 AND grp = 'PEDI' AND id = emp2long('MAIL') AND ord = emp2long('VAR1');")
    rsvar1 = cursor_pg.fetchall()

    if len(rsvar1) < 1 or len(rsvar2) < 1 or len(rsvar3) < 1:
        sys.exit(4)

    cursor_pg.execute("""SELECT u_numero_polibras, unnest(string_to_array(s_email, ',')) AS s_email FROM t_vendedor_email_pedido WHERE s_email ~ E'[A-Za-z0-9._-]+@[A-Za-z0-9]+.[A-Za-z]+' ORDER BY u_numero_polibras LIMIT 50""")    
    qryrsgeral = cursor_pg.fetchall()
    for rsgeral in qryrsgeral:
        destino = rsgeral["s_email"]
        v_u_numero_polibras = rsgeral["u_numero_polibras"]
        print "Envio de e-mail para o pedido numero: %s" % v_u_numero_polibras
        query_envia_email = ("""SELECT COALESCE((SELECT (CASE WHEN s_value = 'SIM' THEN 1 ELSE 0 END)::integer FROM observacao WHERE u_id = 1346716745 AND u_srt = 1397314646 AND u_type = 1129270594 AND u_numero_polibras = $1), 0::integer) AS envia_email;""").replace("$1",str(v_u_numero_polibras))
        cursor_pg.execute(query_envia_email)
        rs1 = cursor_pg.fetchone()   
        envia_email = rs1[0]

        if validate_email(destino) and envia_email:
            query = ("""SELECT COALESCE(substring(s_value, E'\([^,]*\),'),'0')::numeric(18,6) AS valor_frete FROM observacao WHERE u_id = emp2long('PEDI') AND u_srt = emp2long('FRET') AND u_relkey = $1;""").replace("$1", str(v_u_numero_polibras)) 
            cursor_pg.execute(query)
            rs1 = cursor_pg.fetchall()
            if len(rs1) > 0:
                valor_frete = rs1[0]
            else:
                valor_frete = 0

        str_itens = ""
        str_observacao = ""
        v_total = 0
        v_subtotal = 0
        v_qtditens = 0
        cursor_pg.execute("""SELECT v3 AS v_snd1 FROM t_vars WHERE grp = 'PEDI' AND id = emp2long('MAIL') AND ord = emp2long('SND1') AND ((v1 & 1) = 1);""")
        rs1 = cursor_pg.fetchone()
        cursor_pg.execute("""SELECT v3 AS v_snd2 FROM t_vars WHERE grp = 'PEDI' AND id = emp2long('MAIL') AND ord = emp2long('SND2') AND ((v1 & 1) = 1);""")
        rs2 = cursor_pg.fetchone()
        cursor_pg.execute("""SELECT v3 AS v_snd3 FROM t_vars WHERE grp = 'PEDI' AND id = emp2long('MAIL') AND ord = emp2long('SND3') AND ((v1 & 1) = 1);""")
        rs3 = cursor_pg.fetchone()
        v_snd1 = rs1[0]
        v_snd2 = rs2[0]
        v_snd3 = rs3[0]

        v_snd3_orig = v_snd3
        query3_exec = query3.replace("$1",str(v_u_numero_polibras))
        cursor_pg.execute(query3_exec)
        result_query3 = cursor_pg.fetchall()
        for rs3 in result_query3:
            for row in rsvar3:
                valor = row["s_valor"].split(',')
                v_snd3 = re.sub(valor[0], str(rs3[valor[1]]), v_snd3)
            str_observacao = str_observacao + v_snd3
            v_snd3 = v_snd3_orig

        v_snd2_orig = v_snd2
        query2_exec = query2.replace("$1",str(v_u_numero_polibras))
        cursor_pg.execute(query2_exec)
        result_query2 = cursor_pg.fetchall()
        for rs2 in result_query2:
            for i in rsvar2:
                valor = i["s_valor"].split(',')
                v_snd2 = re.sub(valor[0], str(rs2[valor[1]]), v_snd2)

            str_itens = str_itens + v_snd2
            v_snd2 = v_snd2_orig
            v_total = v_total + rs2["preco"] * rs2["quantidade"]
            v_qtditens = v_qtditens + 1

        query1_exec = query1.replace("$1",str(v_u_numero_polibras))
        cursor_pg.execute(query1_exec)
        result_query1 = cursor_pg.fetchall()
        for rs1 in result_query1:
            for row in rsvar1:
                valor = row["s_valor"].split(',')
                v_snd1 = re.sub(valor[0], str(rs1[valor[1]]), v_snd1)
            v_snd1 = re.sub("__data__", str(rs1["data"]), v_snd1)
            v_snd1 = re.sub("__qtdItens__", str(v_qtditens), v_snd1)
            v_snd1 = re.sub("__subtotalPedido__", str(v_subtotal), v_snd1)
            v_snd1 = re.sub("__totalPedido__", str(round(v_total,6)), v_snd1)
            v_snd1 = re.sub("__linhasProduto__", str_itens, v_snd1)
            v_snd1 = re.sub("__linhasObs__", str_observacao, v_snd1)
            #v_snd1 = re.sub("__valor_frete__", str(valor_frete), v_snd1)
        corpo = v_snd1

        #Verifica se utiliza customizacao do campos "ASSUNTO" do e-mail
        cursor_pg.execute("""SELECT COALESCE((SELECT 1::integer FROM t_vars WHERE (grp, id, ord) = ('PEDI', emp2long('MAIL'), emp2long('SBJT'))), 0::integer) AS use_custom_subject;""")
        rs1 = cursor_pg.fetchone()
        use_custom_subject = rs1[0]

        if use_custom_subject:
            cursor_pg.execute("""SELECT v3 AS custom_subject FROM t_vars WHERE (grp, id, ord) = ('PEDI', emp2long('MAIL'), emp2long('SBJT'));""")
            rs1 = cursor_pg.fetchone()
            query_custom_subject = rs1[0]
            query_custom_subject = query_custom_subject.replace("$1",str(v_u_numero_polibras))
            cursor_pg.execute(query_custom_subject)
            rs1 = cursor_pg.fetchone()
            assunto = rs1[0]
        else:
            assunto = "Confirmação de Pedido"

        mensagem = MIMEMultipart("mixed", "------------060808030104070108020807")
        mensagem["Subject"] = Header(assunto, "UTF-8")
        mensagem["From"] = Header(origem, "UTF-8")
        mensagem["To"] = Header(destino, "UTF-8")
        mensagem.attach(MIMEText(corpo))
        s.sendmail(origem, destino, mensagem.as_string())

        print "Deletando o pedido numero: %s apos o envio via e-mail." % (v_u_numero_polibras)
        query_deleta_record = """DELETE FROM t_vendedor_email_pedido WHERE u_numero_polibras = %s;""" % v_u_numero_polibras
        cursor_pg.execute(query_deleta_record)
        conn_pg.commit()

    s.quit()

1 answer

0


I will focus on sending a PDF, without trying to adapt your code:

import smtplib

# Trabalhando com mimetypes
import mimetypes

# Modulos para manipulação de email
import email
import email.mime.application

# Cabeçalho da mensagem do email
msg = email.mime.Multipart.MIMEMultipart()
msg['Subject'] = 'Teste enviando email'
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'

# Corpo principal do email (tb um anexo)
body = email.mime.Text.MIMEText("""Olá, esse é um teste de eamail, enviando PDF""")
msg.attach(body)

# Anexando o PDF
pdfname='path/meu.pdf'
fp=open(pdfname,'rb')
anexo = email.mime.application.MIMEApplication(fp.read(),_subtype="pdf")
fp.close()
anexo.add_header('Content-Disposition','attachment',filename=pdfname)
msg.attach(anexo)

# Enviando via "fake" server 
s = smtplib.SMTP('smtp.fake.com')
s.starttls()
s.login('[email protected]','mypassword')
s.sendmail('[email protected]',['[email protected]'], msg.as_string())
s.quit()

Browser other questions tagged

You are not signed in. Login or sign up in order to post.