Как отправить электронное письмо со скрытым содержимым BCC и HTML

Это мой первый пост здесь :) Это первый питон, который я сделал. Я пытаюсь написать скрипт, который будет отправлять электронное письмо при запуске. В этом письме для меня есть 3 важные вещи:

1) Нет "Кому" - только "CC" и "BCC".

2) BCC - под BCC много адресов, все они должны получить почту, но остальные адреса электронной почты должны быть скрыты.

3) Я хочу добавить гиперссылку на слово.

Я пытался использовать MIMEMultipart, но не смог найти способ заставить BCC работать так, как я хочу (я просмотрел google и stackoverflow и не смог заставить его работать). Мне удалось добиться отправки электронной почты со скрытой BCC, чтобы она работала так, как я хочу, но без использования MIMEMultipart - с использованием только smtplib, однако я не могу понять, как интегрировать html-часть.

def send_email():
password = '*********'
bcc = ['[email protected]','[email protected]']
from_addr = '[email protected]'
to_addr = ''
cc_addr = '[email protected]'
mail_subject = "Testing E-mail"
content = "Maintenance on the New York data center will be performed on Sunday, July 1st, 2018 at 06:30 UTC.\nWe expect to complete the maintenance by Sunday, July 1st, 2018 at 08:30 "

body = f"From: {from_addr}\r\n" + f"To: {to_addr}\r\n" + f"Cc: {cc_addr}\r\n" + f"Subject: {mail_subject}\r\n" + "\r\n"  + content
to_addr = [to_addr] + [cc_addr] + bcc

try:
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.login('[email protected]',password)
    server.sendmail(from_addr, to_addr ,body)
    server.quit()
    print("Success")
except:
    print("Failed")
send_email()

Я нашел код, который кто-то здесь написал о том, как использовать MIMEMultipart для отправки HTML по электронной почте, и смог отправить электронное письмо с гиперссылкой, однако каждый раз при попытке добавить BCC (несколько разных способов, которые я нашел в Интернете), Я получаю сообщение об ошибке.

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
password = '*******'
from_adr='[email protected]'
to_adr='[email protected]'

msg = MIMEMultipart('alternative')
msg['Subject'] = "Emailing a link"
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'

html = """
<html>
<head></head>
  <body>
    <p>Maintenance on the New York data center will be performed on Sunday, July 1st, 2018 at 06:30 UTC.\nAs published on our
    <a href="http://www.google.com">Status Page</a> - We expect to complete the maintenance by Sunday, July 1st, 2018 at 08:30</p>
  </body>
</html>
"""

part1=MIMEText(html, 'html')
part2=MIMEText("Maintenance on the New York data center will be performed on Sunday, July 1st, 2018 at 06:30 UTC.\nAs published on our http://www.google.com - We expect to complete the maintenance by Sunday, July 1st, 2018 at 08:30", 'text')

msg.attach(part1)
msg.attach(part2)


server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login('[email protected]',password)
server.sendmail(msg['From'], msg['To'] ,msg.as_string())
server.quit()
print("Success")

Есть ли способ использовать скрытую опцию BCC smtplib и опцию html MIMEMultipart?

Также важно, что в настоящее время сценарий должен отправлять электронную почту через Gmail, но при фактическом применении он будет отправлять электронную почту с почтового сервера компании.

Заранее спасибо за помощь :)

Даниэль.


person daniel ofir    schedule 30.06.2018    source источник
comment
Большое извинение, я только что опубликовал свое решение.   -  person daniel ofir    schedule 03.07.2018
comment
Спасибо! Я удалил свой комментарий :)   -  person geisterfurz007    schedule 03.07.2018


Ответы (1)


Итак, я смог найти способ добиться того, чего хотел. По сути, «сложной» частью было использование MIMETEXT для добавления слушателя в формате smtplib. (заголовок) Надеюсь, это поможет кому-то в будущем :)

def send_mail():
pop_input= input("Please write the PoP's name: ")
password = '*******'



from_adr='[email protected]'
cc_adr='[email protected]'
to_adr = ''
mail_subject = ''

msg = MIMEMultipart('alternative')
msg['Subject'] = f"Planned Maintenance on the {pop_input} PoP"
msg['From'] = '[email protected]'
msg['Cc'] = '[email protected]'

content = f"As published on our https://www.google.com, a maintenance on {pop_input}."
html = """
<html>
<head></head>
  <body>
    <p>As published on our
    <a href="https://www.google.com">Status Page</a>, a maintenance on {POP}</p>
  </body>
</html>
"""
new_html = html.format(POP=pop_input,START_TIME=start_message,END_TIME=end_message)
header = MIMEText(f"From: {from_adr}\r\n" + f"Cc: {cc_adr}\r\n" + f"Subject: {mail_subject}\r\n" + "\r\n",'plain') 


bcc = ['[email protected]','[email protected]']
to_adr = [to_adr] + [cc_adr] + bcc

part1=MIMEText(new_html, 'html')
part2=MIMEText(content, 'text')

msg.attach(header)
msg.attach(part1)
msg.attach(part2)

try:
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.login('[email protected]',password)
    server.sendmail(from_adr, to_adr ,msg.as_string())
    server.quit()
    print("Success")
except:
    print("Failed")
person daniel ofir    schedule 03.07.2018