2011 년 11 월에 출시 된 Python 3.2부터 smtplib에는. send_message
대신 새로운 기능 sendmail
이있어 To / CC / BCC를 더 쉽게 처리 할 수 있습니다. 으로부터 당기기 파이썬 공식 이메일 예 약간의 수정을, 우리가 얻을 :
# Import smtplib for the actual sending function
import smtplib
# Import the email modules we'll need
from email.message import EmailMessage
# Open the plain text file whose name is in textfile for reading.
with open(textfile) as fp:
# Create a text/plain message
msg = EmailMessage()
msg.set_content(fp.read())
# me == the sender's email address
# you == the recipient's email address
# them == the cc's email address
# they == the bcc's email address
msg['Subject'] = 'The contents of %s' % textfile
msg['From'] = me
msg['To'] = you
msg['Cc'] = them
msg['Bcc'] = they
# Send the message via our own SMTP server.
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()
send_message가 문서에 설명 된대로 BCC를 존중 하기 때문에 헤더를 사용하면 잘 작동합니다 .
send_message는 msg에 나타날 수있는 Bcc 또는 Resent-Bcc 헤더를 전송하지 않습니다.
로 sendmail
이 같은 일을하고, 메시지에 CC 헤더를 추가하는 것이 일반적이었다
msg['Bcc'] = blind.email@adrress.com
또는
msg = "From: from.email@address.com" +
"To: to.email@adress.com" +
"BCC: hidden.email@address.com" +
"Subject: You've got mail!" +
"This is the message body"
문제는 sendmail 함수가 모든 헤더를 동일하게 취급한다는 것입니다. 즉, 모든 To : 및 BCC : 사용자에게 (표시로) 전송되어 BCC의 목적을 무효화합니다. 여기에있는 다른 많은 답변에서 볼 수 있듯이 솔루션은 헤더에 BCC를 포함하지 않고 대신에 전달 된 이메일 목록에만 포함하는 것 sendmail
입니다.
주의 할 점 send_message
은 Message 객체가 필요하다는 것입니다. 즉, email.message
단순히 문자열을 .NET으로 전달하는 대신 클래스를 가져와야한다는 의미 sendmail
입니다.