python - ईमेल अनुलग्नक कैसे भेजें?




email (4)

मुझे पाइथन का उपयोग करके अनुलग्नक को ईमेल करने के तरीके को समझने में समस्याएं आ रही हैं। मैंने smtplib साथ सरल संदेश सफलतापूर्वक ईमेल किया है। क्या कोई व्यक्ति किसी ईमेल में अनुलग्नक भेजने का तरीका बता सकता है। मुझे पता है कि ऑनलाइन अन्य पोस्ट हैं लेकिन पाइथन शुरुआती के रूप में मुझे उन्हें समझना मुश्किल लगता है।


अन्य उत्तरों उत्कृष्ट हैं, हालांकि अगर कोई विकल्प तलाश रहा है तो भी मैं एक अलग दृष्टिकोण साझा करना चाहता हूं।

यहां मुख्य अंतर यह है कि इस दृष्टिकोण का उपयोग करके आप अपने संदेश को प्रारूपित करने के लिए एचटीएमएल / सीएसएस का उपयोग कर सकते हैं, ताकि आप रचनात्मक हो सकें और अपने ईमेल पर कुछ स्टाइल दे सकें। यद्यपि आप HTML का उपयोग करने के लिए लागू नहीं हैं, फिर भी आप केवल सादा पाठ का उपयोग कर सकते हैं।

ध्यान दें कि यह फ़ंक्शन एकाधिक प्राप्तकर्ताओं को ईमेल भेजने को स्वीकार करता है और कई फ़ाइलों को संलग्न करने की अनुमति देता है।

मैंने केवल पायथन 2 पर यह कोशिश की है, लेकिन मुझे लगता है कि इसे 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: ["[email protected]", "[email protected]"]
    :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())

आशा है कि ये आपकी मदद करेगा! :-)


यह वह कोड है जिसका उपयोग मैंने समाप्त किया:

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())

कोड ओली के पद के समान ही है। सबको शुक्रीया

बाइनरी फ़ाइल ईमेल संलग्नक समस्या पोस्ट के आधार पर कोड।


सबसे सरल कोड मैं प्राप्त कर सकता हूं:

#for attachment email
from django.core.mail import EmailMessage

    def attachment_email(request):
            email = EmailMessage(
            'Hello', #subject
            'Body goes here', #body
            '[email protected]', #from
            ['[email protected]'], #to
            ['[email protected]'], #bcc
            reply_to=['[email protected]'],
            headers={'Message-ID': 'foo'},
            )

            email.attach_file('/my/path/file')
            email.send()

यह आधिकारिक Django दस्तावेज पर आधारित था


Oli से पाइथन 3 के लिए संशोधित संस्करण यहां दिया गया है

import smtplib
import os.path as op
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate
from email import encoders


def send_mail(send_from, send_to, subject, message, files=[],
              server="localhost", port=587, username='', password='',
              use_tls=True):
    """Compose and send email with provided info and attachments.

    Args:
        send_from (str): from name
        send_to (str): to name
        subject (str): message title
        message (str): message body
        files (list[str]): list of file paths to be attached to email
        server (str): mail server host name
        port (int): port number
        username (str): server auth username
        password (str): server auth password
        use_tls (bool): use TLS mode
    """
    msg = MIMEMultipart()
    msg['From'] = send_from
    msg['To'] = COMMASPACE.join(send_to)
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = subject

    msg.attach(MIMEText(message))

    for path in files:
        part = MIMEBase('application', "octet-stream")
        with open(path, 'rb') as file:
            part.set_payload(file.read())
        encoders.encode_base64(part)
        part.add_header('Content-Disposition',
                        'attachment; filename="{}"'.format(op.basename(path)))
        msg.attach(part)

    smtp = smtplib.SMTP(server, port)
    if use_tls:
        smtp.starttls()
    smtp.login(username, password)
    smtp.sendmail(send_from, send_to, msg.as_string())
    smtp.quit()




email