2

このスクリプトで複数の受信者にメールを送信できないのはなぜですか?

エラーやバウンスバックは発生せず、最初の受信者メールを受信します。他のどれもしません。

スクリプト:

#!/usr/bin/python
import smtplib

SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587

recipient = 'email@domain.com; email2@domain.com;'
sender = 'me@gmail.com'
subject = 'the subject'
body = 'the body'
password = "password"
username = "me@gmail.com"

body = "" + body + ""

headers = ["From: " + sender,
           "Subject: " + subject,
           "To: " + recipient,
           "MIME-Version: 1.0",
           "Content-Type: text/html"]
headers = "\r\n".join(headers)

session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)

session.ehlo()
session.starttls()
session.ehlo
session.login(username, password)

session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
session.quit()
4

5 に答える 5

8

セミコロンは、受信者ヘッダーのアドレスの正しい区切り文字ではありません。カンマを使用する必要があります。

編集:ライブラリを誤って使用していることがわかりました。常に単一のアドレスとして解釈される文字列を指定しています。複数の受信者に送信するには、アドレスのリストを提供する必要があります。

于 2012-01-24T22:55:44.000 に答える
2

標準ヘッダーの受信者は、セミコロンではなくコンマで区切る必要があります。私は、Microsoft Outlookが、他のことを信じるように人々を導いたことを非難します。

于 2012-01-24T22:55:10.507 に答える
0

メールを配列に入れて、次のように各メールの配列をループすることができます(私のPythonはさびています...だから私の構文を許してください)

foreach recipient in recipients
    headers = ["From: " + sender, "Subject: " + subject, "To: " + recipient, "MIME-Version: 1.0",  "Content-Type: text/html"]
    headers = "\r\n".join(headers)
    session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
于 2012-01-24T22:57:00.507 に答える
0

コードでこれを変更します。

recipient = ['email@domain.com','email2@domain.com']

headers = ",".join(headers)

session.sendmail(sender, recipient.split(","), headers + "\r\n\r\n" + body)
于 2013-07-30T23:21:31.160 に答える
0

あるいは

recipient = ', '.join(recipient.split('; '))

受信者がセミコロンで区切られたアドレスの文字列である場合。

于 2013-07-30T23:52:39.103 に答える