python中的群发邮件

2024-10-01 11:26:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我对编程很陌生,所以我来这里寻求帮助。我正在尝试做一个简单的群发邮件的乐趣,目前不会使用这个,但在未来的某个时候,我可能会在我的IT工作。我的代码似乎不想为我工作。在

import sys
import smtplib
emailfile = raw_input('Please enter the name of the text file that includes all email addresses: ')
emailtosendfrom = raw_input('Enter your email address to send from:  ')
msgfile = raw_input('Please enter the text file name that includes the message you want to send out  :')
email = open(emailfile, 'r')
toaddrs = email
msg = open(msgfile, 'r')


# Credentials
password = raw_input('Please enter your email password  :  ')

# Send mail
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.login(emailtosendfrom,password)
with open(emailfile) as f:
    emailsort = f.readlines()
    for user in emailsort:
        server.sendmail(emailtosendfrom, user, msg)
f.close()
server.quit()

此代码返回错误:

^{pr2}$

任何帮助都将不胜感激。谢谢!在


Tags: the代码nameimportinputrawserveremail
1条回答
网友
1楼 · 发布于 2024-10-01 11:26:05

消息应该是字符串,而不是文件。首先通过替换获得消息体:

msg = open(emailfile, 'r')

有:

^{pr2}$

然后用以下方法修复循环:

server.sendmail(emailtosendfrom, user, msgbody)

虽然与这个问题没有直接关系,但我有两个问题:

  1. 使用模块^{}向用户请求密码,这样它就不会显示在屏幕上。在
  2. 您正在打开文件,但从未关闭它们。在这种情况下,这个问题不会在几毫秒后终止。通常,您应该将所有内容包装在with块中。除了关闭文件句柄外,他们还将明确文件的实际使用位置。在
  3. 有些线路是冗余的,比如email = open(emailfile, 'r')和{}。在

最后,您可以替换:

emailsort = f.readlines()
for user in emailsort:

有:

for user in f:

但是一定要去掉最后一个\n(否则电子邮件地址将是错误的)。在

相关问题 更多 >