2014-11-18 1 views
1

Мне нужно всегда отправлять один и тот же файл, но мой сигнал отправляет полный путь к моему серверу с моим файлом.Отправить E-mail с python

например

/home/user/Sites/path_my_project/static/downloads/file.pdf

На мой сигнал я получаю файл, как это:

file_annex = ('path_my_file/myfile.pdf') 

и посылая сигнал следующим образом:

EmailMessage message = (
     to = str (to), 
     subject = subject, 
     template = template, 
     context = context, 
     reply_to = _from, 
     attachments = file_annex 
    ) 

это работает, но посылает полный путь, я не понимаю, почему. Я хочу только отправить файл.

ответ

0

Согласно docsattachments должны быть: либо экземпляры email.MIMEBase.MIMEBase, или (имя файла, содержание, тип_mime) троек.

Таким образом, вы можете попробовать что-то вроде:

file_annex = ('myfile.pdf', open('path/to/myfile.pdf').read(), 'application/pdf') 

Затем вы должны пройти file_annex как один элемент в списке:

message = EmailMessage(
    ... 
    attachments = [file_annex], 
    ... 
) 
+0

error, tuple object не имеет атрибута 'name' – Vanderson

0

Я предпочитаю использовать EmailMultiAlternatives для отправки электронной почты с Django, мне легче, если вы хотите попробовать, просто выполните:

from django.core.mail import EmailMultiAlternatives 


subject = subject 
from_email = '[email protected]' 
to = str(to) 
text_content = 'This is an important message.' # This is text message 
html_content = template # This is HTML message 
msg = EmailMultiAlternatives(subject, text_content, from_email, [to]) 
msg.attach_alternative(html_content, "text/html") 

msg.attach_file('path_my_file/myfile.pdf') 
msg.send() 
  • Не забудьте Скобки [ ] вокруг to, потому что это ВСЕГДА должен быть список, даже это только один адрес электронной почты (это может быть и больше)
  • Существует TEXT_CONTENT и html_content в случае приемник не может сделать HTML электронной почты

И вам нужно в settings.py конфигурации электронной почты:

EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = 'email_pass' 
EMAIL_PORT = 587 
EMAIL_USE_TLS = True 

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