0

以下のコードを使用して、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()

フォーマットが乱れている場合は申し訳ありません。email は、2 つの電子メールを含む定義済みのリストです。私が遭遇しているエラーは次のとおりです: AttributeError: SMTP インスタンスに属性 'find' がありません

何か案が?前もって感謝します。

4

2 に答える 2

1

受信者ごとに個別の電子メール メッセージを作成する必要はありません。複数の受信者に 1 つのメッセージを送信するだけです。

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 メッセージを送信する方法の例です」とほぼ同じです。

(各人に相手のアドレスを見られたくない場合は、BCCs の代わりにすべてを s にすることができますTo。)

元のコードを正しく実行する方法よりも、元のコードの何が問題なのかに関心がある場合は、すぐに目に見える 2 つの問題があります。

  1. joinベイダーが説明するように、あなたは各住所を調べています。
  2. の 2 番目の引数として単一のアドレスを文字列として渡していますSMTP.sendmailが、2 番目の引数は一連のアドレスです。これを修正するには、ほとんどの例で行われているように、[s]代わりに を使用します。s

これらはどちらも、各アドレスをアドレスのリストとして扱うという同じ混乱によって引き起こされます。同じ問題が原因で、追加のエラーが発生する場合があります。

于 2013-01-31T23:33:58.337 に答える
0

あなたの問題はここにあると思います:

>>> 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

そして、これがあなたがやろうとしていると私が思うことです:

    >>> COMMASPACE.join(send_to)
    'test@example.com, test2@example.com'
于 2013-01-31T23:17:30.927 に答える