用python发送电子邮件

时间:2014-11-18 20:51:41

标签: python django email signals

我需要始终发送相同的文件,但我的信号是用我的文件发送服务器的完整路径。

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
     )

这有效,但发送完整路径,我不明白为什么。 我只想发送文件。

2 个答案:

答案 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,因为这总是必须是一个列表,即使它只有一个电子邮件地址(可能更多)
  • 如果接收者无法呈现html电子邮件,则 text_content html_content

您需要在 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,如果您使用其他电子邮件服务,可能需要更改某些值。