【发布时间】:2014-08-04 14:52:02
【问题描述】:
我有以下代码通过 django 发送电子邮件,但所有电子邮件都被接收者垃圾邮件过滤器过滤。据我了解,您可以将 django 配置为使用外部 SMTP 服务器,并且我在 Google Apps 上设置了一个帐户,希望用于此目的。
有没有人可以帮助解决这个问题?
# conding=utf8
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
from subprocess import Popen, PIPE
import os
from pictures.models import S5Picture
from django.core.management.base import NoArgsCommand
class Command(NoArgsCommand):
def send_mail(self, send_from, send_to, subject, text, files=[]):
msg = MIMEMultipart()
msg['From'] = send_from
msg['To'] = send_to
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject
msg.attach( MIMEText(text) )
for f in files:
part = MIMEBase('image', "jpeg")
part.set_payload( open(f,"rb").read() )
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="samsung_gs5_photo.jpg"')
msg.attach(part)
part = MIMEBase('application', 'pdf')
part.set_payload(open('/usr/share/nginx/www/upload/static/BELL_OFFER_WITH_GS5_V3.pdf', 'rb').read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="MMVA_Bell_Offer.pdf"')
msg.attach(part)
p = Popen(['/usr/sbin/sendmail', '-t'], stdin=PIPE)
p.communicate(msg.as_string())
p.stdin.close()
def handle(self, *args, **kwargs):
for photo in S5Picture.objects.filter(sent=False):
try:
print(photo.email, photo.picture)
self.send_mail('photo@vps73224.ovh.net', photo.email, 'Your Samsung GS5 Photo!', '', ['/usr/share/nginx/www/upload/static/' + photo.picture])
photo.sent = True
photo.save()
except Exception as e:
print(e)
pass
【问题讨论】:
-
使用 GMail 帐户发送邮件不一定能解决垃圾邮件问题。您应该首先设置正确的 SPF 和 DKIM 记录,然后查看问题是否仍然存在。在这里配置 SPF 和 DKIM 是题外话。