我根据某些操作使用信号向用户发送邮件。在我的一个信号中,我需要向多个用户发送相同的邮件,我的信号使用post_save
因此对于参数[recipient_list]
我使用此instance.email_list
email_list是我存储电子邮件列表的位置发送邮件的地址,它们以user1@mail.com, user2@mail.com, user3@mail.com
格式存储。
要发送我使用的电子邮件EMAIL_HOST = 'smtp.gmail.com'
,问题是收到电子邮件的唯一用户是列表中的第一个用户。所以我'登录'在gmail帐户中检查发送电子邮件部分,实际上在电子邮件显示的“到”区域发送给列表中的所有用户,但电子邮件永远不会到达第一个电子邮件地址清单。
我看到,如果谷歌检测到该帐户发送了大量邮件,则可能会被阻止,但只能同时发送5封电子邮件,当我在帐户中时,从未向我显示某些警报或其他内容。
问题是我如何发送电子邮件或者gmail帐户的一些错误配置?
非常感谢任何帮助。
抱歉我的语法不好。
编辑:这是我的代码。
forms.py
class MyForm(forms.Form):
userslist = forms.ModelChoiceField(queryset = User.objects.filter(here goes my condition to show the users), empty_label='List of users', label='Users', required=False)
emailaddress = forms.CharField(max_length=1000, label='Send to:', required=False)
comment = forms.CharField(widget=CKEditorUploadingWidget(), label="Comment:")
该表单显示用户列表,以便在字段emailaddress中选择电子邮件地址存储值。这是我的Ajax带来的电子邮件地址:
views.py
class mails(TemplateView):
def get(self, request, *args, **kwargs):
id_user = request.GET['id']
us = User.objects.filter(id = id_user)
data = serializers.serialize('json', us, fields=('email'))
return HttpResponse(data, content_type='application/json')
这是我用来填充emailaddres字段的<script>
:
<script>
$('#id_userlist').on('change', concatenate);
function concatenate() {
var id = $(this).val();
$.ajax({
data: { 'id': id },
url: '/the_url_to_get_data/',
type: 'get',
success: function (data) {
var mail = ""
for (var i = 0; i < data.length; i++) {
mail += data[i].fields.email;
}
var orig = $('#id_emailaddress').val();
$('#id_emailaddress').val(orig + mail + ',');
}
})
}
</script>
我用来发送邮件的信号是:
@receiver(post_save, sender=ModelOfMyForm, dispatch_uid='mails_signal')
def mails_signal(sender, instance, **kwargs):
if kwargs.get('created', False):
if instance.emailaddress:
#Here goes the code for the subject, plane_message,
#from_email and template_message.
send_mail(subject, plane_message, from_email, [instance.emailaddress], fail_silently=False, html_message=template_message)
因此,如果我选择4个用户,则信息将以这种方式保存在数据库中:
然后我在帐户中“登录”以检查“已发邮件”部分,并检查邮件的详细信息并显示发送给4位用户但显示该邮件的唯一用户是列表中的第一位用户
答案 0 :(得分:2)
您的问题是您在instance.emailaddress
(first@gmail.com, second@hotmail.com, third@hotmail.com
等)内传递逗号分隔的电子邮件地址字符串。 Django期望Python的地址列表,而不是逗号分隔的字符串。它会在第一个逗号后忽略所有内容。
按如下方式更改您的代码,它将起作用:
def mails_signal(sender, instance, **kwargs):
if kwargs.get('created', False):
if instance.emailaddress:
#Here goes the code for the subject, plane_message,
#from_email and template_message.
recipients = [r.strip() for r in instance.emailaddress.split(',')]
send_mail(subject, plane_message, from_email, recipients, fail_silently=False, html_message=template_message)