我们可以在 python 程序中多次使用带有某些参数的用户定义函数吗?

Can we use a user defined function with some parameters, multiple times in a python program?

我想在我的 python 程序中针对不同的情况发送邮件,但是我的 'message' (检查程序)在每种情况下都不同,我该如何解决这个问题? 我想每次使用相同的用户定义函数发送带有不同消息的邮件,即 sendmail(mail,message)

def sendmail(mail,message):
    port = 587  # For starttls
    smtp_server = "smtp.gmail.com"
    sender_email = "something@gmail.com"
    receiver_email = mail
    password = 'password123'

    context = ssl.create_default_context()
    with smtplib.SMTP(smtp_server, port) as server:
        server.ehlo()  # Can be omitted
        server.starttls(context=context)
        server.ehlo()  # Can be omitted
        server.login(sender_email, password)
        server.sendmail(sender_email, receiver_email, message)

message = f"""\         #my first message
  Subject: Use OTP {no} Dear {extname(am1)}, 
  Use OTP {no} to access your account. 
  Don't share it with someone else. """ 
  sendmail(mail,message) 

  message = f'''\         #my second message
  Subject: ZABANK: Current Balance 
  Dear {extname(am1)}, 
  Your current balance is {extbal(am1)} rupees. ''' 
  sendmail(mail,message) 

我最后两次收到第一条消息。 此处不需要 mail,因为它是分配给另一个用户定义函数的变量。

您不能调用该功能两次,因为它需要同时登录两次 SMTP, 当您已经登录时正在登录您的帐户(因此不会发送第二条消息)。你可以通过迭代你的消息列表来克服这个问题

#please change your funtion name to avoid collision with the smtp.SMTP.sendmail method 
def usersendmail(mail,message):
    port = 587  # For starttls
    smtp_server = "smtp.gmail.com"
    sender_email = "something@gmail.com"
    receiver_email = mail
    password = 'password123'

    context = ssl.create_default_context()
    with smtplib.SMTP(smtp_server, port) as server:
        server.ehlo()  # Can be omitted
        server.starttls(context=context)
        server.ehlo()  # Can be omitted
        server.login(sender_email, password)
        for msg in messagelist:
            server.sendmail(sender_email, receiver_email, msg)

usersendmail("them@gmail.com",["mymessage1","mymessage2"])