当我试图用python向多个人发送电子邮件时遇到错误

2024-06-29 00:58:58 发布

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

我正在使用下面的代码用python向人们发送电子邮件。在

import smtplib
from email.mime.multipart import MIMEMultipart, MIMEBase
from email.mime.text import MIMEText
from email.utils import formatdate

    def send_mail(send_from,send_to, subject, text, files=[], server = "localhost"):
        for s in send_to:
               COMMASPACE = ', '
               msg = MIMEMultipart()
               msg['From'] = send_from
               msg['To'] = COMMASPACE.join(s)
               msg['Date'] = formatdate(localtime=True)
               msg['Subject'] = subject

               msg.attach( MIMEText(text) )

               for f in files:
                       part = MIMEBase('application', "octet-stream")
                       part.set_payload( open(f,"rb").read() )
                       Encoders.encode_base64(part)
                       part.add_header('Content-Disposition', 'attachment; filename="%s"' %os.path.basename(f))
                       msg.attach(part)

               server = smtplib.SMTP(server)
               server.sendmail(send_from, s, msg.as_string())
               server.close()

抱歉,如果格式混乱的话。emails是一个有两个email的预定义列表。我遇到的错误是: AttributeError:SMTP实例没有属性“find”

有什么想法吗?提前谢谢。在


Tags: totextfromimportsendserveremailmsg
2条回答

我想你的问题是:

>>> COMMASPACE = ', '
>>> send_to = ('test@example.com','test2@example.com')
>>> for s in send_to:
...  print COMMASPACE.join(s)
...
t, e, s, t, @, e, x, a, m, p, l, e, ., c, o, m
t, e, s, t, 2, @, e, x, a, m, p, l, e, ., c, o, m

我想你要做的是:

^{pr2}$

您不需要为每个收件人创建单独的电子邮件;只需发送包含多个收件人的单个邮件:

def send_mail(send_from,send_to, subject, text, files=[], server = "localhost"):
   msg = MIMEMultipart()
   msg['From'] = send_from
   msg['To'] = COMMASPACE.join(send_to)

   # ... 

   server = smtplib.SMTP(server)
   server.sendmail(send_from, send_to, msg.as_string())
   server.close()

这几乎与docs中的示例“这是一个如何发送包含可能驻留在某个目录中的家庭照片的MIME消息的示例”。在

(如果不希望每个人都看到对方的地址,可以将其全部设置为BCC,而不是{}。)

如果您对原始代码的错误比对如何正确处理更感兴趣,那么有两个直接可见的问题:

  1. 正如维德所解释的那样,你正在对每个地址进行join。在
  2. 您将单个地址作为字符串作为第二个参数传递给^{},但第二个参数是地址序列。要解决这个问题,请使用[s]而不是{},就像大多数示例所做的那样。在

这两种情况都是由相同的混淆造成的,将每个地址视为一个地址列表。同一问题可能会导致其他错误。在

相关问题 更多 >