2015-06-24 3 views
7

Я пытаюсь написать скрипт python для отправки электронной почты, которая использует форматирование html, и включает в себя много неразрывных пробелов. Однако, когда я запускаю его, некоторые из & NBSP строк прерывается пробелами, которые происходят каждые 171 символов, как можно видеть на этом примере:Python mail вставляет пробел каждые 171 символ

#!/usr/bin/env python 
import smtplib 
import socket 
from email.mime.text import MIMEText 

emails = ["[email protected]"] 
sender = "[email protected]{0}".format(socket.gethostname()) 

message = "<html><head></head><body>" 
for i in range(20): 
     message += "&nbsp;" * 50 
     message += "<br/>" 
message += "</body>" 
message = MIMEText(message, "html") 
message["Subject"] = "Test" 
message["From"] = sender 
message["To"] = ", ".join(emails) 
mailer = smtplib.SMTP("localhost") 
mailer.sendmail(sender, emails, message.as_string()) 
mailer.quit() 

Пример должен произвести пустое сообщение, состоящие только из пространств , но он заканчивает тем, что-то вроде этого:

  &nbsp ;          


         &nb sp;      


            & nbsp;   






      &nbs p;         


          &n bsp;   

Edit: В случае, если это важно, я бегу Ubuntu 15.04 с Postfix для клиента SMTP, и используя python2.6.

ответ

5

Я могу воспроизвести это в некотором роде, но мои разрывы строк набирают каждые 999 символов. RFC 821 говорит, что максимальная длина строки составляет 1000 символов, включая разрыв строки, поэтому, вероятно, поэтому.

Это сообщение дает другой способ отправить html-письмо в python, и я считаю, что тип mime «multipart/alternative» является правильным способом. Sending HTML email using Python

+3

В этом была проблема, поэтому тривиально просто добавить \ n после каждого
, чтобы эта проблема исчезла. –

+0

Но \ n отображается в электронном письме (по крайней мере, как показано в Outlook). Как вы можете вставить разрыв строки, не видя получателя как \ n? – user3450049

2

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

Вы можете использовать следующий код:

import yagmail 
yag = yagmail.SMTP('[email protected]', 'mypassword') 

for i in range(20): 
    message += "&nbsp;" * 50 
    message += "<br/>" 

yag.send(contents = message) 

Обратите внимание, что по умолчанию он будет посылать сообщение HTML, и что он также автоматически добавляет альтернативную часть для не HTML браузеров.

Также обратите внимание, что при удалении subject оставит пустой объект, и без аргумента to он отправит его самому.

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

Добавление вложения так просто, как указывает на локальный файл, например .:

yag.send(contents = [message, 'previously a lot of whitespace', '/local/path/file.zip'] 

Удивительный не так ли? Спасибо, что позволили мне показать хороший вариант использования для yagmail :)

Если у вас есть какие-либо пожелания, проблемы или идеи, пожалуйста, дайте мне знать по адресу github.

+0

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

+0

@Programman Это очень плохо. Надеюсь, у вас будет возможность использовать его :) – PascalVKooten

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