我需要始终发送相同的文件,但我的信号是用我的文件发送服务器的完整路径。
e.g
/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 :(得分:0)
根据docs attachments
必须:要么是email.MIMEBase.MIMEBase实例,要么是(filename,content,mimetype)三元组。
所以你可以尝试类似的东西:
file_annex = ('myfile.pdf', open('path/to/myfile.pdf').read(), 'application/pdf')
然后您必须将file_annex
作为列表中的单个项目传递:
message = EmailMessage(
...
attachments = [file_annex],
...
)
答案 1 :(得分:0)
我更喜欢使用EmailMultiAlternatives
向Django发送电子邮件,对我来说更容易,如果你想尝试一下,就这样做:
from django.core.mail import EmailMultiAlternatives
subject = subject
from_email = 'from@example.com'
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
,因为这总是必须是一个列表,即使它只有一个电子邮件地址(可能更多)您需要在 settings.py 中配置电子邮件:
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'any_mail@gmail.com'
EMAIL_HOST_PASSWORD = 'email_pass'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
此配置适合发送邮件 FROM gmail,如果您使用其他电子邮件服务,可能需要更改某些值。