如何在Python中向不同的收件人发送不同内容的电子邮件?

如何在Python中向不同的收件人发送不同内容的电子邮件?,python,email,Python,Email,我正在写一个python脚本来帮助一个朋友的课后程序向家长发送学费账单。我在一个{studentName,tutory}目录中有学生学费,在另一个{studentName,parentContact}目录中有家长联系人,由于出勤率不同,每个学生的学费编号不同。我有以下功能,打算向个别家长发送包含不同学费信息的个人电子邮件。我遇到的问题是,当我从pythonshell运行我的python脚本时,当我打印出来时,它看起来像是针对不同的家长发送的带有不同学费号的不同电子邮件,但每个家长收到的实际电子邮

我正在写一个python脚本来帮助一个朋友的课后程序向家长发送学费账单。我在一个
{studentName,tutory}
目录中有学生学费,在另一个
{studentName,parentContact}
目录中有家长联系人,由于出勤率不同,每个学生的学费编号不同。我有以下功能,打算向个别家长发送包含不同学费信息的个人电子邮件。我遇到的问题是,当我从pythonshell运行我的python脚本时,当我打印出来时,它看起来像是针对不同的家长发送的带有不同学费号的不同电子邮件,但每个家长收到的实际电子邮件都是第一个学生学费信息的相同副本。这是我的发送电子邮件功能:

def send_mail(studentParentContact, studentTuition):
    msg=MIMEMultipart()
    msg['Subject'] = 'Your kid After-school Program Tuition Bill'
    msg['From'] = FLPEmail   #after-school program's email address

    # Send the message via SMTP server
    s = smtplib.SMTP('smtp.gmail.com', 587)
    s.starttls()
    s.login(username, PASSWORD)  #after-school program gmail login

    for student in studentParentContact:    
        ParentEmail=studentParentContact[student]
        tuition=studentTuition[student]
        msg['To'] = ParentEmail
        body="Hi, \nThe tuition for "+student+' is '+'$'+ str(tuition)
        msg.attach(MIMEText(body, 'plain'))
        text=msg.as_string()
        print FLPEmail, ParentEmail, text
        s.sendmail(FLPEmail, ParentEmail, text)
    s.quit()
因此,现在的实际结果不是将学生A的学费信息发送给A的父母,学生B的学费信息发送给B的父母,学生C的学费信息发送给C的父母,而是将A的学费信息发送给A、B和C的父母。所有家长的学费相同。我该如何解决这个问题?多谢各位

每次通过循环都会添加另一个身体部位。因此,第一个家长只接收他们自己的身体部位,第二个家长接收两个身体部位,第一个是前一个学生的身体部位,等等。循环结束时,最后一个家长接收n个不同的身体部位,其中最后一个实际上是他们的,但他们也接收所有前一个学生的身体部位

我只需在循环中移动
msg=MimeMultipart()
etc初始化;回收一个空的多部分无论如何都是一个可疑的优化(当然,到目前为止,您回收的多部分不是空的)

如果您只发送单个部件,那么将其放入多部件容器中是毫无意义的

def send_mail(studentParentContact, studentTuition):
    s = smtplib.SMTP('smtp.gmail.com', 587)
    s.starttls()
    s.login(username, PASSWORD)

    for student in studentParentContact:    
        ParentEmail=studentParentContact[student]
        tuition=studentTuition[student]

        body="Hi, \nThe tuition for "+student+' is '+'$'+ str(tuition)
        msg=MIMEText(body, 'plain')
        msg['Subject'] = "Your Kid's After-school Program Tuition Bill"
        msg['From'] = FLPEmail    
        msg['To'] = ParentEmail

        text=msg.as_string()
        #print FLPEmail, ParentEmail, text
        s.sendmail(FLPEmail, ParentEmail, text)
    s.quit()

拥有多个具有相同键的
dict
变量不是一个bug,但感觉有点杂乱。一种常见的设计是有一个dict of dict,其中每个记录都有许多相同的键(在这种情况下,可能是
student[s]['parent_email']
来获取家长的电子邮件,
student[s]['name']
来获取学生的全名,
student[s]['tutory']
获取学费等。最终,您可能希望将其封装为
学生的属性。

您可以发布输入参数吗?studentParentContact&StudentTution非常感谢您的帮助,将msg=MimeMultipart()移动到循环中确实解决了问题,还感谢您提供有关如何处理学生学费和家长联系数据的好建议,非常感谢!