Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Echizen

#1
Scripting / python: email list from sql query
14 Junio 2016, 17:38 PM
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?
#2
Scripting / Bash script: variable array
11 Junio 2016, 03:07 AM
Buenas tardes a todos,

Tengo un problema con la forma en que se asigna valor a una variable de tipo array. Paso a explicar mostrando el codigo:

Código (bash) [Seleccionar]

#Se declara una variable de tipo array y se le asignan 4 valores
declare -a var=('192.168.1.1' 'Planta baja' '192.168.1.2' 'Planta alta')

#Se muestra la variable completa
echo "${var[@]}"



Al ejecutar el codigo, se obtiene el siguiente resultado. Notar que no muestra las comillas simples

Código (bash) [Seleccionar]

192.168.1.1 Planta baja 192.168.1.2 Planta alta



Ahora vamos a lo lindo. Completar la variable con el resultado de una consulta de SQL

Código (bash) [Seleccionar]

#Cadena de conexion
Conexion="mysql -h IP_DB_HOST DBNAME -uUSER -pPASS -e"
#Consulta de SQL
SELECT="SELECT ip,descripcion FROM DB.tabla;"

#Se declara la variable de tipo array y se ejecuta la consulta de SQL descartando el encabezado y los errores de la misma
#Luego se agregan comillas simples a cada "row" de la consulta y se quitan saltos de linea..
declare -a query=$($Conexion "$SELECT" -N 2> /dev/null | sed "s/\t/' '/g;s/^/'/;s/$/'/" | sed ':a;N;$!ba;s/\n/ /g')


#ahora, se imprime en pantalla la variable
echo -e "${query[@]}"




Al momento de ejecutar el codigo, vemos que se obtiene el mismo resultado, con la diferencia de que ahora si muestra las comillas simples

Código (bash) [Seleccionar]

'192.168.1.1' 'Planta baja' '192.168.1.2' 'Planta alta'



Ahora, la explicación del problema...

Necesito pasar la variable como parametro para crear un box de menu utilizando el comando "dialog"

ejemplo:
Código (bash) [Seleccionar]

        exec 3>&1
        selection_menu=$(dialog \
        --backtitle "$BACKTITLE" \
        --title "$1" \
        --clear \
        --cancel-label "Volver" \
        --menu "$2" 0 0 4 \
        "${query[@]}" \                    # aqui es donde se inserta la variable
        2>&1 1>&3)


el problema que tengo, es que en el primer ejemplo (donde se crea la variable manualmente), el script funciona perfecto, pero cuando creo la variable y le asigno los valores de la consulta de sql, el comando "dialog" me informa que no se obtuvieron la cantidad de parámetros esperados.

Se que es bastante rebuscada la consulta, pero..... alguna idea?????

Desde ya agradezco su ayuda!

Saludos!