【问题标题】:Send multiple mails hiding recipent in Python在 Python 中发送多个隐藏收件人的邮件
【发布时间】:2022-09-23 11:10:58
【问题描述】:

如何使用隐藏收件人发送多封邮件?

我目前可以发送邮件,但收到邮件的人可以看到收件人。

我的代码如下所示:

import smtplib
from email.message import EmailMessage

email_subject = \"Good morning\"
sender_email_address = \"user@outlook.com\"
receivers_email_address = [\'reciever1@gmail.com\', \'reciever2@gmail.com\']
email_smtp = \"smtp.office365.com\"
email_password = \"MyPassword\"

# Create an email message object
message = EmailMessage()

# Configure email headers
message[\'Subject\'] = email_subject
message[\'From\'] = sender_email_address
message[\'To\'] = \", \".join(receivers_email_address)

# Read file containing html
with open(\'message.html\', \'r\') as file:
   file_content = file.read()

# Add message content as html type
message.set_content(file_content, subtype=\'html\')

# Set smtp server and port
server = smtplib.SMTP(email_smtp, \'587\')

# Identify this client to the SMTP server
server.ehlo()

# Secure the SMTP connection
server.starttls()

# Login to email account
server.login(sender_email_address, email_password)

# Send email
server.send_message(message)

# Close connection to server
server.quit()
  • 您可以单独发送给每个收件人。
  • 我怎么做? @ScottHunter
  • 遍历电子邮件地址。
  • 您只是在寻找 Bcc: 标头。
  • 嗯,我无法@ScottHunter

标签: python email


【解决方案1】:

您不需要发送多条消息。只是不要将收件人明确地放在标题中。

下面通过将收件人放在Bcc: 标头中来实现这一点。

import smtplib 
from email.message import EmailMessage 

email_subject = "Good morning" 
sender_email_address = "user@outlook.com" 
receivers_email_address = ['reciever1@gmail.com', 'reciever2@gmail.com']

email_smtp = "smtp.office365.com" 
email_password = "MyPassword" 

message = EmailMessage() 
message['Subject'] = email_subject 
message['From'] = sender_email_address
# The message needs to have a To: header
# - putting yourself is an old convention
message['To'] = sender_email_address
message['Bcc'] = ",".join(receivers_email_address)

with open('message.html', 'r') as file:
   file_content = file.read()
message.set_content(file_content, subtype='html')

with smtplib.SMTP(email_smtp, '587') as server:
    server.ehlo() 
    server.starttls() 
    server.login(sender_email_address, email_password) 
    server.send_message(message) 
    server.quit()

当然,如果您确实需要To: 标头来指示实际收件人,您将需要为每个人生成一个唯一的消息。

这依赖于 SMTP 服务器来读取和剥离 Bcc: 标头。如果您不能依赖自己的方法来执行此操作,则可以显式使用 smtplib 模块的旧版 sendmail 方法,该方法使您可以将实际收件人列表与消息分开显式传递。然后你也可以避免讨厌的副本给自己。

简单回顾一下,SMTP 并不真正关心 To:Cc: 标头中的内容。在您提交实际消息之前,将单独传达实际的收件人列表。这称为 SMTP信封。

【讨论】:

    【解决方案2】:

    我做了一个循环单独发送。而不是将其发送给一个组中的多个人。

    import smtplib
    from email.message import EmailMessage
    
    email_subject = "Good morning"
    sender_email_address = "user@outlook.com"
    receivers_email_address = ['reciever1@gmail.com', 'reciever2@gmail.com']
    email_smtp = "smtp.office365.com"
    email_password = "MyPassword"
    
    
    
    # Read file containing html
    with open('message.html', 'r') as file:
        file_content = file.read()
    
    # Set smtp server and port
    server = smtplib.SMTP(email_smtp, '587')
    
    # Identify this client to the SMTP server
    server.ehlo()
    
    # Secure the SMTP connection
    server.starttls()
    
    # Login to email account
    server.login(sender_email_address, email_password)
    
    # Send email
    for receiver in receivers_email_address:
        # Create an email message object
        message = EmailMessage()
        message['Subject'] = email_subject
        message['From'] = sender_email_address
        message['To'] = receiver
        # Add message content as html type
        message.set_content(file_content, subtype='html')
        server.send_message(message)
    
    # Close connection to server
    server.quit()
    

    【讨论】:

    • 起初它发送到两个邮件,但一直在尝试,现在似乎只是将邮件发送到列表中的第一个,你能检查一下吗?
    • 这个过程可能很慢,但我们可以尝试为每个接收者从头开始创建整个消息。
    • mmm kk 可能是因为最后我无法使用你的代码,没有将邮件发送到列表:/,只是因为一个奇怪的原因工作了一次,然后再也没有工作过:/
    • 也可能是因为邮件限制。
    • @JuanJoseAcevedo 我更新了程序,请试试这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2019-06-17
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    相关资源
    最近更新 更多