Как удалить горизонтальные линии из сообщения Mime? - PullRequest
0 голосов
/ 29 мая 2019

Нуб, создав свою первую динамическую веб-страницу, где пользователь может ввести сообщение, а также свое имя и фамилию, адрес электронной почты и номер телефона. Меня больше всего волнует сообщение, которое я намерен переслать по электронной почте вместе с другой информацией, если она будет предоставлена. Я написал простой скрипт на Python (сайт будет Flask, Python и HTML), но он вставляет нежелательную горизонтальную линию между каждым выводом, т.е.

Дорогой Боб


Содержание сообщения здесь


имя


Моя цель состоит в том, чтобы исходящее сообщение напоминало реальное электронное письмо, т. Е. Как выше, но без горизонтальных линий. Я нашел большую часть кода ниже в Интернете, который в основном работает. Простые ответы, которые я могу понять, предпочтительнее, чем умные, которые я не могу (я нуб).

def to_mail(first, last, phone, email, User_Complaint, addressed_to):
    # E mail account details
    my_sending_email = 'testing@gmail.com'
    sending_email_password = 'pass'

    # set up the SMTP server
    s = smtplib.SMTP(host='smtp.gmail.com', port=587)
    s.starttls()
    s.login(my_sending_email, sending_email_password)

    msg = MIMEMultipart()

    msg['Subject'] = 'Reporting an Issue With the Courts'
    msg['From'] = my_sending_email
    msg['To'] = addressed_to

    # Body of Email
    intro = MIMEText("Dear Leader")
    message_contents = MIMEText(User_Complaint)

    # use of .attach appears to insert the horizontal line
    msg.attach(intro)
    msg.attach(message_contents)

    # Party's Contact Info to append at bottom of email
    msg.attach(MIMEText(first + last))
    msg.attach(MIMEText(phone))
    msg.attach(MIMEText(email))

    s.send_message(msg)
    del msg

    s.quit()

Я просто хочу создать нормально выглядящий контент электронной почты в теле сообщения, т. Е.

"Дорогой Вождь,

Мне очень нравятся твои волосы. Я твой самый большой поклонник.

(каждая последующая биографическая запись должна быть на отдельной новой строке, но это автоматически помещает ее в одну строку) Стэн Ли \ n stan@lee.com \ п 647-647-1234"

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Спасибо, Ассили, я смог исправить свой код, основываясь на вашем предложении, с помощью следующих небольших настроек.

#Body of Email

text = intro + '\n' + '\n'  + message_contents + '\n' + '\n' + first + '' + last + '\n' + phone + '\n' + email 

msg.attach(MIMEText(text))
1 голос
/ 29 мая 2019

Вам нужно использовать один msg.attach, чтобы избежать нескольких горизонтальных линий:

# Body of Email
text = "Dear Leader\n" + User_Complaint + "\n" + phone + "\n" + email
html = """\
<html>
  <head></head>
  <body>
    <p>Dear Leader<br>
       I really like your hair. I'm your biggest fan.<br>
       (each biographic entry following should be on 
its own newline, but this automatically puts it on one line)
Stan Lee\n stan@lee.com\n 647-647-1234.
    </p>
  </body>
</html>
"""

part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')

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

s.send_message(msg)
del msg
s.quit()

Лучше определить тело письма внутри html и txt файлов и рендерить эти файлы, используя шаблонизатор jinja2. Итак, вам нужно создать два файла:

mail.text

Dear Bob!\n
{{ User_Complaint }}\n
{{ phone }} \n
{{ email }}

mail.html

<html>
  <head></head>
  <body>
    <p>
    Dear Bob!<br/>
    {{ User_Complaint }}<br/>
    {{ phone }}<br/>
    {{ email }}
   </p>
  </body>
</html>

И функция to_mail будет похожа на эту:

from flask import render_template
def to_mail(first, last, phone, email, User_Complaint, addressed_to):

    # The old code
    #...
    # Body of Email
    part1 = render_template("mail.txt",
    User_Complaint = User_Complaint,
    email=email, phone=phone)

    part2 = render_template("mail.html",
    User_Complaint = User_Complaint,
    email=email, phone=phone)

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

    s.send_message(msg)
    del msg
    s.quit()

Неплохая идея использовать флеш-почту для отправки почты.

...