es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Enviar correo electrónico con Python smtplib al destinatario en la fila correspondiente.

¿Existe alguna manera de enviar un correo electrónico con python smtplib cuyo destinatario varíe por fila en un dataframe? (correo uno a uno)
Puedo enviar un mensaje diferente por fila, pero no puedo replicar lo mismo con el destinatario, ya que solo puedo enviarlos a uno o a todos los destinatarios que menciono. No puedo enviarlo al destinatario en la fila correspondiente. Tengo el siguiente código:

for each line in df.index:
    z = mensaje (es un ejemplo... esta parte es como df['primera columna'] + " hola " + df['segunda columna'])
    MI_DIRECCION = "mimail@mail.com"
    MI_CONTRASEÑA = "micontraseña"
    DIRECCION_DESTINATARIO = PROBLEMA AQUÍ (solo puedo escribir uno a varios receptores de correo electrónico, pero no iterar por fila como en el mensaje).
    DIRECCION_SERVIDOR = 'smtp-mail.outlook.com'
    PUERTO_SERVIDOR = 587
    # Conexión con el servidor
    server = smtplib.SMTP(host=DIRECCION_SERVIDOR, port=PUERTO_SERVIDOR)
    server.starttls()
    server.login(MI_DIRECCION, MI_CONTRASEÑA)
    # Creación del objeto MIMEMultipart
    mensaje = MIMEMultipart()
    # Configuración del encabezado del objeto MIMEMultipart
    mensaje['From'] = MI_DIRECCION
    mensaje['To'] = DIRECCION_DESTINATARIO
    mensaje['Subject'] = "Alertas"

# Creación de una parte MIMEText
parte_texto = MIMEText(z)

# Adjuntar la parte al mensaje
mensaje.attach(parte_texto)

# Enviar el correo electrónico y cerrar la conexión
server.send_message(mensaje)
server.quit()

¿Existe alguna manera de hacer esto?
Mi dataframe tiene una fila que incluye la dirección de correo electrónico del destinatario respectivo, pero no puedo usarla. Obtengo el siguiente error:
“AttributeError: el objeto ‘lista’ no tiene el atributo ‘encode'”

Gracias de antemano 🙂

Saludos cordiales,

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo probar el fragmento de código proporcionado. Sin embargo, con respecto a tu pregunta, sí es posible enviar un correo electrónico con smtplib en Python, cuyo destinatario varía por fila en un dataframe.

    Para lograr esto, puedes iterar sobre las filas del dataframe y enviar un correo electrónico para cada fila, con la dirección de correo electrónico del destinatario obtenida de la fila correspondiente. A continuación se muestra un ejemplo de fragmento de código que demuestra cómo se puede hacer esto:

    import pandas as pd
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    
    # Cargar el dataframe
    df = pd.read_csv('data.csv')
    
    # Definir la dirección de correo electrónico y la contraseña del remitente
    MY_ADDRESS = 'remitente@example.com'
    MY_PASSWORD = 'contraseña'
    
    # Definir los detalles del servidor de correo
    HOST_ADDRESS = 'smtp.example.com'
    HOST_PORT = 587
    
    # Conectar al servidor
    server = smtplib.SMTP(host=HOST_ADDRESS, port=HOST_PORT)
    server.starttls()
    server.login(MY_ADDRESS, MY_PASSWORD)
    
    # Iterar sobre las filas del dataframe y enviar un correo para cada fila
    for index, row in df.iterrows():
        # Construir el mensaje para la fila actual
        message = row['message']   # El mensaje para la fila actual
        recipient = row['email']   # La dirección de correo electrónico del destinatario para la fila actual
    
        # Crear un objeto de mensaje MIME
        mime_message = MIMEMultipart()
        mime_message['From'] = MY_ADDRESS
        mime_message['To'] = recipient
        mime_message['Subject'] = 'Asunto del correo'
        mime_message.attach(MIMEText(message, 'plain'))
    
        # Enviar el mensaje
        server.send_message(mime_message)
    
    # Cerrar la conexión
    server.quit()
    

    En el código anterior, primero cargamos el dataframe y luego definimos la dirección de correo electrónico y la contraseña del remitente, así como los detalles del servidor de correo. Luego iteramos sobre las filas del dataframe utilizando df.iterrows(), y para cada fila, construimos el mensaje y la dirección de correo electrónico del destinatario. Luego creamos un objeto de mensaje MIME y lo enviamos usando server.send_message(). Por último, cerramos la conexión con el servidor de correo.

    Ten en cuenta que la función MIMEText se utiliza para crear un mensaje de texto sin formato para el correo electrónico, y esto se puede reemplazar con las funciones apropiadas si deseas enviar un mensaje HTML o un adjunto. Además, el ejemplo asume que las columnas message y email están presentes en el dataframe, y debes reemplazarlas con los nombres reales de las columnas en tu conjunto de datos.

Comments are closed.