2015-11-30 5 views
1

Я попытался написать скрипт, который автоматически отправляет по электронной почте список адресов электронной почты, и вы хотите, чтобы настроить содержимое тела немного по-другому, используя форматировщик, как показано ниже:Ошибка в настройке имя получателя в автоматизированном сценарии электронной почты в Python

<html> 
Hello {name}, it is me 
</html> 

Итак, я написал ниже сценарий, ссылаясь на this и не испытывал проблем с отправкой писем каждому получателю, но проблема в том, что содержимое тела электронной почты накапливается по мере увеличения количества получателей. Например, четвертый получатель в списке заканчивает тем, что получает электронное письмо с 4-мя содержимым тела, суммированием содержимого электронной почты 1-го, 2-го и 3-го приемников. Почему это происходит и как я могу это исправить?

import smtplib 
from email.MIMEMultipart import MIMEMultipart 
from email.MIMEText import MIMEText 
import time 
import random 

fromaddr = "sender_gmail_account" 

msg = MIMEMultipart() 
msg['From'] = fromaddr 
msg['Subject'] = "Subject_line" 

#list of receivers 
s = open("list.txt", "r") 
emails = s.readlines() 
print emails 
s.close() 

server = smtplib.SMTP('smtp.gmail.com', 587) 
server.starttls() 
server.login(fromaddr, "gmail_password") 

for address in emails: 
    address = address.strip().split(",")  # Removing White spaces. 
    toname = address[0] 
    toaddr = address[1].strip() 
    if toaddr == "": 
     continue 

    f = open('mail_template.html') 
    body = f.read() 
    f.close() 

    msg['To'] = toaddr 
    body = body.format(name=toname) 

    msg.attach(MIMEText(body, 'html')) 
    text = msg.as_string() 
    body = "" 
    server.sendmail(fromaddr, toaddr, text) 

    rand = random.randrange(2,5)  # Set range of the waiting time. 
    time.sleep(rand) 

server.quit() 
+0

Причина в том, что вы должны восстановить новый объект «msg» в своем цикле. Подобно этому, он просто меняет несколько переменных, но сохраняет текст. – PascalVKooten

+0

@PascalvKooten Большое вам спасибо. Я бы просто попробовал другие службы электронной почты, но действительно хотел узнать, почему это произошло. Интересно, почему msg даже не приходил мне в голову! – Layray

ответ

0

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

import yagmail 
import random 
import time 

yag = yagmail.SMTP(fromaddr, 'gmail_password') 

template = 'Hello {name}, it is me'   # yagmail automatically makes this HTML 
# template = '<h1>Now with big header</h1>' # other template example  

for address in addresses: 
    address = address.strip().split(",")  # Removing White spaces. 
    toname = address[0] 
    toaddr = address[1].strip() 
    if toaddr == "": 
     continue 

    yag.send(address, "Subject_line", template.format(name=toname)) 

    time.sleep(random.randrange(2,5)) 

Get yagmail с помощью:

pip install yagmail 

Переход от 48 строк до 19 лет: не плохо;)

Полное раскрытие: Я разработчик yagmail.

+0

Обязательно попробуем yagmail;) – Layray

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

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