2017-01-25 5 views
1

Я использую информацию, найденную на этом посту Sending Email Using PythonИспользовать переменную внутри электронной почты HTML?

До сих пор инструкции были идеальными. У меня есть две дополнительные вещи, которые я хотел бы сделать:

  1. Вызов переменной внутри тела
  2. Добавить вложение

переменная будет сегодняшнюю дату. Это все:

today = datetime.datetime.today() 
tday = today.strftime ("%m-%d-%Y") 

Я знаю, что с mailx, вы можете прикрепить с опцией -a.

+0

Не можете ли вы просто поставить стробированную дату в теле? – Carcigenicate

+0

Не могли бы вы поделиться своим текущим кодом, чтобы мы могли попытаться найти, что не хватает? – daragua

+1

"Вызвать переменную"? Вы имеете в виду вставить переменную? Используйте библиотеку шаблонов (или просто форматирование строк) для создания документа для отправки по электронной почте. –

ответ

1

Чтобы вызвать переменные внутри HTML тела, просто конвертировать их в строку, чтобы объединить их в организме

from datetime import datetime 
import smtplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 

today = datetime.today() 
tday = today.strftime ("%m-%d-%Y") 

# email subject, from , to will be defined here 
msg = MIMEMultipart() 

html = """\ 
<html> 
    <head></head> 
    <body> 
    <p>Hi!<br> 
     How are you?<br> 
     """ +str(today)+ """ and """ +str(tday)+ """ 
    </p> 
    </body> 
</html> 
""" 
msg.attach(MIMEText(html, 'html')) 

Для приложений, пожалуйста, смотрите на http://naelshiab.com/tutorial-send-email-python/

+2

Это только звук если значения доверяют. Если они включают, скажем, '

0

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

Некоторые способы являются:

body = "blablabla " + tday + " bloo bloo bloo" 
body = "Today's date is {}, in case you wondered".format(tday) 

Для вашего второго вопроса, вы должны сказать нам, какие библиотеки/модуль вы используете, а затем вы можете перейти на страницу документации этого модуля и посмотреть, если есть что-то для добавления вложения.

+0

Практический подход здесь с точки зрения безопасности - это набор инструментов, предназначенных для форматирования, который может предотвратить атаки на инъекции (в этом контексте категория, в которой контент, который * ожидается *, предоставляет литеральный текст для визуализации для пользователя, вместо этого действует как инструкция для браузера). –

+0

О да, это абсолютно верно. В этом случае вопрос OP не упоминал пользовательский ввод из формы, поэтому я не думал об этом. В принципе, если у вас есть контроль над строкой и тем, что происходит (например, специально отформатированная строка даты), вы действительно не должны беспокоиться об инъекции, верно? – Lagerbaer

+0

Yup. Вещь - это ответ на вопрос: «Как использовать переменную внутри электронной почты HTML?» скорее всего, будет применяться в более широком спектре сценариев, чем только один надуманный пример, приведенный в вопросе. –

0

Спасибо всем за размещение советов.

Для потомков это рабочий скрипт.

Единственный оставшийся пункт - это то, что мне нужно отправить одно и то же письмо нескольким людям.

Я попытался добавить все адреса электронной почты в переменную с запятыми между ними, но они не получают ее. Когда я просматриваю полученную электронную почту, они отображаются в строке «Кому». Возможно ли, что он отправляет только первый адрес электронной почты?

#!/usr/bin/python 
import smtplib 
import time 
import datetime 
from datetime import date 
from email.MIMEMultipart import MIMEMultipart 
from email.MIMEText import MIMEText 
from email.MIMEBase import MIMEBase 
from email import encoders 

fromaddr = "[email protected]" 
toaddr = ['[email protected]', '[email protected]'] 

# Date 
today = datetime.datetime.today() 
tday = today.strftime ("%m-%d-%Y") 

msg = MIMEMultipart() 

msg['From'] = fromaddr 
msg['To'] = ", ".join(toaddr) 
msg['Subject'] = "My Subject Goes Here" 

body = """\ 
<html> 
    <head></head> 
    <body> 
<p>DO NOT REPLY TO THIS EMAIL!!<br> 
<br> 
Script run for data as of """ + tday + """.<br> 
<br> 
See attachment for items to discuss<br> 
<br> 
The files have also been uploaded to <a href="http://testing.com/getit">SharePoint</a><br> 
<br> 
If you have any issues, email [email protected]<br> 
<br> 
    </p> 
    </body> 
</html> 
""" 

msg.attach(MIMEText(body, 'html')) 

filename = "discuss.csv" 
attachment = open("discuss.csv", "rb") 

part = MIMEBase('application', 'octet-stream') 
part.set_payload((attachment).read()) 
encoders.encode_base64(part) 
part.add_header('Content-Disposition', "attachment; filename= %s" % filename) 

msg.attach(part) 

server = smtplib.SMTP('localhost') 
text = msg.as_string() 
server.sendmail(fromaddr, toaddr, text) 
server.quit() 

 Смежные вопросы

  • Нет связанных вопросов^_^