Je souhaite envoyer un e-mail depuis Gmail en utilisant Python.

Salut à tous, depuis longtemps sans voir. Petit à petit, je vais commencer à poster.

Ce thème

Connectez-vous à gmail avec Python et envoyez un e-mail.

référence

~ Envoi de courrier avec Gmail avec Python ~

Flux d'envoi de courrier

Créer et envoyer du MIME

C'est vraiment simple.

Lorsque le flux ci-dessus est démonté, trois étapes sont nécessaires.

  1. Composez un message à l'aide de la classe MIMEText
  2. Connectez-vous à Gmail et envoyez

1. Composez un message à l'aide de la classe MIMEText

create_msg.py


from email.mime.text import MIMEText


def create_msg(from_email, to_email):
    #Le contenu de l'e-mail
    subject = "Todo d'aujourd'hui"
    message = '''
        <ul>
            <li>À propos du texte MINE</li>
            <li>À propos de SMTP</li>
            <li>Livre de technologie Web</li>
            <li>À propos du modèle MVC</li>
        </ul>
    '''
    #Explication 1
    msg = MIMEText(message, "html")
    msg["Subject"] = subject
    msg["To"] = to_email
    msg["From"] = from_email

    return msg

Commentaire

Explication 1

*class email.mime.text.MIMEText(_text, _subtype='plain', _charset=None, , policy=compat32) C'est l'argument de la classe MINEText. Cette fois, "_text" et "_subtype" sont définis. "_text" est défini sur le message que vous souhaitez envoyer cette fois, et puisque vous souhaitez l'afficher au format HTML, "html" est passé à "_subtype".

Après cela, le sujet, la destination et la source sont passés à cette classe MIMEText. Ceci termine la composition du message pour l'envoi.

référence

email.mine: Créez des objets mail et MIME à partir de zéro

2. Connectez-vous à gmail

gmail.py


    #Explication 1
    gmail = smtplib.SMTP("smtp.gmail.com", 587)
    #Pour confirmation lorsque l'authentification échoue
    gmail.set_debuglevel(True)
    
    gmail.ehlo()
    if gmail.has_extn('STARTTLS'):
        #Passer à la communication cryptée
        gmail.starttls()
    gmail.ehlo()
    #Commentaire 2
    gmail.login(from_email, from_password)
    #Envoyer un e-mail
    gmail.send_message(msg)

Commentaire

Explication 1

Tout d'abord, SMTP class smtplib.SMTP(host='', port=0, local_hostname=None, [timeout, ]source_address=None) Écrit en. Client de protocole SMTP

J'utiliserai gmail cette fois, donc host='smtp.gmail.com' port=587 C'était fabriqué. Consultez l'aide Google ci-dessous pour savoir d'où ils proviennent. スクリーンショット 2020-03-17 11.47.29.png Aide Google

Commentaire 2

Puis connectez-vous. Vous pouvez vous connecter avec gmail.login (from_email, from_password). from_email mettez votre adresse e-mail, Pour from_password, saisissez votre mot de passe Gmail. Il y a un piège ici.

Par défaut, Gmail ne pourra pas envoyer de courrier depuis votre Python local, car Gmail inversera le DNS de l'adresse IP source et rejettera la connexion si le domaine n'est pas trouvé. Pour cette raison, il est nécessaire d'activer ** "Autoriser l'accès au compte à partir d'applications moins sécurisées" ** à l'avance dans les paramètres du compte. Cela pose un risque pour la sécurité, nous vous recommandons donc de créer un compte d'apprentissage distinct.

Méthode de réglage

