Maison >développement back-end >Tutoriel Python >Comment résoudre les erreurs « Extension SMTP AUTH non prise en charge par le serveur » lors de l'envoi d'e-mails avec Gmail et Python ?

Comment résoudre les erreurs « Extension SMTP AUTH non prise en charge par le serveur » lors de l'envoi d'e-mails avec Gmail et Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-30 15:11:12748parcourir

How to Resolve

Envoi d'e-mails avec Gmail à l'aide de Python

Lorsque vous essayez d'envoyer des e-mails à l'aide de la bibliothèque SMTP de Python via Gmail, vous pouvez rencontrer une erreur indiquant que SMTP AUTH n'est pas pris en charge par le serveur.

Erreur Description :

L'erreur « Extension SMTP AUTH non prise en charge par le serveur » se produit lorsque vous essayez de vous authentifier auprès du serveur SMTP à l'aide de la méthode login() sans activer le cryptage TLS.

Résolution à l'aide de TLS :

Pour résoudre ce problème, activez le cryptage TLS en suivant ces instructions étapes :

import smtplib

# Enable TLS encryption
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()

Une fois TLS activé, vous pouvez vous authentifier auprès du serveur à l'aide de la méthode login().

Utilisation du port 465 avec SSL :

Vous pouvez également utiliser le port 465 avec cryptage SSL. Pour cela, vous devez créer un objet SMTP_SSL :

import smtplib

server_ssl = smtplib.SMTP_SSL("smtp.gmail.com", 465)
server_ssl.ehlo() # optional, called by login()
server_ssl.login(gmail_user, gmail_pwd)

Notez que les serveurs SSL ne prennent pas en charge ou n'exigent pas le cryptage TLS, n'appelez donc pas server_ssl.starttls().

Exemple de script pour l'envoi d'e-mails :

Voici une version améliorée du script Python fourni dans le question :

def send_email(user, pwd, recipient, subject, body):

    FROM = user
    TO = recipient if isinstance(recipient, list) else [recipient]
    SUBJECT = subject
    TEXT = body

    # Prepare actual message
    message = """From: %s\nTo: %s\nSubject: %s\n\n%s
    """ % (FROM, ", ".join(TO), SUBJECT, TEXT)

    try:
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.ehlo()
        server.starttls()
        server.login(user, pwd)
        server.sendmail(FROM, TO, message)
        server.close()
        print('successfully sent the mail')
    except:
        print("failed to send mail")

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn