1

email.txt からリストを作成し、各アイテムにメールを送信する次のコードがあります。ループの代わりにリストを使用します。

#!/usr/bin/python
# -*- coding= utf-8 -*-

SMTPserver = '' 

import sys
import os
import re

import email
from smtplib import SMTP      
from email.MIMEText import MIMEText

body="""\
hello
"""

with open("email.txt") as myfile:
    lines = myfile.readlines(500)
    to  = [line.strip() for line in lines] 

try:
    msg = MIMEText(body.encode('utf-8'), 'html', 'UTF-8')
    msg['Subject']=  'subject' 
    msg['From']   = email.utils.formataddr(('expert', 'mymail@site.com'))
    msg['Content-Type'] = "text/html; charset=utf-8"

    conn = SMTP(SMTPserver)
    conn.set_debuglevel(False)
    conn.login('info', 'password')
    try:
        conn.sendmail(msg.get('From'), to, msg.as_string())
    finally:
        conn.close()

except Exception, exc:
    sys.exit( "mail failed; %s" % str(exc) ) 

ユーザーが電子メールを受信すると、このフィールドは空になるため、フィールド TO は表示されません。受信者にメールの TO フィールドを 1 回だけ表示してもらいたいです。どうすればいいですか?

4

1 に答える 1

2

メッセージヘッダー値を次のようにtoも設定します。

msg['to'] = "someone@somesite.com"

ファイルから読み取ったリストからその値を入力する必要がある場合がtoあります。そのため、一度に 1 つずつ、またはすべての値をまとめて、すべての値を繰り返し処理し、メール プロバイダーがサポートする方法を構造化する必要がある場合があります。

何かのようなもの:

#!/usr/bin/python
# -*- coding= utf-8 -*-

SMTPserver = '' 

import sys
import os
import re
import email
from smtplib import SMTP      
from email.MIMEText import MIMEText

body="""\

hello

"""

with open("email.txt") as myfile:
    lines = myfile.readlines(500)
    to  = [line.strip() for line in lines] 

for to_email in to:    
    try:
        msg = MIMEText(body.encode('utf-8'), 'html', 'UTF-8')
        msg['Subject'] = 'subject' 
        msg['From'] = email.utils.formataddr(('expert', 'mymail@site.com'))
        msg['Content-Type'] = "text/html; charset=utf-8"
        msg['to'] = to_email

        conn = SMTP(SMTPserver)
        conn.set_debuglevel(False)
        conn.login('info', 'password')
        conn.sendmail(msg.get('From'), to, msg.as_string())

    except Exception, exc:
        sys.exit( "mail failed; %s" % str(exc))
    finally:
        conn.close()

tryブロックをネストする必要はありません。

ループの外側で接続を作成し、すべてのメールが送信されるまで開いたままにし、その後閉じることができます。

これはコピペコードではなく、私もテストしていません。適切なソリューションを実装するために使用してください。

于 2013-09-15T19:19:39.043 に答える