python: email list from sql query

Iniciado por Echizen, 14 Junio 2016, 17:38 PM

0 Miembros y 1 Visitante están viendo este tema.

Echizen

Buenas tardes, tengo un script en python que lo utilizo para mandar mail.

A dicho escript lo quiero modificar para que consulte a una base de datos una lista de correos electronicos y mande el mail a los mismos...

El problema es que no se como conformar esa lista de emails para que las acepte el sendmail

Código (python) [Seleccionar]
# Import smtplib to provide email functions
import smtplib
import sys
import mysql.connector

# Import the email modules
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# Create MySQL conector
Conexion = mysql.connector.connect(user='pepito',password='pepitopepe',
                              host='10.11.12.13',
                              database='HELLO')

# Define cursor
cursor=Conexion.cursor()

# Create a MySQL Query
# ARGV[2] level of issue elevation
cursor.execute("select email from emails where nivel= '%s'" % sys.argv[2] )

# Define email addresses to use
addr_to = cursor.fetchone()
#addr_to   = ['pepito1@tepelandia.com', 'pepito2@pepelandia.com']
addr_from = 'Check@pepelandia.com'

# Define SMTP email server details
smtp_server = 'smartrelay.pepelandia.com'

# Construct email
msg = MIMEMultipart('alternative')
msg['To'] = ", ".join(addr_to)
msg['From'] = ", ".join(addr_from)
msg['Subject'] = 'Alerta'

# Open a plain text file for reading.  For this example, assume that
# the text file contains only ASCII characters.
# ARGV[1] html file to send
fp = open(sys.argv[1], 'rb')


# Create a text/plain message
msg = MIMEText(fp.read(), 'html')
fp.close()



# Send the message via an SMTP server
s = smtplib.SMTP(smtp_server)
s.sendmail(addr_from, addr_to, msg.as_string())
s.quit()



Al ejecutar el cofigo...
Código (python) [Seleccionar]
Traceback (most recent call last):
  File "SendMail.py", line 48, in <module>
    s.sendmail(addr_from, addr_to, msg.as_string())
  File "/usr/lib64/python2.7/smtplib.py", line 742, in sendmail
    raise SMTPRecipientsRefused(senderrs)
smtplib.SMTPRecipientsRefused: {u'pepito1@pepelandia.com': (550, '#5.1.0 Address rejected.')}


cuando separo el codigo y solo me quedo con la consulta de la DB y veo como me devuelve la lisla de emails...

Código (python) [Seleccionar]
# Create MySQL conector
Conexion = mysql.connector.connect(user='pepito',password='pepitopepe',
                              host='10.11.12.13',
                              database='HELLO')

# Define cursor
cursor=Conexion.cursor()

# Create a MySQL Query
cursor.execute("select email from emails where nivel= '%s'" % sys.argv[1] )


# Define email addresses to use
addr_to = cursor.fetchall()

for row in addr_to:
  print(addr_to)


resultado de la consulta:
Código (python) [Seleccionar]
# python get_list.py 1   # el 1 es el parametro que paso para la consulta de SQL
[(u'pepito1@pepelandia.com',), (u'pepito2@pepelandia.com',)]
[(u'pepito1@pepelandia.com',), (u'pepito2@pepelandia.com',)]


evidentemente la lista que estoy pasando esta mal conformada, pero no encuentro como hacer que la lista que arma la consulta quede con los mails solamente separada por comas.

alguien tiene alguna idea?

tincopasan

no uso sql así que ni idea de las consultas, ahora lo que te devuelve es:
Citar
# python get_list.py 1   # el 1 es el parametro que paso para la consulta de SQL
[(u'pepito1@pepelandia.com',), (u'pepito2@pepelandia.com',)]
[(u'pepito1@pepelandia.com',), (u'pepito2@pepelandia.com',)]
¿el problema es la u' del inicio? si es así tomá la cadena a partir del 2 caracter, perdón si no es lo que preguntas.

Echizen

En realidad el problema son todos los caracteres que no conforman el correo electronico.

Yo necesito obtener una lista de correos separados por comas y lo que me devuelve python es una lista junto con otros caracteres que no forman parte del mail propiamente dicho.

tincopasan

perdón por la demora, instale mysql para probar lo que hace, y el problema que encontré está en la versión de pyhton, evidentemente como estás usando 2.x no toma las cadenas directamente como unicode(cosa que python 3 si hace), por eso te agrega u`por ejemplo. Así que tendrías que agregarle el code utf -8, algo que en mi caso no sucede porque hace mucho que solo uso 3.x.

Echizen

Cita de: tincopasan en 24 Junio 2016, 09:19 AM
perdón por la demora, instale mysql para probar lo que hace, y el problema que encontré está en la versión de pyhton, evidentemente como estás usando 2.x no toma las cadenas directamente como unicode(cosa que python 3 si hace), por eso te agrega u`por ejemplo. Así que tendrías que agregarle el code utf -8, algo que en mi caso no sucede porque hace mucho que solo uso 3.x.

muchas gracias por la respuesta!,

ya veré de migrar a python 3.0 y hacer las pruebas.

Saludso