Accédez à "Sécurité" depuis votre compte Google (https://myaccount.google.com/) pour activer l'accès à des applications moins sécurisées.

De plus, les numéros d'hôte et de port varient selon le fournisseur.

Fournisseur Nom du serveur SMTP
Gmail smtp.gmail.com
Outlook.com/Hotmail.com smtp-mail.outllok.com
Yahoo Mail smtp.mail.yahoo.com
AT&T smtp.mail.att.net(port = 465)
Comcast smtp.comcast.net
Verizon smtp.verizon.net(port = 465)

Code source complet

main.py


from email.mime.text import MIMEText
import smtplib


def send_email(email):
    #Votre compte
    from_email="Votre adresse Gmail"
    from_password="Mot de passe pour vous connecter à Gmail"

    #Destination
    to_email = email

    #Rédiger un message
    msg = create_msg(from_email, to_email)

    gmail = smtplib.SMTP("smtp.gmail.com", 587)
    #Pour confirmation lorsque l'authentification échoue
    gmail.set_debuglevel(True)
    
    gmail.ehlo()
    if gmail.has_extn('STARTTLS'):
        #Passer à la communication cryptée
        gmail.starttls()
    gmail.ehlo()
    #Commentaire 2
    gmail.login(from_email, from_password)
    #Envoyer un e-mail
    gmail.send_message(msg)


def create_msg(from_email, to_email):
    #Le contenu de l'e-mail
    subject = "Todo d'aujourd'hui"
    message = '''
        <ul>
            <li>À propos du texte MINE</li>
            <li>À propos de SMTP</li>
            <li>Livre de technologie Web</li>
            <li>À propos du modèle MVC</li>
        </ul>
    '''
    #Explication 1
    msg = MIMEText(message, "html")
    msg["Subject"] = subject
    msg["To"] = to_email
    msg["From"] = from_email

    return msg


if __name__ == '__main__':
    to_addr = 'Adresse e-mail de la personne que vous souhaitez envoyer'
    send_email(to_addr)

Liste des matériaux de référence

Erreur lors de la tentative d'envoi de courrier depuis le programme avec Gmail email.mine: Créez des objets mail et MIME à partir de zéro Client de protocole SMTP Aide Google

Recommended Posts

Je souhaite envoyer un e-mail depuis Gmail en utilisant Python.
Je veux utiliser jar de python
[Python] Je veux gérer 7DaysToDie depuis Discord! 1/3
Je veux utiliser le solveur ceres de python
[Python] Je veux gérer 7DaysToDie depuis Discord! 2/3
Je veux créer du code C ++ à partir de code Python!
Je veux déboguer avec Python
Je veux démarrer beaucoup de processus à partir de python
Je souhaite envoyer un message de Python à LINE Bot
De Python à l'utilisation de MeCab (et CaboCha)
Je veux créer un environnement Python
Je veux analyser les journaux avec Python
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
Je veux jouer avec aws avec python
Je souhaite me connecter à PostgreSQL à partir de plusieurs langues
Je veux faire le test de Dunnett en Python
Je souhaite utiliser DB en utilisant l'ORM de Django à partir d'une application externe
Changements de Python 3.0 à Python 3.5
Pièces jointes par e-mail à l'aide de votre compte gmail avec python.
Je veux mémoriser, y compris les arguments de mots clés de Python
Je veux créer une fenêtre avec Python
Je veux faire un jeu avec Python
Je veux visualiser les fichiers csv en utilisant Vega-Lite!
[Mémo Python] Je souhaite obtenir un nombre hexadécimal à 2 chiffres à partir d'un nombre décimal
Je veux fusionner des dictionnaires imbriqués en Python
Je veux faire des crises de ma tête
Je souhaite utiliser le répertoire temporaire avec Python2
#Unresolved Je veux compiler gobject-introspection avec Python3
Je veux résoudre APG4b avec Python (chapitre 2)
J'ai essayé d'envoyer un e-mail de fin d'inscription depuis Gmail avec django.
[Je veux classer les images à l'aide de Tensorflow] (2) Classifions les images
Ce que j'ai fait lors de la mise à jour de Python 2.6 vers 2.7
Je souhaite vendre les produits que j'ai listés par python scraping Mercari
Je veux écrire dans un fichier avec Python
Je veux afficher la progression en Python!
Je souhaite créer une application Web en utilisant React et Python flask
Je souhaite envoyer Gmail avec Python, mais je ne peux pas en raison d'une erreur
Je veux obtenir / exécuter des variables / fonctions / classes de fichiers externes à partir de Python
Pour envoyer automatiquement des e-mails avec des pièces jointes à l'aide de l'API Gmail en Python
J'ai essayé d'exécuter du code Python à partir de .Net en utilisant Pythonnet (édition Hallo World)
Je veux écrire en Python! (1) Vérification du format de code
Je veux voir le nom de fichier de DataLoader
Même les débutants veulent dire "Je comprends parfaitement Python"
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Je veux détecter des images de chats d'Instagram
Je veux répéter plusieurs fois un générateur Python
Je veux générer rapidement UUID (memo memo) ~ Edition Python ~
Je veux écrire en Python! (2) Écrivons un test
Notification PUSH de Python vers Android à l'aide de l'API de Google
Même avec JavaScript, je veux voir Python `range ()`!
Méthodes MessagePack-Call Python (ou Python vers Ruby) à partir de Ruby à l'aide de RPC
Je voulais utiliser la bibliothèque Python de MATLAB
Je veux échantillonner au hasard un fichier avec Python
Je veux hériter de l'arrière avec la classe de données python
Je veux travailler avec un robot en python.
[Python] Je veux faire d'une liste imbriquée un taple
Je veux écrire en Python! (3) Utiliser des simulacres
Je veux AWS Lambda avec Python sur Mac!