我一直在尝试让用户通过表格将电子邮件发送到我的个人帐户。起初它向我展示
我通过在设备中安装和配置hMailServer解决了socket.gaierror:[Errno 11004] getaddrinfo失败
错误。现在,当我尝试通过朋友的电子邮件发送邮件时,它将改为通过我自己的帐户发送电子邮件。当我从设置文件中删除MAIL_HOST_USER = 'my_email'
时,它会显示
标题中提到的smtplib.SMTPSenderRefused
错误。任何建议或相关链接将不胜感激。
我的代码是:
settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_PORT = 25
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'my_email'
EMAIL_HOST_PASSWORD = 'my_password'
EMAIL_USE_TLS = True
views.py
class contact(View):
def post(self, request):
form = ContactForm(request.POST)
if form.is_valid():
if send_mail(subject = form.cleaned_data['title'], message = form.cleaned_data['content'], from_email = form.cleaned_data['contact_email'], recipient_list = ['my_email'], fail_silently=False):
return render(request, 'index.html', {'form': form, 'message': 'Message delivered successfully', 'error':'', 'email_sent': 1 })
else:
return render(request, 'index.html', {'form': ContactForm(), 'error': form.errors})
答案 0 :(得分:0)
Gmail与任何其他电子邮件提供商或正确配置的邮件服务器一样,不允许您设置任意的From
地址。允许此操作的电子邮件服务器将被垃圾邮件发送者滥用,并迅速在垃圾邮件黑名单中发现自己。
您可以做的是将my_email
设置为发件人,并添加一个Reply-To
标头和通过表格提供的电子邮件地址。
您必须创建一个EmailMessage
实例并调用send()
:
from django.core.mail import EmailMessage
...
email = EmailMessage(
subject=form.cleaned_data['title'],
message=form.cleaned_data['content'],
from_email='my_email',
recipient_list=['my_email'],
reply_to=form.cleaned_data['contact_email']
)
sent = email.send(fail_silently=False)
if sent:
return render(request, 'index.html', {'form': form, 'message': 'Message delivered successfully', 'error':'', 'email_sent': 1 })
请注意,Gmail对您可以通过这种方式发送的电子邮件数量有一些限制。确保您不会意外屏蔽帐户。
答案 1 :(得分:0)
N.B。,您可以将gmail配置为代表Google Apps组织(由gmail支持)中的任何发送地址来中继邮件,但是正如Daniel Hepper指出的那样,这不是个人gmail地址的默认设置。也就是说,我敢打赌,OP的问题很可能是端口设置不正确。在gmail中,对于使用TLS的SMTP,端口设置应为465或587。