Как отправить вложение в виде файла, сохраненного в FileField в Django? - PullRequest
0 голосов
/ 25 января 2012

как я могу отправить письмо с файлом, сохраненным в FileField?Я не знаю, как получить доступ к файлу в коде ниже.

mail = EmailMessage(subject, message, 'from@from,com', ['to@to.com'])
mail.attach(?, ?, 'application/pdf')
mail.send()

EDIT

Я пытался открыть файл с

f = list_pca.pdf_file.open(mode='rb')

где list_pca - это экземпляр

class ListPCA(models.Model):
    pdf_file = models.FileField(upload_to=get_file_path_j, null=True, blank=True)

, но я получаю сообщение об ошибке «Нет такого файла или каталога», поскольку путь указан неверно.

и

list_pca.pdf_file.path

также возвращают неверный путь.Разве он не должен знать, где находится файл, благодаря опции upload_to?

Спасибо

Спасибо

Ответы [ 5 ]

2 голосов
/ 14 октября 2012

Обычно, как предложил aganders3, я бы использовал:

mail.attach_file(myfile.path) as well

Но я заметил, что он не работает для вложений, содержащих пробелы.

2 голосов
/ 25 января 2012
mail = EmailMessage(subject, message, 'from@from,com', ['to@to.com'])
mail.attach('arbitrary_filename', myfile.read(), 'application/pdf')
mail.send()

Поскольку вы используете EmailMessage, вы можете просто передать ему вложения kwarg.

email = EmailMessage(subject, message, 'from@from,com', ['to@to.com'], 
    attachments=(('foo.pdf', myfile.read(), 'application/pdf'),))
0 голосов
/ 25 января 2012

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

mail.attach_file(myfile.path)

При желании вы можете передать MIME-тип в качестве второго аргумента, но он просто пытается выяснить это по имени файла, если вы его не предоставите.

0 голосов
/ 25 января 2012

Попробуйте:

myfile = mymodel.somefilefield

mail = EmailMessage(subject, message, 'from@from,com', ['to@to.com'])
mail.attach('File Name', myfile.path, 'application/pdf')
mail.send()
0 голосов
/ 25 января 2012

Я думаю, что это сделает это:

mail.attach(os.path.basename(myfile.name), myfile.read(), 'application/pdf')

Я мог бы пропустить шаг MIME-кодирования, но IIRC mail.attach сделает это.

...