Python新手求助:实现邮件发送循环(仅首次输入密码)
修改后的多收件人邮件发送代码
import smtplib, ssl from email.message import EmailMessage port = 465 # 仅首次运行时输入密码 password = input('Type your password and press enter: ') sender = 'email@gmail.com' # 输入多个收件邮箱,用逗号分隔 receivers_input = input('Enter recipient emails separated by commas (e.g. a@example.com,b@test.com): ') # 处理输入,分割成干净的邮箱列表(去除空格) receivers = [email.strip() for email in receivers_input.split(',')] subject = "Thank you!" body = """ asdfgh """ context = ssl.create_default_context() # 登录一次SMTP服务器,循环发送给每个收件人 with smtplib.SMTP_SSL('smtp.gmail.com', port, context=context) as server: server.login(sender, password) for receiver in receivers: # 为每个收件人创建邮件对象(也可以在循环外创建后修改To,不过这样更清晰) em = EmailMessage() em['From'] = sender em['To'] = receiver em['Subject'] = subject em.set_content(body) server.sendmail(sender, receiver, em.as_string()) print(f'Email sent successfully to {receiver}!') print('All emails sent!')
关键修改说明
- 密码仅输入一次:保持原代码中密码输入的位置在最开头,整个程序只执行一次输入操作。
- 多收件人输入处理:让用户用逗号分隔多个邮箱,通过
split(',')分割成列表,再用strip()去除每个邮箱前后的空格,避免输入时的空格导致邮箱格式错误。 - 循环发送逻辑:在登录SMTP服务器后,用
for循环遍历每个收件人,逐个创建并发送邮件,符合你对for循环的基础认知,也能清晰跟踪每个收件人的发送状态。 - 高效登录:只登录一次服务器就完成所有邮件发送,避免重复登录的冗余操作。
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

