Integración de Python con Email Delivery

Utilice Python para enviar correos electrónicos a través del servicio Email Delivery.

Puede utilizar Python para enviar correos electrónicos a través de Email Delivery. Para poder enviar correos electrónicos, debe configurar Email Delivery en Python.

Importante

Estas instrucciones contienen código de ejemplo para su comodidad y se deben utilizar como referencia. Para obtener soporte de cliente, debe ponerse en contacto con Python. Estos pasos se probaron en una instancia informática de Oracle Linux Server versión 7.9 y Python 3.6. En estos pasos se asume que está conectado a una instancia de Oracle Linux. Los comandos y la ubicación de los archivos pueden variar en otras distribuciones de Linux. Las aplicaciones Java (incluida JavaMail) se deben actualizar a la última versión para garantizar que los últimos protocolos, cifrados y parches de seguridad cumplen con los cifrados y las políticas de seguridad soportadas de Oracle.

Configuración de Python para enviar correo electrónico a través de Email Delivery

Para activar Python para probar la configuración de Email Delivery:

  1. Asegúrese de que Email Delivery está configurado para enviar correos electrónicos. Consulte Introducción.
    Nota

    Se necesitan las credenciales de SMTP para configurar Python y utilizar Email Delivery. Asegúrese de anotar el nombre de usuario y la contraseña al generar las credenciales SMTP.
  2. Asegúrese de que Python esté instalado. El proceso de instalación difiere según el sistema operativo que utilice. Por ejemplo, ejecute el siguiente comando para instalar Python en Oracle Linux:
    sudo yum install python3 -y
  3. En un editor de archivos como vi, cree un script de python para probar Email Delivery.

    Ejecute el siguiente comando:

    sudo vi ociemail.py
  4. En el archivo ociemail.py, sustituya las variables por sus propios valores.
    Por ejemplo:
    # python script for sending SMTP configuration with Oracle Cloud Infrastructure Email Delivery
    import smtplib 
    import email.utils
    from email.message import EmailMessage
    import ssl
    
    # Replace sender@example.com with your "From" address.
    # This address must be verified.
    # this is the approved sender email
    SENDER = 'sender@example.com'
    SENDERNAME = 'Sender Name'
     
    # Replace recipient@example.com with a "To" address. If your account
    # is still in the sandbox, this address must be verified.
    RECIPIENT = 'recipient@example.com'
     
    # Replace the USERNAME_SMTP value with your Email Delivery SMTP username.
    USERNAME_SMTP = 'ocid1.user.oc1..<unique_ID>@ocid1.tenancy.oc1..<unique_ID>.vf.com'
     
    # Put the PASSWORD value from your Email Delivery SMTP password into the following file.
    PASSWORD_SMTP_FILE = 'ociemail.config'
     
    # If you're using Email Delivery in a different region, replace the HOST value with an appropriate SMTP endpoint.
    # Use port 25 or 587 to connect to the SMTP endpoint.
    HOST = "smtp.us-ashburn-1.oraclecloud.com"
    PORT = 587
     
    # The subject line of the email.
    SUBJECT = 'Email Delivery Test (Python smtplib)'
     
    # The email body for recipients with non-HTML email clients.
    BODY_TEXT = ("Email Delivery Test\r\n"
                 "This email was sent through the Email Delivery SMTP "
                 "Interface using the Python smtplib package."
                )
     
    # The HTML body of the email.
    BODY_HTML = """<html>
    <head></head>
    <body>
      <h1>Email Delivery SMTP Email Test</h1>
      <p>This email was sent with Email Delivery using the
        <a href='https://www.python.org/'>Python</a>
        <a href='https://docs.python.org/3/library/smtplib.html'>
        smtplib</a> library.</p>
    </body>
    </html>"""
    
    # get the password from a named config file ociemail.config
    with open(PASSWORD_SMTP_FILE) as f:
        password_smtp = f.readline().strip()
    
    # create message container
    msg = EmailMessage()
    msg['Subject'] = SUBJECT
    msg['From'] = email.utils.formataddr((SENDERNAME, SENDER))
    msg['To'] = RECIPIENT
    
    # make the message multi-part alternative, making the content the first part
    msg.add_alternative(BODY_TEXT, subtype='text')
    # this adds the additional part to the message
    # According to RFC 2046, the last part of a multipart message, in this case
    # the HTML message, is best and preferred.
    msg.add_alternative(BODY_HTML, subtype='html')
    
    # Try to send the message.
    try: 
        server = smtplib.SMTP(HOST, PORT)
        server.ehlo()
        # most python runtimes default to a set of trusted public CAs that will include the CA used by OCI Email Delivery.
        # However, on platforms lacking that default (or with an outdated set of CAs), customers may need to provide a capath that includes our public CA.
        server.starttls(context=ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile=None, capath=None))
        # smtplib docs recommend calling ehlo() before & after starttls()
        server.ehlo()
        server.login(USERNAME_SMTP, password_smtp)
        # our requirement is that SENDER is the same as From address set previously
        server.sendmail(SENDER, RECIPIENT, msg.as_string())
        server.close()
    # Display an error message if something goes wrong.
    except Exception as e:
        print(f"Error: {e}")
    else:
        print("Email successfully sent!")
    Nota

    Python 2 y las API de correo electrónico heredadas no se deben utilizar con Email Delivery.
  5. En un editor de archivos como vi, cree un archivo que contenga la contraseña de SMTP. Ejecute el siguiente comando y reemplace el contenido con la contraseña de SMTP:
    sudo vi ociemail.config
  6. Para enviar un correo electrónico de prueba con Python, ejecute el siguiente comando desde el directorio en el que se encuentra el script:
    python3 ociemail.py

Más información

En GitHub encontrará más scripts de ejemplo de Python.