recipient_list 只向列表中的第一个地址发送邮件
recipient_list send mail just to the first address in the list
我正在使用信号根据某些操作向用户发送邮件。在我的一个信号中,我需要向多个用户发送相同的邮件,我的信号使用 post_save
所以对于参数 [recipient_list]
我使用这个 instance.email_list
email_list 是我存储的地方发送邮件的电子邮件地址列表,它们以这种格式存储 user1@mail.com, user2@mail.com, user3@mail.com
.
我使用 EMAIL_HOST = 'smtp.gmail.com'
发送电子邮件,问题是唯一收到电子邮件的用户是列表中的第一个用户。所以我在 gmail 帐户中 'log in' 检查发送电子邮件部分,实际上在电子邮件的 "to" 区域显示已发送给列表中的所有用户,但电子邮件永远不会到达第一个列表中的电子邮件地址。
我读到,如果 google 检测到该帐户发送大量消息可能会被阻止,但同时只能发送 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:")
该表单显示用户列表,以 select 电子邮件地址字段中的电子邮件地址存储值。这是我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')
这是我用来填充电子邮件地址字段的 <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)
因此,如果我 select 4 个用户,信息将以这种方式保存在数据库中:
然后我 'log in' 在帐户中检查 'Sent Mail' 部分并检查邮件的详细信息,并显示已发送给 4 个用户,但唯一接收邮件的用户是列表中的第一个。
您的问题是您在 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)
我正在使用信号根据某些操作向用户发送邮件。在我的一个信号中,我需要向多个用户发送相同的邮件,我的信号使用 post_save
所以对于参数 [recipient_list]
我使用这个 instance.email_list
email_list 是我存储的地方发送邮件的电子邮件地址列表,它们以这种格式存储 user1@mail.com, user2@mail.com, user3@mail.com
.
我使用 EMAIL_HOST = 'smtp.gmail.com'
发送电子邮件,问题是唯一收到电子邮件的用户是列表中的第一个用户。所以我在 gmail 帐户中 'log in' 检查发送电子邮件部分,实际上在电子邮件的 "to" 区域显示已发送给列表中的所有用户,但电子邮件永远不会到达第一个列表中的电子邮件地址。
我读到,如果 google 检测到该帐户发送大量消息可能会被阻止,但同时只能发送 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:")
该表单显示用户列表,以 select 电子邮件地址字段中的电子邮件地址存储值。这是我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')
这是我用来填充电子邮件地址字段的 <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)
因此,如果我 select 4 个用户,信息将以这种方式保存在数据库中:
然后我 'log in' 在帐户中检查 'Sent Mail' 部分并检查邮件的详细信息,并显示已发送给 4 个用户,但唯一接收邮件的用户是列表中的第一个。
您的问题是您在 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)