Nous avons [implémenté](# implémenté) la fonction d'envoi d'emails en Python! Vous pouvez facilement joindre des fichiers!
Je vais vous expliquer comment l'utiliser en prenant l'exemple de l'envoi d'un mail depuis gmail.
Obtenez le «utilisateur» et le «mot de passe» de gmail en vous référant au lien ci-dessous. Envoyer Gmail avec Python
Après l'acquisition, exécutez le programme suivant.
from_address = 'Adresse source'
to_address = 'Adresse de destination'
subject = 'matière'
body = 'Texte'
#Chemin du fichier à joindre
attachment = 'test.txt'
user = 'user'
password = 'password'
mail = Mail('smtp.gmail.com', 587, user, password)
#Pas de pièces jointes
mail.send(from_address, to_address, subject, body)
#Il y a un fichier joint
mail.send(from_address, to_address, subject, body, attachments=attachment)
Plusieurs personnes peuvent envoyer en transmettant l'adresse e-mail de destination (y compris cc et cci) dans une liste. De même, vous pouvez joindre plusieurs fichiers en passant les fichiers joints dans une liste.
Je suis désolé pour le changement. .. ..
import copy
import os
import smtplib
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formatdate
from typing import Union
class Mail(object):
"""
Classe pour envoyer du courrier
"""
def __init__(self, smtp_host: str, smtp_port: int, user: str = None, password: str = None):
"""constructeur
Args:
smtp_host:hôte smtp
smtp_port:port smtp
user:Utilisateur
password:mot de passe
"""
self.smtp_host = smtp_host
self.smtp_port = smtp_port
self.user = user
self.password = password
def send(self, from_address: str, to_addresses: Union[str, list], subject: str, body: str,
attachments: Union[str, list] = None, profile: str = None, cc_addresses: Union[str, list] = None,
bcc_addresses: Union[str, list] = None):
"""envoyer un e-mail
Args:
from_address:Adresse source
to_addresses:Adresse de destination
subject:matière
body:Texte
attachments:Pièce jointe
profile:Profil
cc_addresses:adresse cc
bcc_addresses:adresse Cci
"""
if attachments:
msg = self.create_body_with_attachment(
from_address, to_addresses, subject, body, attachments, profile, cc_addresses, bcc_addresses)
else:
msg = self.create_body(from_address, to_addresses, subject, body, profile, cc_addresses, bcc_addresses)
if type(to_addresses) is list:
send_list = copy.copy(to_addresses)
else:
send_list = [to_addresses]
if cc_addresses:
if type(cc_addresses) is list:
send_list = send_list + cc_addresses
else:
send_list = send_list + [cc_addresses]
if bcc_addresses:
if type(cc_addresses) is list:
send_list = send_list + bcc_addresses
else:
send_list = send_list + [bcc_addresses]
smtpobj = smtplib.SMTP(self.smtp_host, self.smtp_port)
smtpobj.ehlo()
smtpobj.starttls()
smtpobj.ehlo()
if self.password:
smtpobj.login(self.user, self.password)
smtpobj.sendmail(from_address, send_list, msg.as_string())
smtpobj.close()
def create_body_with_attachment(self, from_address, to_addresses, subject, body, attachments, profile,
cc_addresses=None, bcc_addresses=None):
"""Créer un corps d'e-mail avec des pièces jointes
Args:
from_address:Adresse source
to_addresses:Adresse de destination
subject:matière
body:Texte
attachments:Pièce jointe
profile:Profil
cc_addresses:adresse cc
bcc_addresses:adresse Cci
Returns:
le contenu de l'e-mail
"""
msg = MIMEMultipart()
msg = self.create_msg(msg, from_address, to_addresses, subject, profile, cc_addresses, bcc_addresses)
body = MIMEText(body.encode("utf-8"), 'html', 'utf-8')
msg.attach(body)
if type(attachments) is not list:
attachments = [attachments]
for attachment in attachments:
base_name = os.path.basename(attachment)
with open(attachment, "rb") as f:
part = MIMEApplication(
f.read(),
Name=base_name
)
part['Content-Disposition'] = 'attachment; filename="{}"'.format(base_name)
msg.attach(part)
return msg
def create_body(self, from_address, to_addresses, subject, body, profile, cc_addresses=None, bcc_addresses=None):
"""Créer le corps de l'e-mail
Args:
from_address:Adresse source
to_addresses:Adresse de destination
subject:matière
body:Texte
profile:Profil
cc_addresses:adresse cc
bcc_addresses:adresse Cci
Returns:
le contenu de l'e-mail
"""
msg = MIMEText(body.encode("utf-8"), 'html', 'utf-8')
return self.create_msg(msg, from_address, to_addresses, subject, profile, cc_addresses, bcc_addresses)
@staticmethod
def create_msg(msg, from_address, to_addresses, subject, profile=None, cc_addresses=None, bcc_addresses=None):
msg['Subject'] = subject
if profile:
msg['From'] = '{} <{}>'.format(Header(profile.encode('utf-8'), 'utf-8').encode(), from_address)
else:
msg['From'] = from_address
def to_string_addresses(addresses):
if type(addresses) is list:
return ','.join(addresses)
else:
return addresses
msg['To'] = to_string_addresses(to_addresses)
msg['Bcc'] = to_string_addresses(bcc_addresses)
msg['Cc'] = to_string_addresses(cc_addresses)
msg['Date'] = formatdate()
return msg
Recommended Posts