[pyar] Unicode como nombre de archivo
Javier Castrillo
riverplatense en gmail.com
Mar Jun 8 14:53:34 ART 2010
Sea el siguiente caso:
Se cargaron nombres y apellidos en un archivo CSV
Ejemplo:
0,Julián,Pérez,correo en correo.com
1,Marcela,Blanco,mar en gmail.com
........
Y con un script + reportlab se generaba por cada persona un
certificado en .pdf que se guardaba como (siguiendo el ejemplo):
certificado_Julián Pérez.pdf
certificado_Marcela Blanco.pdf
Ahora, estamos mandando ese mismo certificado como adjunto de un
correo y por supuesto con otro script que mande los correos leyendo
las líneas del archivo CSV, adjuntando el certificado correspondiente
y listo: Sería algo así:
import smtplib
import mimetypes
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
from email.Encoders import encode_base64
gente = open('datos.txt', 'r')
for renglon in gente:
linea = renglon.strip()
linea = linea.split(',')
apellido = str(linea[1])
nombre = str(linea[2])
mail = linea[4]
sexo = linea [3]
if sexo == ' Masculino':
sexo1 = 'Estimado'
else:
sexo1 = 'Estimada'
# Construimos un mensaje Multipart, con un texto y una imagen adjunta
mensaje = MIMEMultipart()
mensaje['From']="origen en gmail.com"
mensaje['To']= destino en gmail.com
mensaje['Subject']="Certificado de asistencia"
# El texto
mensaje.attach(MIMEText('''%s gracias por participar...''' %
(sexo1 + nombre + apellido)))
# Adjuntamos certificado
nombre_archivo = nombre + ' ' + apellido
file = open("certificado_%s" % (nombre_archivo), "rb")
contenido = MIMEImage(file.read())
contenido.add_header('Content-Disposition', 'attachment; filename
= "certificado_%s" %(nombre + apellido)')
mensaje.attach(contenido)
# Establecemos conexion con el servidor smtp de gmail
mailServer = smtplib.SMTP('smtp.gmail.com',587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login("origen en gmail.com","passwd")
# Enviamos el correo, con los campos from y to.
mailServer.sendmail("origen en gmail.com",
mail,
mensaje.as_string())
# Cierre de la conexion
mailServer.close()
gente.close()
La cuestión es que cuando, por ejemplo buscamos el certificado de un
tal "Martín"
el tipo busca "certificado_Mart\xedn" y obviamente no lo encuentra.
Ya sé que debería haber encodeado los datos *antes* de meterlos al
archivo, pero la cosa ya está. La pregunta es:
¿Cúal es la mejor manera de que el script encuentre el certificado, o
sea de pasar de "Mart\xedn" a "Martín" en las actuales
circunstancias.?
Muchas gracias desde ya por la ayuda
--
Javier Castrillo
=========================================================
GNU / Linux User #242275
Jabber: javier en nube.usla.org.ar
Blog: http://blog.javier.org.ar
Site: http://carapa.com.ar
TCOS: http://argentina.tcosproject.org
=========================================================
Usá Software Libre
More information about the pyar
mailing list