[python] Come inviare allegati di posta elettronica?



Answers

questo è il codice che ho finito usando:

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import Encoders


SUBJECT = "Email Data"

msg = MIMEMultipart()
msg['Subject'] = SUBJECT 
msg['From'] = self.EMAIL_FROM
msg['To'] = ', '.join(self.EMAIL_TO)

part = MIMEBase('application', "octet-stream")
part.set_payload(open("text.txt", "rb").read())
Encoders.encode_base64(part)

part.add_header('Content-Disposition', 'attachment; filename="text.txt"')

msg.attach(part)

server = smtplib.SMTP(self.EMAIL_SERVER)
server.sendmail(self.EMAIL_FROM, self.EMAIL_TO, msg.as_string())

Il codice è molto simile al post di Oli. Ringrazia tutti

Codice basato sul post del problema dell'allegato e-mail di file binari .

Question

Sto riscontrando dei problemi a capire come inviare per email un allegato usando Python. Ho inviato con successo messaggi email con smtplib . Qualcuno potrebbe spiegare come inviare un allegato in un messaggio di posta elettronica. So che ci sono altri post online ma come principiante Python li trovo difficili da capire.




from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
import smtplib

msg = MIMEMultipart()
msg.attach(MIMEText(file("text.txt").read()))
msg.attach(MIMEImage(file("image.png").read()))

# to send
mailer = smtplib.SMTP()
mailer.connect()
mailer.sendmail(from_, to, msg.as_string())
mailer.close()

Adattato da here .




Altre risposte sono eccellenti, sebbene volessi comunque condividere un approccio diverso nel caso in cui qualcuno fosse alla ricerca di alternative.

La differenza principale è che utilizzando questo approccio è possibile utilizzare HTML / CSS per formattare il messaggio, in modo da essere creativi e dare un tocco di stile alla tua e-mail. Anche se non si è forzati ad usare l'HTML, è comunque possibile utilizzare solo testo normale.

Si noti che questa funzione accetta l'invio dell'e-mail a più destinatari e consente inoltre di allegare più file.

Ho provato questo solo su Python 2, ma penso che dovrebbe funzionare bene anche su 3:

import os.path
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

def send_email(subject, message, from_email, to_email=[], attachment=[]):
    """
    :param subject: email subject
    :param message: Body content of the email (string), can be HTML/CSS or plain text
    :param from_email: Email address from where the email is sent
    :param to_email: List of email recipients, example: ["a@a.com", "b@b.com"]
    :param attachment: List of attachments, exmaple: ["file1.txt", "file2.txt"]
    """
    msg = MIMEMultipart()
    msg['Subject'] = subject
    msg['From'] = from_email
    msg['To'] = ", ".join(to_email)
    msg.attach(MIMEText(message, 'html'))

    for f in attachment:
        with open(f, 'rb') as a_file:
            basename = os.path.basename(f)
            part = MIMEApplication(a_file.read(), Name=basename)

        part['Content-Disposition'] = 'attachment; filename="%s"' % basename
        msg.attach(part)

    email = smtplib.SMTP('your-smtp-host-name.com')
    email.sendmail(from_email, to_email, msg.as_string())

Spero che aiuti! :-)




Related



Tags

python python   email