如何发送包含数组内部电子邮件的电子邮件?在 python 上使用 smptlib

How can I send an email with the email inside of an array? with smptlib on python

我是 Whosebug 的新手,中级 python 学生,我编写了一个脚本来自动发送我的作业 90%,但是 它不会进入尝试函数来发送电子邮件 ,我认为代码不理解数组,我使用了一些 mime/email lib 和 smptlib,我最大的困难是用数组中的电子邮件发送电子邮件,我想数组 [subject] 中的电子邮件,但它没有用(我的不和谐是 > gOld#3140):

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
import mimetypes

class web():
    def __init__(self):

        # Criando as vars necessárias
        from_email = input('Write your email: ')
        password = input('Write your email password: ')
        subject_matter = input('Write the email subject matter: ')
        filedir = input('Write the dir of the archive to attach: ')

        # Setting up the email layout

        msg = MIMEMultipart()
        msg['From'] = from_email
        msg['Subject'] = subject_matter

        message = (f"""
        Hello, here are the drive homeworks:

        """)    # Edit this ^
                #           i

        msg.attach(MIMEText(message))

        attachment = open(filedir, "rb")

        mime_attach = mimetypes.guess_type(filedir)[0].split('/')

        part = MIMEBase(mime_attach[0], mime_attach[1])
        part.set_payload((attachment).read())
        encoders.encode_base64(part)
        part.add_header('Content-Disposition', "attachment; filename= %s" % filedir)
        msg_text = MIMEText(message, 'html')
        msg.attach(part)

        # Trying to send:


        filename2 = filedir.split("/")[-1].split(".")[0]

        subjects_mails = {
            'sociology': '@gmail.com',
            'biology': '@gmail.com',
            'geography': '@gmail.com',
            'mathematics': '@gmail.com',
            'science': '@gmail.com',
            'philosophy': '@gmail.com',
            'physical_education': '@gmail.com',
            'history': '@gmail.com',
            'portuguese': '@gmail.com',
            'informatic': '@gmail.com',
            'physics': '@gmail.com',
            'chemical': '@gmail.com',
            'life_project': '@gmail.com',
        }

        subject = input('Write your subject that you wanna to send an email: ')
        subject_recmail = ''

        for subject in subjects_mails.keys():
            if subject == subjects_mails and filename2 == subject:
                try:
                    subject_recmail = subjects_mails.get(subject)
                    server = smtplib.SMTP('smtp.gmail.com', 587)
                    server.ehlo()
                    server.starttls()
                    server.ehlo()
                    server.login(from_email, password)
                    server.sendmail(from_email, subject_recmail, msg.as_string())        
                   print("Email has been sent to ", subject_recmail)
                   server.quit()
                except Exception as err:
                    print(err)


if __name__ == '__main__':
    works = web()

Code ran > image link

线路有一个问题

if subject == subjects_mails and filename2 == subject:

您正在比较主题(键)和 subjects_mails(字典),因此在“==”运算符下这些东西永远不会相等。

User that helped me

问题出在for函数和if里面,我改成:

for key in subjects_mail.keys():
    if key == subject:
        try:
            subject_recmail = subjects_mails.get(subject)
            server = smtplib.SMTP('smtp.gmail.com', 587)
            server.ehlo()
            server.starttls()
            server.ehlo()
            server.login(from_email, password)
            server.sendmail(from_email, subject_recmail, msg.as_string())        
            print("Email has been sent to ", subject_recmail)
            server.quit()
        except Exception as err:
            print(err)