我一直在测试我的代码以将电子邮件发送给多个收件人,但是遇到了一个奇怪的发现:
message["To"] = 'email_one.sample.com, email_two.sample.com'
sendmail(mine_email, ['email_one.sample.com'], message.as_string())
以上两行为我提供了一个输出,其中我可以在标头部分中看到两个收件人的email_id,但是尽管事实上我只在sendmail()方法中传递了单个收件人的ID,但电子邮件仍发送给两个尽管如此,ID还是。
反之亦然,如果我在sendmail()方法中将单个email_id传递给message [“ To”]和多个email_id,则电子邮件将通过sendmail()方法发送给所有收件人,但他们只会看到一个标题部分中的ID。
所以现在我对导致这种奇怪行为的幕后到底发生了什么感到困惑。仅将其电子邮件ID传递到message [“ To”]部分中,不会将我的email_id我未传递给sendmail()方法的收件人如何接收电子邮件。
P.S .:我已经看过下面的答案,尽管它详细介绍了语法,但我只是在询问与上述问题有关的奇怪行为
答案 0 :(得分:0)
观察是由于SMTP的工作原理,因此在电子邮件中通常有两种“收件人”地址-一种是将电子邮件发送到的实际电子邮件地址(envelope to
),另一种是是用户可以在电子邮件正文(header to
)中看到的内容。
例如,假设您从某个电子邮件客户端向两个收件人发送了一封电子邮件,一个作为密件抄送收件人,另一个作为CC收件人,那么envelope to
将具有两个发件人的地址,而{{1} }将没有密件抄送收件人的地址。因此,SMTP服务器(MTA邮件传输代理)将看到该电子邮件是同时发送给两个收件人的,但是当收件人接收到电子邮件时,他们将看到该电子邮件仅发送给了一个收件人。
这是一个示例SMTP交易-
to header
请注意,如果=== Connected to mysmtpserver.com
-> EHLO MYHOST
<- 250-mysmtpserver.com says EHLO to 10.128.22.119:53831
<- 250-8BITMIME
<- 250-ENHANCEDSTATUSCODES
<- 250-STARTTLS
<- 250-PIPELINING
-> MAIL FROM:<me@somone.com>
<- 250 2.0.0 MAIL FROM accepted
-> RCPT TO:<my_friend@his.domain.com>
<- 250 2.0.0 RCPT TO accepted
-> DATA
<- 354 3.0.0 continue. finished with "\r\n.\r\n"
-> Date: Fri, 03.1 Aug 2018 00:24:53 +0530
-> To: my_friend@his.domain.com
-> From: me@somone.com
-> Subject: Just having fun testing
-> Message-Id: <20180803002453.066266@MYHOST>
-> SOME-OTHER-HEADER: my friend! He can't see this in his email client
->
-> This is body, my friend can see this
->
-> .
<- 250 2.0.0 2983ksndafkn092 mail accepted for delivery
-> QUIT
<- 221 2.3.0 mysmtpserver.com closing connection
函数的toaddr
自变量是sendmail
,则它将从邮件标题(None
,{{ 1}}和BCC
),然后将它们用作CC
。
这是cpython source code。